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

2023-11-05 16:50

本文主要是介绍【Atlas200】华为AIPP配置文件使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 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参数设置为truerbuv_swap_switch: false ##通道交换开关(R通道与B通道交换开关/U通道与V通道交换),本例中不涉及两个通道的交换,故设置为false,默认为falserelated_input_rank: 0src_image_size_w: 256 #输入给AIPP的原始图片宽高src_image_size_h: 256crop: false #抠图功能关matrix_r0c0: 298 #色域转换系数,用户无需修改matrix_r0c1: 516matrix_r0c2: 0matrix_r1c0: 298matrix_r1c1: -100matrix_r1c2: -208matrix_r2c0: 298matrix_r2c1: 0matrix_r2c2: 409input_bias_0: 16input_bias_1: 128input_bias_2: 128# 归一化系数需要根据用户模型实际需求配置,如下所取常见值仅作为示例# 归一化系数应用于色域转换和通道交换之后的通道mean_chn_0: 104mean_chn_1: 117mean_chn_2: 123min_chn_0: 0.0min_chn_1: 0.0min_chn_2: 0.0var_reci_chn_0: 1.0var_reci_chn_1: 1.0var_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: staticinput_format: YUV420SP_U8src_image_size_w: 320  src_image_size_h: 240crop: trueload_start_pos_w: 10load_start_pos_h: 20crop_size_w: 50crop_size_h: 60padding: trueleft_padding_size: 20right_padding_size: 15top_padding_size: 20bottom_padding_size: 15padding_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)=====================================================================================================================================

这篇关于【Atlas200】华为AIPP配置文件使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351200

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念