带你体验给黑白照片上色
本文分享自华为云社区《基于MindX SDK在Ascend 310上的黑白图像上色初体验随笔》,作者:Tianyi_Li 。
前言
在智能手机越来越普及的今天,拍摄一张色彩鲜艳、清晰的照片轻而易举。但是老照片没有如此“幸运”,大多为黑白。借助人工智能技术,可以一定程度上帮助老照片还原原来色彩。还记得之前火热的“老北京视频上色”吗?就是采用类似的技术啊。
这次介绍的是黑白图像上色应用,旨在华为自研的 Ascend 310 推理芯片上实现输入黑白图像,自动对黑白图像进行上色,还原彩色图像。
该应用案例整体流程如下图所示:
简单来说分为以下部分:
图像前处理:将输入的黑白图像通过 opencv 转换为 Lab 图,并抽取其中的 L 通道进行前处理;
Colorization 模型推理:将处理后的 L 通道传入模型进行推理,获得预测结果的 a,b 通道;
模型后处理:拼接原始 L 通道和预测得的 a,b 通道获得新的 Lab 图。
环境
AI 加速型 | ai1s.large.4 | 2vCPUs | 8GiBMindStudio5.0.RC1_CANN5.1.RC1Ubuntu 18.04 server 64bit
操作流程
假设我们已经收到代金券,并通过官方共享的镜像购买了 ECS。
1. 登录环境
我使用的是 MobaXterm,登陆界面如图所示:
2. 获取代码
2.1 切换到普通用户
默认登录是 root 用户,权限太大了,开发不太安全,我们先切换到普通用户,命令如下:
切换成功后,终端的提示符会变成$
,我的当前目录如下图所示:
2.2 获取代码
我使用的是官方案例,执行如下命令下载:
运行成功截图如下:
注意,这里是下载的完整仓库,下面选择具体案例,我先选择 Colorization 来试试吧,先将这里案例拷贝出来一份到我的工作目录,我们下载的就当备份,开发切记要常备份,有备无患。详细信息截图如下。
2.3 运行
2.3.1 模型转换
本工程原模型是 caffee 模型,需要使用 atc 工具转换为 om 模型,模型和所需权重文件已上传,请使用以下命令下载并解压:
下载完成并成功解压的截图:
下载并解压完毕后,进入 scripts 目录执行模型转换脚本
运行报错了,如下所示:
回头看看该案例之前的环境要求,如下所示,考虑到该案例最早的更新也是 6 个月前了,推测是 CANN 版本不匹配或其他软件驱动问题或者是我们目前登录的用户与安装的用户不一致,也就是说我们登陆的用户没有安装 CANN 和配套软件,这里就不深究了。直接来实际操作验证一下。
下面我们切换到 root 用户下试试,执行如下命令:
模型转换成功了,如下图所示,看来是使用的用户不对,还得使用 root 用户。
2.3.2 获取测试图片
将待上色图片移动至 data 目录。本样例使用图片方式获取如下
上述命令运行成功的截图如下:
2.3.3 运行推理工程
进入 scripts 目录,修改 run.sh 文件中 INPUT_PIC 变量为输入图片的路径,本示例为"…/data/dog.png",这个可以保持默认,暂时不做修改。
此外,还要修改 MX_SDK_HOME 环境变量为 SDK 实际安装路径。如果你不知道或不确定的话,我们下来查看一下,执行如下命令,即可查看当前的环境变量:
执行后得到的结果截图如下,我们可以找到MX_SDK_HOME
了,那么直接用来修改 run.sh 就好了。
修改后的 run.sh 截图:
修改完成后,按照如下命令执行脚本:
这时,可能会报错,如下图所示,这是没安装 OpenCV,其实前面的环境约束已经说了要安装 OpenCV 依赖的,我们来安装一下,执行如下命令:
之后再执行脚本,启动程序,就能运行成功了,部分运行截图如下所示:
…
输出结果保存在 out 目录下,下载至本地查看图片上色是否合理,下面给大家展示一下前后效果:
总的来说,除了狗的左侧耳朵的颜色有点问题外,效果还是很不错的,颜色比较自然,符合人类认知,感觉和拍摄得到的自然图片没什么区别哈。
好了,到此这个案例基本就体验完成了,还是很不错的。感兴趣的同学,可以将图片换成自己想要的图片来试试上色效果哦,注意修改图片名称和可能要修改的尺寸参数哦。
2.4 基于 MindStudio 的运行
2.4.1 启动 MindStudio
官方提供的镜像中有 MindStudio 的安装包,但是 ECS 默认是 root 用户登录,而在 root 用户下启动失败,应该是要 HwHiAiUser 才可以,但是 HwHiAiUser 用户在/root
目录下无权限,无法启动存放在此的 MindStudio,有点尴尬。
所以,我要将 MindStudio 拷贝到 HwHiAiUser 的目录下,授予权限来使用,具体命令如下,注意以下命令是在 root 用户下操作:
切换到 HwHiAiUser 用户,再来执行:
解压完成的截图如下所示:
下面来启动 MindStudio 了,执行如下命令:
初次启动可能有点慢,这也与当时网络状况有关,稍作等待即可,启动成功截图如下:
还记得我们之前成功运行的黑白图像上色的工程吗?现在来打开看看。
注意,MindStudio 的图形界面和我们的操作都是通过 ssh 来连接和传输的,因此网络质量还是有较大影响的,如果网络状况好那就事半功倍了。
在开发或运行前,先来熟悉下操作,那就先看看输入图像,双击打开,如下图所示:
很不错,和我们平时在 PyCharm 或 IDEA 上看的界面基本一致,如上图右上角所示,还显示了该图像的具体大小,尺寸和格式等,很详细。
2.4.2 配置环境变量
如果使用的是官方提供的镜像,则可按照下图说明配置:
配置好后会提示自动重启 MindStudio,在整个 MindStudio 运行期间,CPU 利用率在 50%-70%波动,有时达到 100%,可见还是很耗 CPU 资源的,也可能是我的 ECS 的双核有点拉跨了。不过我觉得 ssh 远程连接还要用图形界面来开发,这有点相悖,图形界面本身就消耗较大资源,这就失去了 ssh 远程连接小巧轻便的优势。
之后按照下图转为基于 mxVision 的 Ascend APP 即可:
建议
1.关于色域转换的问题
我观察到目前一些应用案例涉及的色域转换,比如将 YUV 格式图像转换为 RGB(具体链接链接见下方),调用的是 OpenCV,我的理解是这使用 CPU(ARM 或 x86)通过软件的方式来实现,但根据我之前的经验,即使用 C++也是比较慢的,特别是在处理的图像尺寸较大(1080P,甚至 4K,现在人们对分辨率的要求越来越高)的时候,可能很难满足实时(指 30FPS)的要求(因时间关系,并未对这里提到的应用案例做测试,抱歉)。如果是这样,那么应用性就不是很大了,可能更多是趣味性,但这可能不符合 Ascend 310 和配套软件的定位了。
应用案例链接:https://www.hiascend.com/zh/developer/mindx-sdk/case-studies/60172271
2. 关于后处理的问题
这里问题之前在论坛看到有人提过,这里简单说一下:在目标检测或目标跟踪的后处理阶段,我们可能需要根据解析得到的坐标框在输入图像上绘制出来以达到较好的可视化效果,目前看到的更多是调用 OpenCV 的 API 来实现,但这是纯软件的实现,消耗的是 CPU 资源,如果目标框很多的情况下,耗时很大,以致于成为整个流程中的性能瓶颈,暂时未看到昇腾给出的相关硬件方案,期待能够加速的解决方法。
3. 对网络质量要求高
我在仅仅 ssh 连接操作时,还是很流畅的,也能够满足开发和调试需要。但是使用 MindStudio 后,在 MindStudio 中操作延迟很高,每次操作都要等一会才行,可能是我本地网络不太好或者 ECS 的 CPU 负载太高,但是用户网络不好或 ECS 规格较低这都是可能的情况,从这个角度来说,还不如不用 MindStudio 的图形界面,直接在终端开发,可能更熟悉,更方便。
感觉 MindStudio 还是适合在本地配置较高的电脑端使用,在 ECS 上远程连接使用还是不太行。
我这里使用实在是太卡了,就先这样吧。
4. 配置复杂
安装了 MindStudio 后,还需要进行繁琐的配置,配置 CANN、mindx_sdk 等等,而且这些需要用户自行去做,MindStudio 自身不会有任何提示和帮助,这和我用其他 IDE,比如 IDEA 之类的不同,IDEA 会根据当前电脑的情况,提供选择给用户,仿佛是扫描了一遍电脑,找到了用户安装的 JDK 之类的,并根据版本的不同,呈现给用户以供选择。而 MindStudio 却没有类似的帮助和支持。
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/5beb71765f81938be0d708ccb】。文章转载请联系作者。
评论