模型转换
模型转换简介:
- 模型转换过程是:先将模型量化成
int8
,int16
或者uint8
数据格式,再转换成基于平台运行的nbg
格式文件,并导出运行的case
代码.
量化简介:
- 量化是将以往用
32bit
或者64bit
表达的浮点数用16bit
,8bit
或者更低的2bit
方式进行存储
量化方式选取规则:
- 通常情况下,选择
uint8/int8
的方式均可.uint8
是google
推荐量化方式 - 一般建议不选取
int16
,相较8bit
量化,模型大一倍,并且在精度上没有明显的优势 - 参考模型前处理后的取值范围选择量化方式.比如,如果模型前处理后的取值范围为(0~255),此时建议直接选取
u8
的量化方式 - 先随便选择一种量化方式,执行完量化操作后,查看生成的
.quantize
文件,确认统计的max_value/min_value
,如果出现绝对值大于256
的情况,建议选取int16
方式量化,如果绝对值出现大于128
的情况,建议选取u8
量化方式,其他情况选择int8/u8
均可
参数:
--channel-mean-value
: 根据训练模型时预处理方式来设置该预处理的命令行参数.包括四个值(m1, m2, m3, scale)
.- 前三个值为均值参数,最后一个值为
scale
参数. - 如果前处理需要将数据归一化到
[-1, 1]
之间,参数设置为(128 128 128 0.0078125)
- 如果前处理需要将参数归一化到
[0, 1]
之间,参数设置为(0 0 0 0.00392156)
- 如果是单通道参数,设置方式为
(m1, 0, 0, scale)
- 最后一个数
scale
为小数,比如:0.0078125(1/128)
,0.00392156(1/256)
- 前三个值为均值参数,最后一个值为
--source-file dataset.txt
:中是给定的量化输入图片的路径.建议提供200张左右,同时也是模型使用运行场景的图片来进行量化,确保统计出的最大/最小值为实际运行场景的最大/最小值范围,这样量化效果会更佳--quantizer 和 --qtype
一起用于选择量化类型,支持的类型为:asymmetric_affine
: 对应qtype
选择设置uint8
dynamic_fixed_point
: 对应qtype
选择设置int8
或者int16
perchannel_symmetric_affine
:perchannel量化,对应qtype
设置int8
,当前只有E8对应芯片支持(当前A311D的板子是DOX88)
--rebuild
:默认参数,建议携带.在前后使用不同的量化方式进行量化时,如果没有手动删除已生成的.quantize文件,在没有携带该参数时,第二次量化未做任何处理--batch-size
和--iterations
:为多张图片量化时设置参数.如果图片数量为>1,需添加量化参数--batch-size(默认为1)
和--iterations(默认为1)
.iterations * batch_size = 图片数量
,例如:5000张图片,设置参数为:`–batch-size 100 –iterations 50
--optimize
:当前板子的版本对应VIPNANOQI_PID0X88
--viv-sdk
:依赖的sdk包,acuity_tool_xxx/bin目录下vcmdtools目录--pack-nbg-unify
:生成nbg文件