yolov5的val.py输出的map值会随着batch_size的大小变化

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 == i]
                mini, maxi = ari.min(), ari.max()
                if maxi < 1:
                    shapes[i] = [maxi, 1]
                elif mini > 1:
                    shapes[i] = [1, 1 / mini]

            self.batch_shapes = np.ceil(np.array(shapes) * img_size / stride + pad).astype(np.int16) * stride```


版权声明:本文为qq_42265774原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。