文章目录[隐藏]
街景字符编码识别 比赛链接:https://tianchi.aliyun.com/competition/entrance/531795/information
一、赛题数据
训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置,测试集A包括4W张照片。
二、版本升级过程
由于主要偏向目标检测方向,因为是打比赛,因此我直接使用mmdetection中中的faster_rcnn来训练:
物体检测性能提升,一般主要通过数据增强、改进Backbone、改进FPN、改进检测头、改进loss、改进后处理6个常用手段。
- v1: 分析了训练图片的大小,img_scale=(400, 200), 另外这种文字型的检测不适合flip,因此flip_ratio=0.0,训练了12个epoch,其中第10个epoch的时候降了一个学习率,分数进步很多,但是距离NO.1还差很多。
- v2: 将基础网络resnet101换成了ResNeXt101,分数直接从0.874上升到0.889。
- v3: 训练的时候加入了在线难例挖掘OHEM,分数上升到0.890,感觉这个提升不一定是来自OHEM,有可能是模型的左右摇摆,但是加入OHEM一定是好的。
- v4: 增加了数据增广,以及多尺度训练,分数直接上升到了0.919。
- v5: 清理训练集,用v4的模型跑一遍训练集,将预测结果和xml结果对比,将不一样的挑出来,大概有三千多张,发现挑出的这些数据,有很多漏标注,以及前景非常模糊,分辨不出是哪个类别的数据,三千多数据的清洗过程是:手动将漏标注的前景框出来,将非常模糊,分布不出来类别的数据剔除出去,大概剔除了600+的数据,清洗训练后的数据发现了一个有趣的现象,可以先看曲线:
数据清洗前 | 数据清洗后 | |
---|---|---|
学习率曲线 | ||
mAP曲线 |
可以发现:
1、数据清洗前,降了一次学习率,再学习几个epoch之后,mAP出现断崖式下降,数据清洗之后,降了两次学习率,mAP没有下降,缓慢的逐步上升;
2、数据清洗前,在10个epoch之后,降一次学习率,发现第11个epoch的结果最好,测试的最好结果是0.919,但是数据清洗后,还是在10个epoch之后降一个学习率,还是用第11个epoch测试,发现结果是0.9177,当时我以为清洗的3000+的数据,对于3w的数据集没啥影响,想着往后再训练看看的原则,在第15个epoch又降了一次学习率,一直训练到17个epoch,发现第17个epoch的成绩是0.9241,还是挺不错的。
3、[0, 10],降一个学习率,[10, 15] 再降一个学习率,在第17个epoch进行测试时,map = 0.9241;[0, 10],降一个学习率,[10, 20] 再降一个学习率,在第22个epoch进行测试时,map = 0.9269
- v6 加入了GIOU loss, 分数提高到了0.9305
- v7 非常重的数据增强
采用的数据增强方式:PhotoMetricDistortion、RandomShift、RandomAffine、MinIoURandomCrop、Corrupt(defocus_blur)、Expand。
发现,数据增强比较重时,收敛时间会增加,正常的数据增强(resize +PhotoMetricDistortion),25~30个epoch就收敛了,增强比较重时,测试结果最好的是在第36个epoch,分数为0.9345 - v8 去掉重复框。检测结果里面有很多不同类直接的重复框,这个比赛是错一个字符,就算都错,所有去掉重复框之后,分数增长到0.9405
各种版本升级过程
版本 | 改进方向 | 方案 | 名次 / 分数 |
---|---|---|---|
v1 | \ | faster_rcnn_r101_fpn_1x.py img_scale=(400, 200),flip_ratio=0.0 |
149名 / 0.874 |
v2 | 改进Backbone | faster_rcnn_x101_32x4d_fpn_1x.py 把基础网络r101换为x101 |
135名 / 0.889 |
v3 | 改进后处理 | faster_rcnn_x101_32x4d_fpn_1x.py 加入OHEM |
130名 / 0.890 |
v4 | 数据增强 | faster_rcnn_x101_32x4d_fpn_1x.py 1、多尺度训练 (400, 200)到 (800, 400) 2、数据增广加入RandomAffine 和 MinIoURandomCrop |
70名 / 0.919 |
v5 | 数据增强 | 数据清洗 | 63名 / 0.927 |
v6 | 改进loss | 加入giou | 50名 / 0.9305 |
v7 | 数据增强 | 很重的数据增强 | 17名 / 0.9345 |
v8 | 后处理 | 去掉重复框 | 5名 / 0.9405 |
三、数据分析
分数进入到0.9305之后,再提高就很难了,只能先分析训练数据,看从分析的结果中能不能获得些想法
1、训练图片数据分析
1.1、训练数据图片尺寸分布图
图1、 图片尺寸分布 |
---|
1.2、训练数据中0~9类别分布图
图2、 类别分布 |
---|
1.3、训练数据中,目标框大小分布,这里计算的是目标框面积与图片面积的比
下面展示的是10个bin的直方图,下面只要是关于尺寸的,都是在这10个bin中进行展示。
图3、 目标框面积与图片面积比分布 |
---|
1.4 大、中、小目标统计分布情况
图1.3是目标框面积与图片面积比分布的直方图,我把分布在第1个bin范围的划分为小目标,把2,3,4 bin范围的分为中目标,把剩下的bin分为大目标,然后统计小、中、大目标的数量,以及包含小、中、大目标的图片的数量。
object | object count | images |
---|---|---|
small | 14.72% | 15.32% |
medium | 77.12% | 82.97% |
large | 8.16% | 14.62% |
从上表可以看出,有14.72%的目标框为小目标,77.12%的为中目标,8.16%的为大目标;其中15.32%的图片包含小目标, 82.97%的图片包含中目标,14.62%的图片包含大目标。
1.5 目标框长宽比例分布
图4、 目标框宽高比比例分布 |
---|
可以发现,大部分的目标框是w:h = [0, 1] 之间,即高是大于宽的。
2、测试数据中的错误类型
2.1目标框正确,分类错误的类型
53的意思是类别5错分为3,纵坐标是这种错误的个数,同理,86的意思是,类别为8错分为6的个数。
图6、 目标框正确,分类错误时,分类的错误类别分布 |
---|
2.2 错检(把背景误检为目标)尺寸分布
图5、 错检在目标框尺寸区间的分布 |
---|
2.3 漏检(把目标误检为背景)尺寸分布
图6、 漏检在目标框尺寸区间的分布 |
---|
从2.1 和 2.2可以看出,错检和漏检主要分布在小目标上面。
四、不是很成功的尝试
1、尝试解决小目标问题
A)、从图5和图6可以看出,错检和漏检主要是发生在小目标上,这里的小目标指的是面积比落到第一个bin中,论文《Augmentation for small object detection》中对小目标进行了分析,提出了两种方案,其中一种就是对包含小目标的图片进行oversampling,oversmapling的倍数直接影响训练结果,下表是实验中的表格:
可以看到,oversampling虽然能够提高小目标的AP,但是同时也在损失大目标的AP,并且并不是oversampling的倍数越大越好,在实验中,3倍是数值最好,其实作者也说,这个是小目标和大目标之间的trade-off。
我在这次尝试中,将第一个bin涉及的图片,也进行了oversampling,我的倍数是3 ,训练结果不好,分数由0.9305将为0.9265。我们只分析第一个bin 的错误,分析结果如下:
版本 | 分数 | 错检 | 漏检 |
---|---|---|---|
V6 | 0.9305 | 554 | 252 |
V7 oversampling 3X |
0.9265 | 768 | 265 |
可以发现,可以发现,oversampling 之后,小目标的漏检变化不明显,但是错检更多了,多了很多,我估计导致这个现象的原因是,小目标的数据中有很多噪音,所以下一步的改进是,清洗小目标数据,然后oversampling 的倍数降到2,训练一下,看结果如何。
B)、清洗包含小目标的图片,然后oversampling2倍之后,再测试,原本以为测试分数会突破0.93,要哭了,还是太单纯,分数还是0.925左右,这里说一下,目前我还是不打算换网络,我想在固定网络的情况下,把想到的方法都试一下,不管是失败的,还是成功的,想看下网络的反应,另外,还是要加强解决问题的能力。
2、设计anchors
scales=[8],
ratios=[0.5, 1.0, 2.0],
anchor_size = base_size * scales*1/sqr(ratios)
假设网络输入为512x512
feature_map上每个锚点预测k个anchor框
feature_map | stride | base_size | anchor_size | nums |
---|---|---|---|---|
128x128 | 4 | 4 | 45, 32, 22 | 16384*k |
64x64 | 8 | 8 | 90, 64, 45 | 4096*k |
32x32 | 16 | 16 | 181, 128, 90 | 1024*k |
16x16 | 32 | 32 | 362, 256, 181 | 256*k |
8x8 | 64 | 64 | 724, 512, 362 | 64*k |
版权声明:本文为CSDN博主「仙女修炼史」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45209433/article/details/121850273
暂无评论