本人最近在研究路网生成算法,遇到瓶颈,借鉴卫星图识别的经典算法。
1.Introduction:
道路提取可视为二值语义分割任务,像素级二分类。
卫星图路网分割的挑战:
1. 输入的图像是高分辨率的,因此网络应该有大的接收范围,可以覆盖整个图像。2. 卫星图像中的道路往往细长复杂,覆盖了整个图像的一小部分。在这种情况下,保存详细的空间信息非常重要。3. 道路具有天然的连通性和较大的跨度。考虑到道路的这些自然属性是必要的。
通俗解释下上述挑战,因为道路长,可能横贯整个样本,所以需要大的视野域进行特征提取;因为道路细,前景背景占比悬殊,所以需要保留特征的空间信息,故扩大视野域不适合增加pooling层,从而破坏空间特征。扩大视野域的另一个好处是可以学习到道路的连通性和跨度特征。
Linknet是一种有效的语义分段神经网络,它利用了跳跃连接、残差块和编解码器结构的优点。
D-LinkNet使用带有预训练的编码器Linknet作为其主干,并且在中心部分具有附加的膨胀卷积层。因此本文的闪光点在于添加膨胀卷积层扩充视野域。
膨胀卷积的优势:
膨胀卷积是在不降低特征图分辨率的情况下增大特征点的感受野。通常有两种模式,级联和并行模式,这两种模式都显示出很强的提高分割精度的能力。我们充分利用了这两种方式的优点,采用快捷连接的方式将这两种方式结合起来。使用池化层可以成倍增加特征点的感受野,但可能会降低特征图的分辨率,并丢失空间信息。pooling减小图像尺寸增大感受野后用upsampling扩大图像尺寸同样可以保持分辨率的同时扩大感受野,但是在先减小再增大尺寸的过程中,肯定有一些信息损失掉了。因此空洞卷积层是池化层的理想的代替选择。
在语义切分领域,用ImageNet预先训练的权值初始化编码器取得了令人满意的结果。
2. Network Architecture
D-LinkNet分为三部分 A, B, C三部分, 分别是 encoder, center part 和 decoder 。
Linknet只有A,C的机构,D_linknet额外增加了B(也就是中心部分),用于扩大接受范围,保存详细的空间信息。
D-LinkNet使用几个膨胀的卷积层,中间部分带有跳过连接。
Dilated convolution: 空洞卷积(膨胀),在标准的 convolution map 里注入空洞,以此来增加 感受野。dilation rate 指的是kernel的间隔数量(e.g. 正常的 convolution 是 dilatation rate 1)。
上述center part部分特征大小为32*32,视野域分别为31/15/7/3/1。几乎可以遍历整个samples。
3.训练:
数据扩增-图像形态变换:
①、随机翻折:包含水平、竖直、对角线三种翻折方式,每张图片扩增为原来的8倍。
②、随机缩放:将图像随机缩放至多10%。
③、随机偏移:将图像随机上下左右偏移至多10%。
④、随机拉升:将图像随机沿竖直方向或水平方向拉升至多10%。
经过以上四种变换之后,再截取图像中心1024*1024的部分,不足的部分补0。
数据扩增-图像色彩变换:
使用OpenCV,在HSV空间对图像进行色彩变换。在OpenCV中,每个像素的HSV保存在uint8的数据类型中(0~255)。
①、H空间,随机变换(-15~15)。
②、S空间,随机变换(-15~15)。
③、V空间,随机变换(-30~30)。
loss = BCE (binary cross entropy) + dice coef?cient loss
4.测试:
由于卫星图像具有翻折和旋转不变性,在测试时,我们将图像进行水平、竖直、对角线三种翻折,每张图片预测8次,然后将8次的结果平均。(我们没有旋转图片是出于预测时间的考虑)
?
U-net有把背景识别为道路的错误,LinkNet34在道路连续性上存在不足。D-LinkNet避免了这两种错误。