卢涵宇*,胡超,张涛2,卞林3,袁咏仪4,郭彩
(1.贵州大学大数据与信息工程学院, 贵州贵阳550025;2.贵州力创科技发展有限公司, 贵州贵阳550018;3.贵州信鸽科技有限公司, 贵州贵阳550025;4.贵州六盘水三力达科技有限公司, 贵州六盘水553001)
近年来,随着遥感技术的发展,高分辨率遥感影像(high resolution remote sensing images, HRRSI)获取难度降低,对应遥感影像所反映地面的场景、细节也越来越丰富,各类场景间的相似性也随之增大,使得遥感影像场景分类的难度也越来越大。诸多研究者对遥感影像分类问题付出了大量的时间和精力。
传统的分类算法,如贝叶斯模型、SVM、KNN等分类方法,无法对遥感影像进行准确地分类。随着2012年深度学习算法Alex Net[1]赢得图像分类比赛ILSVRC冠军,深度学习开始受到学术界的广泛关注,伴随着GPU的普及,各类优秀的图像分类算法如VGGNet[2]、GoogLeNet[3]、ResNet[4]等得到快速地发展,同时也促进了遥感影像场景分类的发展。党宇等[5]基于面向对象的图斑分类体系,通过微调Alex Net模型实现了对地表覆盖分类图斑的评价。王鑫等[6]提出一种基于深度卷积神经网络和多核学习的遥感影像分类方法,解决了深度学习的遥感影像分类方法不能有效融合多种深度特征及分类器参数选择困难等难题。陈斌等[7]通过基于迁移学习的中分辨率遥感影像自动分类方法解决了传统基于像素的中分辨率遥感影像分类过程存在椒盐噪声的问题,结果表明深度学习分类方法能够有效抑制地物在分类过程中出现的像元混分现象。2017年,SABOUR等[8]提出胶囊网络(capsule networks,CapsNet)的网络结构,由于CapsNet在训练过程中能够有效提取图像中的特征为多维向量,所以对比CNN需要大量的训练样本而言具有明显的优势。LI等[9]通过CNN, CapsNet, SMDTR-CNN, SMDTR-CapsNet进行多种变化和多场景类的HSRRS图像分类对比,结果表明SMDTR-CNN具有高达95 %的整体精度,CapsNet在遥感影像的场景分类中表现良好。张文豪[10]通过CapsNet网络解决了CNN无法对高光谱影像内部数据的空间层次关系做出正确判断的问题。郝子煜等[11]对比了CapsNet与GoogLeNet在手指语识别任务中的表现,结果表明在添加了噪声的条件下,CapsNet模型优于GoogLeNet模型,其平均识别率达到了95.4 %。
目前,遥感影像数据集的样本整体偏少,加上遥感影像的空间信息比较丰富,利用神经网络进行场景分类过程中,难以取得很高的分类识别精度;虽然CapsNet还处于发展阶段,研究人员将其用于遥感影像场景分类的案例还比较少,但在前人的研究中CapsNet能够在图像分类中具有良好的分类准确度,同时,CapsNet在训练过程中能够提取图像中的特征为多维向量,在数据较少的情况下进行分类仍然拥有较高分类精度,所以本文以城市区域高分辨率遥感影像作为数据集,将CapsNet应用于该数据集的场景分类中,为下一步深度学习打下基础。
当前基于计算机图像分类的方法主要采用卷积神经网络分类方法,其发展于1998年LECUN等[12]提出的LeNet-5模型,一个完整的卷积神经网络通常包括输入层、卷积层、池化层和全连接层。随着GPU与深度学习框架的发展,无数学者经研究发现,通过增加网络层数、改变激活函数、增加反向传播等方法改进网络能够解决现实中面临的很多问题,致使卷积神经网络得到快速地发展。
在经典的卷积神经网络中,当需要模型输出质量偏好的解决办法就是通过增加模型的训练深度或者增加神经元的个数,使得网络层次更深或者宽度更宽,就容易产生以下问题:首先是网络训练参数过多,使训练过程容易产生过拟合;其次是网络设置越大,参数越多,导致计算量越大,难以训练;最后是网络越深,越难以对模型进行优化。
SZEGEDY等[13]提出了GoogLeNet (InceptionV3)模型解决了以上的缺陷,InceptionV3共有46层,由11个Inception模块组成,Inception模块中将较大的二维卷积拆分为较小的一维卷积,模型的参数变少,同时模型能够处理更多、更丰富的空间特征,增加特征的多样性。其中InceptionV3对Inception模块进行了优化,具有三种不同的结构,如图1所示。
(a)35×35结构
(b) 17×17结构
(c) 8×8结构
GoogLeNet模型层数及复杂度都很高,利用数据集从头开始训练,需要庞大的标注数据集和大量的训练时间,由于本实验数据集数据并不庞大,其结果仅用于对比CapsNet训练结果,因此,迁移学习成为此次对比实验的首选,通过将训练好的InceptionV3模型的权值和参数运用到本实验数据集,并微调参数使得模型能够适应本数据集,进而节省大量的训练时间。
在卷积神经网络中,由于其自身的特性能够将庞大的数据特征进行不断地降维,并通过池化过程对网络进行加速,使得卷积神经网络能够实现大图像数据的机器分类成为可能。正因如此,在使用卷积神经网络进行训练过程中,由于池化过程是对特征图进行抽样,从而导致图像中的一些有效信息损失,所以文献[8]为解决图像分类过程中将数据进行丢弃的问题,提出了CapsNet网络,CapsNet用向量替换卷积神经网络中的神经元以保持特征之间的空间关系,解决了卷积神经网络由于池化过程所失去的一些细节信息,从而导致分类结果不准确的问题。
1.2.1 CapsNet网络模型
CapsNet由多个胶囊组成,胶囊对输入的数据进行一些非常复杂的内部运算,然后将运算结果封装为一个包含了丰富特征信息(例如:对象位置,大小,倾斜状态、形变等)的向量;低层输出的参数到达高层胶囊后,会变为对输入实体的状态预测,当预测结果一致时,则输出这一层的结果。
图2显示了Hinton胶囊网络的架构,第一层是一个具有256层,卷积核大小为9×9,激活函数采用Relu函数的卷积层,使得胶囊网络能够将图像的基本信息进行获取,传递到高层神经元中去;第二层是PrimaryCaps层,该层中B1和B2取决于输入图像的大小,每个胶囊的大小为D1×D2,其计算结果基于B1和B2,F表示主胶囊中的维数,E1和E2分别表示PrimaryCaps和DigitCaps(digit capsule)中胶囊的输出矢量大小,C表示最终判别的种类数量。网络中从PrimaryCaps和DigitCaps是全连接的,不像卷积神经网络是标量与标量的连接,此层的连接是向量与向量的连接,通过动态路由算法迭代计算后输出。DigitCaps到最终的输出,其长度表示其表征的内容出现的概率,和经典神经网络不同的是最后的结果是取输出向量的L2范数,而不是输出的概率总和为1。
图2 CapsNet结构Fig.2 CapsNet structure
1.2.2 胶囊层
CapsNet 是一个三层的浅层网络,由一层卷积层和两层胶囊层组成[10]。卷积层的作用是提取输入实体的特征;将获取的特征图传递至后续的胶囊层中,其工作流程见图3。
由图2和图3可以得出CapsNet的全连接层的输入为结合了耦合系数的线性加权求和,其计算公式如下:
(1)
其中:
(2)
(3)
(4)
vj=squash(sj),
(5)
即:
(6)
式(6),表示通过胶囊输出的向量经Squash进行挤压,使其结果v趋近于[0,1]之间,用于评价分类结果的好与坏,即用于预测分类结果的概率。
本次实验采用的高分辨率遥感影像数据集是通过收集来自AID、UCMerced_Land数据集和通过谷歌地球截取的部分区域场景图所构成的用于城市区域的场景分类国家数据库,包括高架桥,桥梁,裸地,耕地,森林,商业区,居民区,池塘,机场与河流;并统一大小为128×128,3通道像素的图像,其中数据集的实例如图4所示,所选数据集中存在相似性,所以在进行城市区域场景分类中变得难以实现。
(a) 河流
(b) 耕地
(c) 高架桥
(d) 桥梁
(e) 商业区
(f) 裸地
(g) 森林
(h) 池塘
(i) 机场
(j)居民区
为了检验CapsNet的性能,利用TensorFlow开源架构设计和实现深度神经网络GoogLeNet与之作对比,并对数据集进行扩充处理,使得数据在处理过程中能够具有多样性和较大的数据样本,其增强内容包括:图像归一化、旋转、反转、色相的调整。
本实验配置:采用ADM2600X处理器,核心3.6 GHz,一块GTX1660TI GPU,操作系统为Win10,采用TensorFlow1.11开源深度学习框架作为实验环境。考虑到模型间存在差异,所以为了使得训练效果能够比较直观对比,统一设置模型的学习率为0.01;数据集按照8∶1∶1随机分为训练集、验证集、测试集。
实验中HSRRS图像数据集与ImageNet图像数据集之间存在差异,如果直接采用InceptionV3所获取的特征数据做分类,难以得到让人满意的结果[14],所以在InceptionV3获取的特征数据后加入特征融合层,能够得到更加多样化的特征显示[15]。具体场景分类的过程如图5所示。
图5 GoogLeNet分类框架Fig.5 GoogLeNet classification framework
GoogLeNet模型训练过程的训练损失和验证集准确率变化如图6所示。此模型训练时间为5 h,经过200个Epoch后Loss下降到0.013 5左右。为了解模型的分类能力,通过验证集对模型进行了分类测试,经过200个Epoch后准确率达到96.74 %。然后使用测试集对GoogLeNet模型进行测试,得到最终的分类精度为95.9 %。说明通过增强数据集后进行迁移学习能够取得良好的分类效果。
(a) 训练损失
(b) 验证集准确率
图6 GoogLeNet的训练损失、验证集准确率
Fig.6 Variations in loss in training and accuracy in validation epoch of GoogLeNet
图7显示了城市区域中遥感影像数据集分类的CapsNet架构。该体系结构可以分为两个主要层:
① 卷积层包括卷积(卷积核3×3,步长为1,采用SAME填充模式),激活函数(采用Relu)和最大池化层(核为2×2,步长为2)。这里采用最大池化层的目的有两个,一是目前CapsNet还不能支持大尺寸图像数据集的分类,通过池化层对输入图像的特征图进行压缩;二是能够简化网络计算的复杂度并保留输入图像的有用的特征信息。
② 胶囊层,包括PrimaryCaps层、DigitCaps层、全连接层。胶囊层的功能类似于CNN中的完全连接层,但它可以获得向量而不是标量。
图7 CapsNet分类框架Fig.7 CapsNet classification framework
CapsNet模型训练过程的训练损失和验证集准确率变化如图8所示。此模型训练时间为3 d,经过200个Epoch后Loss下降到0.02。为了解模型的分类能力,通过验证集对模型进行了分类测试,经过200个Epoch后准确率达到94.64 %。至此,上述数据表明该训练和测试的CapsNet模型适用于城市区域的场景分类。然后使用测试集对CapsNet模型进行测试,得到最终的分类精度为92.6 %。说明CapsNet应用于城市区域内遥感影像分类能够取得较好的分类效果。
(a) 训练损失
(b) 验证集准确率
图8 CapsNet的训练损失、验证集准确率
Fig.8 Variations in loss in training and accuracy in validation epoch of CapsNet
本文通过将CapsNet应用于城市遥感影像场景分类中,并于GoogLeNet进行对比实验发现,对数据集进行扩充后,利用预训练 InceptionV3 模型在遥感影像数据集上进行迁移识别训练,取得了较好的分类准确率。实验结果显示模型在测试集上最终的准确率为95.9 %,同时,在CapsNet模型上测试集的准确率为92.6 %,具有较高的分类准确率,说明深度神经网络能够较好地区分城市区域内的场景问题;对比后发现将数据集应用于仅三层的浅层CapsNet网络就能够拥有较高的分类准确率,并达到和GoogLeNet拥有接近的分类准确率,说明CapsNet在遥感影像场景分类中具有巨大的发展潜力。