遇到这样一种情况:img_sz=640,但在val时,输入网络的张量h和w是672
为什么输入图像会从640变大到672?
这是因为一种rectangle增强方法,“同个batch里做rectangle宽高等比变换, 加快训练 ,对于多余的黑边做到最小,实现降低计算量”具体查看YOLOV5数据增强有这些!---也可自己新增数据增强方法(裁剪、平移 、旋转、改变亮度、加噪声)-CSDN博客
1.如果你想在训练过程中的验证阶段关掉增大,使数据保持640。可以在train.py的第40行
return build_yolo_dataset(self.args, img_path, batch, self.data, mode=mode, rect=mode == 'val', stride=gs)
将rect=mode == 'val' 改为 rect=False
2.如果你想在单独验证测试集时关掉这种增大,在val.py的第194行
return build_yolo_dataset(self.args, img_path, batch, self.data, mode=mode, stride=gs)
可以看到他没有直接设置rect,所以rect用了默认值
rect=cfg.rect or rect,
cfg代表default.yaml中的超参数。所以,你只需要在调用val时,增加rect=False即可
model = YOLO("./runs/detect/train2/weights/best.pt") # load a pretrained model (recommended for training)metrics = model.val(rect=False)