方案介绍
赛题介绍

这是一个道路分割的任务,基于高分辨可见光遥感卫星影像,提取复杂场景的道路与街道网络信息,将影像的逐个像素进行前、背景分割,检测出道路所在区域,下图是数据集局部区域的展示。训练集包含两张大尺寸的可见光遥感图像及对应的标签图。测试集不可见,包含6张4048x6144的图像。
数据端

因为所给训练集是大尺寸的图像,我们选择重叠滑窗的切割方式,将原图切成小图。窗口大小是1024x1024,步长为896。滑窗时过滤掉全黑的无效图像。然后将数据按8:2的比例随机划分为训练集和验证集。
我们使用在线数据增强的策略,包括翻转、旋转和尺度缩放。
网络结构

低分辨的特征包含丰富的语义信息,但由于下采样操作,导致它丢失了部分位置信息。而高分辨率的特征相反,它的语义信息相对较少,但位置信息保留较多,定位相对准确,有利于检测小目标。由于道路大多都是长且窄的形状,就要求模型必须定位准确,也就是说道路的检测依赖于高分辨率的特征。现有的大多数网络都是由高分辨率特征下采样到低分辨率特征,再从低分辨率特征中恢复高分辨率特征,但是丢失的位置信息不能完全恢复。而HRNet在整个阶段都保持高分辨率的特征,有利于道路的检测。此外,HRNet的不同分支产生不同分辨率的特征,这些特征之间交互获取信息,最后得到包含多尺度信息的高分辨率特征。因此选择HRNet作为我们backbone。此外,我们认为道路分割不依赖于非常高级的语义信息,因此就不需要非常深的网络,而且在训练数据量有限的情况下,大网络有庞大的参数量,会有过拟合的风险。因此我们选择的是HRNet系列中的小模型:HRNet18。分割头选择OCR注意力模块,利用目标上下文增强特征表示。整个网络结构小,训练速度和推理速度都较快。在实验中,发现HRNet18在速度和精度上都优于hrnet32、hrnet48和deeplabv3+(resnest50)
损失函数

直接使用交叉熵损失会存在以下的问题。首先每幅图像中道路区域占比少,导致前、背景样本极不平衡。此外,如果逐像素点计算损失然后累加的话,这些简单的背景样本占比大,可能会淹没loss,并且这些简单背景样本对于网络增益较少。因此我们在交叉熵损失的基础上改进。包含三点:增加困难样本的权重,降低简单样本的权重,增加直接优化IOU的损失项。

我们将第k个像素点的交叉熵损失记为CEk,首先,我们认为位于边缘附近的样本点属于困难样本,所选中的边缘区域如下图的白色区域所示,因此我们增加这些区域样本损失的权重。这里E就代表所选中的边缘区域,w是权值。此外,针对大量的简单背景样本,我们采用OHEM的策略,损失值小于阈值的样本点不参与反向传播。最终的损失函数就是改进后的交叉熵损失+lovasz_loss
训练策略

推理与后处理

原始的预测结果有明显的漏检,中间区域没有检测出道路。我们观察了预测为道路的概率热图,越亮表示预测为道路的概率越大,越暗表示预测为道路的概率越小。因此越亮或者越暗表示网络对该区域的预测结果置信度高。我们发现对于漏检的区域,概率热图不亮不暗,也就是说网络对该区域的预测结果不自信,并且预测为道路的概率小于0.5,导致了漏检。因此我们采用了一个简单有效的方法,降低预测为前景类概率的阈值,降低漏检率。并且由于网络对背景区域预测结果的置信度非常高,因此在一定范围内降低阈值,在减少漏检的同时,并不会带来明显的过检。
实验结果

总结

代码:https://github.com/reacher-l/2020-ai-road-segmentation
本文首发 AI Gallery: https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=b7e8a547-7629-46c1-abb2-91347a46969b
本赛事赛题:https://competition.huaweicloud.com/information/1000041322/circumstance
决赛获奖选手分享集锦:https://competition.huaweicloud.com/information/1000041322/share
