记录 day1
今天报名参加了一个水下目标检测比赛,数据集大概长这个样子:
就在这里记录一下每天的心得吧(因为自己比较菜所以就匿名啦)
(一)数据及分析:
数据的话大概就是上面这样子,有几个问题:
- 水下图片比较模糊,而且有的图片是运动时拍摄:
- 样本存在分布不均衡的问题,如图:
- 存在一些错误标注和噪声区域(图像为1080×1960大小):
- 大量目标为小目标,anchor 的大小较为集中,导致偶尔的大目标在训练时容易忽略;
(二)图像预处理:
由于水下拍摄的图像很不清晰,我们需要预处理一下;
现在水下图像去模糊已经研究的比较成熟,但是由于这个比赛的评审最终需要同时考虑精度和速度,我们需要一种高效的处理方式,这里使用了多尺度 retinex 图像增强算法:
上图为处理前,下图为处理后;
(三)网络框架选择:
由于我自己的电脑配置不是很高,所以选取目标检测网络框架主要集中在轻量级检测网络;
一开始想用 ThunderNet 来着,结果官方没有开放源码,Github 上的复现代码被反映有 Bug(自己训练确实也收敛不了),所以现在先做一个 Baseline 吧;
选取的是 Faster-rcnn 框架,使用 MobileNetV2 做 Backbone(为什么不用 V3 呢?因为没有预训练模型,,,),加了一个类似 ThunderNet 中的上下文增强模块(Context Enhancement Module)并额外增加了一个小的 anchor size;
(四)解决样本不均衡问题:
这是个大问题,导致一开始训练的模型是这样的:
(这么大只海参看不见吗,,,)
(黑乎乎的一律认为是海胆)
只能识别海胆,其他的一概不认识(白白浪费一次提交机会);
为了解决这个问题,用了两个方案:
- 使用了何恺明大佬团队提出了 Focal Loss(不过好像这是针对 one-stage 正负样本不均衡提出的,所以实测用处不是很大);
- 先在较为均衡分布的样本上训练,即先去掉只有海胆的图(去掉也不剩多少了,,,);
这样改进的网络正在训练中~
祝我自己好运~