news 2026/4/18 12:56:59

【华为昇腾DVPP/AIPP学习篇】(2)AIPP的使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【华为昇腾DVPP/AIPP学习篇】(2)AIPP的使用

文章目录

  • 1 概要
  • 2 AIPP
    • 2.1 什么是AIPP
    • 2.2 AIPP都能做什么
    • 2.3 如何使用AIPP的功能
      • 2.3.1 静态AIPP
      • 2.3.2 动态AIPP
  • 3 本工程引入AIPP
    • 3.1 aipp.cfg配置文件
    • 3.2 推理过程函数更改
  • 4 总结
  • 5 其他章节

1 概要

最近博主准备了一个可以检测车辆的网络模型,准备部署到华为和香橙派联合出版的香橙派 Ai Pro上(Oriange Pi Ai Pro),此推理板使用的是Ascend3130B4的芯片。其中,博主学习CANN
的相关知识以满足模型优化的需求。

具体的学习路径如下:

  1. 项目介绍
  2. 项目优化(AIPP的使用)
  3. 项目再次优化(AIPP+DVPP的使用)

硬件环境:

  1. 香橙派AI Pro (Ubuntu) : 用于部署最终的模型
  2. 宿主机(Windows):用于编写代码

整体流程:
在宿主机上编写完程序后通过Mobaxterm的SSH将文件上传到香橙派上,随后进行模型转换(.ONNX->.om),最后实现运行

2 AIPP

2.1 什么是AIPP

受网络结构和训练方式等因素的影响,绝大多数神经网络模型对输入数据都有格式上的限制。在计算机视觉领域,这个限制大多体现在图像的尺寸、色域、归一化参数等。如果源图或视频的尺寸、格式等与网络模型的要求不一致时,我们需要对其处理,使其符合模型的要求,这个操作,一般称之为数据预处理。

2.2 AIPP都能做什么


总结一下,虽然都是数据预处理,但AIPP与DVPP的功能范围不同(比如DVPP可以做图像编解码、视频编解码,AIPP可以做归一化配置),处理数据的计算单元也不同,AIPP用的AI Core计算加速单元,DVPP就是用的专门的图像处理单元。

AIPP、DVPP可以分开独立使用,也可以组合使用。组合使用场景下,一般先使用DVPP对图片/视频进行解码、抠图、缩放等基本处理,但由于DVPP硬件上的约束,DVPP处理后的图片格式、分辨率有可能不满足模型的要求,因此还需要再使用AIPP进行色域转换、抠图、填充等处理。

例如,在昇腾310 AI处理器,由于DVPP仅支持输出YUV格式的图片,如果模型需要RGB格式的图片,则需要再使用AIPP进行色域转换。

2.3 如何使用AIPP的功能

下文以此为例:测试图片分辨率为250250、图片格式为YUV420SP,模型对图片的要求为分辨率224224、图片格式为RGB,因此需要通过AIPP实现抠图、图片格式转换2个功能。关于各种格式转换,其色域转换系数都有模板,可从《ATC工具使用指南》获取,参见“昇腾文档中心”。

2.3.1 静态AIPP

  1. 构造AIPP配置文件*.cfg。
    抠图:有效数据区域从左上角(0, 0)像素开始,抠图宽高为224224。
    图片格式转换:输入图片格式为YUV420SP_U8,输出图片格式通过色域转换系数控制。
aipp_op{aipp_mode:static # AIPP配置模式input_format:YUV420SP_U8 # 输入给AIPP的原始图片格式src_image_size_w:250 # 输入给AIPP的原始图片宽高src_image_size_h:250crop:true # 抠图开关,用于改变图片尺寸load_start_pos_h:0 # 抠图起始位置水平、垂直方向坐标load_start_pos_w:0crop_size_w:224 # 抠图宽、高crop_size_h:224csc_switch:true # 色域转换开关matrix_r0c0:256 # 色域转换系数matrix_r0c1:0matrix_r0c2:359matrix_r1c0:256matrix_r1c1:-88matrix_r1c2:-183matrix_r2c0:256matrix_r2c1:454matrix_r2c2:0input_bias_0:0input_bias_1:128input_bias_2:128}
  1. 使能静态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处理器的版本,例如Ascend310。 - model:原始网络模型文件路径,含文件名。 - insert_op_conf:AIPP预处理配置文件路径,含文件名。 - output:转换后的*.om模型文件路径,含文件名,转换成功后,文件名自动以.om后缀结尾。
  1. 调用AscendCL接口加载模型,执行推理。

2.3.2 动态AIPP

  1. 构造AIPP配置文件*.cfg。
aipp_op{aipp_mode:dynamicmax_src_image_size:752640 # 输入图像最大内存大小,需根据实际情况调整}
  1. 使能动态AIPP。
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处理器的版本,例如Ascend310。 - model:原始网络模型文件路径,含文件名。 - insert_op_conf:AIPP预处理配置文件路径,含文件名。 - output:转换后的*.om模型文件路径,含文件名,转换成功后,文件名自动以.om后缀结尾。
  1. 调用AscendCL接口加载模型,设置AIPP参数后,再执行推理。
    模型加载、执行可从参考往期的技术文章,请参见“基于昇腾计算语言AscendCL开发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);

3 本工程引入AIPP

本工程引入静态的AIPP

3.1 aipp.cfg配置文件

aipp_op{aipp_mode:staticinput_format:RGB888_U8 # 这里保持 RGB888_U8,表示输入是打包的3通道图像src_image_size_w:640 # 模型输入的宽src_image_size_h:640 # 模型输入的高 # 【关键点】开启 R 和 B 通道交换 # 你的输入是 BGR(OpenCV默认),开启这个后,AIPP 会把它转成 RGB 喂给模型rbuv_swap_switch:true # 归一化配置(根据你的模型需求)# 假设模型需要 input / 255.0mean_chn_0:0mean_chn_1:0mean_chn_2:0min_chn_0:0.0min_chn_1:0.0min_chn_2:0.0var_reci_chn_0:0.003921568627451var_reci_chn_1:0.003921568627451var_reci_chn_2:0.003921568627451}

3.2 推理过程函数更改

原来的推理前处理部分:

defpreprocess(self,img_data = None):""" 对输入图像进行预处理,以便进行推理。 返回:image_data:经过预处理的图像数据,准备进行推理。""" if img_data isNone:print("error img datas, please check again")#获取输入图像数据 self.img = img_data # 获取输入图像的高度和宽度 self.img_height,self.img_width = img_data.shape[1],img_data.shape[0] # 将图像颜色空间从 BGR 转换为 RGB img = cv2.cvtColor(self.img,cv2.COLOR_BGR2RGB)# 保持宽高比,进行 letterbox 填充,使用模型要求的输入尺寸 img,self.ratio,(self.dw,self.dh)= self.letterbox(img,new_shape=(self.input_width,self.input_height))# 通过除以 255.0 来归一化图像数据 image_data = np.array(img)/ 255.0 # 将图像的通道维度移到第一维 image_data = np.transpose(image_data,(2,0,1))# 通道优先 # 扩展图像数据的维度,以匹配模型输入的形状 image_data = np.expand_dims(image_data,axis=0).astype(np.float32)# 返回预处理后的图像数据 return image_data

现在的推理前处理部分

defpreprocess(self,img_data):# 1. 检查数据 if img_data isNone:print("error img datas")return None # 2. Resize(Letterbox)# img 是 3D数组:(640,640,3)img,self.ratio,(self.dw,self.dh)= self.letterbox(img_data,new_shape=(self.input_width,self.input_height))# 【关键修复1】self.img 用于后续画图,必须保持 3D(H,W,C)self.img = img # 3. 准备推理数据(增加 Batch 维度)# image_data 是 4D数组:(1,640,640,3)image_data = np.expand_dims(img,axis=0)# 【关键修复2】强制内存连续并深拷贝 # 很多时候 invalid input size 是因为 numpy 数组仅仅是一个 view(视图), # 导致传给 C++ 层的指针指向了错误的内存地址或长度。 if not image_data.flags['C_CONTIGUOUS']:image_data = np.ascontiguousarray(image_data)# 强制做一次 copy,确保它是独立的内存块(解决 5769 size error 的绝招)image_data = image_data # 【调试打印】如果还报错,请看终端打印的这个大小是否为 1228800 #print(f"DEBUG: Input shape: {image_data.shape}, Bytes: {image_data.nbytes}")return image_data

注意:AIPP的调用时刻:
outputs = model.execute([img_data, ]),调用这个二函数后会将图像传给AI Core处理,之后再传回给模型进行推理。

4 总结

本章节讲述了如何在模型推理的过程中使用AIPP。

5 其他章节

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:35:09

1688品类API:蓝海市场发现,新机会挖掘!

在当今竞争激烈的电商市场中,发现蓝海市场(即未饱和、低竞争高需求的市场)成为企业增长的关键。1688作为阿里巴巴旗下的批发平台,其品类API提供了丰富的商品数据,帮助开发者通过技术手段高效挖掘市场机会。本文将逐步介…

作者头像 李华
网站建设 2026/4/18 8:44:14

HTML5 入门简介

HTML5 简介 HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定。 HTML5的设计目的是为了在移动设备上支持多媒体。 HTML5 简单易学。 什么是 HTML5? HTML5 是下一代 HTML 标准。 HTML , HTML 4.01的上一个版本诞生于 …

作者头像 李华
网站建设 2026/4/18 8:06:48

导师推荐8个AI论文工具,助你轻松搞定本科毕业论文!

导师推荐8个AI论文工具,助你轻松搞定本科毕业论文! AI 工具助力论文写作,轻松应对学术挑战 随着人工智能技术的不断进步,越来越多的本科生开始借助 AI 工具来提升论文写作效率。无论是内容生成、逻辑梳理还是语言润色&#xff0…

作者头像 李华
网站建设 2026/4/18 7:19:19

【Vue】脚手架 v-html v-text v-bind v-on v-show v-if v-for v-model

文章目录 Ⅰ. 脚手架一、Vue开发方式1. 传统开发模式2. 工程化开发模式 二、准备工程化环境1. 安装 Nodejs2. 安装 yarn 或 pnpm 三、创建Vue工程化项目四、认识脚手架目录及文件五、分析3个入口文件的关系六、Vue单文件七、setup简写 插值表达式 响应式1. 传统写法2. 现代写…

作者头像 李华