《Convolutional Neural Networks for Large-Scale Remote-Sensing Image Classification》
本文提出了一种全卷积神经网络来产生密集分类(逐像素分类),特点是:位置无关、输出是一系列卷积层的结果。
首先将负责分类的全连接层转换为一个卷积层,选定卷积核使它的维度和前一层相同,这样它等价于全连接层,区别是当输入图像的尺寸增加时,输出尺寸也会增加,但参数个数不变。这可以看做将整个原始网络对更大范围的图像进行卷积以获得不同位置的输出。
为了提高输出图的分辨率,我们增加了一个所谓的“反卷积”层。这一做的目的是将前一层的特征图上采样,通过邻域点内插实现。内插过程通过一个表示像素对其邻域的影响范围和贡献的核来参数化。为了有效内插,核必须足够大才能覆盖输出。内插的实现过程如下:将核的值乘以每个输入并在输出中添加重叠响应。如下图所示,通过一个固定的4×4核进行缩放。
在本算法中,内插核也是需要学习的参数,而不是先验参数(例如设定为线性内插)。注意,上采样后特征图的中心部分是两个邻域核的叠加(内插),外边界是单个核的结果(外插)。
与基于块的方法相比,本方法的优势如下:
①可以消除块边界的不连续性;
②可以简化学习过程并提升精度,参数更少;
③更低的推理时间,利用GPU加速卷积处理。
我们提出的FCN构建如下。首先,我们假设原始神经网络输出块的大小为1×1,这样只需要关注以感受野为中心的单一输出。第二步,我们修改全连接层为一个包含一个特征图的卷积层,前一层的空间维度为9×9。第三步,我们增加一个因子为4的反卷积层(需要学习8×8的核),以恢复输入分辨率。注意,分类和上采样过程是分开的。
这个新的神经网络可以接受不同大小的输入图像,而输出大小会随之变化。在上图中,反卷积结果的外插部分用白色表示,内插部分用灰色表示。
我们用Caffe深度学习框架实现了CNN。
本文的两个贡献如下。为了修改错标记样本的影响,我们提出了一种两阶段算法:①先用原始的OSM数据集训练神经网络,②用少量人工标记样本优化神经网络。由于降采样会造成空间信息损失,导致分类边界模糊。为了保留空间细节又不提高训练样本数目,我们将低分辨率远程特征与高分辨率局部特征相结合。
(1)Fine-Tuning
Fine-Tuning是神经网络的常用技术,用来在新的训练集上更新一个已经训练好的模型。Fine-Tuning的原理是,低层信息/特征在不同应用中可以复用。尽管最终的分类目标不同,这也是一个获得近似最优参数的可行的方案,而不是随机初始化。在Fine-Tuning之后,低级特征将倾向于保留,而高层参数会更新。在Fine-Tuning时,新领域的训练集一般比训练原神经网络的训练集小很多。这是因为我们假设两个领域的共性被保留在网络中了(如不同方向的边缘)。当新领域的训练集很小时,在Fine-Tuning时需要增加额外的考虑因素来避免过拟合,如提前停止、固定低层权重,或降低学习率等。
我们结合神经网络Fine-Tuning的思想,为了在不理想数据上进行训练,第一步是采用大量训练样本来训练一个完全CNN,来捕捉数据集的一般性,如获得对象类的光谱特征。第二步,我们用一小部分人工标记样本来Fine-Tune神经网络。假设大部分一般性特征已经在初始训练阶段获得了,优化步骤应局部修改网络参数来产生更精确的输出。
(2)分辨率优化
直接采用降采样过的CNN进行分类会导致分类分辨率降低,但我们不需要全分辨率滤波器,因为我们只需要得到卷积滤波器中心的高分辨率信息(一堆分析)。
如下图,(a)为原图,(b)是降采样特征图,有助于我们识别道路,(c)是高分辨率局部特征图,有助于我们定位道路边界,但单独看来无法识别道路。结合这两个尺度可以再保持参数很少的情况下提高定位精度。
令S为原始分辨率的分数级,例如S={1,1/2}由原始分辨率及其一半的分辨率这两个尺度组成。我们令Xs表示X降采样到s∈S级。我们设计了一种特定类型的神经元,它将对前一层特征图的不同尺度应用一组滤波器增加响应。
注意,每个滤波器Ws对每个尺度s分别学习。这样一个滤波器很容易通过基本的卷积、降采样和上采样层的组合实现。下图表示了这个过程在两个尺度模式下的情况。在我们的实现中,我们对一个窗口中的邻域元素平均进行降采样,然后执行双线性内插进行上采样(其他方法也可行)。每个尺度的卷积核被设置为相同的(如3×3),但上下文不同(因为尺度不同)。加法是一个逐元素操作,随后是非线性激活。