mini_rect training 又称矩形训练,是从YOLOV3开始引入的一个训练技巧。在YOLOV3之前的网络训练都是Square training,即输入图片是正方形,如 416*416、 640*640等。
Square training的优点是,图片的大小一致,方便训练处理;缺点是,在填充图片的过程中,引入了冗余信息,并且这一部分信息对于样本来说属于完全无用数据,增加了训练计算量。
下面第一张图为原始图像,分辨率为810*1080,进行正方形训练对图像进行处理后填充到640*640后如下第二张图所示,左右填充了冗余数据。
为了优化这个问题,从yolov3开始提出mini_rect training 训练策略。
mini_rect training 即对图片进行加载时,将原始图片的较长的边填充到最大长度,短边只填充到32的倍数。
处理代码如下:
经过处理后,大大缩小了原来正方形训练时引入冗余信息。矩形训练引入较少的冗余信息,可以加快训练速度。如下图所示处理后分辨率为512*640, 左右冗余数据明显减少。
如果采用mini_rect training,那么整个batch内的图片的shape要一致,这就需要计算这个符合整个batch的shape。而且还要对数据集按照高宽比进行排序,这样才能保证同一个batch的图片的形状差不多相同,再选则一个共同的shape代价也比较小。
以下为yolov5/8下处理batch shape大小代码:
这就导致在dataloader时不能使用shuffle功能,如果使用shuffle功能,将随机打乱图片顺序,不能保证在一个batch处理时数据尺寸基本一致。在YOLOV8中同时设置 rect 和 shuffle会报警告信息,并禁用shuffle操作。
总结,mini_rect training是为了减少冗余信息,提高训练推理速度及精度,使用mini_rect training时不能使用shuffle操作。