【Augmentation Zoo】Augmentation for small object detection的代码实现

本文提出针对模型对MS COCO数据集中小目标测试检测效果差,提出两个解决方案:

1. 对包含小目标的图片过采样。

2. 在包含小目标的图片中做填鸭。

两个解决方法又进一步细分,并通过实验得到一些结论。MS COCO中对small object的定义是矩形框面积小于32 x 32。代码实现在:https://github.com/zzl-pointcloud/Data_Augmentation_Zoo_for_Object_Detection/blob/master/augmentation_zoo/SmallObjectAugmentation.py 欢迎star和指错


一、Oversampling:3x 效果最佳

【Augmentation Zoo】Augmentation for small object detection的代码实现_第1张图片

二、Augmentation:第3种策略最佳

1. 用augmented图片替代original图片

2. 将augmented图片复制一次

3. augmented图片(0.5的概率执行)+ original图片

【Augmentation Zoo】Augmentation for small object detection的代码实现_第2张图片

三、Copy-Pasting Strategies

1. 一张图片中,随机选择一个小目标进行多次复制,放置在随机位置。复制一次效果最好
2. 一张图片中,随机选择多个小目标复制,放置在任意位置。复制三次效果最好。
3. 一张图片中,复制所有的小目标,放置在随机位置。复制一次效果最好

 

四、 Pasting Algorithms

1. 复制后的目标不覆盖原目标

2. 不对粘贴对象的边缘进行平滑处理(本文的平滑处理:具有不同尺寸过滤器的高斯模糊)


综上,我们以0.5的概率执行数据增强操作。数据增强操作即是Copy-Pasting策略,共包含三个,并且复制后的目标不覆盖原目标:

1. 随机选择一个小目标复制一次

2. 随机选择多个小目标复制三次

3. 所有小目标复制一次

代码实现见上,使用如下:

class SmallObjectAugmentation(object):
    def __init__(self, thresh=64*64, prob=0.5, copy_times=3, epochs=30, all_objects=False, one_object=False):

 类实例化参数包括:

1. thresh: 目标是否是小目标

2. prob: 执行Copy-pasting的可能性,默认为0.5

3. copy_times: 复制的次数,默认为3

4. epochs: 为避免遮挡之前生成的目标,多次随机产生annot的中心点坐标,为避免浪费算力,迭代epochs代后,自动结束。

5. all_object: 为Ture时,执行策略3

6. one_object: 为Ture时,执行策略1

7. all_object = one_object = False时,执行策略2,即默认执行策略2

SOA_THRESH = 64*64
SOA_PROB = 1
SOA_COPY_TIMES = 3
SOA_EPOCHS = 30
SOA_ONE_OBJECT = False
SOA_ALL_OBJECTS = False

augmenter = SmallObjectAugmentation(SOA_THRESH, SOA_PROB, SOA_COPY_TIMES, SOA_EPOCHS, SOA_ONE_OBJECT, SOA_ALL_OBJECTS)

"""
    sample = {'img':img, 'annot':annots}
    img = [height, width, 3]
    annot = [xmin, ymin, xmax, ymax, label]

"""
sample = augmenter(sample)

在KITTI数据集上,执行效果如下:

policy 1 

policy 2 

policy 3

你可能感兴趣的:(数据增强,数据增强,small,object,小目标,填鸭)