天池打比赛之《街景字符编码识别》进阶过程(目标检测,目前最高得分 5名/0.9405)

街景字符编码识别 比赛链接: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

仙女修炼史

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

暂无评论

发表评论

相关推荐