AX620A转换yolo系列模型踩坑

AX620A转换yolo系列模型踩坑


前言

去年记录了如何在ax620a下使用工具链转换自训练yolov5模型:AX620A运行yolov5s自训练模型全过程记录
但今天由于各种环境发生变化了,再去这样转换的话,就会报错失败。
在这里插入图片描述
经过一番查找,发现是pytorch版本更新导致的。其实社区有文章已经更新了yolov5和yolov8的模型转换方法,但是仍然有坑点,如果不注意的话还是会失败。


一、YOLOV5转换

社区文章看这里:[m3axpi] YOLOv5训练到部署全流程
其实主要问题就是pytorch版本不能大于1.13.0。如果是使用1.13.0之后版本的话,按照文章第二种方法,使用onnx-modifier图形化工具删去后处理算子。但在编辑完成下载新模型时,一定要勾选shape infrernceclean up两个选项,再download导出,否则转换时还是会报错失败。
在这里插入图片描述

二、YOLOV8转换

社区文章看这里:[m3axpi] YOLOv8训练到部署全流程
这里的坑就比较大了。训练好模型后,按照文章修改好class Detect(nn.Module)exporter.py后,导出模型并没有任何改变。
这里的原因是文章里面的导出是使用了yolo这个命令行工具,因为这个是先前编译安装或者是通过pip下载的,之后再修改源码肯定没用。正确做法应该是用python脚本导出。 ( 注:在 y o l o v 8 最新的代码里,检测模型的 h e a d 定义在了 u l t r a l y t i c s / n n / m o d u l e s / h e a d . p y 文件里面 (\color{red}{注:在yolov8最新的代码里,检测模型的head定义在了ultralytics/nn/modules/head.py文件里面} 注:在yolov8最新的代码里,检测模型的head定义在了ultralytics/nn/modules/head.py文件里面

  1. 在yolov8仓库根目录下新建一个export.py文件
from ultralytics import YOLO
# Load a model
model = YOLO('./runs/detect/train/weights/best.pt')  # load an official model
# Export the model
model.export(format='onnx', opset=11)

2.命令行下执行

python export.py

这样导出的模型才是删除了后处理能正确转换的。
在这里插入图片描述
不过这个yolov8的转换时间是真xx长啊,用12代i5cpu转换一共花了好几个小时才完成%¥#!这个pulsar真是个弱鸡,全程只能吃单线程。。。

猜你喜欢

转载自blog.csdn.net/flamebox/article/details/130970851