【CANN训练营三步入门独家绝技】AIPP与DVPP的介绍与使用_aipp包括以下哪些模式-程序员宅基地

技术标签: python  人工智能  开发语言  

一、简介

CANN提供了AIPP和DVPP两种处理图像/视频数据的方式,AIPP和DVPP可以分开使用也可以组合使用,两者功能有部分重叠。

二、AIPP

AIPP(Artificial Intelligence Pre-Processing)人工智能预处理,在AI Core上完成数据预处理,主要功能包括改变图像尺寸(抠图、填充等)、色域转换(转换图像格式)、减均值/乘系数(改变图像像素)等。AIPP有静态和动态两种模式。

静态AIPP

**静态AIPP及在模型转换时就配置AIPP参数,后续不再修改。**我们创建一个配置文件来设置静态AIPP的功能。

配置文件aipp.cfg示例:

aipp_op {
       aipp_mode: static //设置为静态模式
       input_format:YUV420SP_U8 
       src_image_size_w: 320
       src_image_size_h: 240

       crop: true //抠图操作
       load_start_pos_w: 10
       load_start_pos_h: 20
       crop_size_w: 50
       crop_size_h: 60

       padding: true //填充操作
       left_padding_size: 20
       right_padding_sizeL: 15
       top_padding_size: 20
       bottom_padding_size: 15
       padding_value: 0

       csc_switch: true //色域转换
       matrix_r0c0:298
       matrix_r0c1:0
       matrix_r0c2:409
       matrix_r1c0:298
       matrix_r1c1:-100
       matrix_r1c2:-208
       matrix_r2c0:298
       matrix_r2c1:516
       matrix_r2c2:0
       input_bias_0:16
       input_bias_1:128
       input_bias_2:128

       //归一化配置
       mean_chn_0:104
       mean_chn_1:117
       mean_chn_2:123
}

上述配置文件的配置方法有模板可寻,具体参数设置可参考官方文档:

配置文件模板-AIPP使能-高级功能-ATC模型转换-推理应用开发-6.3.RC1.alpha002-CANN社区版-文档首页-昇腾社区 (hiascend.com)

使用方法:在使用ATC命令时,通过设置–insert_op_conf参数来加载AIPP配置文件

atc \
  --model=resnet50.onnx \
  --framework=5 \
  --output=resnet50 \
  --input_format=NCHW \
  --soc_version=Ascend310 \
  --input_op_conf=aipp.cfg //设置AIPP配置文件

动态AIPP

动态AIPP及开始不设置AIPP参数,而在推理代码中使用ACL接口来动态设置AIPP的参数。

在使用时,我们依旧需要在使用ATC命令时配置AIPP的配置文件。但动态AIPP的配置文件十分简单,如下:

aipp_op
{
    aipp_mode: dynamic //设置为动态模式
    max_src_image_size: 752640  # 输入图像最大的size,参数必填
}

我们使用ACL接口来设置AIPP参数,示例代码如下:

aclmdlAIPP *aippDynamicSet = aclmdlCreateAIPP(batchNumber);
ret = aclmdlSetAIPPSrcImageSize(aippDynamicSet, 256, 224);
ret = aclmdlSetAIPPInputFormat(aippDynamicSet, ACL_YUV420SP_U8);
ret = aclmdlSetAIPPCscParams(aippDynamicSet, 1, 256, 443, 0, 256, -86, -178, 256, 0, 350, 0, 0, 0, 0, 128, 128);
ret = aclmdlSetAIPPRbuvSwapSwitch(aippDynamicSet, 0);
ret = aclmdlSetAIPPDtcPixelMean(aippDynamicSet, 0, 0, 0, 0, 0);
ret = aclmdlSetAIPPDtcPixelMin(aippDynamicSet, 0, 0, 0, 0, 0);
ret = aclmdlSetAIPPPixelVarReci(aippDynamicSet, 1.0, 1.0, 1.0, 1.0, 0);
ret = aclmdlSetAIPPCropParams(aippDynamicSet, 1, 2, 2, 224, 224, 0);
ret = aclmdlSetInputAIPP(modelId_, input_, index, aippDynamicSet);
ret = aclmdlDestroyAIPP(aippDynamicSet);

我们可以看到各个函数的函数名与静态配置时的参数基本一致,具体功能与参数可查阅官方文档,这里不做赘述。

总结一下,AIPP的功能主要为抠图填充、色域转换、归一化。

三、DVPP

DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元(硬件),通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力。

主要提供的功能有视频编解码、JPEG编解码、PNG解码和预处理VPC(Digital Vision Pre-Processing)图片处理(抠图、缩放、格式转换)。

功能如下:

在这里插入图片描述

DVPP有V1和V2两个版本,V2接口支持更多的功能。使用方法为ACL接口调用,具体函数与参数请查阅官方文档:

接口调用流程-VPC图片处理典型功能-媒体数据处理V2-图像/视频/音频数据处理-应用开发(C&C++)-推理应用开发-6.3.RC1.alpha002-CANN社区版-文档首页-昇腾社区 (hiascend.com)

四、总结

AIPP和DVPP可以分开独立使用,也可以组合使用,组合使用情况下,一般先使用DVPP对图片或者视频进行解码、抠图、缩放等操作,然后再使用AIPP对DVPP处理后的图片进行格式、色域等转换,使输入符合模型的要求。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Liangweiyan1034/article/details/129864038

智能推荐

Ubuntu-18.04系统安装mongodb并开启身份验证_ubuntu docker 安装mongodb并开启安全认证-程序员宅基地

文章浏览阅读2.1k次。一、MongoDB安装1、导入公钥Ubuntu软件包管理器apt(高级软件包工具)需要软件分销商的GPG密钥来确保软件包的一致性和真实性。 运行此命令将MongoDB密钥导入到您的服务器。sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291..._ubuntu docker 安装mongodb并开启安全认证

SAP PP学习笔记04 - BOM2 -通过Serial来做简单的BOM变式配置,副明细,BOM状态,BOM明细状态,项目种类,递归BOM_根据序列号查bom-程序员宅基地

文章浏览阅读1k次,点赞14次,收藏14次。本章讲通过Serial来做简单的BOM变式配置。还讲了BOM的相关概念:副明细,BOM状态,BOM明细状态,项目种类,递归BOM 等。_根据序列号查bom

ecm工作原理 usb_USB CDC / USBnet (ECM, NCM, ACM) 转载-程序员宅基地

文章浏览阅读1.3k次。USB CDC-ACM(Abstract Control Model), CDC-ECM(Ethernet Networking Control Model), CDC-NCM (Network ControlModel), OBEX(Object Exchange) and WCM-DeviceManagement USB class and function driversCDC-ACM (A..._usb cdc-ecm

C语言复习4_c语言income-程序员宅基地

文章浏览阅读236次。局部变量于全局变量局部变量:被定义在函数的内部,它们的有效使用范围也被局限于所在的函数之内。其最大程度的确保了个函数之间的独立性。除了作用于函数的局部变量外,还有定义于复合语句中的局部变量,其有效使用范围被局限于复合语句中,一般作用于小范围的局部变量。局部变量一般定义 在函数或复合语句的开始处。int main (void){int a =1;//主函数的局部变量{int b=2;//复合语句的局部变量}...}全局变量:定义在函数外而不属于任何函数的变_c语言income

CNN典型模型及pytorch实现 —— GoogleNet_多尺度卷积代码-程序员宅基地

文章浏览阅读1.1k次。14年的冠军 model;GoogleNet(把网络结构增加到了22层)证明了用更多的卷积、更深的层次,可以得到更好的效果;但是纯粹增大网络也有一些缺点:参数太多,容易过拟合; 网络越大,计算的复杂度越大; 网络越深,越容易出现梯度消失或梯度弥散;为了在增加网络深度和宽度的同时减少参数,提出了 Inception;GoogleNet 和 AlexNet 结构的区别在于中间有好..._多尺度卷积代码

【一】微服务技术栈导学-程序员宅基地

文章浏览阅读952次。微服务是什么。微服务技术栈组成。_微服务技术栈

随便推点

(解读)什么是渗透测试(Penetration Testing)?-程序员宅基地

文章浏览阅读5.4w次,点赞17次,收藏128次。(解读)什么是渗透测试(Penetration Testing)? 渗透测试(Penetration Testing),也称为Pen Testing,是测试计算机系统、网络或Web应用程序以发现攻击者可能利用的安全漏洞的实践。渗透测试可以通过软件应用自动化或手动执行。无论哪种方式,该过程都包括在测试之前收集关于目标的信息,识别可能的入口点,试图闯入(虚拟的或真实的)并报告结果。 让我们..._penetration test

不懂 Zookeeper?没关系,看这篇就够了-程序员宅基地

文章浏览阅读103次。点击上方“芋道源码”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2019 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络..._芋道 zookeepe

Spring基于XML配置AOP_spring aop xml配置-程序员宅基地

文章浏览阅读326次。......在切面内使用来定义切点,然后在通知中使用来指定切点。切点表达式用来匹配切入的目标类和方法。目标类只能是 Spring 容器管理的类,切面只能切入 Bean 中的方法。_spring aop xml配置

【C语言回顾】数组-程序员宅基地

文章浏览阅读1.6k次,点赞32次,收藏34次。各位小伙伴,大家好!话不多说,我们直接进入正题。以下是C语言数组的讲解。以上就是小编对C语言数组的讲解。如果觉得小编讲的还可以,还请一键三连!互三必回!持续更新中~!

tf.data.Dataset函数-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏11次。函数原型tf.data.Dataset( variant_tensor)函数说明通常使用tf.data.Dataset.from_tensor_slices函数来创建一个Dataset对象,Dataset用于表示一个数据集,这个数据集是可以迭代的。from_tensor_slices函数的原型为:from_tensor_slices(tensors, name=None),该函数的作用是将tensor张量在第一个维度上切分并转换成Dataset对象,包含多个元素。还有个类似的函数from_tf.data.dataset

Windows下 VSCode配置cuda编译环境_code runner cuda编程 windows-程序员宅基地

文章浏览阅读1.6w次,点赞16次,收藏51次。Windows系统下,在Visual Studio 里配置CUDA环境网上已经有很多资料了,而在轻量级IDE VScode上编译CUDA的材料不是很多,本篇博文将简要介绍在Windows 系统下配置CUDA环境的方法。一、VScode插件 code-runner法在VScode里安装插件——coder-runner,在settings.json里添加(win10下的)"code-runner.executorMap": { "cu": "cd $dir; nvcc $fileN_code runner cuda编程 windows

推荐文章

热门文章

相关标签