环境
- ubuntu 18.04 64位
- YOLO数据集
简介
近年来,目标检测已经取得了长足的进步,不过,尽管如此,小目标与大目标之间,依然有着非常大的差距。论文 Augmentation for small object detection 提出了在原有图片数据中增加目标的 copy-pasting
方法,一方面,解决了数据集中只有部分图片有小目标的问题,另一方面也使得图片中有足够多的的小目标出现。最终,使用该方法,作者在 MS COCO
数据集上实例分割提高了 9.7%, 而在目标检测上也提升了 7.1%,效果还是非常显著。对应论文地址 https://arxiv.org/abs/1902.07296。
代码实操
开源项目 SmallObjectAugmentation 复现了上面的论文
首先拉取源码
git clone https://github.com/gmayday1997/SmallObjectAugmentation.git
cd smallObjectAugmentation
然后执行
python demo.py
作者提供了2张原始图片和它们对应的标注文件 txt
,存放在文件夹 background
下,待增强处理的具体图片由 train.txt
统一管理。而增加的小目标(这里是人),以小图的形式存在,放在文件夹 crops
下,由 small.txt
统一管理,train.txt
和 small.txt
可以通过 shell
脚本 createTrain.sh
生成。
最后脚本完成后,增强后的图片与对应标注存放在 save
文件夹下
0 0.265364583333 0.139130434783 0.0151041666667 0.0369565217391
0 0.284114583333 0.151086956522 0.0119791666667 0.0173913043478
0 0.3515625 0.179347826087 0.015625 0.0239130434783
数据增强后的图片如下,除了汽车之外,增加了8个小目标人
0 0.2643229166666667 0.13804347826086957 0.015104166666666667 0.03695652173913044
0 0.2830729166666667 0.15 0.011979166666666666 0.017391304347826087
0 0.35104166666666664 0.1782608695652174 0.015625 0.02391304347826087
1 0.7893229166666667 0.9206521739130434 0.024479166666666666 0.08478260869565217
1 0.8072916666666666 0.6434782608695653 0.016666666666666666 0.1
1 0.5518229166666666 0.8652173913043478 0.0203125 0.08695652173913043
1 0.86484375 0.8597826086956522 0.013020833333333334 0.06304347826086956
1 0.7174479166666666 0.7673913043478261 0.0203125 0.07173913043478261
1 0.89296875 0.779891304347826 0.021354166666666667 0.07282608695652174
1 0.9169270833333333 0.721195652173913 0.021354166666666667 0.07934782608695652
1 0.42916666666666664 0.6565217391304348 0.015625 0.07173913043478261
基本原理
最后整理一下这份代码的基本原理
- 依次读取原始图片,转换标注的坐标,由
class x_center y_center width height
转换成class x1 y1 x2 y2
- 将目标小图(这里是人)进行缩放
- 根据缩放,随机生成
bbox
- 将小图融合到原始图中,使用的是
cv2.seamlessClone
即泊松融合 - 保存新生成的图片,将标注转换回去,生成对应的
txt