共计 4312 个字符,预计需要花费 11 分钟才能阅读完成。
摘要: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…
点击关注,第一工夫理解华为云陈腐技术~