YOLOv8-OBB ONNRuntime推理部署

简介

本文将介绍如何使用 ONNX 进行 YOLOv8 Oriented Bounding Box (OBB) 推理。本例中,我们将使用 Python 编写的代码进行图像处理和对象检测,并展示如何加载模型、预处理图像、进行推理以及后处理结果。

代码

以下是实现 YOLOv8 OBB 推理的完整代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
# @FileName      : YOLOv8_OBB.py
# @Time          : 2024-07-25 17:33:48
# @Author        : XuMing
# @Email         : [email protected]
# @description   : YOLOv8 Oriented Bounding Box Inference using ONNX
"""
import cv2
import math
import random
import numpy as np
import onnxruntime as ort
from loguru import logger

class RotatedBOX:
    def __init__(self, box, score, class_index):
        self.box = box
        self.score = score
        self.class_index = class_index

class ONNXInfer:
    def __init__(self, onnx_model, class_names, device='auto', conf_thres=0.5, nms_thres=0.4) -> None:
        self.onnx_model = onnx_model
        self.class_names = class_names
        self.conf_thres = conf_thres
        self.nms_thres = nms_thres
        self.device = self._select_device(device)

        logger.info(f"Loading model on {
     
     self.device}...")
        self.session_model = ort.InferenceSession(
            self.onnx_model,
            providers=self.device,
            sess_options=self._get_session_options()
        )

    def _select_device(self, device):
        """
        Select the appropriate device.
        :param device: 'auto', 'cuda', or 'cpu'.
        :return: List of providers.
        """
        if device == 'cuda' or (device == 'auto' and ort.get_device() == 'GPU'):
            return ['CUDAExecutionProvider', 'CPUExecutionProvider']
        return ['CPUExecutionProvider']

    def _get_session_options(self):
        sess_options = ort.SessionOptions()
        sess_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_EXTENDED
        sess_options.intra_op_num_threads = 4
        return sess_options

    def preprocess
### 部署YOLOv8-obb模型至Blob存储服务 为了将YOLOv8-obb模型部署到Blob存储或其他类似的云存储服务中,以下是详细的说明: #### 1. 准备工作 在开始之前,需要确保已经训练好并保存了YOLOv8-obb模型权重文件(通常是`.pt`格式)。此过程可以通过Ultralytics官方库完成[^1]。 #### 2. Blob 存储概述 Blob存储是一种对象存储服务,通常由主流云计算提供商支持,例如AWS S3、Azure Blob Storage 或 Google Cloud Storage。这些平台允许上传大文件(如模型权重),并通过API访问它们。 #### 3. 将模型上传到Blob存储 通过命令行工具或SDK接口,可以将模型权重文件上传到目标Blob存储位置。以下是一些常见方法: ##### 使用Python SDK (以Azure为例) ```python from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient # 定义连接字符串和容器名称 connect_str = "<your_connection_string>" container_name = "model-container" blob_name = "yolov8-obb.pt" # 创建客户端实例 blob_service_client = BlobServiceClient.from_connection_string(connect_str) blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name) # 上传本地模型文件 with open("./weights/yolov8-obb.pt", "rb") as data: blob_client.upload_blob(data) ``` 上述代码片段展示了如何利用Azure Python SDK将模型权重文件上传到指定的Blob容器中[^4]。 #### 4. 下载模型供推理使用 当应用程序启动时,可以从Blob存储下载模型权重文件以便加载到内存中进行推理操作。同样以Azure为例: ```python import os from azure.storage.blob import BlobServiceClient download_path = "./downloads/yolov8-obb.pt" # 初始化客户端 blob_service_client = BlobServiceClient.from_connection_string("<your_connection_string>") blob_client = blob_service_client.get_blob_client(container="model-container", blob="yolov8-obb.pt") # 执行下载 with open(download_path, "wb") as download_file: download_file.write(blob_client.download_blob().readall()) ``` 这段脚本实现了从远程Blob存储拉取模型的功能。 #### 5. 结合Flask-Vue架构集成 如果采用的是 `yolov8-flask-vue-deploy` 开源项目的结构,则可以在后端Flask部分加入上述逻辑,在应用初始化阶段自动获取最新版本的模型权重。 --- ### 注意事项 - **安全性**:确保敏感数据(如连接字符串)不会被泄露给未经授权的用户。 - **性能优化**:对于频繁使用的场景,考虑缓存机制减少重复下载开销。 - **兼容性测试**:验证不同环境下的行为一致性,特别是跨操作系统或硬件平台的情况。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值