2020 CCF BDCI 遥感影像地块分割冠军竞赛方案 语义分割trick整
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
作者丨.D@知乎(已授权)
来源丨
编辑丨极市平台
导读
本文是作者参加CCF BDCI获得冠军的比赛经验总结以及语义分割trick的整理。作者的比赛方案最大的特点是将连通性问题转换为二分类问题解决,结果优异,传统图像形态学后处理仍然可靠。且无须针对性设计loss和,分类器可用多种小模型,实际环境下并行处理也更快。
赛题分析
赛题分析
这次比赛也是第一次正式参加的比赛,地块分割本质上也是个语义分割的问题,之前没搞过,花了比较多的时间对网上的trick进行了整理学习,见最后附录整理的资料。初赛并不困难,主要考虑7类结果的平均IOU,复赛加入了对水体和道路类的连通性评判指标。最终的方案以较大的优势在A榜和B榜取得了第一名的成绩。
数据分析
数据分析
统计数据集中各类面积占比饼状图如上图所示,可以发现数据集中存在类别不均衡现象,建筑、道路和草地类较少,而其他类较多。进一步的统计,可以得知只有分别约7%/10%/13%的图片满足建筑/道路/草地面积占比大于1%。数据存在极度类别不均衡现象,常规的方法不适于训练。
分析
结合结果可以发现,尽管建筑类数据较少,但由于其地貌容易辨识,分类结果较准确;而道路和草地类则因为与其他类存在相似性,但训练数据不足,结果较差。因此,提升模型分类能力(MIOU)的关键是解决类别不均衡问题,尤其是道路类和草地类。
思路介绍 整体思路
整体思路
要解决这些问题,直接的方式是使用针对IOU设计的损失函数进行re-(如- Loss、 Focal Loss等),但训练较慢,结果收敛不稳定。其次是可以针对特殊类设计模块,但结构复杂且周期长。最终我们借鉴了的思想,用不同概率分布的训练数据训练一系列弱分类器,并通过投票融合得到强分类器。这里之所以用类似,是因为与不同,我们这里的数据并不是每轮增加错误样本权重,弱分类器的**“弱”**也是指特殊类别上弱,融合权重根据准确率与连通性需求人为规定。
数据处理
数据处理
为了获取不同的训练数据,我们设计了不同数据处理方案:(1) 划分道路草地类正负样本(负样本指不包含该类的样本),多阶段逐步增加负样本比例(借鉴的 的思想由简单到复杂训练,结果更好收敛);(2) 在原数据的基础上,对道路草地类样本re-,为了避免过拟合,对重采样数据进行多种数据增强(水平翻转+垂直翻转+放缩为0.75/0.875/1.125/1.25倍),与re-相比,简单直接效果好;(3) 针对建筑/道路/水体类转换处理得到二分类训练数据(同样进行数据增强并加入随机旋转90/180/270度),训练特殊的二分类器,加强模型对特殊类别的前景后景区分能力。在数据增强时,我们还进行了阈值筛选,仅对面积占比较大的图像进行相应处理,直觉上这些数据对训练更友好。
值得注意的是,上图中预测效果对比可以发现,多分类模型只能识别笔直的道路,部分弯曲的道路难以识别,而二分类模型可以很好地识别弯曲的道路,并且连通性也更好,这也是我们复赛的主要思路(很长一段时间内都比第二名高3-5个点)。
模型训练
模型训练
有了这些数据,我们训练了一系列以HRNet和为的模型。并且我们探索了SE、CBAM、scSE等 ,最后是采用了提升效果最多的SE 。由于比赛经验生疏,当时训了些许大模型,然而融合后提升微薄,实际上模型差异越大后续融合结果一般更好。实际环境下,若考虑计算开销,也许训练UNet等诸多小模型融合,效果更好,速度更快。
模型预测
模型预测
在测试时,我们进行了多种数据增强,包括尺度放缩、水平/垂直翻转、90度倍数旋转(实际上,原图+水平翻转+垂直翻转+180度旋转足矣,更多的TTA提升效果很小)。得到这些预测后,我们不是进行分数求和的软投票,而是逐像素少数服从多数的硬投票,并且用二分类预测逐优先级覆盖多分类预测,人为地规定了道路>水体>建筑>其他的优先级。这里我们利用多进程+numpy矩阵运算,大大减小了投票花费的时间。
连通性后处理
连通性后处理
最后我们使用形态学处理进一步提高了连通性,首先是用闭运算连接断裂处以及中值滤波去除毛刺;其次用面积和长度筛选阈值孤立像素团,用左边像素类别进行替换去除;第三是设计了骨架连通性增强方案,提取出某类的骨架,并适当地膨胀腐蚀,保证连通的同时不会过度超出原始预测区域;最后是设计了一个动态优先级算法,动态地进行不同类别的覆盖(主要考虑水体与道路类覆盖优先级)。
结果对比
原图(左),单模型预测(中),多模型预测(右)
最终的结果输出如上图右所示,可以看到最终的预测图更加平滑,类别噪点大大减少,并且保证了道路和水体较好的连通性。这里融合的结果更多考虑了连通性,因而可能存在“误判”的结果,实际环境下可考虑准确性和连通性的权衡,调整阈值和权值。
总结
方案最大的特点是将连通性问题转换为二分类问题解决,结果出奇地好,传统图像形态学后处理仍然可靠。无须针对性设计loss和,分类器可用多种小模型,实际环境下并行处理也更快。来了新的类别,大可以训练二分类器简单投票,数十个迭代即可得到较强的分类器。
整场比赛打下来挺累的,日常翘课熬夜debug,所幸最后结果尚可。答辩时也认识了不少比赛老手,感慨自己经验尚浅,无论是在学术上还是工程上,都有很大的进步空间,继续努力吧~
最后,有各种比赛、论文合作意愿的小伙伴可私戳,带带弟弟,thx~~
附录-语义分割trick整理
语义分割训练与优化技巧(%E8%AF%AD%E4%B9%89%E5%88%86%E5%89%B2%E8%AE%AD%E7%BB%83%E4%B8%8E%E4%BC%98%E5%8C%96%E6%8A%80%E5%B7%A7/)
Ship 卫星图像分割检测()
气胸识别分割比赛新手铜牌总结及冠军分案()
冠军告诉你,如何从卫星图像分割及识别比赛中胜出?()
优胜者详解:如何用深度学习实现卫星图像分割与识别()
ECCV 2020 大规模实例分割挑战赛(LVIS )冠军方案()
TGS 盐体分割任务第五名解决方案:硬核高中生玩家,模型集成策略太高级了看不懂()
图像分割比赛中的损失函数及keras实现:介绍了BCE、 BCE、Dice和 loss()
数据增强repo,注意里面做分割的demo ipynb:
CRF后处理