刘柏森,刘志衡,孔伟力
(黑龙江工程学院 电气与信息工程学院,黑龙江 哈尔滨 150001)
根据农业农村部发布的农业绿色发展技术导则(2018—2030),推动智慧型农业技术模式发展对构建农业绿色发展的技术体系起着重要的支撑作用。高光谱图像[1]处理是智慧农业技术链中重要的一环。高光谱有着波段数量多且连续、光谱范围狭小、数据信息量大、信息冗余高等特点,面对复杂农业生产情况,特别是在有害生物远程诊断[2]、实时监测和地物识别分类等方面有着独到的优势。然而1幅高光谱[3]往往由数百甚至上千个波段组成,这些同一像元的光谱信息带来了数据量的几何性增长,这都造成了信息提取和处理的困难。
在已往的高光谱数据研究中,分类是一个重点和热点。分类需要人工标记,但这是一个费时费力的过程,尽量减少人工样本的数量,达到好的高光谱数据分类效果是分类研究的主要目的。目前已经有一些取得了一定成果的成熟的高光谱图像分类算法。而本文提出的聚类系统,相较于分类是一种无监督的分类学习方法,区别在于没有任何先验知识,不需要人工标签,由计算机自主对数据进行分类处理。目的是将高光谱样本中所有相同或相似的元素尽可能分为一类,而使不在同一类中的元素尽可能不相似。在经过这个过程以后,数据量会大大减少,为下一步的处理和应用带来方便。因此,高效而准确的聚类结果对高光谱图像数据的处理及应用有非常积极的影响,对比依赖传统经验的分类算法[4],聚类可更深层次地发现一些数据的本质特征,更好地了解地物目标。
深度学习[5]的威力在于其能够逐层地学习原始数据的多种表达方式。每一层都以前一层的表达特征为基础,抽取出更加抽象、更加适合复杂情况的特征,然后做一些分类等任务。堆栈自动编码机(Stacked Autoencoder,SAE)实际上就是做这样的事情,它由多层能自我表达的自编码器[6](autoencoder,AE)组成,每一个自编码机通过虚构1个x→h→x的三层网络,学习得出1种特征变化h=f(wx+b)。实际上,当训练结束后,输出层已经没有什么意义了,一般将其去掉,即将自编码器表示为x→AE→h。
每一个自编码器都有三层神经网络:输入层、隐含层、输出层,一般选用sigmoid或者relu函数作为神经元激活函数。对于输入矩阵X,经过隐层特征表达h(x)=σ(WX+b),让它能够接近或重构输入数据X。在编码器损失函数中,通过反向传播算法将误差更新到每一个神经元参数上完成1次训练。假设aj(x)代表隐层第j个神经元,对于输入矩阵X,在正向传播过程中,隐含层的激活单元的输出可以表示为a=relu(WX+b),W是连接输入层和隐含层的权值矩阵,b是两层之间的偏差值矩阵。
在神经网络中,一般使用均方差作为损失函数,可以写成
(1)
(2)
在整个编码过程中,需要得到优化的连接权重W和偏差b,采用在使用批量训练的同时使用反向传播的算法来实现;权值在梯度下降法的作用下每迭代1次便更新1次。方程如下
(3)
(4)
式中:ε表示学习率。
当损失函数下降到一定值,对输出和输入进行对比,如果相似,认为成功地进行了自动编码训练。而中间的编码层,就是想要的数据特征。堆栈自动编码机就是把特征表达h再作为原始信息,训练1个新的自编码器,如此循环。最后系统看起来如图1所示。
图1 堆栈自动编码机
相较于传统的特征提取方式,如主成分分析(PCA)、线性判别分析法(LDA)等,堆栈自动编码机能够做到无需先验知识提取特征的同时获得很好的非线性映射能力。
在聚类中根据不同的需要,选择不同的距离来度量相似度,如欧氏距离、明考斯距离以及曼哈顿距离。在众多距离标准中,最常用也最直接的是欧氏距离,所以本文采用欧式距离。
假设高光谱图像数据有N个波段[7],每幅单波段图像有M个样本像元点,则第i个像元点的光谱向量可以表示为Xi={xi1,xi2,…,xiN},其中,1≤i≤M。第i个样本和第j个样本的欧氏距离可以表示为
(5)
每个波段的光谱差异用同等的权重来计算,然后再求和以计算两个样本的整体波段差异,这个差异也就是前面说到的相似性,距离越小,相似性越大,将它作为衡量样本点是否为同一类的标准。
实际聚类中用于判断迭代次数的准则函数一般采用误差函数来表示,设聚类结果要聚成K类,当采用欧氏距离作为相似性度量时,准则函数可以表示为
(6)
式中:Vk表示第k个类中心。
设Ck为第k个类的所有样本数据集合,则
Ck={Xi∈S|k=argmind2(Xi,Vk)}.
(7)
由此可得聚类中心为
(8)
传统的K-means算法有着计算量大、奇异值对计算结果影响大的缺点,这些缺点通过SAE提取特征去减小,而放大它对数据分类的能力。
在经过堆栈自动编码机训练之后,原本数据量x降维到hn,通过图像重构,计算损失函数:L=-log(Px|x′),来达到约束特征重构图像的目的,如图2所示。
图2 SAE训练过程
其中,循环3次的网络结构变化如图3所示。
图3 循环过程中维数变化
处理SAE输出的高光谱数据的K均值算法和经典的K均值算法思路大致相同,可以概括为以下几步:
1)初始化:确定初始聚类中心,随机挑选原始高光谱数据样本的k个点作为第1次聚类的聚类中心;
2)聚类:计算样本集中的其他样本点到选定的k个聚类中心的欧氏距离,并将样本点分别归到距离其欧式距离最小的类别中,作为同一类;
3)重新计算聚类中心:分别计算各类内样本的平均值,作为每一类的新的聚类中心;
4)循环迭代:重复执行2)和3),直到循环次数达到最大值;
5)聚类结束:取最后1次循环的结果作为聚类结果,计算所有样本的聚类精度OA(Overall Accuracy)和各个类的聚类精度。
高光谱数据的K均值聚类算法流程如图4所示。
图4 基于光谱信息的高光谱数据K均值聚类算法
由AVIRIS成像光谱仪拍摄的美国加利福尼亚州的 Salinas[8]山谷构成的Salinas 数据,它的空间分辨率达到3.7 m。该图像原本有 224 个波段,但是因为第108~112、154~167和第 224 个波段不能够被水反射,所以将他们剔除,最后剩下的图像含有 204个波段[9]。该图像的尺寸为 512×217,共包含 111 104个像素,其中,有 56 975个像素是背景像素,可应用于分类的像素有 54 129个,这些像素总共分为 16 类,包括休耕地(Fallow)、芹菜(Celery)等。这次研究取其中的6类进行聚类分析实验(将第10~16类共计7类数据标签置0,将第1、2类合称为一类,第3、4、5类合称为一类,第6、7、8、9四类不做改变)。
用于高光谱聚类实验的地物包括椰菜、休耕地、残梗、芹菜、葡萄和土壤,各类地物编号和像素点个数如表1所示。
表1 Salinas高光谱数据地物信息
处理后的数据如图5所示。
图5 处理后的高光谱图像展示
为了将高光谱的空间信息结合到聚类系统中,将高光谱像素点的位置(x,y)作为两个波段添加到数据中,使原来(x,y,b)的数据量变为(x,y,b+2)。其中,x为高光谱图像纵坐标,y为高光谱图像横坐标,b为高光谱波段。
首先搭建SAE神经网络,因为数据处理后的波段数为204,所以使用流行的2n次方的数作为中间神经元的数量,搭建1个6层神经网络。最中间的隐含层是数据最终压缩的维度,这个维度需要尽量小以帮助在接下来的聚类系统中更快地运算,但也需要达到能够较好地重构图片的效果。这里用直方图来计算重构程度相似度,随着中间层数的变化,重构程度的变化如表2所示。
抽取第7层第45个波段与原始图像的第45个波段的图像做对比(这个选择是随机的,只是从另一个角度来验证SAE重构是否成功。),如图6所示。
表2 SAE重构程度随中间层变化 %
图6 原始数据和SAE重建的对比(45波段)
可以看到,SAE重建之后的输出确实很好地还原了原始图像。以此作为基础进行下一步实验。
将SAE的中间层(即特征表达)作为K-means聚类算法的输入,聚类中心个数为7个,是图像所包含的总个数。测试SAE中间层数不同的情况下,地物分类的精度得到的数据如图7所示。
可以看到,当中间层数小于5层时,地物目标的分类已经失真,一些地物精度低于50%,已经不能达到数据处理的要求。而当中间层为5层时,不能够很好地还原原始图像,当中间层数大于等于6层时,重构程度和地物分类精度才能达到要求[10],综合考虑下, 6层或7层对于堆栈自动编码机来说,是一个合适的选择。
以中间层7层为例,展示一下SAE表达特征之后K-means聚类算法的聚类效果,如图8所示。
图7 SAE分类精度随中间层数变化
图8 中间层为7层的SAE特征聚类
重复10次试验查看算法表现的稳定性,结果如图9所示,汇总数据如表3所示。
图9 中间层为7层的SAE结合聚类精度
从图中可以看到,算法的平均聚类精度达到了98.378 6%,正负误差不超过0.12%,稳定性和精度都能满足使用要求,相对于依赖先验知识的分类系统[11],在部分地图上甚至有着更好的表现。而且从原始图像中可以看出,部分地物的人工标签被模块化,针对单个像素点级别有些分类与实物并不相同,如果将这部分因为标签差异造成的误差去除,精度能够进一步提高。
利用SAE非线性地提取高光谱图像特征,在能确保重构图像加以验证的同时,提取高光谱图像的深层光谱特征,之后借助聚类算法分类地物,达到
表3 地物分类精度及其正负误差
良好的聚类效果。但是,本文只是初步地将高光谱图像的像素点的位置信息加入波段中,没有很好地利用高光谱图像的空间信息;此外,聚类算法中K-means算法虽然是基础有效的一环,但是也可以寻找其他能更好处理高光谱图像信息的聚类算法加以尝试。