地平线旭日x3派·yolov8

官方预训练模型转换

  1. 下载yolov8源码解压到本地,并配置基础运行环境。
  2. 下载官方预训练模型
  • yolov8n.pt
  • yolov8s.pt
  • yolov8m.pt
  1. 进入ultralytics-main目录下,新建文件夹weights,并将步骤2中下载的权重文件放进去。
  2. 修改ultralytics/nn/modules/head.py文件内容->Detect类
   def forward(self, x):
        results = []
        for i in range(self.nl):
            dfl = 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(torch.cat([cls, dfl], -1))
        return tuple(results)
  1. 新建export.py文件
#encoding:utf-8
from ultralytics import YOLO
import onnx
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='./weights/yolov8n.pt', help='initial weights path') 
#================================================================
opt = parser.parse_args()
print(opt)
    
model_path = opt.weights
# load a pretrained model
model = YOLO(model_path)

# export onnx
success = model.export(format='onnx', opset=11, simplify=True, dynamic=False, imgsz=640)
assert success

model = onnx.load(model_path.replace(".pt",".onnx"))

# 修改输入输出张量的名称
idx_start = 0
for input in model.graph.input:
    for node in model.graph.node:
        # 如果当前节点的输入名称与待修改的名称相同,则将其替换为新名称
        for i, name in enumerate(node.input):
            if name == input.name:
                node.input[i] = "images"
    input.name = "images"
    idx_start += 1

idx_start = 0
for output in model.graph.output:
    for node in model.graph.node:
        # 如果当前节点的输入名称与待修改的名称相同,则将其替换为新名称
        for i, name in enumerate(node.output):
            if name == output.name:
                node.output[i] = "output" + str(idx_start)
    output.name = "output" + str(idx_start)
    idx_start += 1

# 保存修改后的模型
onnx.save(model, model_path.replace(".pt",".onnx"))
  1. 命令行执行python3 export.py脚本(默认为yolov8n.pt, 加–weights参数可指定权重),转换成功会输出一下信息, 转换后的模型存于权重同级目录(*.onnx后缀模型) 注意opset_version必须为10/11
ONNX: starting export with onnx 1.14.1 opset 11...
ONNX: simplifying with onnxsim 0.4.33...
ONNX: export success ✅ 1.1s, saved as 'weights/yolov8n.onnx' (12.2 MB)

Export complete (2.6s)
Results saved to /home/zz/workspace/course/nv/example/yolov8/ultralytics-main/weights

地平线旭日x3派·yolov8_第1张图片

地平线BPU加载推理篇

  • 使用地平线BPU SDK接口加载推理模型, 后续会放出代码。
    地平线旭日x3派·yolov8_第2张图片
    地平线旭日x3派·yolov8_第3张图片

你可能感兴趣的:(嵌入式开发·地平线,YOLO)