AX620A转换yolo系列模型踩坑
前言
去年记录了如何在ax620a下使用工具链转换自训练yolov5模型:AX620A运行yolov5s自训练模型全过程记录
但今天由于各种环境发生变化了,再去这样转换的话,就会报错失败。
经过一番查找,发现是pytorch版本更新导致的。其实社区有文章已经更新了yolov5和yolov8的模型转换方法,但是仍然有坑点,如果不注意的话还是会失败。
一、YOLOV5转换
社区文章看这里:[m3axpi] YOLOv5训练到部署全流程
其实主要问题就是pytorch版本不能大于1.13.0。如果是使用1.13.0之后版本的话,按照文章第二种方法,使用onnx-modifier图形化工具删去后处理算子。但在编辑完成下载新模型时,一定要勾选shape infrernce
和clean 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文件里面)
- 在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真是个弱鸡,全程只能吃单线程。。。