当前位置:   article > 正文

树莓派NCNN开发·yolov8_树莓派 yolov8

树莓派 yolov8

官方预训练模型转换

  1. 下载yolov8源码解压到本地,并配置基础运行环境。
  2. 下载官方预训练模型
  1. 进入ultralytics-main目录下,新建文件夹weights,并将步骤2中下载的权重文件放进去。
  2. 修改ultralytics/nn/modules/head.py文件
    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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  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=12, 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] = "data"
    input.name = "data"
    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] = "out" + str(idx_start)
    output.name = "out" + str(idx_start)
    idx_start += 1

# 保存修改后的模型
onnx.save(model, model_path.replace(".pt",".onnx"))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  1. 命令行执行python3 export.py脚本(默认为yolov8n.pt, 加–weights参数可指定权重),转换成功会输出一下信息, 转换后的模型存于权重同级目录(*.onnx后缀模型)
Namespace(weights='./weights/yolov8n.pt')
finished exporting onnx
  • 1
  • 2

请添加图片描述

腾讯NCNN加载推理篇

  • 使用NCNN SDK接口加载推理模型, 后续会放出代码,支持fp16/int8精度。
    请添加图片描述
    请添加图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/863078
推荐阅读
相关标签
  

闽ICP备14008679号