Yolov8和我怀疑Yolov5处理非正方形图像的效果很好。我看不出任何裁剪输入图像的迹象,即检测似乎是去了最长边的边缘。它是否会调整大小为正方形640x604,这将改变对象的长宽比,使它们更难检测?当从预训练模型开始训练自定义数据集时,imgsz(图像大小)参数实际起什么作用?
imgsz
fykwrbwg1#
从v3开始,现代Yolo版本可以处理任意大小的图像,只要两边都是32的倍数。这是因为 Backbone.js 的最大跨距是32,并且它是一个完全卷积网络。
举个例子,假设你开始一个trining:
from ultralytics.yolo.engine.model import YOLO model = YOLO("yolov8n.pt") results = model.train(data="coco128.yaml", imgsz=512)
通过在trainer.py中打印输入到模型(im)的内容,您将获得以下输出:
trainer.py
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 0%| | 0/8 [00:00<?, ?it/s] torch.Size([16, 3, 512, 512]) 1/100 1.67G 1.165 1.447 1.198 226 512: 12%|█▎ | 1/8 [00:01<00:08, 1.15s/it] torch.Size([16, 3, 512, 512]) 1/100 1.68G 1.144 1.511 1.22 165 512: 25%|██▌ | 2/8 [00:02<00:06, 1.10s/it] torch.Size([16, 3, 512, 512])
因此,在训练过程中,图像必须重新调整为相同的大小,以便能够创建迷你批次,因为您无法连接不同形状的Tensor。imgsz选择要训练的图像的大小。
现在,我们来看一下预测,假设您选择assets下的图像作为source,imgsz 512下的图像为
from ultralytics.yolo.engine.model import YOLO model = YOLO("yolov8n.pt") results = model.predict(stream=True, imgsz=512) # source already setup
通过在predictor.py中打印原始图像形状(im0)和馈送到模型的图像形状(im),您将获得以下输出:
predictor.py
(yolov8) ➜ ultralytics git:(main) ✗ python new.py Ultralytics YOLOv8.0.23 🚀 Python-3.8.15 torch-1.11.0+cu102 CUDA:0 (Quadro P2000, 4032MiB) YOLOv8n summary (fused): 168 layers, 3151904 parameters, 0 gradients, 8.7 GFLOPs im0s (1080, 810, 3) im torch.Size([1, 3, 512, 384]) image 1/2 /home/mikel.brostrom/ultralytics/ultralytics/assets/bus.jpg: 512x384 4 persons, 1 bus, 7.4ms im0s (720, 1280, 3) im torch.Size([1, 3, 288, 512]) image 2/2 /home/mikel.brostrom/ultralytics/ultralytics/assets/zidane.jpg: 288x512 3 persons, 2 ties, 5.8ms Speed: 0.4ms pre-process, 6.6ms inference, 1.5ms postprocess per image at shape (1, 3, 512, 512)
您可以看到,最长的图像边被调整为512。短边被调整为最接近32的倍数,同时保持纵横比。由于您没有同时馈送多个图像,因此不需要将图像调整为相同的形状并堆叠它们,从而可以避免填充。
1条答案
按热度按时间fykwrbwg1#
从v3开始,现代Yolo版本可以处理任意大小的图像,只要两边都是32的倍数。这是因为 Backbone.js 的最大跨距是32,并且它是一个完全卷积网络。
培训
举个例子,假设你开始一个trining:
通过在
trainer.py
中打印输入到模型(im)的内容,您将获得以下输出:因此,在训练过程中,图像必须重新调整为相同的大小,以便能够创建迷你批次,因为您无法连接不同形状的Tensor。
imgsz
选择要训练的图像的大小。预测
现在,我们来看一下预测,假设您选择assets下的图像作为source,imgsz 512下的图像为
通过在
predictor.py
中打印原始图像形状(im0)和馈送到模型的图像形状(im),您将获得以下输出:您可以看到,最长的图像边被调整为512。短边被调整为最接近32的倍数,同时保持纵横比。由于您没有同时馈送多个图像,因此不需要将图像调整为相同的形状并堆叠它们,从而可以避免填充。