房龙岩,郭杰,刘佳佳
(1.皖北煤电集团有限责任公司,安徽宿州 234002;2.安徽恒源煤电股份有限公司,安徽宿州 234002)
遥感是地球资源变化监测与管理过程中不可或缺的技术手段,然而,在卫星获取影像的过程中并不是每天都是晴空万里,往往伴随着大量云雾的遮挡,以至于影像部分区域信息丢失,给后续的遥感影像分析解译带来了困难[1-2]。所以,云检测对于光学卫星遥感具有重要意义。
在近些年来,学者们研究了多种云检测方法。其可以分为两类:基于波段阈值方法[3]与基于深度学习的云检测方法[4]。
传统的云检测方法有文献[3]提出了FMask算法,通过设定波段阈值来实现Landsat影像的云检测。然而国产高分辨率卫星的波段数少缺少热红外波段,难以通过光谱信息来进行云检测,所以文献[5]中基于多时相云在红外波段的反射特性的云检测方法不适合国产卫星的云检测。随着深度学习的发展,语义分割技术的不断进步,其也逐渐应用于云检测上来。文献[6]将双重注意机制模型与全卷积神经网络模型相对比,发现双重注意力机制模型用于云检测更为准确。文献[7]对Unet网络结构进行改进,编码器与残差结构相结合,提高了模型的泛化能力,比传统的Unet模型检测精度更优。文献[8]解码器不仅在Unet模型的编码器中引入残差模块,而且在解码器中融入密集连接模块,可以很好地检测出大量薄量的薄云碎云。
基于上述研究,本文提出一种基于改进的DLinkNet模型的国产高分辨率卫星云检测方法。在原始DLinkNet的基础上,使用拆分注意力网络ResNeSt作为backbone替换原始的ResNet,并对损失函数进行加权,只使用交叉熵损失作为损失函数,最后使用条件随机场进行后处理,在国产卫星的云检测方面,较原始的DLinkNet网络结构有明显提高。
1.1.1 DLinkNeSt网络模型
DLinkNet模型[9]是在LinkNet模型的基础上,在编码器与解码器之间添加了空洞卷积模块(dilate block),增大了对特征图的感受野,感受野越大,能够捕获原始图像上的图像特征就越多[10]。
在DLinkNet模型的基础上,受到SENet[11]、SKNet[12]两大注意力机制,ResNeXt[13]及ResNeSt[14]两个backbone的启发,本文提出了包含拆分注意力机制网络的DLinkNeSt模型,其模型结构如图1所示。
图1 DLinkNeSt网络结构
DLinkNeSt结构沿用了DLinkNet模型的编码解码思想,拆分注意力残差模块为在通道维进行拆分成多个模块化的小组,分别通过注意力模块,最后合并得到特征图,可以更好地检测影像的深度特征。
中间的DBlock结构如图2所示。其中箭头内的数字表示扩张率(dilated rate)。即分别使用扩张率为1、2、4、8、16的空洞卷积结构级联,以达到在不改变特征图分辨率的情况下,增大感受野。
图2 DBlock结构
1.1.2 残差模块
DLinkNet中使用的残差模块为ResNet,将原始输入与输出相加,使模型在反向传播过程中减少了梯度爆炸与消散的现象,可以训练出更深的网络结构。其模型结构如图3所示,公式可描述为:
图3 ResNet-Block
然而,本文所使用的残差模块为ResNeSt-Block,其模型结构如图4所示。ResNeSt又被称为拆分注意力网络,借鉴了ResNeXt的使用拆分合并采用组卷积,将Multi-path结构转换为统一操作。借鉴了SENet结构的通道注意力模块,及SKNet的特征图注意力(Feature-map Attention)。
图4 ResNeSt Block结构
1.1.3 加权的损失函数
这里采用的损失函数是在DLinkNet的损失函数基础上,使用加权的方式测试各为多少权重可以达到最好的效果。
DLinkNet的损失函数如下,其中公式(7)为最后的损失函数。
公式中GT表示标签影像,P表示预测影像,N为批大小,W表示影像的宽度,H为高度,gtij为在i,j位置的像素值,pij为在i,j位置的像素值。
在此,对Dice与BCE两个损失函数进行加权操作。加权的DBLoss数学表达式如下:
其中λ与γ之比为DBLoss的权值。
条件随机场最早由Lafferty等[15]在最大熵模型及马尔科夫模型的基础上提出来的一种无向概率图模型,用于标注和分割有序数据的条件概率模型。条件随机场如图5所示。
图5 条件随机场
条件随机场符合吉布斯分布:
式(9)中,Z(X)表示归一化常数,如公式;C为所有基团c的集合;ψ为基团c的势函数;Yc={Yi,i∈c},Yi为像素i的类别标签。
其中,y所对应的Gibbs能量函数为:
首先,使用训练出来的模型对原始影像进行预测,其次,将原始影像与预测出来的标签输入条件随机场中,使用原始影像上的像素作为X,预测出来的标签作为Y,得到经过后处理的云检测标签结果。
这里选取的指标为平均交并比(mIou)、召回率(recall)以及准确率(precision)。其计算方式如下:
公式中的A表示原本为云预测为云的数量,B表示原本为云预测为非云的数量,C表示原本为非云错预测为非云的数量,三个指标越高表示精度越高。
本文的试验均在ubantu16.04,CUDA 10.1,NVIDIA UNIX 64核的PyTorch 1.2.0深度学习框架下进行。
训练之前,首先经过预处理,进行影像数据的扩充,方法有:色彩抖动、水平翻转、垂直翻转、随机裁剪、旋转等。预处理的目的是扩充数据量,对数据进行增广,防止过拟合,提高模型的泛化能力。
参数设置。随机裁剪的大小为512×512,batchsize为4,使用的优化器为Adam,初始学习率为0.001,自动调整学习率,每次调整变为原来的1/2,直到损失值7次不再下降为止。
分别设置DiceLoss与BCELoss的比值分别为1:1、1:0、0:1进行测试的DlinkNeSt模型在测试集上的精度指标,如表1所示。从表1中可以看出,只使用Dice损失的精度最小。其中0:1表示,只是用BCE损失。发现只用BCE损失得到的模型平均交并比与准确率都达到最高。
表1 损失函数权值对模型精度的影响
试验分别使用DLinkNet50、DLinkNeSt50及BCEDLinkNeSt50(即只是用BCE损失函数的DLinkNeSt)进行测试。选取的评价指标为平均交并比(mIoU)、召回率(recall)及精确率(precision)对模型进行评价。训练集上的评价指标结果如表2所示。
表2 训练集上的不同模型评价结果
?
在测试集上的评价指标结果如表3所示。
表3 测试集上的不同模型评价结果
从表2中可以看出,在训练集上,本文算法除召回率上略小于DLinkNeSt50算法,精确率及交并比均为最大。从表3中可以看出,在测试集上,本文算法除在精确率上略小于DLinkNeSt50算法,召回率及交并比均为最大。尽管有两项指标没有达到最优,但是仍然大大优于原始的DLinkNet50算法。
对测试集上的原始影像预测,预测策略为先将原始影像按照顺序裁切为512×512大小的影像,然后使用训练好的云检测模型进行预测,最后将云检测结果按照裁切的顺序进行拼接。从云检测结果对比图中,将图6的结果a1到f1对比,发现红色椭圆框中的云e1与f1均检测出了原始云的位置,并且f1还将该处云的范围还原出来。将图6中的a2到f2进行对比,发现红色矩形框中的薄云,DLinkNet预测精度较差,BCE-DLinkNeSt算法预测精度较高,CRF-BCE-DLinkNeSt算法在BCEDLinkNeSt的基础上保持了薄云的边缘。所以BCEDLinkNeSt50不论是定性判断,还是通过指标定量分析,均优于DLinkNet50与DLinkNeSt50。
图6 云检测结果对比图
针对国产部分卫星影像不能使用传统的基于阈值的方法检测云,以及当前深度学习算法检测云的精度低,误检率高的问题,本文提出了基于改进的DLinkNet模型的国产卫星影像云检测方法。本文的主要创新点如下:
(1)在原始的DLinkNet50的基础上,使用ResNeSt模型替换原始的ResNet模型作为编码器结构,从而可以提取到更多的语义信息。
(2)损失函数上,对BCELoss与DiceLoss加权,提出了BCE-DLinkNeSt云检测算法。
(3)对原始的BCE-DLinkNet进行后处理,提出CRF-BCEDLinkNeSt算法,从而更好地保留了云边缘。
使用人工勾云样本,发现本方法在云检测方面优于原始的结构,提高了云检测的精度,可以辅助人工勾云使用。