parser.add_argument('--task', default='speed', help='train, val, test, speed or study')
在task的参数为’train, val, test时,会默认把图片填充成矩形形状,而在yolov5中,是把一个batch_size中所用的图像填充成相同大小,并填充的大小是根据一个batch_size中所用图像的大小计算的,这导致在batch_size不同时,同一张图像的填充大小不同,从而导致结果有一定的差距。
if self.rect:
# Sort by aspect ratio
s = self.shapes # wh
ar = s[:, 1] / s[:, 0] # aspect ratio
irect = ar.argsort()
self.im_files = [self.im_files[i] for i in irect]
self.label_files = [self.label_files[i] for i in irect]
self.labels = [self.labels[i] for i in irect]
self.shapes = s[irect] # wh
ar = ar[irect]
# Set training image shapes
shapes = [[1, 1]] * nb #nb为图片总数除以batch_size
for i in range(nb):
ari = ar[bi