1、什么是AIPP

资料中,对于AIPP的描述:
AIPP(Artificial Intelligence Pre-Processing)AI预处理,用于在AI Core上完成图像预处理,包括改变图像尺寸、色域转换(转换图像格式)、减均值/乘系数(改变图像像素),数据处理之后再进行真正的模型推理。

由于使用DVPP进行数据预处理后,DVPP各组件基于处理速度和内存占用量的考虑,对输出图片有诸多限制,如输出图片需要长宽对齐,输出格式必须为YUV420SP等,但模型输入通常为RGB或BGR,且输入图片尺寸各异。由此引入AIPP功能,可以通过AIPP提供的色域转换功能,输出满足要求的图片格式;通过补边(Padding)功能,输出满足长宽对齐的图片等。

AIPP根据配置方式不同 ,分为静态AIPP/动态AIPP;如果要将原始图片输出为满足推理要求的图片格式,则需要使用色域转换功能;如果要输出固定大小的图片,则需要使用AIPP提供的Crop(抠图)、Padding(补边)功能。
我理解这个预处理就是对标原始模型中常见预处理方式,比如减均值、归一化等操作,在AI Core上可以起到加速处理的作用。

2、静态AIPP配置实战

2.1 以TensorFlow官方github中Vgg19预训练模型为例

step 1、 下载预训练ckpt,固化成pb,参考tf-slim库中方法固化模型:

step 2、 pb转om,先不带AIPP,batchsize=32
atc --model=frozen_vgg19.pb --framework=3 --output=vgg19_tf_32batch --output_type=FP32 --soc_version=Ascend310 --input_shape="input:32,224,224,3" --log=info

转换成功

step 3、 对照tf-slim库中预处理方法,编写预处理脚本

因为使用msame工具,在NPU上推理,输入是bin文件,所以参考tf-slim库中的方法,编写python脚本,对输入图片进行预处理,数据集使用ImageNet2012 Validation数据集。
关键代码:

_R_MEAN = 123.68
_G_MEAN = 116.78
_B_MEAN = 103.94
.....
image = _aspect_preserving_resize(image, resize_side)image = _central_crop([image], output_height, output_width)[0]image.set_shape([output_height, output_width, 3])image = tf.to_float(image)if use_grayscale:image = tf.image.rgb_to_grayscale(image)return _mean_image_subtraction(image, [_R_MEAN, _G_MEAN, _B_MEAN])

完整的预处理代码
可以看到原来模型针对推理所做的预处理逻辑:
1、读取图片为RGB格式
2、resize
3、Central crop
4、减均值

step 4、 预处理转为bin文件之后,使用msame推理得到性能和精度数据:

msame --model vgg19_tf_32batch.om --input orgin_bins/ --output results

32batch,平均推理性能145.42ms,5万张完整数据集的精度top1/top5: 71.0%/89.8%,和TensorFlow Modelzoo的数据一致。

2.2 添加AIPP配置文件

本次尝试简单的把减均值添加到AIPP配置中去。

step1、根据原来网络的预处理逻辑,编写AIPP配置文件

根据前面原来网络的预处理,减均值[_R_MEAN = 123.68,G_MEAN = 116.78,B_MEAN = 103.94],没有归一化,所以根据模板:

vim aipp.cfg
#增加如下内容
aipp_op {aipp_mode: staticinput_format : RGB888_U8src_image_size_w : 224src_image_size_h : 224mean_chn_0 : 124mean_chn_1 : 116mean_chn_2 : 104var_reci_chn_0 : 1var_reci_chn_1 : 1var_reci_chn_2 : 1
}

这个预处理相当于送进模型推理之前,将原来正确的处理的逻辑要包含在AIPP配置中。
三个通道的减均值,和原先的对应,因为资料里面写了不支持小数,所以取整。原来没有归一化,所以var_reci_chn取1。

step2、pb转om,带AIPP,batchsize=32

在资料中:

所以带上使能small channel的优化,看一下性能提升的效果:

atc --model=frozen_vgg19.pb --framework=3 --output=vgg19_tf_32batch_aipp --output_type=FP32 --soc_version=Ascend310 --input_shape="input:32,224,224,3" --insert_op_conf=aipp.cfg --enable_small_channel=1 --log=info

step3、预处理代码中,去掉减均值,并且保存的时候转为uint8类型

关键代码:

if use_grayscale:image = tf.image.rgb_to_grayscale(image)#return _mean_image_subtraction(image, [_R_MEAN, _G_MEAN, _B_MEAN])return image
.....
img = img.eval()img = img.astype(np.uint8, copy=False)

完整代码参考

step 4、 预处理转为bin文件之后,使用msame推理得到性能和精度数据

32batch,平均推理性能141.78ms,5万张完整数据集的精度top1/top5: 71.0%/89.8%

3、总结

batchsize=32 时:

AIPP 时延 吞吐 精度
不带 145.4ms 220 FPS 71.0%/89.8%
141.7ms 228 FPS 71.0%/89.8%

可以看到带上AIPP预处理之后,精度不变的情况下,模型的推理性能得到了3.7ms的提升,效果还是很明显的。
另外本次只是尝试简单的添加减均值和归一化的参数,和大家做个分享,后面准备再深入学习下其他的配置如:色域转换、crop、resize等,欢迎交流

【技术分享】昇腾CANN AIPP入门学习实战总结相关推荐

  1. 极智AI | 谈谈昇腾 CANN AIPP

      欢迎关注我的公众号 [极智视界],获取我的更多笔记分享   大家好,我是极智视界,本文介绍一下 谈谈昇腾 CANN AIPP.   昇腾 CANN 的全称是 Compute Architectur ...

  2. 好程序员大数据培训分享怎样进行大数据入门学习

    好程序员大数据培训分享怎样进行大数据入门学习,对于大数据的入门学习,基础不一样,起点就会不一样. 今天先来说说,对于零基础的同学想要学习大数据的方式方法吧!很多人可能感到不可思议,零基础怎么可能学习大 ...

  3. CSDN - 盛洪宇(技术胖) - Vue2.x从入门到实战

    Vue 全家桶 - Webpack / Vue / Vue-cli / Vue-router / Vuex / Axios / Element UI CSDN - 盛洪宇(技术胖) - Vue2.x从 ...

  4. Python爬虫入门学习实战项目(一)

    静态数据的采集 第一个项目我们来抓取拉勾网的招聘信息,话不多说直接开始吧! 1.首先我们导入相关库: import requests from lxml import etree import pan ...

  5. java day40【会话技术:Cookie 、会话技术:Session 、JSP:入门学习】

    第一章  会话技术 1. 会话:一次会话中包含多次请求和响应. * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 2. 功能:在一次会话的范围内的多次请求间,共享数据 3. ...

  6. AI考拉技术分享会—手把手教你入门UI 自动化测试 Appium

    2019独角兽企业重金招聘Python工程师标准>>> AI考拉日常技术分享会,前有众多前后端以及android大神分享,这次测试老司机Eric也放招,手把手带devs入门UI自动化 ...

  7. 微服务技术方案:Spring Cloud 从入门到实战

    随着互联网技术的发展与不断创新,以及用户流量的不断增大,越来越多的企业项目面临大数据.高并发等问题,随之而来的就是通过分布式模型组建架构,微服务思想就集中体现了应用价值,2020 年的你还没有掌握微服 ...

  8. 【华为云技术分享】机器学习(02)——学习资料链接

    机器学习(01)--机器学习简介 以下是我学习机器学习过程中的部分学习资料,当然除些之外还有更多的文章和视频,实际看了后觉得好多内容都太难,自己目前的数学基础很难理解里面讲解的内容.另外,资料太多反而 ...

  9. 【华为云技术分享】《跟唐老师学习云网络》—我的网络概念

    [摘要] 之前讲过该一系列文章都是入门的,保证你会对,但是精通还要靠自己进一步深入(感兴趣的话). 一.电脑主机 <--> Host 一台电脑很简单,一个壳子里面堆了很多玩意.但是你买了电 ...

最新文章

  1. 详解Spring MVC 4之ViewResolver视图解析器
  2. android手机生成pdf格式文件,Android根据pdf模板生成pdf文件
  3. 那些文献阅读能力爆表的科研学子,都在偷偷做这件事……
  4. 造车厂入局网约车 新能源低运营成本或打破“烧钱”怪圈
  5. 二进制128位整数运算
  6. mysql存储过程返回结果集_原来MySQL的存储过程也可以这么玩?
  7. java swt浏览器_DJNativeSwing-SWT组件-Java GUI中内嵌浏览器
  8. css字竖排垂直居中显示,CSS--字体|垂直居中|background
  9. GPS测量的精度及用途
  10. 使用循环结构输出数字三角形图形
  11. 【Scratch考级99图】图36-等级考试scratch绘制复杂图形中间带凸点正方形花 少儿编程 scratch画图案例教程
  12. 诗歌十 寒窑赋(破窑赋)天有不测风云,人有旦夕祸福
  13. 安卓进阶之android系统架构
  14. (黑龙江) --2011年度注册测绘师资格考试合格人员名单
  15. Dilated Residual Networks
  16. 访问服务器文件夹缩略图加载很慢,win10缩略图加载慢怎么办_win10电脑加载缩略图很慢处理方法-win7之家...
  17. 学Python编程好找工作吗?岗位方向多吗?
  18. 慧据价值 链接未来丨第八届数据技术嘉年华大会全议程呈现
  19. matlab 复数方程,新人求助解MATLAB超越方程,方程中含有复数 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  20. java实训答辩ppt_基于JavaSwing的工作考勤管理系统设计与实现毕业论文+开题报告+实习报告+实习日历+答辩PPT+项目源码...

热门文章

  1. arangodb 实战笔记
  2. 音乐结构分析之系统探究
  3. 《都挺好》告诉我们:这些人生道理,每个人都必须要懂
  4. 肿瘤免疫治疗多组学综合分析数据库CAMOIP v1.1上线啦!
  5. 你是什么时候对深度学习失去信心的?
  6. firebase_Firebase真的像它看起来那样很棒
  7. n++++n,n----n 的区别
  8. 手机号码验证 正确答案在文章末尾
  9. iOS极光推送的使用说明
  10. 09 动态树+数据表格+分页+增删改