【Atlas200】华为AIPP配置文件使用

news2024/11/24 15:42:16

目录

  • AIPP介绍
  • 图像处理顺序
  • 例子:YUV420SP_U8转BGR格式
  • 归一化配置对应公式
  • crop及padding功能
  • 配置生效
  • AIPP转换模板

AIPP介绍

华为的AIPP(AI Preprocessing)是一种面向AI应用的图像预处理技术,旨在提高AI应用的效率和精度。AIPP支持多种图像格式,包括RGB、YUV、BGR等,并提供了丰富的预处理选项,如色彩空间转换、缩放、裁剪、旋转、镜像、去噪、锐化等。AIPP还支持多张图片的批处理,可同时处理多张图片,提高处理效率。AIPP的工作流程主要包括三个阶段:预处理配置、数据传输和AIPP处理。预处理配置阶段用于设置AIPP的参数和配置选项,数据传输阶段将原始图像数据传输到AIPP模块,AIPP处理阶段对图像数据进行预处理操作。AIPP技术可以帮助开发者快速高效地完成图像预处理工作,减少代码量,提高代码的可读性和可维护性,同时也能提高AI应用的效率和精度。
与DVPP不同的是,AIPP主要用于在AI Core上完成数据预处理,DVPP是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力。

图像处理顺序

配置文件中的参数有如下处理顺序要求:通道交换(rbuv_swap_switch)>图像裁剪(crop )> 色域转换(通道交换) > 数据减均值/归一化 > 图像边缘填充(padding)。

例子:YUV420SP_U8转BGR格式

该场景以AIPP输入YUV420SP_U8(NV12)图像格式,输出BGR格式为例进行说明,输入图像尺寸为256*256;原始网络模型Caffe/TF的C=3,H和W与AIPP输入图像尺寸相同,该场景下无需配置抠图功能参数crop,但需要配置色域转换开关csc_switch和相应的CSC矩阵参数。

aipp_op {
    aipp_mode: static   #AIPP配置模式
    input_format: YUV420SP_U8  #输入给AIPP的原始图片格式
    csc_switch: true #色域转换开关,true表示开启色域转换
    # 如果输入的是YVU420SP_U8(NV21)图像,则需要将rbuv_swap_switch参数设置为true
    rbuv_swap_switch: false ##通道交换开关(R通道与B通道交换开关/U通道与V通道交换),本例中不涉及两个通道的交换,故设置为false,默认为false
    related_input_rank: 0
    src_image_size_w: 256 #输入给AIPP的原始图片宽高
    src_image_size_h: 256
    crop: false #抠图功能关
    matrix_r0c0: 298 #色域转换系数,用户无需修改
    matrix_r0c1: 516
    matrix_r0c2: 0
    matrix_r1c0: 298
    matrix_r1c1: -100
    matrix_r1c2: -208
    matrix_r2c0: 298
    matrix_r2c1: 0
    matrix_r2c2: 409
    input_bias_0: 16
    input_bias_1: 128
    input_bias_2: 128
    # 归一化系数需要根据用户模型实际需求配置,如下所取常见值仅作为示例
    # 归一化系数应用于色域转换和通道交换之后的通道
    mean_chn_0: 104
    mean_chn_1: 117
    mean_chn_2: 123
    min_chn_0: 0.0
    min_chn_1: 0.0
    min_chn_2: 0.0
    var_reci_chn_0: 1.0
    var_reci_chn_1: 1.0
    var_reci_chn_2: 1.0
}

归一化配置对应公式

pixel_out_chx(i)=[pixel_in_chx(i)-mean_chn_i-min_chn_i]*var_reci_chn

crop及padding功能

经过图像尺寸改变之后最终图片大小,需要跟模型文件输入的图像大小即–input_shape中的宽和高相等。
对于YUV420SP_U8图片类型,load_start_pos_w、load_start_pos_h参数必须配置为偶数。配置样例如下:
在这里插入图片描述
相关代码:

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_size: 15
    top_padding_size: 20
    bottom_padding_size: 15
    padding_value: 0

}

配置生效

在转换模型时使用:–insert_op_conf=$HOME/module/insert_op.cfg 使得AIPP最终生效。

atc --model=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel --framework=0 --insert_op_conf=$HOME/module/insert_op.cfg  --output=$HOME/module/out/caffe_resnet50 --soc_version=<soc_version>

Crop/Padding配置说明

AIPP转换模板

AIPP的配置以aipp_op开始,标识这是一个AIPP算子的配置,aipp_op支持配置多个

aipp_op {
#========================= 全局设置(start) ====================================
# aipp_mode指定了AIPP的模式,必须配置
# 类型:enum
# 取值范围:dynamic/static,dynamic 表示动态AIPP,static 表示静态AIPP
aipp_mode:  

# related_input_rank参数为可选,标识对模型的第几个输入做AIPP处理,从0开始,默认为0。例如模型有两个输入,需要对第2个输入做AIPP,则配置related_input_rank为1
# 类型: 整型
# 配置范围 >= 0
related_input_rank: 0

# related_input_name参数为可选,标识对模型的第几个输入做AIPP处理,此处需要填写为模型输入的name(input对应的值)或者模型首层节点的输出(top参数对应的取值)。该参数只适用于Caffe网络模型,且不能与related_input_rank参数同时使用。
# 例如模型有两个输入,且输入name分别为data、im_info,需要对第二个输入做AIPP,则配置related_input_name为im_info。
# 类型:string
# 配置范围:无
related_input_name: ""

#========================= 全局设置(end) =======================================================================================================================
#========================= 动态AIPP需设置,静态AIPP无需设置(start) ======================================================================================================================
# 输入图像最大的size,动态AIPP必须配置(如果为动态batch场景,N为最大档位数的取值)
# 类型:int
max_src_image_size: 0
# 若输入图像格式为YUV400_U8,则max_src_image_size>=N * src_image_size_w * src_image_size_h * 1。
# 若输入图像格式为YUV420SP_U8,则max_src_image_size>=N * src_image_size_w * src_image_size_h * 1.5。
# 若输入图像格式为XRGB8888_U8,则max_src_image_size>=N * src_image_size_w * src_image_size_h * 4。
# 若输入图像格式为RGB888_U8,则max_src_image_size>=N * src_image_size_w * src_image_size_h * 3。

# 是否支持旋转,保留字段,暂不支持该功能
# 类型:bool
# 取值范围:true/falsetrue表示支持旋转,false表示不支持旋转
support_rotation: false
#========================= 动态AIPP需设置,静态AIPP无需设置(end) =======================================================================================================================================

#========================= 静态AIPP需设置,动态AIPP无需设置 (start)======================================================================================================================================
# 输入图像格式,必选
# 类型: enum
# 取值范围:YUV420SP_U8、XRGB8888_U8、RGB888_U8、YUV400_U8
input_format: 
# 说明:模型转换完毕后,在对应的*.om模型文件中,上述参数分别以1234枚举值呈现。

# 原始图像的宽度、高度
# 类型:int32
# 取值范围 & 约束:宽度取值范围为[2,4096]0;高度取值范围为[1,4096]0,对于YUV420SP_U8类型的图像,要求原始图像的宽和高取值是偶数
src_image_size_w: 0
src_image_size_h: 0
# 说明:请根据实际图片的宽、高配置src_image_size_w和src_image_size_h;只有crop,padding功能都没有开启的场景,src_image_size_w和src_image_size_h才能取值为0或不配置,该场景下会取网络模型输入定义的w和h,并且网络模型输入定义的w取值范围为[2,4096],h取值范围为[1,4096]# C方向的填充值,保留字段,暂不支持该功能
# 类型: float16
# 取值范围:[-65504, 65504]
cpadding_value: 0.0

#========= crop参数设置(配置样例请参见AIPP配置 > Crop/Padding配置说明) =========
# AIPP处理图片时是否支持抠图
# 类型:bool
# 取值范围:true/falsetrue表示支持,false表示不支持
crop: false

# 抠图起始位置水平、垂直方向坐标,抠图大小为网络输入定义的w和h
# 类型:int32
# 取值范围 & 约束: [0,4095]、对于YUV420SP_U8类型的图像,要求取值是偶数
# 说明:load_start_pos_w<src_image_size_w,load_start_pos_h<src_image_size_h
load_start_pos_w: 0
load_start_pos_h: 0

# 抠图后的图像size
# 类型:int32
# 取值范围 & 约束: [0,4096]、load_start_pos_w + crop_size_w <= src_image_size_w、load_start_pos_h + crop_size_h <= src_image_size_h
crop_size_w: 0
crop_size_h: 0
说明:若开启抠图功能,并且没有配置padding,该场景下crop_size_w和crop_size_h才能取值为0或不配置,此时抠图大小(crop_size[W|H])的宽和高取值来自模型文件--input_shape中的宽和高,并且--input_shape中的宽和高取值范围为[1,4096]。

# 抠图约束如下:
# 若input_format取值为YUV420SP_U8,则load_start_pos_w、load_start_pos_h必须为偶数。
# 若input_format取值为其他值,对load_start_pos_w、load_start_pos_h无约束。
# 若开启抠图功能,则src_image_size[W|H] >= crop_size[W|H]+load_start_pos[W|H]。


#================================== resize参数设置 ================================
# AIPP处理图片时是否支持缩放,保留字段,暂不支持该功能
# 类型:bool
# 取值范围:true/falsetrue表示支持,false表示不支持
resize: false
 
# 缩放后图像的宽度和高度,保留字段,暂不支持该功能
# 类型:int32
# 取值范围 & 约束:resize_output_h:[16,4096]0;resize_output_w:[16,1920]0;resize_output_w/resize_input_w∈[1/16,16]、resize_output_h/resize_input_h∈[1/16,16]
resize_output_w: 0
resize_output_h: 0
# 说明:若开启了缩放功能,并且没有配置padding,该场景下resize_output_w和resize_output_h才能取值为0或不配置,此时缩放后图像的宽和高取值来自模型文件--input_shape中的宽和高,并且--input_shape中的高取值范围为[16,4096],宽取值范围为[16,1920]。


#======== padding参数设置(配置样例请参见AIPP配置 > Crop/Padding配置说明) =========
# AIPP处理图片时padding使能开关
# 类型:bool
# 取值范围:true/falsetrue表示支持,false表示不支持
padding: false
 
# H和W的填充值,静态AIPP配置
# 类型: int32
# 取值范围:[0,32]
left_padding_size: 0
right_padding_size: 0
top_padding_size: 0
bottom_padding_size: 0
# 说明:AIPP经过padding后,输出的H和W要与模型需要的H和W保持一致,其中W取值要<=1080。


# 上下左右方向上padding的像素取值,静态AIPP配置
# 类型:uint8/int8/float16
# 取值范围分别为:[0,255][-128, 127][-65504, 65504]
padding_value: 0
# 说明:该参数取值需要与最终AIPP输出图片的数据类型保持一致。


#================================ rotation参数设置 ==================================
# AIPP处理图片时的旋转角度,保留字段,暂不支持该功能
# 类型:uint8
# 范围:{0, 1, 2, 3} 0不旋转,1顺时针90°,2顺时针180°,3顺时针270°
rotation_angle: 0


#========= 色域转换参数设置(配置样例请参见AIPP配置 > 色域转换配置说明) =============
# 色域转换开关,静态AIPP配置
# 类型:bool
# 取值范围:true/falsetrue表示开启色域转换,false表示关闭
csc_switch: false

# R通道与B通道交换开关/U通道与V通道交换开关
# 类型:bool
# 取值范围:true/falsetrue表示开启通道交换,false表示关闭
rbuv_swap_switch :false

# RGBA->ARGB, YUVA->AYUV交换开关
# 类型:bool
# 取值范围:true/falsetrue表示开启,false表示关闭
ax_swap_switch: false

# 单行处理模式(只处理抠图后的第一行)开关,保留字段,暂不支持该功能
# 类型:bool
# 取值范围:true/falsetrue表示开启单行处理模式,false表示关闭
single_line_mode: false

# 若色域转换开关为false,则本功能不起作用。
# 若输入图片通道数为4,则忽略A通道或X通道。
# YUV转BGR:
# | B |   | matrix_r0c0 matrix_r0c1 matrix_r0c2 | | Y - input_bias_0 |
# | G | = | matrix_r1c0 matrix_r1c1 matrix_r1c2 | | U - input_bias_1 | >> 8
# | R |   | matrix_r2c0 matrix_r2c1 matrix_r2c2 | | V - input_bias_2 |
# BGR转YUV:
# | Y |   | matrix_r0c0 matrix_r0c1 matrix_r0c2 | | B |        | output_bias_0 |
# | U | = | matrix_r1c0 matrix_r1c1 matrix_r1c2 | | G | >> 8 + | output_bias_1 |
# | V |   | matrix_r2c0 matrix_r2c1 matrix_r2c2 | | R |        | output_bias_2 |

# 3*3 CSC矩阵元素
# 类型:int16
# 取值范围:[-32677 ,32676] 
matrix_r0c0: 298
matrix_r0c1: 516
matrix_r0c2: 0
matrix_r1c0: 298
matrix_r1c1: -100
matrix_r1c2: -208
matrix_r2c0: 298
matrix_r2c1: 0
matrix_r2c2: 409

# RGB转YUV时的输出偏移
# 类型:uint8
# 取值范围:[0, 255]
output_bias_0: 16
output_bias_1: 128
output_bias_2: 128

# YUV转RGB时的输入偏移
# 类型:uint8
# 取值范围:[0, 255]
input_bias_0: 16
input_bias_1: 128
input_bias_2: 128


#============================== 减均值、乘系数设置 =================================
# 计算规则如下:
# 当uint8->uint8时,本功能不起作用
# 当uint8->fp16时,pixel_out_chx(i) = [pixel_in_chx(i) – mean_chn_i – min_chn_i] * var_reci_chn

# 每个通道的均值
# 类型:uint8
# 取值范围:[0, 255]
mean_chn_0: 0
mean_chn_1: 0
mean_chn_2: 0
mean_chn_3: 0

# 每个通道的最小值
# 类型:float16
# 取值范围:[0, 255]
min_chn_0: 0.0
min_chn_1: 0.0
min_chn_2: 0.0
min_chn_3: 0.0

# 每个通道方差的倒数
# 类型:float16
# 取值范围:[-65504, 65504]
var_reci_chn_0: 1.0
var_reci_chn_1: 1.0
var_reci_chn_2: 1.0
var_reci_chn_3: 1.0
}

#========================= 静态AIPP需设置,动态AIPP无需设置 (end)=====================================================================================================================================

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言深度解析--数组

目录 一维数组的创建与初始化 一维数组的创建&#xff1a; 一维数组的初始化&#xff1a; 一维数组的使用&#xff1a; 一维数组在内存中的存储&#xff1a; 二维数组的创建与初始化 二维数组的创建&#xff1a; 二维数组的初始化&#xff1a; 二维数组的使用&#xf…

是面试官放水,还是公司太缺人了?华为原来这么容易就进了...

华为是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在华为做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有9.5K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在字节和腾…

以“智”提质丨信创呼叫

随着人工智能、大数据、云计算等新兴技术飞速发展&#xff0c;呼叫中心、全媒体智能客服等现已被广泛应用于多个行业领域。其中&#xff0c;呼叫中心作为政企对外服务的重要窗口&#xff0c;已从“传统电话营销”发展到“智能呼叫中心”阶段&#xff0c;以客户服务为核心&#…

Windows下Elasticsearch下载安装

Windows下Elasticsearch下载安装 最近搭一个语义搜索web需要用到es。 1.下载 下载地址&#xff1a;官网下载地址 下载zip格式解压就行&#xff0c;这里我下载的是8.7.1 1.1解压启动 解压之后&#xff0c;进入elasticsearch的bin目录&#xff0c;通过点击elasticsearch.ba…

0基础学习VR全景平台篇第28章:场景管理—遮罩功能

本期为大家带来蛙色VR平台&#xff0c;场景管理模块-遮罩功能&#xff01; 功能位置示意 一、本功能将用在哪里&#xff1f; 遮罩分为两种&#xff0c;分别是地面遮罩和天空遮罩。 地面遮罩位于全景图底部的正中间&#xff0c;天空遮罩位于全景图顶部的正中间。 遮罩一方面可…

已解决python使用pymysql向mysql数据库插入数据报错pymysql.err.DataError: (1366, ‘‘)

已解决&#xff0c;在python代码是使用pymysql向mysql数据库插入数据时报错pymysql.err.DataError: (1366, ) 问题描述 我从某个网页上抓取并解析了一段html代码&#xff0c;然后将html代码转为utf-8格式&#xff0c;之后将html代码作为数据表的一个属性存入mysql数据库中&…

代码签名证书,保护应用程序安全性

在现代IT环境中&#xff0c;有大量不同的方式可以用来确保应用程序的安全性。其中一个就是从源头开始&#xff0c;让应用程序开发者能够对他们的代码进行数字签名&#xff0c;从而确保给定应用程序的完整性和真实性。 一直以来&#xff0c;认证机构安理会&#xff08;CASC&…

2023年必备的10款交互设计软件

交互设计可以帮助明确产品需求和功能、进行用户测试和获取反馈、减少开发成本、促进团队合作&#xff0c;并在展示和推销产品时起到关键作用。通过有效的产品交互设计&#xff0c;可以提高产品的质量、用户体验和市场竞争力。 什么是产品交互设计&#xff1f; 产品交互设计是…

Linux查看磁盘利用率(iostat)

使用iostat命令可以查看磁盘的负载情况。iostat命令可以显示磁盘的I/O统计信息&#xff0c;包括磁盘的读写速度、I/O请求队列长度、CPU利用率等。 参数 Device&#xff1a;磁盘分区的名称。rrqm/s&#xff1a;每秒钟合并的读请求。wrqm/s&#xff1a;每秒钟合并的写请求。r/s…

11-FastDFS文件服务器 和 Nginx

1、什么是FastDFS 1、开源的轻量级分布式文件系统,用于解决大数据量存储和负载均衡等问题。 2、优点: 支持HTTP协议传输文件(结合Nginx); 对文件内容做Hash处理,节约磁盘空间; 支持负载均衡、整体性能较佳。 3、FastDFS的二个角色:跟踪服务器(Tracker)、存储服务器…

StringBuffer与StringBuilder的区别

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;StringBuffer与StringBuilder的区别 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你…

档案馆库房温湿度监控系统简单介绍

智慧档案馆八防一体化监控系统 智慧档案平台/温湿度/空气质量/漏水/视频/门禁/一体化管控平台 HONSOR多维空间可视化智慧档案库房建设一体化平台分享 三维可视化智慧档案馆库房一体化环境安全管控系统平台 1.系统告警要求&#xff1a; &#xff08;1&#xff09;告警方式&am…

[PCIE733]基于PCI Express总线架构的2路160MSPS AD采集、12路LVDS图像数据采集卡

板卡概述 PCIE733是一款基于PCI Express总线架构的&#xff0c;实现2路16-bit、160MSPS ADC采集功能、12路LVDS数据采集板卡。该板卡遵循PCI Express 2.0规范&#xff0c;全高半长尺寸&#xff0c;板卡采用Xilinx的28nm高性能FPGA处理器XC7K325T作为主控制器&#xff0c;板卡AD…

【dfs序+线段树】P3178 [HAOI2015]树上操作

这道题&#xff0c;昨天调到一点多都没调出来&#xff0c;眼睛都要瞎了 今天看着题解边看边调出来了&#xff0c;但是还是感觉不是很会 m d&#xff0c;学的第一道关于树的DS就搞成这样 感觉很寄啊 P3178 [HAOI2015]树上操作 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)…

事务、分布式事务以及seata

事务 事务就是用户定义的一系列数据库操作&#xff0c;这些操作可以视为一个完成的逻辑处理工作单元&#xff0c;要么全部执行&#xff0c;要么全部不执行&#xff0c;是不可分割的工作单元。 事务的四个特效ACID Atomic 原子性&#xff0c;原子性是指事务必须是一个原子的操…

手摸手教你Vite+Vue3项目初始化及开源部署到GItee

项目初始化 本片文章主要记录项目的环境&#xff0c;项目搭建。 在开始本次学习中&#xff0c;鉴于你有前端三件套和vue的知识基础。 文档创建于2023年5月20日&#xff0c;大家都去过情人节了~我在肝代码&#xff01; 环境的搭建 node版本使用18.16.0。 目前&#xff08;202…

重磅!超星未来发布全新NOVA-ADCU智能驾驶参考方案

近日&#xff0c;超星未来重磅发布基于惊蛰R1芯片面向多场景打造的全新NOVA-ADCU智能驾驶参考方案&#xff0c;并亮相科技成果展。方案覆盖高阶行泊一体、轻量级行泊一体、双目智驾、路侧感知等场景&#xff0c;携手产业链上下游伙伴构建开放共赢的智能驾驶新生态。 以智能驾驶…

一种新的算法模型,填补微生物组纵向研究数据中的缺失值

谷禾健康 微生物组的纵向研究是一种长期跟踪微生物组变化的研究方法。在这类研究中&#xff0c;样本从同一人群或个人中多次采集&#xff0c;通过检测样本中微生物群落丰度的变化&#xff08;如不同菌群的比例和种类&#xff09;&#xff0c;来了解微生物组随时间的变化趋势和特…

【LeetCode225.用队列实现栈】你足够了解栈和队列吗?

​ 你好&#xff0c;欢迎来到我的博客&#xff01;作为一名程序员&#xff0c;我经常刷LeetCode题目来提升自己的编程能力。在我的博客里&#xff0c;我会分享一些我自己做过的题目和解题思路&#xff0c;希望能够帮助到大家。今天&#xff0c;我想和大家分享一道挑战性较高的题…

ApplicationRunner使用

本文来说下CommandLineRunner和ApplicationRunner的使用 文章目录 ApplicationRunner使用示例程序结果 CommandLineRunner使用示例程序结果 ApplicationListener触发时机使用实例程序结果注意问题 ApplicationRunner 使用起来很简单&#xff0c;只需要实现CommandLineRunner或者…