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

有关YOLOV5在测试时,图片大小被调整的问题

在这里插入图片描述
执行detect.py文件,在运行栏中出现以下:

detect: weights=yolov5s.pt, source=data\images, data=data\coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs\detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
YOLOv5  2023-7-6 Python-3.8.8 torch-2.0.1+cu118 CUDA:0 (NVIDIA GeForce RTX 3090, 24576MiB)

源码追溯:

第一步在detect.py文件中有LoadImages类,函数具体如下:
在这里插入图片描述
第二步打开这个LoadImages类,则转到dataloaders.py文件
在这里插入图片描述
第三步打开 letterbox类 ,则转到augmentations.py文件,定位到letterbox函数
在这里插入图片描述

完整的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 constraintsshape = im.shape[:2]  # current shape [height, width]   --1080 1920if 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 paddingratio = r, r  # width, height ratios                      -- 0.333333, 0.333333new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))  # -- 640, 360# 计算paddingdw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # wh padding --0, 280# 获取最小的矩形填充if auto:  # minimum rectangledw, dh = np.mod(dw, stride), np.mod(dh, stride)  # wh padding    --0, 12# 如果scaleFill=True,则不进行填充,直接resize成img_size,任由图片进行拉伸和压缩elif scaleFill:  # stretchdw, dh = 0.0, 0.0new_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  --0dh /= 2  #                              --12if shape[::-1] != new_unpad:  # resizeim = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR)  # im.shape=640, 360top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))  # --12, 12left, 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完成图像的resizepadding.

http://www.lryc.cn/news/214464.html

相关文章:

  • 【机器学习】四、计算学习理论
  • spring解决后端显示时区的问题
  • 大模型冷思考:企业“可控”价值创造空间还有多少?
  • ctfshow-web入门37-52
  • 前端项目部署后,需要刷新页面才能看到更新内容
  • android 13 write javaBean error at *** 错误
  • Only fullscreen opaque activities can request orientation
  • 前端实验(一)单页面应用的创建
  • 数字人小灿:始于火山语音,发于 B 端百业
  • 蓝桥杯刷题
  • Go Metrics SDK Tag 校验性能优化实践
  • 二叉树问题——前/中/后/层遍历问题(递归与栈)
  • Vue3问题:如何实现级联菜单的数据懒加载?
  • STM32-电源管理(实现低功耗)
  • vue 自己捣鼓周日程日历组件
  • 【力扣】2127. (分类讨论 + 拓扑排序)参加会议的最多员工数
  • Flutter——最详细(Map)使用教程
  • vue的入门第一课
  • 已解决:conda找不到对应版本的cudnn如何解决?
  • 大语言模型的学习路线和开源模型的学习材料《二》
  • Flask-SQLAlchemy事件钩子介绍
  • C++——list
  • 【Linux】第九站:make和makefile
  • 一文了解什么是WebSocket
  • redis是什么
  • 基于深度学习的人脸专注度检测计算系统 - opencv python cnn 计算机竞赛
  • 跨境电商的新引擎:崛起的网红经济
  • P2006 赵神牛的游戏 python解法
  • Unity的碰撞检测(六)
  • 从前序与中序遍历序列构造二叉树