yolov3:ncnn之int8量化

笔者将yolov3基于darknet2ncnn在Android移植过程中发现yolov3的模型过大,导致加载不了,为了解决这个问题,笔者想到了int8量化操作,经过int8量化操作后,其模型由200M变为60多M,能顺利加载且精度基本没变,速度也有所提升。
下面将量化步骤和大家分享下:
1、下载合并darknet自定义层的ncnn:
https://github.com/xiangweizeng/ncnn
2、在tools文件夹下的CMakeLists.txt打开add_subdirectory(quantize)
在这里插入图片描述
3、编译ncnn

4、将darknet2ncnn下转换得到的 yolov3.bin和yolov3.param拷贝上面ncnn目录下build/tools路径下

5、运行

./ncnnoptimize yolov3.param yolov3.bin yolov3_new.param yolov3_new.bin 0

得到yolov3_new.bin和yolov3_new.param
yolov3:ncnn之int8量化_第1张图片
6、将第五步得到的两个文件拷贝到quantize文件夹下,运行

./ncnn2table --param=yolov3_new.param --bin=yolov3_new.bin --images=/home/lw/work/darknet/VOCdevkit/VOC0302/JPEGImages/ --output=yolov3.table --mean=0.0,0.0,0.0 --norm=0.003922,0.003922,0.003922 --size=416,416 

yolov3:ncnn之int8量化_第2张图片
yolov3:ncnn之int8量化_第3张图片
–images是训练的图片路径这一步时间比较长,耐心等待。

出现下面图的内容时,恭喜你成功了
yolov3:ncnn之int8量化_第4张图片
7、运行

./ncnn2int8 yolov3_new.param yolov3_new.bin yolov3-int8.param yolov3-int8.bin yolov3.table 

得到 yolov3-int8.param和yolov3-int8.bin
yolov3:ncnn之int8量化_第5张图片
8、将yolov3-int8.param和yolov3-int8.bin代入到darknet2ncnn工程下,运行得到结果:
yolov3:ncnn之int8量化_第6张图片
yolov3:ncnn之int8量化_第7张图片

你可能感兴趣的:(目标识别,yolov3,ncnn,深度学习)