关于Yolov5在测试时,图像大小被调整的问题

这篇具有很好参考价值的文章主要介绍了关于Yolov5在测试时,图像大小被调整的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原数据大小为:1920*1080

detect.py中的imgsz设置为640,按照正常图像宽高的缩放,原数据缩放后应为:640*360

而detect.py的控制台输出却为:640*384,如下所示:

yolov5图像尺寸,机器学习&深度学习,pytorch,人工智能,python

这是为何呢?具体可以从头仔细阅读detect.py的代码,在LoadImages类中有一个letterbox函数,函数具体如下:

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]   --1080 1920
    if isinstance(new_shape, int):       
        new_shape = (new_shape, new_shape)  #                --(640, 640)

    # Scale ratio (new / old)
    # 计算缩放因子
    r = min(new_shape[0] / shape[0], new_shape[1] / shape[1]) # --0.33333333
    """
    缩放(resize)到输入大小img_size的时候,如果没有设置上采样的话,则只进行下采样
    因为上采样图片会让图片模糊,对训练不友好影响性能。
    """
    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                      -- 0.333333, 0.333333
    new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))  # -- 640, 360
    # 计算padding
    dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # wh padding --0, 280
    # 获取最小的矩形填充
    if auto:  # minimum rectangle
        dw, dh = np.mod(dw, stride), np.mod(dh, stride)  # wh padding    --0, 12
    # 如果scaleFill=True,则不进行填充,直接resize成img_size,任由图片进行拉伸和压缩
    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  --0
    dh /= 2  #                              --12

    if shape[::-1] != new_unpad:  # resize
        im = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR)  # im.shape=640, 360
    top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))  # --12, 12
    left, right = int(round(dw - 0.1)), int(round(dw + 0.1))  # --0, 0
    # 进行填充
    im = cv2.copyMakeBorder(im, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)  # add border,将上下左右需要增加的边界填到图像上
    return im, ratio, (dw, dh)

 代码中的备注给出了所有变量的变化过程。

其实具体就是通过计算“设置的宽高”与“原图宽高”的比例,计算出最终dw,dh的值,就能确定上下左右需要padding的像素个数,最后通过cv2.copyMakeBorder完成图像的resize和padding.文章来源地址https://www.toymoban.com/news/detail-635360.html

到了这里,关于关于Yolov5在测试时,图像大小被调整的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Yolov5调整空间金字塔池化SPPCSPC/上采样方式bilinear

    ​ ​ 第一步 各个代码放入common.py中 ​ 第二步 找到yolo.py文件里的parse_model函数,将类名加入进去 ​ 第三步 修改 配置文件 ​ 在我自己的数据集上跑了一下,发现 SPPCSPC的效果是最好的~~~ YOLOV5中默认使用的是最近邻插值‘nearest’ ​  若要改为双线性插值只需在yaml文件中将

    2024年02月12日
    浏览(37)
  • YOLOv7、YOLOv5改进之损失函数EfficiCIoU-Loss:独家首发最新|结合EfficiCIoULoss损失函数(适用于YOLOv5),新的增强预测帧调整并加快帧回归率,加快网络模型收敛

    💡该教程为属于 《芒果书》 📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章 为 YOLOv5、YOLOv7、YOLOv8 芒果改进YOLO系列: YOLOv7改进损失函数:独家首发最新|结合EfficiCIoU-Loss损失函数,新的增强预测帧调整并加快帧回归率,加快网

    2024年02月05日
    浏览(50)
  • 使用yolov5实现图像识别

    开始之前 你应当先克隆这个仓库 下载完毕后,进入克隆的仓库目录 下载依赖 下载数据集 这里有个数据集,为了节省训练时间,文件不是很大。 结尾处我会推荐几个大型数据集下载地址 。 数据集下载 提取码:crnr 解压后,你会看到这几个文件夹: 标记数据集 可以登录 h

    2024年02月07日
    浏览(34)
  • yolov5检测框重合重复,手动调参方法(调整detect,val的conf,iou)

    出现上述问题一般是整体检测方向没错,但conf-thres和iou-thres的参数需要调整。(在默认值0.25和0.45的基础上,提高置信区间,降低iou) 1、目的:本身conf-thres和iou-thres参数在detect.py文件配置(配置的地方如下图),调好参数开始训练,训练后的结果若大体满意,但细节需要通

    2024年02月04日
    浏览(46)
  • YoloV5 训练长方形图像

    官方的源代码中,训练的时候将rect开启,即可进行长方形训练同时也会进一步降低训练时的显存。  Imagesz只需要设置图像最大尺寸即可,在dataload中,读取图像时候会进行判断处理,  在load_image过程中,会将图像等比例缩放 比如原图为1280*640。 输入的imagesize为1280的话,则读

    2024年02月11日
    浏览(52)
  • YOLOv5识别图像内苹果和香蕉

    YOLOv5为目标检测带来了极大的方便。通过简单地训练YOLOv5,即可以实现一个速度快、性能高的目标检测系统。 下面介绍如何从头开始构造一个简单的目标检测系统,用来识别图像内的苹果和香蕉,并标注他们所在的位置。 特别强调的是,YOLOv5给我们提供了全套解决方案,整

    2023年04月26日
    浏览(36)
  • YOLOv5图像分割--SegmentationModel类代码详解

    目录 ​编辑 SegmentationModel类 DetectionModel类 推理阶段 DetectionModel--forward() BaseModel--forward()  Segment类 Detect--forward    定义model将会调用 models/yolo.py 中的类 SegmentationModel 。该类是继承父类-- DetectionModel 类。 因此直接去看下DetectionModel这个类代码,同时也能发现这个类又是继承 B

    2023年04月18日
    浏览(37)
  • 图像处理实战02-yolov5目标检测

    YOLOv5 是一种目标检测算法,它是 YOLO (You Only Look Once) 系列算法的最新版本。YOLOv5 采用了一种新的架构,它包括一个基于 CSPNet (Cross Stage Partial Network) 的主干网络以及一系列改进的技巧,如多尺度训练、数据增强、网络混合精度训练等,从而实现了更快的检测速度和更好的检测

    2024年02月09日
    浏览(34)
  • YOLOv5图像分割中的NMS处理

    在上一篇文章YOLOv5图像分割--SegmentationModel类代码详解有讲到图像经过YOLOv5网络后得到的输出形式,主要是调用了BaseModel类下的forward得到的输出,输出的shape为【batch,25200,117】,这里的25200相当于总的anchors数量【以640*640的输入为例,共有anchors=80*80*3+40*40*3+20*20*3】,117为5[x,y,

    2024年02月06日
    浏览(43)
  • yolov5 6.1 关于 val.py 的使用说明

    主要用于评估已经训练好的模型的性能和精度。通过在验证集上运行模型,计算模型在检测任务上的指标和评估结果。 具体来说分为如下几个步骤: 加载模型和数据: val.py 会加载训练好的模型权重文件和用于验证的数据集。它会根据配置文件中的设置,加载模型架构和权重

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包