目标检测中的数据增强:mosaic,mixup,cutout,cutmix

认真读绝对不亏,不要看到全是字就 怕  了。

最近学目标检测,在看yolov4的时候,看到了mosaic数据增强方法,所以查阅了一些知识,因为网上的讲解都注重于原理,不注重详细的实现方法以及细节,而工程项目缺的就是详细的实现方法。现根据自己的理解,通过举例子的方式做好笔记,整理如下,以便以后查阅。

cutmix:假设有A,B两张图,都是448*448,现随机生成一个box,假设生成(50,60,70,80),50和60分别表示box的左上角左边,70,80分别表示box的右下角。然后在A图上将box对应所在的位置用B图对应位置进行替代。

如何计算loss使用的loss是交叉熵,计算lam = box的面积占图片面积的比例= (70-50)(80-60)/(448*448),loss有两部分,第一部分是没有替代时候的target与模型输出做交叉熵,然后这部分乘以(1-lam),理解为:对所有图片中未被替代的部分做loss乘以未被替代部分占原始图像的比例。第二部分,是被替代的部分的target与模型输出做交叉熵,然后乘以lam,理解为:对所有图片中被替代的部分做loss乘以被替代部分占原始图像的比例。

cutout:假设有一张图A,448*448,现随机生成一个box,假设生成(50,60,70,80),50和60分别表示box的左上角左边,70,80分别表示box的右下角。直接将A上将box对应的位置上的图扣掉,也就是将box对应位置上的所有像素值置为0。

如何计算loss如果理解了cutmix的loss计算原理,就知道这个loss只有cutmix  loss 的前一部分。

mixup:假设有A,B两张图片,对应的标签为target_a,target_b,随机生成一个lam介于(0,1)之间,这个lam作为融合比例。A,B两张图片像素相加进行融合生成C,C=lam*A+(1-lam)*B,将C输入到网络中,得到输出output,

计算loss = lam*crossEntropyLoss(output,target_a)+(1-lam)*crossEntropyLoss(output,target_b)。

mosaic:假设有A,B,C,D四张图片,对应标签为target_a,target_btarget_c,target_d,都是448*448,同时生成一张空白的图片E,shape也为448*448,首先将ABCD进行翻转,缩放,色域变换等操作,然后将E分成224*224,224*224,224*224,224*224四个部分,将ABCD分别放在E的四个部分,每个部分超出224的部分都裁剪掉。例如假如对A进行了缩放,缩放的结果为345*256,那么直接将A裁剪成224*224。最后将E送入到网络中得到output ,

计算loss: 同上面的计算方法一致。首先计算每个部分占E的比例,在此处的例子中,每个部分都占1/4,所以loss= 1/4(crossEntropyLoss(output,target_a)+crossEntropyLoss(output,target_b)+crossEntropyLoss(output,target_c)+crossEntropyLoss(output,target_d))

就是这样,哪天有空了就画个图说明吧~

版权声明:本文为CSDN博主「杨芋土豆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40395121/article/details/119345892

杨芋土豆

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

mmdetection、yolo系列等目标检测任务的学习率调度器

学习率(Learning rate,简称lr)作为目标检测这类监督学习中最重要的超参,其决定着分类函数或边界框回归函数能否收敛到局部最小值以及何时收敛到最小值。正确的学习率可使目标函数在合适的时间内收敛到局部最优。同时,学习率可以在训练的过程中