1.开发环境配置 1.1下载Mindstudio
MindStudio下载-昇腾社区 (hiascend.com)
https://www.hiascend.com/software/mindstudio/download
1.2购买弹性云,加载镜像 申请镜像:进入网页 https://www.huaweicloud.com/
右上方点击:用户名 > 我的凭证,选择 API凭证
复制 华北-北京四 的项目ID提交给昇腾官方人员,将会用于分享包含环境的ECS镜像,便于挂载之后直接使用,无需安装CANN、MindX SDK等。

1.2.1接收镜像
控制台左上角菜单 服务列表 > 计算 > 镜像服务 IMS
选择 共享镜像 标签 > 全部接受 接受镜像建立ECS服务器并加载镜像 
1.2.2建立ECS服务器并加载镜像
购买弹性云服务器 
基础配置如下

选择共享镜像

网络配置

云服务器名称:ecs-Zixin;用户名:root;密码自己设置
确认购买,记录IP和密码,即可通过MindStudio的SSH Manager连接使用。
1.3 MobaXterm登录SSH
打开Session 
选择SSH

创建用户信息
输入弹性云设置的账号名与密码

输入弹性云的IP地址

配置完成

1.4 配置CANN
新建project 
创建CANN version

新增CANNsetiing

填写SSH信息
连接成功

镜像中CANN包地址: /usr/local/Ascend/ascend-toolkit/6.0.RC1 
等待同步,完成后表明我们已经连接上了远程的服务器端,并且能使用服务器的cann进行开发。
配置完成。
2.实操过程 2.1准备工作
在gitee上下载代码
samples: https://gitee.com/ascend/samples/tree/master/python/contrib/cartoonGAN_picture
在Mindstudio中打开项目

在远端下载原始模型,输入命令:创建一个名为test1的文件夹并进入
下载原始模型文件
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/cartoonization/cartoonization.pb --no-check-certificate
下载对应的cfg文件文件
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/cartoonization/insert_op.cfg --no-check-certificate
下载成功 
也可以在本地下载原始模型:获得model文件夹的路径 
将原始模型和转换文件复制到该路径下
原始模型链接:
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/cartoonization/cartoonization.pb
转换文件链接:
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/cartoonization/insert_op.cfg 
可以看到项目中的文件更新

将网址的图片保存到data目录下
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/cartoonGAN_picture/scenery.jpg
或者直接通过终端控制获取样例需要的测试图片:进入data文件夹并下载图片

2.2模型转换
原始网络模型是TensorFLow框架模型,而昇腾CANN软件栈需要的模型是.om离线模型,因此,需要通过ATC模型转换工具将.pb文件转换为Ascend 310处理器支持的Davinci模型文件。 
选择刚刚在远端下载好的原始pb模型,将输出目录改到model文件夹下

模型转换成功
2.3配置SDK

镜像中CANN包地址: /usr/local/Ascend/ascend-toolkit/6.0.RC1
镜像中MindX SDK地址:/usr/local/Ascend/mxManufacture-3.0.RC3 
可以看到SDK 成功启用 
同步ECS上的SDK:File -- Project Structure -- Platform Settings -- SDK 



2.4配置运行

远端运行:选择Ascend training 
本地运行:选择python与对应的SDK 
进入远端src文件夹
cd /home/root/MindStudio-WorkSpace/cartoonGAN_picture_39f02200/src/
执行命令:运行
python3.9 cartoonization.py ../data/
生成图片
3.卡通图像生成案例CartoonGang_picture介绍 3.1实验内容与目标
3.1.1实验内容
本实验主要介绍了基于昇腾CANN平台的卡通图像生成应用的开发方法。该应用选用的是CartoonGAN模型,以彩色图像做输入,将原始图像变为一张卡通图像。通过该实验,您可以了解如何在昇腾平台上实现一个基于CartoonGAN模型的推理应用。 
3.1.2实验目标
1.掌握一个基于昇腾CANN平台的推理应用的基本结构。
2.理解CartoonGAN模型的网络结构及其数据预处理/后处理方式
3.2网络结结构
CartoonGAN模型原理如下图所示,以Generative Adversarial Networks(GAN)为基础,其架构包括一个生成器(Generator)和一个判别器(Discriminator),对于生成器,它希望生成样本尽可能符合真实样本的分布,而判别器则希望尽可能的区分真实样本与生成样本,通过迭代训练两个网络(即生成器和判别器),生成图像卡通化的结果,该模型将生成器替换为自编码结构,使得生成器具有更强的生成能力。
编码器输入为真实图片 ,其架构由7×7的卷积核,步长为1的卷积层开始,随后紧跟两个降采样块(步长为2),对特征进行提取,对风格图片生成有用的信息将在这个过程中被提取,然后紧接4个残差块(Residual Block),用来重建内容特征。解码器架构由5个残差块开始,通过两个上采样块(步长为2)来实现对不同风格特征的重建,最后在添加一层使用7×7卷积核、步长为1的卷积层,得到最终输出生成的卡通图片结果。
为了辅助生成器生成更好的结果,判别器需要判断输出图像是否是真实的卡通图片。因为判断是否真实依赖于图片本身特征,不需要抽取最高层的图片特征信息,所以设计成较为浅层的框架,首先对输入进行卷积核为3x3的卷积,然后紧接两个步长为2的卷积块来降低分辨率,并且提取重要的特征信息,最后使用一个3×3的卷积层得到最终提取的特征,再与真实标签进行损失计算。
模型的输入数据形状为(256,256,3),输入数据色域格式为RGB,输出数据形状为(256,256,3)
3.3理解图像预处理和后处理方法 3.3.1原始模型的预处理和后处理方法
在Github能够找到其测试脚本 https://github.com/taki0112/CartoonGAN-Tensorflow/tree/890decc647fbfd90a5314290b2771c496562ada8
通过对该测试脚本的研读,能够理解其图像预处理和后处理的方法
通过对该测试脚本的研读,能够理解其图像预处理和后处理方法。
3.3.2昇腾CANN平台上模型预处理和后处理方法
1)预处理
基于对原始模型的理解,以及对DVPP和AIPP的了解,在图像预处理时DVPP和AIPP如下分工:
DVPP:
1.解码:JPEG图片先解码为YUV420SP,输出宽128,高16对齐,若输入原始图像大小为(500, 375) 经过解码后图像大小变为(512, 384)
2.图像缩放:使用DVPP的VPC接口将图像缩放为模型要求的大小(256,256),要求宽16,高2对齐,将(512,384)图像缩放到(256,256)
AIPP:
1.色域转换:YUV->RGB
2.图像标准化,AIPP配置mean_chn=[127,127,127] min_chn=[0.5,0.5,0.5] var_reci_chn=[0.007874,0.007874,0.007874]
2)后处理
根据原始模型图像后处理流程,将图像像素转换到[0,255],然后进行保存。
4.开发步骤和关键代码分析
4.1运行管理资源申请
运行管理资源申请的功能封装在了函数中。
4.2加载模型文件,构建模型输出内存
1)加载本地om模型文件到内存中,并创建并获取模型的描述信息,此函数功能封装在class Model的init_resource函数中。对应文件是acl_model.py
ACL库内置数据类型说明:aclmdlDataset主要用于描述模型推理时的输入数据或输出数据,模型可能存在多个输入、多个输出,每个输入或输出的内存地址、内存大小用aclDataBuffer类型的数据来描述。对应文件是acl_model.py
4.3读取本地图像数据并进行预处理
读取本地图像数据后,使用DVPP的jpegd功能对图像数据进行解码;将解码后的图片传入dvpp的接口crop_and_paste中,将原图抠图粘贴到和模型所需要的大小一致的图上,对应的文件是acl_devpp.py 和cartoonization.py。
4.4构建模型输入数据,进行模型推理
构建模型的输入数据,构建模型输入数据的功能函数封装在class Model的函数_gen_input_dataset中。对应文件是acl_model.py
4.5模型推理
根据已经加载到内存中,要进行推理的模型ID、构建好的模型推理输入数据,调用ACL库中模型推理接口进行模型推理。 模型推理功能函数封装在了Model.execute中。对应文件是acl_model.py
4.6解析模型推理结果 模型推理结果解析的功能函数封装在post_process中,对推理出的数据先进行色彩空间的转化RGB转成BGR,再将其resize成原图的大小,保存在outputs文件路径下。对应文件是cartoonization.py
4.7资源释放 推理接收后要卸载模型,并释放与模型推理相关的资源,此功能函数封装在class Model 的__del__(self)函数中。对应文件是acl_model.py
运行管理资源释放以及ACL去初始化的功能函数封装在class AclResource中的__del__函数,对应文件是acl_resource.py
1.1下载Mindstudio
MindStudio下载-昇腾社区 (hiascend.com)
https://www.hiascend.com/software/mindstudio/download
1.2购买弹性云,加载镜像申请镜像:进入网页 https://www.huaweicloud.com/
右上方点击:用户名 > 我的凭证,选择 API凭证
复制 华北-北京四 的项目ID提交给昇腾官方人员,将会用于分享包含环境的ECS镜像,便于挂载之后直接使用,无需安装CANN、MindX SDK等。
1.2.1接收镜像
控制台左上角菜单 服务列表 > 计算 > 镜像服务 IMS选择 共享镜像 标签 > 全部接受 接受镜像建立ECS服务器并加载镜像
1.2.2建立ECS服务器并加载镜像
购买弹性云服务器
基础配置如下选择共享镜像
网络配置
云服务器名称:ecs-Zixin;用户名:root;密码自己设置
确认购买,记录IP和密码,即可通过MindStudio的SSH Manager连接使用。
1.3 MobaXterm登录SSH
打开Session
选择SSH创建用户信息
输入弹性云设置的账号名与密码

输入弹性云的IP地址配置完成
1.4 配置CANN
新建project
创建CANN version新增CANNsetiing
填写SSH信息
连接成功
镜像中CANN包地址: /usr/local/Ascend/ascend-toolkit/6.0.RC1
等待同步,完成后表明我们已经连接上了远程的服务器端,并且能使用服务器的cann进行开发。配置完成。
2.实操过程2.1准备工作
在gitee上下载代码
samples: https://gitee.com/ascend/samples/tree/master/python/contrib/cartoonGAN_picture
在Mindstudio中打开项目在远端下载原始模型,输入命令:创建一个名为test1的文件夹并进入
下载原始模型文件
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/cartoonization/cartoonization.pb --no-check-certificate下载对应的cfg文件文件
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/cartoonization/insert_op.cfg --no-check-certificate下载成功
也可以在本地下载原始模型:获得model文件夹的路径

将原始模型和转换文件复制到该路径下
原始模型链接:
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/cartoonization/cartoonization.pb
转换文件链接:
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/cartoonization/insert_op.cfg
可以看到项目中的文件更新
将网址的图片保存到data目录下
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/cartoonGAN_picture/scenery.jpg
或者直接通过终端控制获取样例需要的测试图片:进入data文件夹并下载图片
2.2模型转换
原始网络模型是TensorFLow框架模型,而昇腾CANN软件栈需要的模型是.om离线模型,因此,需要通过ATC模型转换工具将.pb文件转换为Ascend 310处理器支持的Davinci模型文件。
选择刚刚在远端下载好的原始pb模型,将输出目录改到model文件夹下模型转换成功
2.3配置SDK
镜像中CANN包地址: /usr/local/Ascend/ascend-toolkit/6.0.RC1





镜像中MindX SDK地址:/usr/local/Ascend/mxManufacture-3.0.RC3
可以看到SDK 成功启用
同步ECS上的SDK:File -- Project Structure -- Platform Settings -- SDK
2.4配置运行
远端运行:选择Ascend training
本地运行:选择python与对应的SDK
进入远端src文件夹
cd /home/root/MindStudio-WorkSpace/cartoonGAN_picture_39f02200/src/执行命令:运行
python3.9 cartoonization.py ../data/生成图片
3.卡通图像生成案例CartoonGang_picture介绍
3.1实验内容与目标
3.1.1实验内容
本实验主要介绍了基于昇腾CANN平台的卡通图像生成应用的开发方法。该应用选用的是CartoonGAN模型,以彩色图像做输入,将原始图像变为一张卡通图像。通过该实验,您可以了解如何在昇腾平台上实现一个基于CartoonGAN模型的推理应用。
3.1.2实验目标
1.掌握一个基于昇腾CANN平台的推理应用的基本结构。
2.理解CartoonGAN模型的网络结构及其数据预处理/后处理方式
3.2网络结结构
CartoonGAN模型原理如下图所示,以Generative Adversarial Networks(GAN)为基础,其架构包括一个生成器(Generator)和一个判别器(Discriminator),对于生成器,它希望生成样本尽可能符合真实样本的分布,而判别器则希望尽可能的区分真实样本与生成样本,通过迭代训练两个网络(即生成器和判别器),生成图像卡通化的结果,该模型将生成器替换为自编码结构,使得生成器具有更强的生成能力。
编码器输入为真实图片 ,其架构由7×7的卷积核,步长为1的卷积层开始,随后紧跟两个降采样块(步长为2),对特征进行提取,对风格图片生成有用的信息将在这个过程中被提取,然后紧接4个残差块(Residual Block),用来重建内容特征。解码器架构由5个残差块开始,通过两个上采样块(步长为2)来实现对不同风格特征的重建,最后在添加一层使用7×7卷积核、步长为1的卷积层,得到最终输出生成的卡通图片结果。
为了辅助生成器生成更好的结果,判别器需要判断输出图像是否是真实的卡通图片。因为判断是否真实依赖于图片本身特征,不需要抽取最高层的图片特征信息,所以设计成较为浅层的框架,首先对输入进行卷积核为3x3的卷积,然后紧接两个步长为2的卷积块来降低分辨率,并且提取重要的特征信息,最后使用一个3×3的卷积层得到最终提取的特征,再与真实标签进行损失计算。
模型的输入数据形状为(256,256,3),输入数据色域格式为RGB,输出数据形状为(256,256,3)3.3.1原始模型的预处理和后处理方法
在Github能够找到其测试脚本 https://github.com/taki0112/CartoonGAN-Tensorflow/tree/890decc647fbfd90a5314290b2771c496562ada8
通过对该测试脚本的研读,能够理解其图像预处理和后处理的方法通过对该测试脚本的研读,能够理解其图像预处理和后处理方法。
3.3.2昇腾CANN平台上模型预处理和后处理方法
1)预处理
基于对原始模型的理解,以及对DVPP和AIPP的了解,在图像预处理时DVPP和AIPP如下分工:
DVPP:
1.解码:JPEG图片先解码为YUV420SP,输出宽128,高16对齐,若输入原始图像大小为(500, 375) 经过解码后图像大小变为(512, 384)
2.图像缩放:使用DVPP的VPC接口将图像缩放为模型要求的大小(256,256),要求宽16,高2对齐,将(512,384)图像缩放到(256,256)
AIPP:
1.色域转换:YUV->RGB
2.图像标准化,AIPP配置mean_chn=[127,127,127] min_chn=[0.5,0.5,0.5] var_reci_chn=[0.007874,0.007874,0.007874]
2)后处理
根据原始模型图像后处理流程,将图像像素转换到[0,255],然后进行保存。
4.开发步骤和关键代码分析
4.1运行管理资源申请
运行管理资源申请的功能封装在了函数中。
4.2加载模型文件,构建模型输出内存
1)加载本地om模型文件到内存中,并创建并获取模型的描述信息,此函数功能封装在class Model的init_resource函数中。对应文件是acl_model.py
ACL库内置数据类型说明:aclmdlDataset主要用于描述模型推理时的输入数据或输出数据,模型可能存在多个输入、多个输出,每个输入或输出的内存地址、内存大小用aclDataBuffer类型的数据来描述。对应文件是acl_model.py
4.3读取本地图像数据并进行预处理
读取本地图像数据后,使用DVPP的jpegd功能对图像数据进行解码;将解码后的图片传入dvpp的接口crop_and_paste中,将原图抠图粘贴到和模型所需要的大小一致的图上,对应的文件是acl_devpp.py 和cartoonization.py。
4.4构建模型输入数据,进行模型推理
构建模型的输入数据,构建模型输入数据的功能函数封装在class Model的函数_gen_input_dataset中。对应文件是acl_model.py
4.5模型推理
根据已经加载到内存中,要进行推理的模型ID、构建好的模型推理输入数据,调用ACL库中模型推理接口进行模型推理。 模型推理功能函数封装在了Model.execute中。对应文件是acl_model.py
4.6解析模型推理结果模型推理结果解析的功能函数封装在post_process中,对推理出的数据先进行色彩空间的转化RGB转成BGR,再将其resize成原图的大小,保存在outputs文件路径下。对应文件是cartoonization.py
4.7资源释放推理接收后要卸载模型,并释放与模型推理相关的资源,此功能函数封装在class Model 的__del__(self)函数中。对应文件是acl_model.py
运行管理资源释放以及ACL去初始化的功能函数封装在class AclResource中的__del__函数,对应文件是acl_resource.py