【MindStudio训练营第一期】进阶班大作业:cartoonGAN_picture卡通生成案例
收藏回复举报
【MindStudio训练营第一期】进阶班大作业:cartoonGAN_picture卡通生成案例
发表于2022-12-30 16:58:21
0 查看
 1.开发环境配置 

  1.1下载Mindstudio 

MindStudio下载-昇腾社区 (hiascend.com) 

https://www.hiascend.com/software/mindstudio/download 

  1.2购买弹性云,加载镜像 

申请镜像:进入网页  https://www.huaweicloud.com/ 

 右上方点击:用户名 > 我的凭证,选择 API凭证

image.png 
 复制 华北-北京四 的项目ID提交给昇腾官方人员,将会用于分享包含环境的ECS镜像,便于挂载之后直接使用,无需安装CANN、MindX SDK等。 

image.png

1.2.1接收镜像 

 控制台左上角菜单 服务列表 > 计算 > 镜像服务 IMS image.png

选择 共享镜像 标签 > 全部接受 接受镜像建立ECS服务器并加载镜像 image.png

1.2.2建立ECS服务器并加载镜像

购买弹性云服务器 image.png

 基础配置如下 image.png
 选择共享镜像 image.png
 网络配置 image.pngimage.png

 云服务器名称:ecs-Zixin;用户名:root;密码自己设置  

确认购买,记录IP和密码,即可通过MindStudio的SSH Manager连接使用。 

image.png

1.3 MobaXterm登录SSH 

打开Session image.png

 选择SSH image.png
 创建用户信息 image.png

输入弹性云设置的账号名与密码

 image.png

 输入弹性云的IP地址 image.pngimage.png

配置完成

 image.png

1.4 配置CANN 

新建project image.png

  创建CANN version image.png
 新增CANNsetiing image.png

image.png

填写SSH信息 

 image.png

连接成功 

image.png

镜像中CANN包地址: /usr/local/Ascend/ascend-toolkit/6.0.RC1 image.png

 等待同步,完成后表明我们已经连接上了远程的服务器端,并且能使用服务器的cann进行开发。 image.png

配置完成。 

2.实操过程 

2.1准备工作 

在gitee上下载代码 

samples: https://gitee.com/ascend/samples/tree/master/python/contrib/cartoonGAN_picture 

 在Mindstudio中打开项目 image.png
 在远端下载原始模型,输入命令:创建一个名为test1的文件夹并进入 
mkdir test1 
cd 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 

下载成功 image.png

 也可以在本地下载原始模型:获得model文件夹的路径 image.png
 将原始模型和转换文件复制到该路径下 
 原始模型链接: 
 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 image.png
可以看到项目中的文件更新

 image.png
 将网址的图片保存到data目录下 

https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/cartoonGAN_picture/scenery.jpgimage.png

或者直接通过终端控制获取样例需要的测试图片:进入data文件夹并下载图片

cd data

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/cartoonGAN_picture/scenery.jpg

image.png

2.2模型转换 

原始网络模型是TensorFLow框架模型,而昇腾CANN软件栈需要的模型是.om离线模型,因此,需要通过ATC模型转换工具将.pb文件转换为Ascend 310处理器支持的Davinci模型文件。 image.png

 选择刚刚在远端下载好的原始pb模型,将输出目录改到model文件夹下 image.png
 模型转换成功 

2.3配置SDK

 image.png

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

 image.png
 远端运行:选择Ascend training image.png
 本地运行:选择python与对应的SDK image.png

进入远端src文件夹 

 cd /home/root/MindStudio-WorkSpace/cartoonGAN_picture_39f02200/src/ image.png

执行命令:运行 

 python3.9 cartoonization.py ../data/ 
 生成图片 image.png
 3.卡通图像生成案例CartoonGang_picture介绍 

  3.1实验内容与目标 

       3.1.1实验内容 

本实验主要介绍了基于昇腾CANN平台的卡通图像生成应用的开发方法。该应用选用的是CartoonGAN模型,以彩色图像做输入,将原始图像变为一张卡通图像。通过该实验,您可以了解如何在昇腾平台上实现一个基于CartoonGAN模型的推理应用。 image.png

 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 

本帖最后由 匿名用户2023/01/16 10:50:20 编辑

我要发帖子