橦言无忌

一个不想改变世界的程序媛

yolo4中的数据增强

前言

常用数据增强方式和yolov4中使用的数据增强方式及其有效性。

加油啊,还没总结完~

1,常用数据增强方式

1.1 畸变

  • 光照畸变
  • 几何畸变

1.2 图像遮挡

1.2.1 随机擦除

  • 做法
    选定图像一块区域,用随机像素或者平均像素来填充;
  • 功能
    防止模型记忆训练数据和过拟合;

1.2.2 cutout

  • 做法
    训练中掩盖一个正方形区域,只对CNN第一层遮挡,填充使用的仍然是常数像素;
  • 功能
    防止过拟合;

1.2.3 Hide and Seek

  • 做法
    将图像分割成s*s的patch,每个patch以一定概率隐藏
  • 功能
    让模型了解物体是什么样子,而不只是学习单个部分是什么样子

1.2.4 Grid Mask

  • 做法
    mask的网格,将图像隐藏其中
  • 功能
    让模型学习组成物体的做成部分

1.2.5 MixUp

  • 做法
    图像对及其标签的凸叠加
  • 功能

2,yolov4数据增强

2.1 CutMix

  • 做法

  • 功能

  • 问题思考?
    对比mixup和cutout,为什么cutmix会好?

2.2 Mosaic

  • 做法
    把4张图片,通过随机缩放、随机裁减、随机排布的方式进行拼接

  • 优点
    学习到比正常尺寸小的物体;
    可以“省”训练数据或迭代次数;
    丰富了检测物体的背景和小目标,并且在计算Batch Normalization的时候一次会计算四张图片的数据,使得mini-batch大小不需要很大,一个GPU就可以达到比较好的效果;
    丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好;
    减少GPU:直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果;

  • 缺点
    如果我们的数据集本身就有很多的小目标,那么Mosaic数据增强会导致本来较小的目标变得更小,导致模型的泛化能力变差

  • 问题思考

// 代码折叠