前言
其实图片黑白转换这个案例最难的地方是需要进行第三方环境的配置,配置过程比较冗杂,但配置好之后实现起来就比较快了,而且能够获得不错的效果。
一、环境配置——第三方依赖
在配置好CANN版本后,需要再进行第三方依赖的配置。
因为我们要进行的是图像的处理,需要用到很多图像处理的包,所以首先需要进行环境的配置。
点击如下链接:
cplusplus/environment/catenation_environmental_guidance_CN.md · Ascend/samples - Gitee.com
按照步骤进行环境的配置。
二、下载案例包
在gitee上下载代码黑白图像上色-昇腾社区 (hiascend.com)
在Mindstudio中打开项目,如下图所示
三、项目环境的配置
由于这个图像转换需要第三方依赖——opencv, ffmpeg+acllite,但在远程终端中是没有按照这几个第三方依赖的,所以下面将主要讲述我如何安装这个第三方依赖的。
其实整个过程最枯燥和冗杂的就是这一步,因为后续代码的实现也并不难,主要还是在项目环境的配置上比较麻烦。
我选择的是昇腾AI设备安装开发环境,同时将此环境作为运行环境的samples相关依赖安装的方式,进入到下面的网站并按照步骤进行安装。
cplusplus/environment/catenation_environmental_guidance_CN.md · Ascend/samples - Gitee.com
安装准备
首先需要打开.bashrc文件,并且在文件后面添加所需的部分。
这一部分尤为重要,因为在添加的过程中会涉及到环境变量的配置,我一开始在配置环境变量的时候就出现了问题,后面搞了好久才发现是一开始的问题。
# 打开.bashrc文件。
vi ~/.bashrc
# 在文件最后一行后面添加如下内容。
export CPU_ARCH=`arch`
export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代码编译时链接samples所依赖的相关库文件
export LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #运行时链接库文件
export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN软件安装后的文件存储路径,根据安装目录自行修改
写好内容到.bashrc文件后,执行:wq!保存文件并退出
# 执行命令使其立即生效。
source ~/.bashrc
# 创建第samples相关依赖文件夹
mkdir -p ${THIRDPART_PATH}
下面安装git
# 下载源码并安装git
cd ${HOME}
sudo apt-get install git
git clone https://gitee.com/ascend/samples.git
# 拷贝公共文件到samples相关依赖路径中
cp -r ${HOME}/samples/common ${THIRDPART_PATH}
Opencv的下载和安装
直接执行sudo代码,将Opencv下载到远程终端。
sudo apt-get install libopencv-dev
安装ffmpeg及x246插件(比较久)
这一步尤为重要,因为涉及到后续acllite库的安装,这一步必须先搞定。
① 下载x246
cd ${HOME}
git clone https://code.videolan.org/videolan/x264.git
cd x264
② 安装x246
./configure --enable-shared --disable-asm
make
sudo make install
sudo cp /usr/local/lib/libx264.so.164 /lib
③ 下载ffmpeg
./configure --enable-shared --disable-asm
make
sudo make install
sudo cp /usr/local/lib/libx264.so.164 /lib
④ 安装ffmpeg
./configure --enable-shared --enable-pic --enable-static --disable-x86asm --enable-libx264 --enable-gpl --prefix=${THIRDPART_PATH}
make -j8
make install
acllite库的安装
cd ${HOME}/samples/cplusplus/common/acllite/
make
make install
代码实操过程
配置好环境之后,就可以进行真正的代码实操过程了。
实现原理
黑白图像上色模型原理如下图所示,对物件包括背景色(L通道代表的灰度图)使用卷积运算提取特征,然后同样用卷积进行分类,从而尝试给出对灰度图片每个像素点的色彩预期(ab通道)。
将ab通道的值Resize到原始图片宽高并与L通道叠加后,转为RGB图片即可得到彩色图像。黑白图像上色模型原理如下图所示,对物件包括背景色(L通道代表的灰度图)使用卷积运算提取特征,然后同样用卷积进行分类,从而尝试给出对灰度图片每个像素点的色彩预期(ab通道)。
将ab通道的值resize到原始图片宽高并与L通道叠加后,转为RGB图片即可得到彩色图像。其中模型的输入为L通道的数据(224,224,1),输出为ab通道的数据(56,56,2)。
案例流程
将原始模型转换成om模型的思路
如下图所示,昇腾软件栈中存在一个atc模型转换工具,针对本应用,我们需要使用该工具将原始模型转换成系统支持的om模型。
采用下图所示的模块化设计,通过各模块之间的协调配合完成一张图片的推理输出
思路
1.运行管理资源申请:用于初始化系统内部资源,固定的调用流程。
2.加载模型文件并构建输出内存:从文件加载离线模型数据,需要由用户自行管理模型运行的内存,根据内存中加载的模型获取模型的基本信息包含模型输入、输出数据的数据buffer大小;由模型的基本信息构建模型输出内存,为接下来的模型推理做好准备。
3.数据预处理:接收外界传递的图像数据,对读入的图像数据进行预处理,然后构建模型的输入数据。
4.模型推理:根据构建好的模型输入数据进行模型推理。
5.解析推理结果:根据模型输出,解析模型的推理结果。使用OpenCV将转换后的彩色图像数据保存成图片文件。
准备测试图片
在网上随便找了个相应的黑白图片。
模型转换
这个模型转换直接输入代码到远程终端即可,可能出现的问题是在wget的时候容易会出现验证,如果出现验证不通过,就采用最后的代码即可。
cd ${HOME}/samples/cplusplus/level2_simple_inference/6_other/colorization/model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/colorization/colorization.prototxt
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/colorization/colorization.caffemodel
atc --input_shape="data_l:1,1,224,224" --weight="./colorization.caffemodel" --input_format=NCHW --output="colorization" --soc_version=Ascend310 --framework=0 --model="./colorization.prototxt"
中间wget出现验证不通过的解决代码:
wget --no-check-certificate https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/colorization/colorization.prototxt
wget --no-check-certificate https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/colorization/colorization.caffemodel
样例部署
然后按照指引的代码进行样例部署
cd ${HOME}/samples/cplusplus/level2_simple_inference/6_other/colorization/scripts
bash sample_build.sh
脚本执行
然后就是激动人心的脚本执行时刻,输入
bash sample_run.sh
结果展示