摘要:CANN作为昇腾AI处理器的发动机,反对业界多种支流的AI框架,包含MindSpore、TensorFlow、Pytorch、Caffe等,并提供1200多个根底算子。
2021年7月8日,第四届世界人工智能大会在上海召开。华为轮值董事长胡厚崑在开幕式发表演讲,其中提到:华为推出了异构计算架构CANN(Compute Architecture for Neural Networks),CANN作为昇腾AI处理器的发动机,反对业界多种支流的AI框架,包含MindSpore、TensorFlow、Pytorch、Caffe等,并提供1200多个根底算子。同时,CANN具备凋谢易用的ACL(Ascend Computing Language)编程接口,并提供了网络模型的图级和算子级的编译优化、主动调优等性能。CANN对上反对多种AI框架,对下服务AI处理器与编程,是晋升昇腾AI处理器计算效率的要害平台。
如何了解CANN,如何应用CANN,特地是如何基于CANN凋谢易用的ACL编程接口实现神经网络的疾速部署呢?
置信咱们大部分开发者对于训练一个模型并不生疏,但对于将该模型部署到边缘侧,做成一个利用落地,去产生价值(或者叫帮你赚钱?),可能就不是特地分明了。但,一旦谈到能够帮你去帮你赚钱,我置信你肯定会感兴趣的,对吗?
什么?赚钱!说到这个事儿,我就晓得你不困了哈!
咱们发现在昇腾社区上曾经提供了不少可在线体验的案例,这些案例岂但能够在线体验成果,还能够进行在线试验,同时凋谢了源代码,能够通过开源社区提供的资源进行学习并给基于这些案例进行二次开发,真真正正的体验、学习、开发三步走啊!
那么咱们抉择一些有意思的案例带大家学习下基于CANN的昇腾AI利用开发过程,明天要给大家介绍的就是这个可能吸引到你的卡通图像生成利用,无论是丑陋的小姐姐还是可恶的小萌宠都能帮你秒级生成,如下图,抉择预置图片或者是上传本人的私照,点击“立刻生成”即可体验。
首先介绍下如何找到该利用:
进昇腾社区https://www.hiascend.com/
开发者->利用案例,Ok,你曾经能够看到那个狗狗了,案例题目是“卡通图像生成”,点击进去你就看到了。
体验就不说了,右边抉择须要解决的图片,也能够上传本人的图片,而后点击生成就能够了,图片会上传到华为云昇腾AI计算资源上,推理后再回传到前端展现,相隔千里却仍能提供秒级体验,这里要给个大赞!
那么接下来言归正传,带你理解基于CANN的利用开发流程。残缺开发流程如下:
0) 工程筹备
硬件:服务器及推理卡准备就绪, 装置操作系统,配置网络。
训练后的模型:Caffe、MindSpore、TensorFlow模型;
1)模型转换
离线模型:Ascend310算子列表, ATC转换工具。
2) 算子开发及调试
自定义算子开发:TBE DSL,TBE TIK等算子开发工具。
3) 业务开发及调试
ACL接口:资源初始化,数据传输,数据预处理,模型推理,数据后处理等。
4)性能调优
性能优化:瓶颈剖析,内存优化,模型优化等。
看起来还挺简单的,对吧??然而咱们呢,是来解决主要矛盾的(先实现利用开发),其余的优化过程(精度、性能等)留着当前缓缓消化,来日方长,不是么?
废话不多说了,假设模型咱们曾经有了,也合乎咱们的需要,模型呢也是昇腾AI处理器曾经反对的模型(无需做算子开发),咱们当初要做的就是了解模型,剖析其前处理过程(给模型筹备数据),后处理过程(后果展现),进行模型转换失去离线模型,而后就是代码开发了(其实就是调用CANN ACL的各种API实现模型加载、推理的过程而已), 这里选用python,CANN的pyACL用起来。
总结一下,在本例中咱们只须要搞定如下过程:
了解模型 2. 模型转换 3. 基于CANN ACL接口进行代码开发
1、了解模型
Yang Chen、Yong-Jin LIU等人提出的算法 CartoonGAN: Generative Adversarial Networks for Photo Cartoonization基于GAN网络,迭代训练生成器和判断器,由判断器提供的对抗性损失束缚,最终将天然图片转换为具备卡通格调的图片,成果惊艳。
下图为卡通图像生成的整体框架:
以Generative Adversarial Networks(GAN)为根底,其架构包含一个生成器(Generator)和一个判断器(Discriminator),通过迭代训练两个网络,由判断器提供的对抗性损失束缚,最终使得网络可能将天然图片转换为具备卡通格调的图片后果,并且放弃原图片的内容信息。
图1 卡通图像生成整体架构
生成器构造
生成器采纳自编码器,为全卷积构造,包含编码器如图3,解码器如图4。
图3 编码器构造
图4 解码器构造
编码器输出为实在图片,其架构由7×7的卷积核,步长为1的卷积层开始,随后紧跟两个步长为2的降采样块,进行特征提取,对格调图片生成有用的信息将在这个过程中被提取。而后紧接4个残差块(Residual Block),用来重建内容特色。
解码器架构由5个残差块开始,通过两个上采样块(步长为2)来实现对不同风格特征的重建,最初在增加一层应用7×7卷积核、步长为1的卷积层,失去最终输入生成的卡通图片后果。
因为以后咱们的指标是将训练好的模型做成一个AI利用,所以这里只须要理解生成器就够了,从下面的构造中能够看出,该模型的输出是图像,输入也是图像,那么预处理和后处理过程呢?
原始模型预处理和后处理
在Github可能找到其测试脚本:https://github.com/taki0112/C...
联合后面的了解,并通过对测试脚本的研读,可能了解其图像预处理和后处理的办法
昇腾CANN软件栈提供了两套专门用于数据预处理的工具,其中一套叫做AIPP(AI Preprocessing) ;另一套叫做DVPP(Digital Vision Preprocessing)。
DVPP是CANN软件栈中的数字视觉预处理模块,昇腾310 AI处理器反对抠图缩放、jpeg编解码、视频编解码、png解码等性能。具体请参考昇腾社区文档:
https://support.huaweicloud.c...
AIPP用于在AI Core上实现图像预处理,包含色域转换(转换图像格式)、图像归一化(减均值/乘系数)和抠图(指定抠图起始点,抠出神经网络须要大小的图片)等,动态AIPP能够在ATC模型转换时通过设置参数实现,比拟不便。具体请参考昇腾社区文档:https://support.huaweicloud.c...
在这里,咱们假如你曾经理解了DVPP和AIPP,那么基于对原始模型的了解,在图像预处理时DVPP和AIPP如下分工(分工的准则:DVPP+AIPP的解决要等价于原始模型的预处理过程):
DVPP:
1.解码:JPEG图片先解码为YUV420SP,输入宽128,高16对齐,例如:若输出原始图像大小为(500, 375) 通过解码后图像大小变为(512, 384)
2.图像缩放:应用DVPP的VPC接口将图像缩放为模型要求的大小(256,256),要求宽16,高2对齐,将(512,384)图像中的无效数据(500,375)缩放到(256,256)
注:这里也能够思考等比例缩放,但因为等比例缩放要波及到用AIPP裁剪,前期再讲。
AIPP:
1.色域转换:YUV->RGB
2.图像标准化,AIPP配置mean_chn=[127.5,127.5,127.5] min_chn=[0.5,0.5,0.5] var_reci_chn=[0.007874,0.007874,0.007874]
2)后处理
依据原始模型图像后处理流程,将图像像素转换到[0,255],而后进行保留。该过程间接应用scipy库实现。
2、模型转换
原始网络模型是TensorFlow框架模型,而昇腾CANN软件栈须要的模型是.om离线模型,因而,须要通过ATC模型转换工具将.pb文件转换为Ascend 310处理器反对的Davinci模型文件。
ATC模型转换指令:
atc --output_type=FP32 --input_shape="train_real_A:1,256,256,3" --input_format=NHWC --output="./cartoonization" --soc_version=Ascend310 --insert_op_conf=./insert_op.cfg --framework=3 --model="./cartoonization.pb" --precision_mode=allow_fp32_to_fp16
重要参数阐明:
--model:原始模型文件门路与文件名。
--output:转换后的离线模型的门路以及文件名。
--precision_mode=allow_fp32_to_fp16:设置网络模型的精度模式,优先放弃原图精度,如果网络模型中算子反对float32,则保留原始精度float32;如果网络模型中算子不反对float32,则间接升高精度到float16。
--insert_op_conf:插入算子的配置文件门路与文件名,例如AIPP预处理算子。
AIPP配置文件,依据原始模型需解决进行AIPP文件配置,本模型的配置文件见下图:
更多参数介绍可浏览:https://support.huaweicloud.c...
3、利用开发
利用采纳了下图所示的模块化设计,通过各模块之间的协调配合实现一张图片的推理输入。
其中各个模块的次要性能点如下所示:
1.运行资源申请;
2.加载模型文件,申请模型输入输出内存;
3.数据获取,获取要进行推理的原始图像;
4.数据预处理,模型的输出图像进行预处理;
5.模型推理,将预处理后的数据输出到模型进行推理;
6.推理后果解析,将推理后果进行后处理。
源码就不在这里show了,昇腾社区提供了更好的学习门路,能够间接通过在线试验学习开发过程,间接点击右上侧的在线试验,即可收费体验。
体验结束后,大家还能够移步开源仓库去获取源码,如果有任何问题,激励大家去提issue与开发人员间接交换。
https://gitee.com/ascend/samp...
相干链接
模型论文参考链接如下:
https://openaccess.thecvf.com...
原始模型部署链接如下:
https://gitee.com/syz82521194...
相干源码能够在开源仓库如下地址中获取:
https://gitee.com/ascend/samp...
点击关注,第一工夫理解华为云陈腐技术~