如何基于香橙派AIpro对视频/图像数据进行预处理
本文分享自华为云社区《如何基于香橙派AIpro对视频/图像数据进行预处理》,作者: 昇腾CANN。
受网络结构和训练方式等因素的影响,绝大多数神经网络模型对输入数据都有格式上的限制。在计算机视觉领域,这个限制大多体现在图像的尺寸、色域、归一化参数等。如果源图或视频的尺寸、格式等与网络模型的要求不一致时,我们需要对其进行数据预处理。
昇腾AI硬件内置专门用于图像预处理的硬件单元,开发者通过其上层软件栈CANN能够更加便捷地发挥出硬件强大的媒体处理硬加速能力。香橙派AIpro开发板是香橙派联合昇腾打造的高性能AI开发板,开发者可以基于此,对不满足神经网络模型输入要求的数据进行预处理,从而更好地完成AI推理计算。
01 昇腾CANN数据预处理方式简介
昇腾CANN提供了两种专门用于数据预处理的方式:AIPP和DVPP。
AIPP(Artificial Intelligence Pre-Processing)在AI Core上完成数据预处理,主要功能包括改变图像尺寸(抠图、填充等)、色域转换(转换图像格式)、减均值/乘系数(改变图像像素)等。AIPP区分为静态AIPP和动态AIPP,您只能选择其中一种方式,不支持两种方式同时配置。
- 静态AIPP:模型转换时设置AIPP模式为静态,同时设置AIPP参数,模型生成后,AIPP参数值被保存在离线模型(*.om)中,每次模型推理过程采用固定的AIPP预处理参数,无法修改。
- 动态AIPP:模型转换时仅设置AIPP模式为动态,每次模型推理前,根据需求,在执行模型前设置动态AIPP参数值,然后在模型执行时可使用不同的AIPP参数。
DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括缩放、抠图、色域转换、图片编解码、视频编解码等。
总结一下,虽然都是数据预处理,但AIPP与DVPP的功能范围不同(比如DVPP可以做图像编解码、视频编解码,AIPP可以做归一化配置),处理数据的计算单元也不同,AIPP用的AI Core计算加速单元,DVPP就是用的专门的图像处理单元。
AIPP、DVPP可以分开独立使用,也可以组合使用。组合使用场景下,一般先使用DVPP对图片/视频进行解码、抠图、缩放等基本处理,再使用AIPP进行色域转换、归一化等处理。
02 如何使用AIPP功能
下文以此为例:测试图片分辨率为250*250、图片格式为YUV420SP,模型对图片的要求为分辨率224*224、图片格式为RGB,因此需要通过AIPP实现抠图、图片格式转换2个功能。关于各种格式转换,其色域转换系数都有模板,可从ATC工具使用指南中获取,请参见“昇腾文档中心”。
1、静态AIPP
(1)构造AIPP配置文件*.cfg。
- 抠图,有效数据区域从左上角(0, 0)像素开始,抠图宽*高为224*224。
- 图片格式转换,输入图片格式为YUV420SP_U8,输出图片格式通过色域转换系数控制。
aipp_op {
aipp_mode : static # AIPP配置模式
input_format : YUV420SP_U8 # 输入给AIPP的原始图片格式
src_image_size_w : 250 # 输入给AIPP的原始图片宽高
src_image_size_h : 250
crop: true # 抠图开关,用于改变图片尺寸
load_start_pos_h: 0 # 抠图起始位置水平、垂直方向坐标
load_start_pos_w: 0
crop_size_w: 224 # 抠图宽、高
crop_size_h: 224
csc_switch : true # 色域转换开关
matrix_r0c0 : 256 # 色域转换系数
matrix_r0c1 : 0
matrix_r0c2 : 359
matrix_r1c0 : 256
matrix_r1c1 : -88
matrix_r1c2 : -183
matrix_r2c0 : 256
matrix_r2c1 : 454
matrix_r2c2 : 0
input_bias_0 : 0
input_bias_1 : 128
input_bias_2 : 128
}
(2)使能静态AIPP参数
使用ATC工具转换模型时,可将AIPP配置文件通过insert_op_conf参数传入,将其配置参数保存在模型文件中。
atc --framework=3 --soc_version=${soc_version} --model= $HOME/module/resnet50_tensorflow.pb --insert_op_conf=$HOME/module/insert_op.cfg --output=$HOME/module/out/tf_resnet50
参数解释如下:
- --framework:原始网络模型框架类型,3表示TensorFlow框架。
- --soc_version:指定模型转换时昇腾AI处理器的版本,可执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy。
- --model:原始网络模型文件路径,含文件名。
- --insert_op_conf:AIPP预处理配置文件路径,含文件名。
- --output:转换后的*.om模型文件路径,含文件名,转换成功后,模型文件名自动以.om后缀结尾。
(3)调用AscendCL接口加载模型,执行推理,具体可参见如何基于香橙派AIpro开发AI推理应用。
2、动态AIPP
(1)构造AIPP配置文件*.cfg。
aipp_op
{
aipp_mode: dynamic
max_src_image_size: 752640 # 输入图像最大内存大小,需根据实际情况调整
}
(2)使能动态AIPP。
使用ATC工具转换模型时,可将AIPP配置文件通过insert_op_conf参数传入,将其配置参数保存在模型文件中。
atc --framework=3 --soc_version=${soc_version} --model= $HOME/module/resnet50_tensorflow.pb --insert_op_conf=$HOME/module/insert_op.cfg --output=$HOME/module/out/tf_resnet50
参数解释如下:
- --framework:原始网络模型框架类型,3表示TensorFlow框架。
- --soc_version:指定模型转换时昇腾AI处理器的版本。
- --model:原始网络模型文件路径,含文件名。
- --insert_op_conf:AIPP预处理配置文件路径,含文件名。
- --output:转换后的*.om模型文件路径,含文件名,转换成功后,模型文件名自动以.om后缀结尾。
(3)调用AscendCL接口加载模型,设置AIPP参数后,再执行推理,具体可参见如何基于香橙派AIpro开发AI推理应用。
调用AscendCL接口设置AIPP参数的代码示例如下:
aclmdlAIPP *aippDynamicSet = aclmdlCreateAIPP(batchNumber);
aclmdlSetAIPPSrcImageSize(aippDynamicSet, 250, 250);
aclmdlSetAIPPInputFormat(aippDynamicSet, ACL_YUV420SP_U8);
aclmdlSetAIPPCscParams(aippDynamicSet, 1, 256, 0, 359, 256, -88, -183, 256, 454, 0, 0, 0, 0, 0, 128, 128);
aclmdlSetAIPPCropParams(aippDynamicSet, 1, 2, 2, 224, 224, 0);
aclmdlSetInputAIPP(modelId, input, index, aippDynamicSet);
aclmdlDestroyAIPP(aippDynamicSet);
03 如何使用DVPP功能
昇腾AI处理器内置图像处理单元DVPP,提供了强大的媒体处理硬加速能力。同时,异构计算架构CANN提供了使用图像处理硬件算力的入口:AscendCL接口,开发者可通过接口来进行图像处理,以便利用昇腾AI处理器的算力。
DVPP内的功能模块如下表所示。
功能模块 |
描述 |
VPC(Vision Preprocessing Core) |
处理YUV、RGB等格式的图片,包括缩放、抠图、色域转换、直方图统计等。 |
JPEGD(JPEG Decoder) |
JPEG压缩格式-->YUV格式的图片解码。 |
JPEGE(JPEG Encoder) |
YUV格式-->JPEG压缩格式的图片编码。 |
VDEC(Video Decoder) |
H264/H265格式-->YUV/RGB格式的视频码流解码。 |
VENC(Video Encoder) |
YUV420SP格式-->H264/H265格式的视频码流编码。 |
PNGD(PNG decoder) |
PNG格式-->RGB格式的图片解码。 |
此处就以JPEGD图片解码+VPC图片缩放为例来说明如何使用DVPP功能。这里先通过一张图总览接口调用流程,包括资源初始化&去初始化、通道创建与销毁、解码、缩放、等待任务完成、释放内存资源等。
总览接口调用流程后,接下来我们以开发者更熟悉的方式“代码”来展示JPEGD图片解码+VPC图片缩放功能的关键代码逻辑。
// 创建通道
acldvppChannelDesc dvppChannelDesc = acldvppCreateChannelDesc();
acldvppCreateChannel(dvppChannelDesc); // 在JPEGD图片解码前,准备其输入、输出
// ……
// 创建解码输出图片描述信息,设置输出图片的宽、高、图片格式、内存地址等
acldvppPicDesc decodeOutputDesc = acldvppCreatePicDesc();
acldvppSetPicDescData(decodeOutputDesc, decodeOutputBuffer));
acldvppSetPicDescWidth(decodeOutputDesc, decodeOutputWidth);
acldvppSetPicDescHeight(decodeOutputDesc, decodeOutputHeight);
// 此处省略其它set接口…… // 执行JPEGD图片解码
acldvppJpegDecodeAsync(dvppChannelDesc, decodeInputBuffer, decodeInputBufferSize, decodeOutputDesc, stream); // 5. 在VPC图片缩放前,准备其输入、输出
// 创建缩放输入图片的描述信息,并设置各属性值,解码的输出作为缩放的输入
acldvppPicDesc resizeInputDesc = acldvppCreatePicDesc();
acldvppSetPicDescData(resizeInputDesc, decodeOutputBuffer);
acldvppSetPicDescWidth(resizeInputDesc, resizeInputWidth);
acldvppSetPicDescHeight(resizeInputDesc, resizeInputHeight);
// 此处省略其它set接口…… // 创建缩放输出图片的描述信息,并设置各属性值
acldvppPicDesc resizeOutputDesc = acldvppCreatePicDesc();
acldvppSetPicDescData(resizeOutputDesc, resizeOutputBuffer);
acldvppSetPicDescWidth(resizeOutputDesc, resizeOutputWidth);
acldvppSetPicDescHeight(resizeOutputDesc, resizeOutputHeight);
// 此处省略其它set接口…… // 6. 执行VPC图片缩放
acldvppVpcResizeAsync(dvppChannelDesc, resizeInputDesc,
resizeOutputDesc, resizeConfig, stream); // 7. JPEGD图片解码、VPC图片缩放都是异步任务,需调用以下接口阻塞程序运行,直到指定Stream中的所有任务都完成
aclrtSynchronizeStream(stream);
04 更多学习资源
更多学习资源,欢迎登录昇腾社区查阅:
[1]昇腾文档中心:https://www.hiascend.com/zh/document
[2]香橙派AIpro开源样例代码:https://gitee.com/ascend/EdgeAndRobotics
[3]香橙派AIpro学习资源一站式导航:https://www.hiascend.com/forum/thread-0285140173361311056-1-1.html
如何基于香橙派AIpro对视频/图像数据进行预处理的更多相关文章
- VPX板卡 基于XC7K325T的3U VPX FMC接口数据收发预处理平台
一.板卡概述 标准VPX 3U板卡, 基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIe ...
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
- 基于Xilinx FPGA的视频图像采集系统
本篇要分享的是基于Xilinx FPGA的视频图像采集系统,使用摄像头采集图像数据,并没有用到SDRAM/DDR.这个工程使用的是OV7670 30w像素摄像头,用双口RAM做存储,显示窗口为320x ...
- 基于FPGA的HDTV视频图像灰度直方图统计算法设计
随着HDTV的普及,以LCD-TV为主的高清数字电视逐渐进入蓬勃发展时期.与传统CRT电视不同的是,这些高清数字电视需要较复杂的视频处理电路来驱动,比如:模数转换(A/D Converter).去隔行 ...
- AMAP-TECH算法大赛开赛!基于车载视频图像的动态路况分析
阿里巴巴高德地图AMAP-TECH算法大赛于7月8日开启初赛,赛题为「基于车载视频图像的动态路况分析」,活动邀请了业界权威专家担任评委,优秀选手不仅可以瓜分丰厚的奖金,领取荣誉证书,还有机会进入高德地 ...
- 基于SDRAM的视频图像采集系统
本文是在前面设计好的简易SDRAM控制器的基础上完善,逐步实现使用SDRAM存储视频流数据,实现视频图像采集系统,CMOS使用的是OV7725. SDRAM控制器的完善 1. 修改SDRAM的时钟到1 ...
- paper 89:视频图像去模糊常用处理方法
随着“平安城市”的广泛建设,各大城市已经建有大量的视频监控系统,虽然监控系统己经广泛地存在于银行.商场.车站和交通路口等公共场所,但是在公安工作中,由于设备或者其他条件的限制,案情发生后的图像回放都存 ...
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...
- 基于FPGA的Uart接收图像数据至VGA显示
系统框图 前面我们设计了基于FPGA的静态图片显示,接下来我们来做做基于FPGA的动态图片显示,本实验内容为:由PC端上位机软件通过串口发送一幅图像数据至FPGA,FPGA内部将图像数据存储,最后扫描 ...
- 基于FPGA的LCD+CMOS视频采集显示使用小结
基于FPGA的LCD+CMOS视频采集显示 液晶显示器采用扫描模式,RGB888 电源采用:+5V供电 usb供电有时候会出现供电不足的问题 显示器接口有两种选择:16bit或24bit 分别对应 ...
随机推荐
- Vue mixin 永远不要用!! 极品垃圾,后期维护就剩骂街了~!!
为什么 Vue mixin 永远不要用!! 极品垃圾,后期维护就剩骂街了~!! vscode 没有自动跳转 自己维护下看看,重构的时候,还得整个复写,相当于整个软件重写 F!!!
- Python使用pyecharts库构建股票交易 可交互可视化展示——基于Tushare大数据开放社区
Python使用pyecharts库构建股票交易 可交互可视化展示--基于Tushare大数据社区 1.前言 大家好!欢迎各位访问我的博客,今天给大家分享的是 python使用pyecharts库构建 ...
- 全栈的自我修养: 002使用@vue/cli进行vue.js环境搭建 (使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发)
全栈的自我修养: 使用@vue/cli进行vue.js环境搭建 Success, real success, is being willing to do the things that other ...
- Android 开发Day8
/* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated by the * gradle pl ...
- Java valueOf() 方法---->摘抄
valueOf(boolean b): 返回 boolean 参数的字符串表示形式.. valueOf(char c): 返回 char 参数的字符串表示形式. valueOf(char[] data ...
- 引领汽车营销新趋势,3DCAT实时云渲染助力汽车三维可视化
当前,汽车产业发展正从电动化的上半场,向智能化的下半场迈进.除了车机技术体验的智能化之外,观车体验的智能化也不容忽视. 这是因为,随着数字化.智能化.个性化的趋势,消费者对汽车的需求和期待也越来越高, ...
- 3DCAT首届行业生态交流会|瑞云科技技术总监赵志杰:实时渲染助力元宇宙应用触手可及
2021年12月17日下午,由深圳市瑞云科技有限公司主办,深圳市虚拟现实产业联合会协办的 云XR如何赋能元宇宙--3DCAT实时云渲染首届行业生态合作交流会 圆满落幕.此次活动围绕 "云XR ...
- 喜讯!瑞云科技被授予“海上扬帆”5G融合应用专委会成员单位
2022年7月19日,5G应用"海上扬帆"行动计划云启航大会暨"海上扬帆"融合应用专委会成立大会在沪成功举办. 受上海信通院工创中心邀请和信任,深圳市瑞云科技有 ...
- Python简单程序设计(Average篇)
如题: 解题方式如下:
- 记录--ECharts — 饼图相关功能点(内环、外环、环形间隔、环形文字、轮播动画)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 记录一下在公司遇到的一些功能,以及相关实现 以上的内容我花了一周时间去实现的,自己也觉得时间很长,但主要因为很少使用ECharts,导致使 ...