当前位置: 首页 > article >正文

yolov目标检测的图片onnx输入尺寸及预处理

参考 (github.com)

当你使用不同的图像尺寸(例如1280)进行预测时,YOLOv8会自动对输入图像进行适当的预处理以适配模型。这通常包括缩放和填充操作,确保图像不会发生畸变,同时保持原始宽高比。

对于使用OpenCV进行预处理,你可以按照以下步骤来模拟YOLOv8的预处理过程:

  1. 保持图像的宽高比,将图像缩放到模型的输入尺寸(例如640x640)中较短的一边。
  2. 对缩放后的图像进行填充,以达到所需的输入尺寸,通常填充的是图像的右侧和底部。
  3. 确保填充值(通常是灰色,即(114, 114, 114))与训练时使用的填充值相匹配。

以下是一个简单的OpenCV代码示例,展示了如何进行这种预处理:

def letterbox(im, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32):
    # Resize and pad image while meeting stride-multiple constraints
    shape = im.shape[:2]  # current shape [height, width]
    if isinstance(new_shape, int):
        new_shape = (new_shape, new_shape)

    # Scale ratio (new / old)
    r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
    if not scaleup:  # only scale down, do not scale up (for better val mAP)
        r = min(r, 1.0)

    # Compute padding
    ratio = r, r  # width, height ratios
    new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))
    dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # wh padding
    if auto:  # minimum rectangle
        dw, dh = np.mod(dw, stride), np.mod(dh, stride)  # wh padding
    elif scaleFill:  # stretch
        dw, dh = 0.0, 0.0
        new_unpad = (new_shape[1], new_shape[0])
        ratio = new_shape[1] / shape[1], new_shape[0] / shape[0]  # width, height ratios

    dw /= 2  # divide padding into 2 sides
    dh /= 2

    if shape[::-1] != new_unpad:  # resize
        im = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR)
    top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
    left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
    im = cv2.copyMakeBorder(im, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)  # add border
    return im, ratio, (dw, dh)

# Load image
img, ratio, dw, dh = cv2.imread('path/to/your/image.jpg')

# Preprocess image
img_preprocessed = letterbox(img)

# Now you can pass `img_preprocessed` to your model for prediction

这段代码会将图像缩放并填充到指定的尺寸,同时保持原始宽高比,从而避免畸变。
在实际应用中,你可能需要根据你的具体需求调整这个函数。


http://www.kler.cn/a/449124.html

相关文章:

  • 汽车IVI中控开发入门及进阶(47):CarPlay开发
  • Asp.Net FrameWork 4.7.2 WebAPI 使用WebSocket协议
  • 精通Redis
  • docker run 命令参数
  • 重拾设计模式--观察者模式
  • ruoyi 请求参数类型不匹配,参数[giftId]要求类型为:‘java.lang.Long‘,但输入值为:‘orderGiftUnionList
  • 杀死名为360安全的软件
  • 14,攻防世界Web_php_unserialize
  • 深入了解Linux —— make和makefile自动化构建工具
  • 以太坊账户详解
  • 构建一个rust生产应用读书笔记7-Mock编码浪子
  • 项目测试方案流程详解
  • ARP协议的工作原理
  • 【jvm】内存泄漏的8种情况
  • 前端面经每日一题Day19
  • 电子应用设计方案68:智能晾衣架系统设计
  • 每日一题 341. 扁平化嵌套列表迭代器
  • Linux嵌入式系统利用套接字编程(Socket Programming)实现网络通信的基础知识并附对一个简单实例的分析
  • 【Spring】控制反转(IoC)与依赖注入(DI)—IoC的概念与优点
  • 【YashanDB知识库】YMP迁移过程中报错YAS-02143或YAS-02193
  • 如何在K8S集群中查看和操作Pod内的文件?
  • 基于Spring Boot的远程教育网站
  • IPC协议获取签名信息
  • [计算机图形学] 【Unity Shader】【图形渲染】Shader数学基础6-逆矩阵与正交矩阵
  • leetcode hot100 合并区间
  • net_device结构