一、ONNX 模型转换
1、下载yolov7
下载yolov7.pt权重文件和yolov7代码。
2、打开model/yolo.pt文件
在文件中搜索 permute,一共有8处,这里是修改模型输出节点维度信息。
其中7处按照以下修改
#x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
x[i] = x[i].permute(0, 2, 3, 1).contiguous()
1处按照以下修改:
# x[i+self.nl] = x[i+self.nl].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
x[i+self.nl] = x[i+self.nl].permute(0, 2, 3, 1).contiguous()
3、打开 export.py文件,将opset_version=12中的12替换为11
torch.onnx.export(model, img, f, verbose=False, opset_version=11, input_names=['images'],
output_names=['classes', 'boxes'] if y is None else ['output'])
在命令行进入自己的虚拟环境,进行模型转换
python export.py --weights ./weights/yolov7.pt --batch-size 1
转换后的模型
二、模型量化
将刚才生成的yolov7.onnx文件放入J5开发机的/home/user/horizon_j5_open_explorer_v1.1.68-py38_20231014/ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/yolov7/mapper中,yolov7这个文件夹是我根据/home/user/horizon_j5_open_explorer_v1.1.68-py38_20231014/ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/03_yolov5x修改的
yolov7文件夹我放在了网盘:
在docker环境中进入刚才放onnx文件的位置
1.模型校验 01_check.sh
2.准备校准数据 02_preprocess.sh
3.模型编译 03_build.sh
这个过程比较慢
经过13分钟,编译完成
4.模型推理校验 04_inference.sh
在model_output文件夹下会生成量化完成的模型文件
运行04_inference.sh使用原onnx或量化后的onnx模型进行推理测试
sh 04_inference.sh origin #推理原模型
sh 04_inference.sh quanti #推理量化后的模型