笔者将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
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
–images是训练的图片路径这一步时间比较长,耐心等待。
出现下面图的内容时,恭喜你成功了
7、运行
./ncnn2int8 yolov3_new.param yolov3_new.bin yolov3-int8.param yolov3-int8.bin yolov3.table
得到 yolov3-int8.param和yolov3-int8.bin
8、将yolov3-int8.param和yolov3-int8.bin代入到darknet2ncnn工程下,运行得到结果: