[HSI论文阅读] | HybridSN: Exploring 3-D–2-D CNN Feature Hierarchy for Hyperspectral Image Classification

仅整理个人和组里对下文引用的论文(HybridSN)的学习所获,如有错误,感谢指正~

更新记录
⭐️ 2021.3.6 —— 关于本文2.2.2节卷积层参数的计算
⭐️ 2021.3.8 —— HybridSN如何接受尺寸大小不同的输入



写在前面

最近导师说学院要一份研究报告小结,发现之前看过的很多论文笔记没随身携带,果然及时整理成电子版的比较方便。

本文整理的论文HybridSN于2020.2发表于IEEE Geoscience and Remote Sensing Letters,这篇论文最让我好奇的是,其测试准确率在高光谱公共数据集Salines Scence上达到了100%!与之前的模型SSRN相比,HybridSN以提升一个数量级的可训练参数为代价,进一步提升了准确率。前段时间把这篇论文又认真阅读了一次,并在Colab上运行了作者提供的代码。

本文侧重于网络结构的设计和实验分析,以及组里对这篇论文的一点意见。

论文:

S. K. Roy, G. Krishna, S. R. Dubey and B. B. Chaudhuri, “HybridSN: Exploring 3-D–2-D CNN Feature Hierarchy for Hyperspectral Image Classification,” in IEEE Geoscience and Remote Sensing Letters, vol. 17, no. 2, pp. 277-281, Feb. 2020.

代码:

https://github.com/gokriznastic/HybridSN


 

1 研究思路

高光谱图像是三维立体数据,包含两个空间维度和一个光谱维度;空间维度很好理解,与一般的RBG或者灰度图像的空间维度相同,即宽和高;光谱维度是由于物体反射、吸收、透射和辐射电磁波的能力不同,因此使用不同波长的电磁波去照射地表物体,便可以根据物体反射的电磁波信息区分地表物质(不同物质反射电磁波的能力不同) → \rightarrow 使用数量众多的光波段去探测地表物质,便可以获得丰富的光谱信息,将获得的信息在图像的第三个维度堆叠起来 → \rightarrow 高光谱立体数据。

在HybridSN(Hybrid Spectral Convolutional Neural Network)之前,有一些网络使用二维卷积,有一些网络使用三维卷积:

  • 二维卷积(2D-CNN):可以提取高光谱图像的空间特征(spatial feauture);特点是相对三维卷积,模型比较简单,但不能提取高光谱图像的光谱特征;
  • 三维卷积(3D-CNN):可以同时提取高光谱图像的光谱特征(spectral feature)和空间特征;特点是计算量比二维卷积复杂,但捕获光谱特征之后可以提升分类准确率;

因此HybridSN的出发点就是:结合二维和三维卷积的优势,设计的网络结构中先使用三维卷积,再堆叠二维卷积,最后连接分类器。 → \rightarrow 既发挥了三维卷积的优势,充分提取光谱-空间特征,也避免了完全使用三维卷积而导致的模型复杂。

 

2 网络结构

图1 原论文中HybridSN结构
 

由上图1可知,网络依次由3层三维卷积(3D Conv) → \rightarrow 1层二维卷积(2D Conv) → \rightarrow 2层全连接层(Fc) → \rightarrow 1层softmax分类层组成。
 

2.1 简要的计算过程
  1. 原始高光谱输入立方体图像 I I I I ∈ R M × N × D I \in{R^{M \times N \times D}} IRM×N×D → \rightarrow M , N M, N M,N分别表示宽和高, D D D表示光谱波段的数量,即光谱维数。
    其中每个像素点对应一个one-hot标签 Y Y Y Y = ( y 1 , y 2 , . . . , y c ) ∈ R 1 ∗ 1 ∗ C Y=(y_1, y_2, ... ,y_c) \in R^{1*1*C} Y=(y1,y2,...,yc)R11C → \rightarrow C C C表示分类的总类别数;

  2. 在光谱维度进行PCA降维:
    由于高光谱图像含有丰富的光谱信息,相邻波段间会出现信息冗余的情况,因此一般会使用PCA或者其他降维方法作为预处理在光谱维度上进行降维,以提取主要成分并降低计算复杂度。

    经PCA降维后得到数据 X : X ∈ R M × N × B → X: X \in R^{M \times N \times B} \rightarrow X:XRM×N×B 图像大小保持不变,仅改变光谱维数。

  3. 将每个像素封装成邻域块(3D patches):
    高光谱图像分类最终是要给出每个像素点对应的类别,其实是进行图像分割。我们知道卷积运算会逐渐降低输入图像的尺寸,如果不使用其他方法,没有办法根据卷积后较小尺寸的特征图计算出原始图像中每个像素点的类别。

    因此为了满足最终分类的需求,一个小的技巧是:对原始图像每个像素点进行填充,将其封装成一个邻域像素块,然后根据对邻域像素块卷积运算提取出的特征图预测该像素点所属的类别。

    即,对 X X X 中的任何一个空间位置 ( α , β ) (\alpha, \beta) (α,β),以其为中心点沿着所有光谱维度取大小为 S × S S \times S S×S的邻域,得到该点对应的邻域像素块 P α , β ∈ R S × S × B P_{\alpha, \beta} \in R^{S \times S \times B} Pα,βRS×S×B,该像素块对应的one-hot编码为中心像素点 ( α , β ) (\alpha, \beta) (α,β)对应的标签。

  4. 将邻域像素块送入三维卷积层,提取光谱-空间特征;

  5. 三维卷积之后,送入二维卷积层,提取空间特征;

  6. 送入全连接层和softmax分类层,得到最后的预测结果。
     

2.2 具体的网络结构

论文给出了以India Pines数据集为例的具体的网络结构,如下表:


 
2.2.1 对于India Pines数据集
  1. 输入邻域块大小: 25 ∗ 25 ∗ 30 → 25*25*30 \rightarrow 252530经过PCA后,保留30个光谱维度;填充邻域半径为25;
  2. conv3d_1:以 25 ∗ 25 ∗ 30 25*25*30 252530 的邻域块为输入, 分别与 8 8 8 3 ∗ 3 ∗ 7 3*3*7 337的三维卷积核进行卷积运算 ⇒ \Rightarrow 得到大小为 23 ∗ 23 ∗ 24 ∗ 8 23*23*24*8 2323248 的输出;
  3. conv3d_2:以 23 ∗ 23 ∗ 24 ∗ 8 23*23*24*8 2323248为输入, 分别与 16 16 16 3 ∗ 3 ∗ 5 3*3*5 335的三维卷积核进行卷积运算 ⇒ \Rightarrow 得到大小为 21 ∗ 21 ∗ 20 ∗ 16 21*21*20*16 21212016 的输出;
  4. conv3d_3:以 21 ∗ 21 ∗ 20 ∗ 16 21*21*20*16 21212016为输入, 分别与 32 32 32 3 ∗ 3 ∗ 3 3*3*3 333的三维卷积核进行卷积运算 ⇒ \Rightarrow 得到大小为 19 ∗ 19 ∗ 18 ∗ 32 19*19*18*32 19191832 的输出;
  5. reshape: 因为3个三维卷积层之后要接二维卷积层,因此将调整Conv3d_3的输出特征图,堆叠其后两个维度,可以理解为将 32 32 32 19 ∗ 19 ∗ 18 19 * 19 *18 191918 的特征图在第三个维度堆叠 ⇒ \Rightarrow 得到 19 ∗ 19 ∗ 576 19*19*576 1919576
  6. conv2d_1:以 19 ∗ 19 ∗ 576 19*19*576 1919576为输入, 分别与 64 64 64 3 ∗ 3 3*3 33的二维卷积核进行卷积运算 ⇒ \Rightarrow 得到大小为 17 ∗ 17 ∗ 64 17 * 17 * 64 171764 的输出;
  7. flatten_1:以 17 ∗ 17 ∗ 64 17 * 17 * 64 171764为输入, 将其“拉平”为一维向量,维数为 18496 ( 17 × 17 × 64 ) 18496(17 \times 17 \times 64) 18496(17×17×64)
  8. 之后接两个dense-dropout层;
  9. 最后根据数据集样本的总类别数 C C C确定dense_3层神经元的个数,因为IN数据集有16个地物类别,因此上表中的dense_3含有16个神经元。
2.2.2 关于每层参数的计算

以Conv3d_2为例:

  1. 输入大小为: 23 ∗ 23 ∗ 24 ∗ 8 ⇒ 23*23*24*8 \Rightarrow 2323248 可以理解为有 8 8 8 23 ∗ 23 ∗ 24 23*23*24 232324 的输入特征图;
  2. 该层卷积核为: 16 16 16 3 ∗ 3 ∗ 5 ⇒ 3*3*5 \Rightarrow 335 可以理解为分别使用16个大小为 3 ∗ 3 ∗ 5 3*3*5 335 的卷积核与 8 8 8 23 ∗ 23 ∗ 8 23*23*8 23238 的输入特征图进行卷积运算
    (1)一个卷积核的权重参数(w)为: 3 × 3 × 5 = 45 3 \times 3 \times 5 = 45 3×3×5=45
    (2)对每一个尺寸为 23 ∗ 23 ∗ 8 23*23*8 23238的输入,有16个卷积核,这16个卷积核的权重参数为: 16 × 45 = 720 16 \times 45 = 720 16×45=720
    (3)现在有8个输入,因此总的权重参数为: 8 × 720 = 5760 8 \times 720 = 5760 8×720=5760
    (4)每一个卷积核还有一个偏差参数b,因此总参数为: 5760 + 16 = 5776 5760 + 16 = 5776 5760+16=5776
     
3 实验设置
3.1 采用的数据集

这里不再详细描述每个数据集,仅整理其主要参数:

namespatial dimensionspectral bandsclasses
India Pines(IP) 145 × 145 145 \times 145 145×14520016
University of Pavia(UP) 610 × 340 610 \times340 610×3401039
Salinas Scene(SA) 512 × 217 512 \times217 512×21720416
3.2 评价指标
  1. Overal Accuracy(OA):正确分类的样本个数占总测试样本数的比例;
  2. Average Accuracy(AA):各类准确率的均值;
  3. Kappa:用来判定结果的一致性,即预测的结果是否与真实的结果一致,其值越高表明一致性越好;
3.3 对比实验
  1. 与其他方法比较准确率
    对比的方法中,比较有挑战性的是SSRN。


    分析的结论:
    (1)HybridSN在这几种方法中性能最好,在SA数据集上三个评价指标甚至达到了100%!而且其具有最小的标准差!作者给出的解释是HybridSN结构中设计的三维卷积层与二维卷积层,取得了更佳的性能;
    (2)在SA数据集上,3D-CNN没有2D-CNN方法的效果好,是因为SA数据集中有两个类的样本在大多数光波带上有非常相似的纹理特征,因此3D-CNN提取光谱特征时可能导致了信息冗余;
    (3)HybirdSN的性能优于SSRN和M3D-CNN,作者得到的结论是:单独使用二维卷积或者三维卷积,不如混合二者;
     

  2. 与其他方法对比得到的分类map



    这里作者得到的结论是:
    (1)SSRN和HybridSN与其他方法相比,得到的分类图的质量好;这点是比较容易看出来的。
    (2)SSRN与HybridSN相比,HybridSN在较小的片段上表现比SSRN好;这里我觉得实验结果不是很明显,放大原论文中的分类图的话,可以看到,大概在左下角,粉色和蓝色区域那里的位置,蓝色区域右侧有一块很小的区域,HybridSN的分类是比较好的。
     

  3. 作者分析HybridSN训练过程中Loss和Accuracy的变化曲线



    得出的结论是:大概在50个epochs左右,训练开始收敛。相对来说,收敛速度很快。
     

  4. 对比与其他方法的训练和测试时间



    得到的结论是:与仅使用三维卷积运算的3D CNN相比,HybridSN训练和测试所需的时间更少,准确率更高,因此更加有效。

  5. 考虑邻域像素块的尺寸大小对结果的影响



    结论是: 25 × 25 25 \times 25 25×25的输入大小表现最好。
     

  6. 考虑使用更少的训练样本



    这里得到的结论是:
    (1)降低训练集比例后,各类方法的性能都有所下降;
    (2)HybridSN方法依然比其他方法好;不过与SSRN相比,有三个数值不如SSRN。

4 组里讨论意见

这里仅整理我们自己的一点小看法,可能不完全正确

  1. HybridSN与SSRN相比,确实各项指标HybridSN好于SSRN,但HybridSN的参数量比SSRN高了一个数量级:


    当时疑问在于用:其实在HSI领域,当前方法在各个公共数据集上的效果已经很不错了,HybridSN以比SSRN高出一个数量级的参数为代价提升准确率是否合理?而且其参数主要集中在dense_1层,这里总让人觉得有些奇怪。

    后来我还查了HybridSN后续的论文,有研究人员提出了更加复杂的网络以进一步提升准确率。

  2. 在HSI领域,很多论文都会计算十次训练后测试得到的各项指标的标准差,HybridSN的代码中没有体现这十次训练和测试是使用相同的数据划分还是不同的划分,因为划分数据集时如果设置了随机种子,得到的划分结果是不一样。

写在后面

其实这篇论文我已经看过几次了,对应的代码也跑过,因为一开始十分好奇作者如何把精度提升到100%的,于是起初关注点在于网络结构的设计和训练参数的设置;近期我在整理自己的实验,感觉有些凌乱,而且我的实验分析能力还不足,于是又回头整理了这篇论文的实验分析,想要参考学习~而在整理过程中,我也发现了自己的问题,所以任务艰巨,还要继续加油!

 

持续补充
  1. 关于本文2.2.2节卷积层参数的计算:每层的偏差参数b与该层卷积核的个数相同。参考可视化卷积计算过程。 (需要访问外网,可参考下图)

    更加具体的参数计算可以参考:

    https://zhuanlan.zhihu.com/p/63174774

 
2. HybridSN如何接受尺寸大小不同的输入
本文3.3节介绍的实验中,作者设计其中一个实验是考虑邻域像素块的尺寸大小对结果的影响,分别选择了 19 × 19 19 \times 19 19×19 21 × 21 21 \times 21 21×21 23 × 23 23 \times 23 23×23 25 × 25 25 \times 25 25×25的邻域大小。
这里的问题是:HybridSN作者是如何做到设计的网络可以接受大小不同的输入呢?我在进行自己的实验时,出现过:当选择较小的邻域输入时,特征图尺寸逐渐变为0的情况。
(1)HybridSN的结构设计很巧妙,包含五层3*3卷积,而没有使用Pooling层,最小可接受输入尺寸为 9 × 9 9 \times 9 9×9,再小也会出现特征图尺寸为0的情况 ⇒ \Rightarrow
(2)所以,实验过程中究竟应该如何选择合适的邻域大小呢?邻域是否真的是越大越好呢?

  • 17
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiuHui*n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值