【问题标题】:YOLOv5 only detects when changing video resolutionYOLOv5 仅在更改视频分辨率时检测
【发布时间】:2022-01-18 02:22:58
【问题描述】:

我正在使用 YOLOv5 检测视频中的人物,该视频的分辨率为 944x1080。我正在使用 OBS-studio 将视频流式传输为虚拟网络摄像头。这是出于测试目的,但考虑的是使用已经从客户端安装的真实摄像头。

不涉及自定义代码,只是普通的 YOLO。模型是YOLO的默认yolov5s.pt

除非我将视频的分辨率更改为 1280x720(或类似),否则 YOLO 无法检测到任何人,然后检测得非常好。

我的命令很简单

$ python3 detect.py --nosave --source 2 --classes 0

有什么方法可以在执行检测之前更改帧的分辨率,从而标准化可能的不同相机的分辨率?

【问题讨论】:

  • 也许物体检测模型是用特定的分辨率训练的?也许您没有在将帧发送到 CNN 之前对其进行预处理?谁知道?没有你的任何代码,我们只能推测。
  • @stateMachine 没有自定义代码,它只是香草安装的 yolo。我在搞乱detect.py,但我对这个主题还很陌生,仍然无法得到正确的步骤。模型是yolo默认的yolov5s.pt
  • 你可能想检查一下 yolo 没有调整你的图片大小:see here
  • 每个人都会调整图片大小,而不关心拉伸内容。网络可能会因为你给它奇怪的拉伸数据而感到困惑。 裁剪或填充。一个圆圈(在场景中)必须在网络中看起来像一个圆圈,而不是一个鸡蛋。
  • @ChristophRackwitz 他们不是图片,而是相机流,我无法控制。

标签: opencv pytorch resolution yolov5


【解决方案1】:

detect.py 中,您必须使用pytorch 调整张量的大小:

from torchvision.transforms import Resize as rs

        im = torch.from_numpy(im).to(device) # line 119

        r = rs((736, 1280))
        im = r(im)

然后使用opencv正确显示:

            imc = im0.copy() if save_crop else im0  # line 164
            im0 = cv2.resize(im0.copy(), (1280,736))

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 2016-11-21
    • 1970-01-01
    • 2020-11-14
    • 2014-05-15
    • 1970-01-01
    • 2016-02-05
    • 2012-07-01
    • 2013-04-27
    相关资源
    最近更新 更多