【yolov4-tiny】三、NNIE小结

【yolov4-tiny】一、darknet->caffe
【yolov4-tiny】二、pytorch->onnx->caffe

前文使用两种途径将yolov4-tiny转为caffe,此后只需根据海思的HiSVP开发指南.pdf操作将caffe转为nnie,本文记录几点注意事项:

1、输入预处理

nnie_mapper 配置选项中配置了输入图片归一化的话,不需要在模型代码中自己再写一遍归一化。

nnie模型的默认输入为BGR格式,nnie_mapper 配置选项中配置了 RGB 的话模型会自己进行一次通道变换,nnie_mapper 配置选项中配置了 BGR 的话模型对输入不会做额外处理,所以使用模型时我们送给模型的输入一般用 BGR就好。

使用模型时,nnie输入图片为chw格式,opencv读取图片为hwc格式,需要自己做个维度变换再输入。

量化时,nnie_mapper不会对输入图片做resize,需要提前把图片resize好再输入。

2、量化

非饱和均匀量化在模型数据分布不均匀的时候(例如coco数据集),会导致量化后的模型精度与量化前的模型精度相差甚远。

拿Tengine框架做 yolov4-tiny 在 cocoval2017 数据集下的量化测试,在不同量化图片数量下测得 mAP50 如下,其中500张和1000张图片为cocoval2017里随意选择的。

量化方式MIN_MAXACIQKL
500张图片15.7%24.6%34.9%
1000张图片22.5%28.4%36.4%
5000张图片0.5%0.78%36.9%

时间上当然是MIN_MAX最快,ACIQ其次,KL最慢。

参考文章:NNIE量化算法及实现,NNIE使用量化公式如下:
nnie量化公式
NNIE使用指数分布量化,量化速度也慢,但对分布不均匀的数据集也有很好的效果,使用5000张图片量化和使用精选400张图片量化效果基本一致。

3、ReLU和leaky ReLU的影响

偶然间发现不同激活函数在NNIE上量化后的精度损失不同,实验结果如下,使用yolov4-tiny训练coco person单类别的AP50。

激活函数ReLUleaky ReLU
Pytorch72.0%72.1%
NNIE69.0%57.8%

原本以为是leaky ReLU层有问题,单独使用一个leaky ReLU做测试发现量化前后数据差别并不大,cos sim能达到0.9999,百思不得解,最后在大佬的博客里发现了原因:海思开发:relu、relu6 在量化前后的精度变化及原因思考

文中说到 ReLU 导致权值范围相差过大,而使用 ReLU6 则缓解了这一现象,那么用在这里也有可能是 leaky ReLU 导致权值范围相差过大,而使用 ReLU 则缓解了这一现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值