摘要:借助人工智能技术,可以一定程度上帮助老照片还原原来色彩。还记得之前火热的“老北京视频上色”吗?就是采用类似的技术。
本文分享自华为云社区《基于MindX SDK在Ascend 310上的黑白图像上色初体验随笔》,作者:Tianyi_Li 。
前言
在智能手机越来越普及的今天,拍摄一张色彩鲜艳、清晰的照片轻而易举。但是老照片没有如此“幸运”,大多为黑白。借助人工智能技术,可以一定程度上帮助老照片还原原来色彩。还记得之前火热的“老北京视频上色”吗?就是采用类似的技术啊。
这次介绍的是黑白图像上色应用,旨在华为自研的Ascend 310推理芯片上实现输入黑白图像,自动对黑白图像进行上色,还原彩色图像。
该应用案例整体流程如下图所示:
简单来说分为以下部分:
- 图像前处理:将输入的黑白图像通过opencv转换为Lab图,并抽取其中的L通道进行前处理;
- Colorization模型推理:将处理后的L通道传入模型进行推理,获得预测结果的a,b通道;
- 模型后处理:拼接原始L通道和预测得的a,b通道获得新的Lab图。
环境
AI加速型 | ai1s.large.4 | 2vCPUs | 8GiB
MindStudio5.0.RC1_CANN5.1.RC1
Ubuntu 18.04 server 64bit
操作流程
假设我们已经收到代金券,并通过官方共享的镜像购买了ECS。
1. 登录环境
我使用的是MobaXterm,登陆界面如图所示:
2. 获取代码
2.1 切换到普通用户
默认登录是root用户,权限太大了,开发不太安全,我们先切换到普通用户,命令如下:
su - HwHiAiUser
切换成功后,终端的提示符会变成$,我的当前目录如下图所示:
2.2 获取代码
我使用的是官方案例,执行如下命令下载:
git clone https://gitee.com/ascend/mindxsdk-referenceapps.git
运行成功截图如下:
注意,这里是下载的完整仓库,下面选择具体案例,我先选择Colorization来试试吧,先将这里案例拷贝出来一份到我的工作目录,我们下载的就当备份,开发切记要常备份,有备无患。详细信息截图如下。
2.3 运行
2.3.1 模型转换
本工程原模型是caffee模型,需要使用atc工具转换为om模型,模型和所需权重文件已上传,请使用以下命令下载并解压:
mkdir model
cd model
wget https://mindx.sdk.obs.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/Colorization/model.zip --no-check-certificate
unzip model.zip
下载完成并成功解压的截图:
下载并解压完毕后,进入scripts目录执行模型转换脚本
cd ../scripts
bash atc_run.sh
运行报错了,如下所示:
回头看看该案例之前的环境要求,如下所示,考虑到该案例最早的更新也是6个月前了,推测是CANN版本不匹配或其他软件驱动问题或者是我们目前登录的用户与安装的用户不一致,也就是说我们登陆的用户没有安装CANN和配套软件,这里就不深究了。直接来实际操作验证一下。
下面我们切换到root用户下试试,执行如下命令:
su root
bash atc_run.sh
模型转换成功了,如下图所示,看来是使用的用户不对,还得使用root用户。
2.3.2 获取测试图片
将待上色图片移动至data目录。本样例使用图片方式获取如下
cd ../
mkdir data
cd data
wget https://c7xcode.obs.cn-north-4.myhuaweicloud.com/models/colorization_picture-python/dog.png --no-check-certificate
上述命令运行成功的截图如下:
2.3.3 运行推理工程
进入scripts目录,修改run.sh文件中INPUT_PIC变量为输入图片的路径,本示例为"…/data/dog.png",这个可以保持默认,暂时不做修改。
此外,还要修改MX_SDK_HOME环境变量为SDK实际安装路径。如果你不知道或不确定的话,我们下来查看一下,执行如下命令,即可查看当前的环境变量:
export
执行后得到的结果截图如下,我们可以找到MX_SDK_HOME了,那么直接用来修改run.sh就好了。
修改后的run.sh截图:
修改完成后,按照如下命令执行脚本:
cd .. # 回到Colorization目录下
mkdir out
cd ../scripts
bash run.sh
这时,可能会报错,如下图所示,这是没安装OpenCV,其实前面的环境约束已经说了要安装OpenCV依赖的,我们来安装一下,执行如下命令:
pip3 install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple
之后再执行脚本,启动程序,就能运行成功了,部分运行截图如下所示:
输出结果保存在out目录下,下载至本地查看图片上色是否合理,下面给大家展示一下前后效果:
总的来说,除了狗的左侧耳朵的颜色有点问题外,效果还是很不错的,颜色比较自然,符合人类认知,感觉和拍摄得到的自然图片没什么区别哈。
好了,到此这个案例基本就体验完成了,还是很不错的。感兴趣的同学,可以将图片换成自己想要的图片来试试上色效果哦,注意修改图片名称和可能要修改的尺寸参数哦。
2.4 基于MindStudio的运行
2.4.1 启动MindStudio
官方提供的镜像中有MindStudio的安装包,但是ECS默认是root用户登录,而在root用户下启动失败,应该是要HwHiAiUser才可以,但是HwHiAiUser用户在/root目录下无权限,无法启动存放在此的MindStudio,有点尴尬。
所以,我要将MindStudio拷贝到HwHiAiUser的目录下,授予权限来使用,具体命令如下,注意以下命令是在root用户下操作:
cp /root/MindStudio_5.0.RC1_linux.tar.gz /home/HwHiAiUser/
cd /home/HwHiAiUser/
chown HwHiAiUser:HwHiAiUser MindStudio_5.0.RC1_linux.tar.gz
切换到HwHiAiUser用户,再来执行:
tar -zxvf MindStudio_5.0.RC1_linux.tar.gz
解压完成的截图如下所示:
下面来启动MindStudio了,执行如下命令:
cd MindStudio/bin
./MindStudio.sh
初次启动可能有点慢,这也与当时网络状况有关,稍作等待即可,启动成功截图如下:
还记得我们之前成功运行的黑白图像上色的工程吗?现在来打开看看。
注意,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却没有类似的帮助和支持。
点击关注,第一时间了解华为云新鲜技术~