地平线rdk-x5部署yolo11(1) 模型转出
一. 模型导出:
可以参考RDK X5部署YOLOv8-Seg 和v8差不多
、拷贝YOLO项目
git clone https://github.com/ultralytics/ultralytics.git
2、虚拟环境和依赖安装
# 安装虚拟环境
conda create -n yolov8 python=3.8 -y
# 进入虚拟环境
conda activate yolov8
# 安装依赖
pip install ultralytics
pip install onnx
3、模型结构修改
- 修改ultralytics/ultralytics/nn/modules/head.py中Detect类的forward部分,其余部分不变动
class Detect(nn.Module):def forward(self, x):results = []for i in range(self.nl):box = self.cv2[i](x[i]).permute(0, 2, 3, 1).contiguous()cls = self.cv3[i](x[i]).permute(0, 2, 3, 1).contiguous()results.append(cls)results.append(box)return tuple(results)
- 修改ultralytics/ultralytics/nn/modules/head.py中Segment类的forward部分,其余部分不变动
class Segment(Detect):def forward(self, x):p = self.proto(x[0]).permute(0, 2, 3, 1).contiguous() # mask protosresults = []for i in range(self.nl):box = self.cv2[i](x[i]).permute(0, 2, 3, 1).contiguous()cls = self.cv3[i](x[i]).permute(0, 2, 3, 1).contiguous()mask = self.cv4[i](x[i]).permute(0, 2, 3, 1).contiguous()results.append(cls)results.append(box)results.append(mask)results.append(p)return tuple(results)
4、导出ONNX模型
from ultralytics import YOLOYOLO('./yolov11n-seg.pt').export(format="onnx", opset=11)
horizon_x5_open_explorer_v1.2.8-py310_20240926/samples/ai_toolchain/horizon_model_convert_sample/04_detection/03_yolov5x/mapper/ 这个目录下有模型转换脚本:
01_check.sh
02_preprocess.sh
03_build.sh