yolov5量化

量化过程:

        模型提取: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

yolov5量化_第1张图片

 三、转化为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/路径下

yolov5量化_第2张图片

yolov5ss.bin和yolov5ss.param是新得到的

cd /home/ding/下载/ncnn-master/build/tools/

把刚才生成的yolov5ss.bin和yolov5ss.param复制到该路径下

yolov5量化_第3张图片

新生成yolov5-lite-opt.bin和yolov5-lite-opt.param

为了实现动态尺寸图片处理,需要对yolov5ss-opt.param的reshape操作进行修改:

yolov5量化_第4张图片

把以上三处reshape的尺度统统改成-1:

yolov5量化_第5张图片

四、处理修改

ncnn官方的yolov5.cpp需要修改两处地方

yolov5量化_第6张图片

yolov5量化_第7张图片

anchor信息是在 models/yolov5ss-1.0.yaml,需要根据自己的数据集聚类后的anchor进行对应的修改:

 yolov5量化_第8张图片

修改以下部分,修改三处对应于permute的三处

 yolov5量化_第9张图片

 yolov5量化_第10张图片

五、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
 

yolov5量化_第11张图片

 yolov5量化_第12张图片

 yolov5量化_第13张图片

 yolov5量化_第14张图片

 实现了!!!

你可能感兴趣的:(pytorch,目标检测)