yolov8 opencv dnn部署自己的模型

源码地址

  1. 本人使用的opencv c++ github代码,代码作者非本人

使用github源码结合自己导出的onnx模型推理自己的视频

推理条件

windows 10
Visual Studio 2019
Nvidia GeForce GTX 1070
opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理,所以只使用opencv4.7.0)

导出yolov8模型

yolov8版本: version = ‘8.0.110’
首先将default.yaml中的一些配置修改以下,将只修改的部分贴上去,注意下面的batch一定要设置为1

task: detect  # YOLO task, i.e. detect, segment, classify, pose
mode: export  # YOLO mode, i.e. train, val, predict, export, track, benchmark

# Train settings -------------------------------------------------------------------------------------------------------
# model: C:\Users\HUST\Desktop\yolov8_ultralytics\ultralytics\models\v8\yolov8.yaml # path to model file, i.e. yolov8n.pt, yolov8n.yaml
model: C:\Users\Administrator\Desktop\yolov8_ultralytics\runs\detect\yolov8n\weights\best.pt # path to model file, i.e. yolov8n.pt, yolov8n.yaml
data: C:\Users\Administrator\Desktop\yolov8_ultralytics/ultralytics/datasets/custom.yaml # path to data file, i.e. coco128.yaml
weights: yolov8n.pt
epochs: 1  # number of epochs to train for
patience: 50  # epochs to wait for no observable improvement for early stopping of training
batch: 1  # number of images per batch (-1 for AutoBatch)

default.yaml中的export部分的配置也需要修改

# Export settings ------------------------------------------------------------------------------------------------------
format: onnx  # format to export to
keras: False  # use Keras
optimize: False  # TorchScript: optimize for mobile
int8: False  # CoreML/TF INT8 quantization
dynamic: False  # ONNX/TF/TensorRT: dynamic axes
simplify: False  # ONNX: simplify model
opset: 12 # ONNX: opset version (optional)
workspace: 4  # TensorRT: workspace size (GB)
nms: False  # CoreML: add NMS

然后直接运行ultralytics/yolo/engine/exporter.py
在这里插入图片描述
测试一下导出的best.onnx可不可用,直接正常的val即可
在这里插入图片描述
将best.onnx模型放入netron中,onnx的输入和输出如下图1所示
在这里插入图片描述
在这里插入图片描述 图 1 图1 1

c++部署

先将源码复制到下图位置中
在这里插入图片描述

环境和代码的大致步骤跟yolov5 opencv dnn部署 github代码一样

由于源码中使用的输入尺寸如图2是640 * 480的,我导出模型时使用的模型的输入如图1是640 * 640,所以需要对尺寸的那一部分需要进行修改,修改为640 * 640

const float INPUT_WIDTH = 640.0;
const float INPUT_HEIGHT = 640.0;
const float SCORE_THRESHOLD = 0.45;
const float NMS_THRESHOLD = 0.5;
const float CONFIDENCE_THRESHOLD = 0.25;

在这里插入图片描述
在这里插入图片描述 图 2 图2 2在进行修改之后,就可以直接运行yolo.cpp

c++推理结果

yolov8_deploy_fire

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
你好!要在OpenCV部署YOLOv4模型,你可以按照以下步骤进行操作: 1. 安装OpenCV:确保你已经正确安装了OpenCV库。你可以通过pip命令或者源码安装OpenCV。 2. 下载权重文件:从Darknet网站上下载YOLOv4的预训练权重文件。你可以在https://github.com/AlexeyAB/darknet 上找到它们。 3. 将权重转换为OpenCV的格式:使用OpenCV自带的dnn模块中的函数来将Darknet的权重文件转换为OpenCV格式。你可以使用以下代码片段进行转换: ```python import cv2 # 加载模型配置和权重 net = cv2.dnn.readNetFromDarknet('path/to/config_file.cfg', 'path/to/weights_file.weights') # 保存转换后的权重 net.save('path/to/model_weights.weights') ``` 4. 进行目标检测:使用OpenCVdnn模块和转换后的权重文件进行目标检测。你可以使用以下代码片段作为参考: ```python import cv2 # 加载模型配置和权重 net = cv2.dnn.readNetFromDarknet('path/to/config_file.cfg', 'path/to/model_weights.weights') # 加载类别标签 with open('path/to/class_labels.txt', 'r') as f: classes = [line.strip() for line in f.readlines()] # 加载图像并进行目标检测 image = cv2.imread('path/to/image.jpg') blob = cv2.dnn.blobFromImage(image, 1/255.0, (416, 416), swapRB=True, crop=False) net.setInput(blob) outs = net.forward(net.getUnconnectedOutLayersNames()) for out in outs: for detection in out: scores = detection[5:] classId = np.argmax(scores) confidence = scores[classId] if confidence > 0.5: centerX = int(detection[0] * image.shape[1]) centerY = int(detection[1] * image.shape[0]) width = int(detection[2] * image.shape[1]) height = int(detection[3] * image.shape[0]) x = int(centerX - width / 2) y = int(centerY - height / 2) cv2.rectangle(image, (x, y), (x + width, y + height), (0, 255, 0), 2) cv2.putText(image, classes[classId], (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) cv2.imshow('YOLOv4', image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上述代码中,你需要将"path/to"替换为实际的文件路径,包括YOLOv4模型的配置文件、权重文件和类别标签文件。 这是一个基本的部署YOLOv4模型的示例,你可以根据自己的需求进行修改和优化。希望对你有所帮助!如果有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值