目标检测中的数据增强: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

杨芋土豆

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

暂无评论

发表评论

相关推荐

深度学习笔记-----FCOS

一,概述 目标检测算法主要分为两个大的方向:单阶段检测器/双阶段检测器,其对应的代表性算法分别是Faster-rcnn和Yolo。而随着目标检测性能的大幅度提升,这个领域的门槛变得很高&#