Tencent / ncnn

ncnn is a high-performance neural network inference framework optimized for the mobile platform
Other
20.58k stars 4.18k forks source link

yolov5通过onnx2ncnn部署到armv8 cpu后丢精度 #4736

Open jia0511 opened 1 year ago

jia0511 commented 1 year ago

通过yolov5官方训练自己的数据后,转ncnn进行部署,发现存在丢进度问题,对比图片如下第一张为训练后使用yolov5 val.py脚本测试结果,第二张为运行转换后的模型测试结果, 微信图片_20230518151421

微信图片_20230518151429

yolov5部署代码完全套用官方yolov5.cpp文件,转换流程如下:

2、根据NCNNyolo-v5代码指示下载模型转换onnx代码

git clone https://github.com/shaoshengsong/yolov5_62_export_ncnn

根据指示导出简化后onnx

python export.py --weights yolov5s_v6.2.pt --img 640 --batch 1 --include onnx --simplify

3、编译NCNN后获得onnx2ncnn工具执行FP32转换

./onnx2ncnn yolov5s_v6.2.onnx yolov5s_v6.2.param yolov5s_v6.2.bin

4、通过编译NCNN后获得ncnnoptimize工具执行FP16转换

./ncnnoptimize yolov5s_v6.2.param yolov5s_v6.2.bin yolov5s_v6.2_fp16.param yolov5s_v6.2_fp16.bin 65535

执行这条命令后需要修改模型的三处reshape输出,参考这里

jia0511 commented 1 year ago

已经尝试过https://github.com/Tencent/ncnn/wiki/FAQ-ncnn-produce-wrong-result#disable-fp16里方法

boboding commented 1 year ago

@jia0511 用yolov5 6.2里哪个版本是s还是其他版,按照官网做法使用s版本,IOU,置信度的设置都相同,在arm64下没有发现有大的精度损失,如果是其他版本就需要根据实际情况改IOU,置信度的值

nihui commented 3 months ago

针对onnx模型转换的各种问题,推荐使用最新的pnnx工具转换到ncnn In view of various problems in onnx model conversion, it is recommended to use the latest pnnx tool to convert your model to ncnn

pip install pnnx
pnnx model.onnx inputshape=[1,3,224,224]

详细参考文档 Detailed reference documentation https://github.com/pnnx/pnnx https://github.com/Tencent/ncnn/wiki/use-ncnn-with-pytorch-or-onnx#how-to-use-pnnx