• YOLO之Mini_Rect Training(矩形训练)


            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操作。

  • 相关阅读:
    Docker 镜像
    Kotlin VS Java区别较量?看了对比我更喜欢Kotlin
    上周热点回顾(6.20-6.26)
    Linux常用命令
    百度地图——鹰眼轨迹服务
    C++继承
    Selenium选择器小结
    【STM32备忘录】二、FSMC做LCD控制器,使用stm32cube配置示例
    三十一、《大数据项目实战之用户行为分析》Spark SQL与Hive整合
    Double 4 VR智能互动系统在法律法庭上的模拟演练教学
  • 原文地址:https://blog.csdn.net/yueguang8/article/details/136678194