天池打比赛之《街景字符编码识别》进阶过程(目标检测,目前最高得分 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改进Backbonefaster_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加入giou50名 / 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分为大目标,然后统计小、中、大目标的数量,以及包含小、中、大目标的图片的数量。

objectobject countimages
small14.72%15.32%
medium77.12%82.97%
large8.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 的错误,分析结果如下:

版本分数错检漏检
V60.9305554252
V7
oversampling 3X
0.9265768265

可以发现,可以发现,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_mapstridebase_sizeanchor_sizenums
128x1284445, 32, 2216384*k
64x648890, 64, 454096*k
32x321616181, 128, 901024*k
16x163232362, 256, 181256*k
8x86464724, 512, 36264*k
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
天池是一个著的数据科学竞赛平台,而datawhale是一家致力于数据科学教育和社群建设的组织。街景字符编码识别是指通过计算机视觉技术,对街道场景中的字符进行自动识别和分类。 街景字符编码识别是一项重要的研究领域,对于提高交通安全、城市管理和智能驾驶技术都具有重要意义。街道场景中的字符包括道路标志、车牌号码、店铺招牌等。通过对这些字符进行准确的识别,可以辅助交通管理人员进行交通监管、道路规划和交通流量分析。同时,在智能驾驶领域,街景字符编码识别也是一项关键技术,可以帮助自动驾驶系统准确地识别和理解道路上的各种标志和标识,为自动驾驶提供可靠的环境感知能力。 天池和datawhale联合举办街景字符编码识别竞赛,旨在吸引全球数据科学和计算机视觉领域的优秀人才,集思广益,共同推动该领域的研究和发展。通过这个竞赛,参赛选手可以使用各种机器学习和深度学习算法,基于提供的街景字符数据集,设计和训练模型,实现准确的字符编码识别。这个竞赛不仅有助于促进算法研发和技术创新,也为各参赛选手提供了一个学习、交流和展示自己技能的平台。 总之,天池datawhale街景字符编码识别是一个具有挑战性和实际应用需求的竞赛项目,旨在推动计算机视觉和智能交通领域的技术发展,同时也为数据科学爱好者提供了一个学习和展示自己能力的机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值