比赛总结:2020 CCF BDCI遥感影像地块分割

目录

  • 前言
  • 赛题介绍
  • 初赛阶段
    • 评测指标
    • 数据和难点分析
    • 策略小结
      • 数据增强
      • 模型训练
      • 弱类处理
      • 预测策略
    • 初赛成绩
  • 复赛阶段
    • 评测指标
    • 问题分析
    • 连通性处理
    • 复赛成绩
  • 问题和经验总结

前言

近期在实验室老师的推荐下开始了我的第一次比赛经历,由于课题与遥感影像相关,所以选择参加遥感影像地块分割(其实是数据集很有诱惑力嘻嘻),下面就这次比赛的过程和经验做个分享总结。

赛题介绍

遥感影像地块分割,旨在对遥感影像进行像素级内容分析,对遥感影像中感兴趣的类别进行提取和分类(说白了就是语义分割任务,只是对象是遥感图像)。
比赛总结:2020 CCF BDCI遥感影像地块分割_第1张图片
本次比赛分类的类别有七类,具体包括建筑、耕地、林地、水体、道路、草地和其他等七类。
比赛总结:2020 CCF BDCI遥感影像地块分割_第2张图片
训练数据集:包含140,000张分辨率为2m/pixel,尺寸为256*256的JPG图片。
A/B测试集:包含相同来源的1w/2w张测试图片。
评测阶段是使用A测试集进行实时排名,最终成绩按B测试集成绩为准,这种评测形式设计特别不错(听说DataFountain平台的比赛都是这种形式)。
由于这个赛题是百度的自主赛题,所以要求只能使用百度的深度学习框架PaddlePaddle,不能使用大家都熟知的TF和Pytorch框架。这次还使用了Paddle的分割套件PaddleSeg,着实感觉真香,所以在这里安利一下我们的国产AI框架(给百度打打广告嘻嘻)。

初赛阶段

评测指标

初赛阶段的评价指标比较简单,使用语义分割的黄金指标,平均交并比miou(具体概念不多叙述)。
比赛总结:2020 CCF BDCI遥感影像地块分割_第3张图片

数据和难点分析

从训练数据的类别占比上明显看出类别不均衡问题,如建筑、道路和草地这三类,所以如何改善类别不均衡问题是一大难点。

类别 标签 占比 %
建筑 0 2.79
耕地 1 50.87
林地 2 17.87
水体 3 17.74
道路 4 0.35
草地 5 1.96
其他 6 7.38
未标注区域 255 1.03

而在前期训练和验证baseline模型结果发现,模型对道路和草地这两类的识别率都特别低,说明这两类对后续的结果影响最为大,我认为这也是最关键的难点(因为大家普遍都能训练好其他的类别,所以在这两类上才能拉开差距)。
比赛总结:2020 CCF BDCI遥感影像地块分割_第4张图片

策略小结

数据增强

在预处理方面,对训练图像做归一化处理;在数据增强上,根据遥感图像的旋转不变性,使用了图像翻转缩放增强(训练数据足够大其实也不太容易过拟合)。
比赛总结:2020 CCF BDCI遥感影像地块分割_第5张图片
比赛总结:2020 CCF BDCI遥感影像地块分割_第6张图片

模型训练

损失函数:在损失函数的选择上,由于存在类别不均衡情况,尝试了Softmax loss、Weighted softmax loss 和Lovasz softmax loss(听说是kaggle常用神器)几种损失函数,最终选择Lovasz softmax loss和Softmax loss的混合损失函数。
模型组合:在模型结构的选择上,也是尽可能地尝试几个较新的模型和骨干网络,最终选择DeepLab3+和ResNet50。我比较佛系,哪个跑得好就一直改那个,没去怼最新的模型(其实是没有足够GPU资源可以玩耍,每周靠白嫖AIStudio的70小时算力度过,相信这是大部分选手的痛点嘻嘻)。
比赛总结:2020 CCF BDCI遥感影像地块分割_第7张图片
Attention机制:在模型改进上,尝试了几种即插即用的注意力机制,如Global Attention Upsample(GAU)、Convolutional Block Attention Module (CBAM)和SENet的Channel Attention Module,都有一点点提升,但不是很高,所以最终选择了简单实现的Channel Attention Module。
比赛总结:2020 CCF BDCI遥感影像地块分割_第8张图片

弱类处理

前面提到模型对道路和草地这两类的识别准确率低得感人,所以需要对这两类做额外的训练处理。
道路类:首先在原训练集上提取一个道路二分类数据集,然后做单独的二分类,这里使用了U-Net+Dice loss组合训练,得到预测的道路二分类结果,最后通过简单的判断条件(两个标签上的道路类匹配度)覆盖到总预测结果上。
草地类:对草地的单独训练则是提取耕地和草地两类出来做三分类(通过观察预测结果发现草地类易被错预测为耕地类),使用和主模型一样的网络训练,最后草地在总预测结果的覆盖上仅发生在草地和耕地两类之间。
PS:虽然这两个类拎出来单独训练的准确率也不高(应该是自己菜的原因),但是还是能提一点分数的嘻嘻。

预测策略

单模型增强:单个模型的预测增强常用有多尺度预测和翻转预测,为控制预测时间,这里仅使用左右翻转和上下翻转各一次做预测增强(在预测前先做翻转,得到标签再翻转回来,这个应该容易理解吧)。单模型增强主要提升了预测的稳定性,所以不需要太多次。
多模型增强:多模型的预测增强即模型集成方法,常用的模型集成方法包含bagging、boosting和stacking(这些我都不会emmmmm)。最终采用多模型预测结果硬投票的方式,少数服从多数嘛(我只会这个嘻嘻)。多模型增强主要靠模型之间的独立性,所以模型之间的相关性越低,集成得到效果更好(前提是单个模型不能太差,因为小学生带不动,反正我带不动)。

初赛成绩

从其他地方整理了许多提分的Trick,最后我能实现的也就上述这些简单的策略,最后初赛的成绩也还算可观哈(对于我这个竞赛小白已经挺满意啦,大佬们见笑了嘻嘻)。
比赛总结:2020 CCF BDCI遥感影像地块分割_第9张图片

复赛阶段

评测指标

复赛阶段评测指标除了计算miou外,还结合遥感任务的特点,根据区域的连续性进行打分,这里仅针对水体类和道路类。
比赛总结:2020 CCF BDCI遥感影像地块分割_第10张图片
比赛总结:2020 CCF BDCI遥感影像地块分割_第11张图片
上述计算公式中,我可以得出一个观点就是尽可能地连通邻近区域和减少无法连通处理的区域数(比如区域不大的噪点)。

问题分析

连通性指标仅针对水体类和道路类进行打分,所以需要解决两方面问题。
准确性:首先需要保证这两类有较高的分类准确度,针对初赛阶段的结果,水体类的准确度足够高,但是道路类的准确度还特别低,需要提升道路类的识别准确性(未解决)。
连通性:对连通性的考虑可以从两方面入手,一是从模型上入手,选择或改进模型,提高预测结果的连通完整性,二是后处理步骤改善连通性。

连通性处理

对提高连通性的考虑上,我第一时间想到的是使用图像形态学来处理这个问题。对水体和道路两类做相同处理,一是进行形态学闭操作(先膨胀后腐蚀,分别设置不同的膨胀腐蚀系数,获得连通的效果),二是去除小面积噪点。
比赛总结:2020 CCF BDCI遥感影像地块分割_第12张图片
如上图所示,图中蓝色为道路类,左边一列为未处理的图像,右边一列为形态学处理后的图像(找到两张还不错的图像展示,实际上道路的识别特别差劲呢)。
上述的形态学操作在scikit-image包的morphology里面都有方便的API使用,这里用到的函数如下表。

函数 描述
skimage.morphology.binary_closing(image,…) 快速返回图像的二元形态闭合
skimage.morphology.binary_dilation(image,…) 快速返回图像的二进制形态膨胀
skimage.morphology.binary_erosion(image,…) 快速返回图像的二元形态学侵蚀
skimage.morphology.remove_small_holes(ar,…) 去除小于指定尺寸的连续孔
skimage.morphology.remove_small_objects(ar) 移除小于指定尺寸的连接组件

复赛成绩

虽然没能进入决赛且相比初赛名次有所退步,但在面对问题、分析问题和解决问题的过程还是有收获的。
比赛总结:2020 CCF BDCI遥感影像地块分割_第13张图片

问题和经验总结

(1)这次选择的主模型没有其他新模型的效果好,这可能决定了最终的上限。若有充足的时间和资源,建议尝试一些更大更新的模型结构,还有可以使用一些即插即用的模块作为提分利器。
(2)本次比赛最大的问题是对道路类的识别太差劲,导致后续的工作无法进行下去。对于道路这类特殊类别,具有细且长等特点,可以针对性地选择合适的模型单练,还有不要随随便便更改模型结构(这次就是在魔改模型上花了很多时间),能改的别人基本都做过实验写进论文啦(多查查原论文)。
(3)个人认为,其实对于连通性问题,使用形态学处理已经可以取得很好的效果了,前提是要有好的识别率。所以前面的问题应该早点去解决,不然会影响后续的问题处理,考虑问题要尽量全面。
(4)要是你有队友的话,要做好合理的协商和分工,不要一个人埋头苦干。这次比赛也在网上看了许多比赛中trick的相关博客,大佬还是大佬,应该多向有经验的前辈请教嘻嘻。虽然我们都是抱着拿奖的目的参加比赛,但更要重视过程中的总结和收获哟!

你可能感兴趣的:(机器学习,计算机视觉,深度学习)