目标检测类比赛

Kesci大赛项目:2020年全国水下机器人(湛江)大赛 - 水下目标检测算法赛

比赛介绍

比赛官网链接:http://uodac.pcl.ac.cn/,在真实海底图片数据中检测出不同海产品(海参、海胆、扇贝、海星)的位置,主办方提供训练集和测试集。初赛训练集:提供5543幅训练图像(含人工标注真值数据),本届比赛需检测的目标类别包括海参“holothurian”,海胆“echinus”,扇贝“scallop”和海星“starfish”四类。训练数据真值中可能存在水草“waterweeds”这一类别,请忽略这一类。比赛不限制参赛队伍使用其他来源的数据进行预训练/训练。初赛测试集:A榜测试集:800幅测试图像,B榜测试集:1200幅测试图像(与A榜不重复)。
在这里插入图片描述
在这里插入图片描述

数据预处理

深度学习中,数据往往决定了性能的上限,算法只是不断地逼近上限。从官网下载数据后,首先对数据进行预处理,数据预处理部分包含几部分
(1)需要将XML文件的格式转换为COCO数据的格式
(2)剔除水草标签
(3)图像处理
前两部分都相对容易,主要工作几种在第三部分,以下将介绍几种图像预处理方法:

  1. 自适应直方图均衡化(AHE):自适应直方图均衡化(AHE)是用来提升图像的对比度的一种计算机图像处理技术。和普通的直方图均衡算法不同,AHE算法通过计算图像的局部直方图,然后重新分布亮度来改变图像对比度。因此,该算法更适合于改进图像的局部对比度以及获得更多的图像细节。但由于AHE对局部对比度提高过大,导致图像中相同区域的噪音被过度放大,并导致图像失真。

  2. 限制对比度直方图均衡(CLAHE):CLAHE中,每一个像素邻域都要进行对比度限制,从而得到对应的变换函数,被用来降低AHE中噪声的增强,这主要是通过限制AHE中的对比度增强来实现的。像素周围邻域噪声的增强主要是由变换函数的斜率造成的,由于像素邻域的噪声与邻域的累积分布函数(CDF)成正比,因此也与邻域直方图在该中心像素位置的值成正比,CLAHE之所以能够限制对比度,是因为它在计算邻域的CDF之前在指定阈值处对直方图进行了修剪,它能有限的限制这种不利的放大。

  3. 相对全局直方图拉伸(RGHS):在RGB和CIE-Lab颜色模型中提出了相对全局直方图拉伸(RGHS)。基于灰度世界理论的预处理图像,根据RGB通道的分布特点和水下光传播的选择性衰减,在RGB颜色模型中采用自适应直方图拉伸。最后,亮度L和颜色a;CIE-Lab颜色空间中的b分量分别作为线性和曲线自适应拉伸优化操作。RGHS避免了水下图像特征的盲目增强,提高了图像的视觉效果,保留了图像的可用信息,处理后的视觉效果确实不错,但是这种处理方法耗时较长,处理一张3840x2160的图像需要耗时30s。在论文“An Experimental-Based Review of Image Enhancement and Image Restoration Methods for Underwater Imaging”有很多其他的预处理方式,可以自行查看,RGHS的github链接: https://github.com/wangyanckxx/Single-Underwater-Image-Enhancement-and-Color-Restoration

用RGHS方法的时候,处理一张3840x2160的图像需要耗时30s,处理后的视觉效果确实不错,但是在比赛A榜上一提交,A榜掉分了!!!但是这个代码处理能力确实很强,可以学习下。原图和处理后效果如下图所示:
原图
预处理之后的图像

模型设计及参数调试

最开始首先采用了SSD算法,A榜上提交后只有线上测评只有0.16左右,低的可怜~,之后看到了郑烨(选手名:斩风) 开源的baseline,backbone是ResNeXt101-64x4d,框架是MMdetection,cascade RCNN+FPN,运行提交后,A榜上提交的MAP达到了0.489,3.19日的时候,第一次排名到第七名,激动的不行! 特别感谢这位大佬的开源。

模型调参这部分主要是修改cascade_rcnn_x101_64x4d_fpn_1x.py文件,主要尝试了以下的调参策略:
(1)首先调整resize尺寸大小,采用了多尺度resize策略,训练时将原图的最短边缩放到600和1000两种尺寸。测试时将图像的最短边缩放到600,800,1000三种尺寸进行测试。
(2)调整anchor_scale,anchor_ratio,将原始的anchor_scale调整为6或者8进行尝试。Anchor_ratio=[0.5, 1.0, 2.0]或者[0.2,0.5,1.0,2.0,5.0],使得proposal的大小尽可能贴近于object的大小
(3)调整FPN,将FPN更换为NAS-FPN,采用了4层自动搜索架构NAS,这里介绍下NAS架构, FPN 的众多跨连接构成了很大的搜索空间。在搜索空间中,一个 FPN 由很多 merging cells 组成,然后合并一些来自不同层融合的特征表示。一个 merging cell 将两个来自不同特征层的特征连接融合产生一个特征输出,这样的单元结构就构成了 FPN 的元结构,同时所有的可能的特征层组合由 merging cells 组建化的表示,这也就构成了我们的搜索空间(模块化)。一个 merging cell 的结构如下
在这里插入图片描述
(4)更换优化器。将原始的SGD更换为Adam optimizer,并修改SGD的学习率下降批次,学习率的变化是从小到大,然后再逐渐变小。
(5)调整训练的迭代次数。默认为12
(6)剔除目标太小的目标。对面积小于一定值的目标进行剔除
(7)数据集平衡。采用翻转,对比度变化等实现类别平衡
(8)修改Cascade-Rcnn的每个头部对正负样本的IOU阈值。
(9)修改NMS阈值以及最终产生目标框的阈值score
(10)调整学习率大小

总体来说,感觉MMdetection很强大,很多都集成好了,可以参考链接,https://www.tuicool.com/articles/JZRriaV。

后期处理

在数据预处理及模型改进方面不断掉分后,已经到了比赛末期,因为其实最终大家的成绩相差不多(A榜上第一名的成绩与我的成绩相差小于0.02),开始逐渐开始寻找比赛中一些本质的问题,将label中的box在train的图片上框出来进行观察,发现官方提供的数据集有漏标的情况,有些object根本没有标注,但是却十分明显,所以我把训练好的模型在官方提供的train上进行测试,即把原来的训练集当做测试集来用,会检测出来很多框,然后我把检测出来置信度大于0.6的框提取出来,认为这些框是检测到了物体的,并将这些框与官方提供的lable进行比较,若有些置信度大于0.6的框与原来官方给的框的IOU小于0.5,则认为这是官方漏标的框,并将这些框补充到train的lable中,这样相当于对训练集的lable进行了一定的扩充操作,解决了部分漏标的问题,官方给出的框与补充之后的框如下图所示,可以看出得到了明显的改善:
官方给出的label
扩充框后的效果
用新的lablel重新训练完后提交,又掉分了~,于是又开始分析图像,后来我发现其实这个比赛本质上的难点痛点在于:(1)训练集官方标注不全(2)测试集官方标注的很全(3)图像太过于模糊,水草奇形怪状,很容易被误检测误识别,造成了很多的FP。在我扩充框后重新训练图像之所以掉分,是因为产生了更多的FP,而且FP基本上都是因为水草造成的,所以开始着手考虑如何减少FP,最后采用了一个比较笨的办法,人工分类出少量的水草,并提取出官方给出的少量水草的label,最后把这些合在一起,当做负样本,由于检测出来的大部分框还是属于正样本的,提取出一些海参,海胆,海星,贝壳的正样本,在最后做一个简单的CNN分类器,试图让这个分类器学会区分水草,并在最终提交的.csv文件上进行剔除。训练完分类器后,把由MMdetection检测出来的结果用分类器进行分类,下面分别为echinus(海胆),starfish(海参),scallop(贝壳),starfish(海星)四类水下生物的false与true图像。

在这里插入图片描述
训练完分类器后,把由MMdetection检测出来的结果用分类器进行分类,在A榜上进行提交,线上评分终于得到了提高。。。。。这点很容易理解,减少了FP,precision肯定户会提高,这个不言而喻。但是最终在B榜上提交的时候,又掉分了!!!我想了一下存在的问题,可能是MMdetection在B榜上检测出来的一些物体分类器以前没有见到过(虽然都是那四类水下生物,但是他们的样子不太一样),所以导致分类器最终把一些TP当成了FP,然后给剔除了。
此次比赛,最终A榜排名48名,B榜排名74名。第一次打目标检测类比赛,耗时40天,第一次比赛算是很认真的做完了,一直坚持到4.11日上午9点~,总体还是收获了不少,本次比赛由于疫情在家,所以使用的设备为colab pro,colab总体来说,还可以,虽然colab pro也有很多不足之处,但是价格便宜,期间也遇到了很多坑,但是现在用起来也算是比较得心应手了(毕竟配置了那么多次!!!都是一个坑一个坑踩过来的)。之前一直懒得写博客,都是在本地写写日志,这次打完比赛终于开始写了第一篇博客,希望同各位大佬多交流学习。
数据集链接:
链接:https://pan.baidu.com/s/1uk1s2sPYCo6Mmz0OcQLAZg
提取码:30mx

  • 15
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值