量化过程:
模型提取:onnx
模型转化:ncnn
int8量化
一、环境
shufflev2-yolov5的源码和权重 地址链接:https://github.com/ppogg/shufflev2-yolov5
ncnn部署:Linux环境下ncnn安装+protobuf+opencv_zhangxue1232的博客-CSDN博客
二、onnx模型提取
cd /home/ding/zhangxue/YOLOv5-Lite/YOLOv5-Lite/ #将.pt文件用onnx转化为.onnx文件 python models/export.py --weights weights/v5lite-s.pt --img 640 --batch 1 #onnxsim 精简模型 python -m onnxsim weight/v5lite-s.onnx weight/yolov5-lite-sim.onnx
三、转化为ncnn模型
cd /home/ding/zhangxue/YOLOv5-Lite/ncnn-master/build/tools/onnx/
./onnx2ncnn yolov5-lite-sim.onnx yolov5ss.param yolov5ss.bin
把yolov5-lite-sim.onnx模型复制到ncnn-master/build/tools/onnx/路径下
yolov5ss.bin和yolov5ss.param是新得到的
cd /home/ding/下载/ncnn-master/build/tools/
把刚才生成的yolov5ss.bin和yolov5ss.param复制到该路径下
新生成yolov5-lite-opt.bin和yolov5-lite-opt.param
为了实现动态尺寸图片处理,需要对yolov5ss-opt.param的reshape操作进行修改:
把以上三处reshape的尺度统统改成-1:
四、处理修改ncnn官方的yolov5.cpp需要修改两处地方
anchor信息是在 models/yolov5ss-1.0.yaml,需要根据自己的数据集聚类后的anchor进行对应的修改:
修改以下部分,修改三处对应于permute的三处
五、Int8量化
-
校验表数据集请使用coco_val那5000张数据集;
-
mean和val的数值需要和原先自己训练模型时候设定的数值保持一致,在yolov5ss.cpp里也需要保持一致;
/ncnn-master/build/tools/quantize/
find images/ -type f > imagelist.txt ./ncnn2table yolov5ss-opt.param yolov5ss-opt.bin imagelist.txt yolov5ss.table mean=[104,117,123] norm=[0.017,0.017,0.017] shape=[640,640,3] pixel=BGR thread=8 method=kl ./ncnn2int8 yolov5ss-opt.param yolov5ss-opt.bin yolov5ss-opt-int8.param yolov5ss-opt-int8.bin yolov5ss.table
实现了!!!



