HybridSN
阅读论文:
HybridSN: Exploring 3D-2D CNN Feature Hierarchy for Hyperspectral Image Classification
背景知识
高光谱图像 hyperspectral image:
高光谱遥感指具有高光谱分辨率的遥感数据获取、处理、分析和应用的科学与技术,通常采用覆盖一定波谱范围的成像光谱仪和非成像光谱仪两种传感器获取数据,利用大量窄波段电磁波获取感兴趣目标的理化信息,其基础是光谱学(Spectroscopy)
高光谱图像分类:
分类是高光谱遥感影像处理和应用的一项重要内容,其最终目标是给影像中的每个像元赋以唯一的类别标识。然而,高光谱遥感影像的高维特性、波段间高度相关性、光谱混合等使得高光谱遥感影像分类面临巨大挑战.
作者提出 Hybrid-CNN模型的原因
- 单纯的2D-CNN并不能从光谱维度中提取出良好的判别特征图。
- 同样,深层的3D-CNN在计算上更加复杂,单独的3D-CNN对于在许多光谱波段上具有相似纹理的类似乎表现更差。
- 利用3D和2D混合能够充分地利用光谱特征和空间特征来提高分类精度。
获取数据,并引入基本函数库
1 | ! wget http://www.ehu.eus/ccwintco/uploads/6/67/Indian_pines_corrected.mat |
定义 hybridSN类
模型的网络结构如下:
三维卷积部分
- conv1:(1, 30, 25, 25), 8个 7x3x3 的卷积核 ==>(8, 24, 23, 23)
- conv2:(8, 24, 23, 23), 16个 5x3x3 的卷积核 ==>(16, 20, 21, 21)
- conv3:(16, 20, 21, 21),32个 3x3x3 的卷积核 ==>(32, 18, 19, 19)
二维卷积
将前面的 32*18 reshape 得到 (576,19,19)
(576, 19, 19) 64个 3x3 的卷积核,==> (64, 17, 17)
flatten 操作,变为 18496 维的向量
- 使用 256,128 的全连接层,都是用0.4的 Dropout
- 最后输出为 16 个节点,是最终的分类类别数
HybridSN 类
1 | class_num = 16 |
创建数据集
首先对高光谱数据实施PCA降维;然后创建 keras 方便处理的数据格式;然后随机抽取 10% 数据做为训练集,剩余的做为测试集。
1 |
|
读取并创建数据集
1 | # 地物类别 |
out:
1 | Hyperspectral data shape: (145, 145, 200) |
开始训练
1 | # 使用GPU训练,可以在菜单 "代码执行工具" -> "更改运行时类型" 里进行设置 |
out:
1 | [Epoch: 1] [loss avg: 20.8664] [current loss: 2.5130] |
模型测试
1 | count = 0 |
1 | precision recall f1-score support |
显示分类结果
1 | #显示分类结果 |
加入注意力机制
1 | # 通道注意力机制 |
模型检测
测试次数 | 测试结果 |
---|---|
测试1 | |
测试2 | |
测试3 |
思考题🤔
一:3D卷机与2D卷积的区别
- 卷积的方向和输出的形状很重要
一维卷积 | 二维卷积 | 三维卷积 |
---|---|---|
- 卷积核的区别:2D 3D
二维卷积 | 三维卷积 |
---|---|
- 3D 卷积多了一个深度的通道,但是这跟单纯的2D卷积的多通道卷积区别在于,3D卷积由于卷积核本身就是3D的,所以权重共享。
- 3D卷积多了一个深度通道,找个深度可能是视频上的连续帧,也可能是立体图像中的不同切片。
二:训练网络,然后多测试几次,会发现每次分类的结果都不一样,请思考为什么?
这是因为在训练model之后再进行测试样本时,需要在 model 之前加上 model.eval() 这个函数调用。否则即使不训练,也会去改变权值,这是 model 中含有的 batch normalization 即 BN 所导致的。
在模型检测 model.eval() 后,Pytorch 会自动把 BN 和 Dropout 固定住,不会取平均,而是用训练好的值,一旦测试的的batch_size过小,很容易就会被BN层影响结果。
所以需要对源代码的训练和测试分别加上 model.train() 和 model.eval()来区分开来,这样多次测试的结果就一致了。
三:如果想要进一步提升高光谱图像的分类性能,可以如何使用注意力机制?
我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。
注意力机制像人眼观察事物的模式,使网络更加有侧重的学习,以此提高网络的学习能力。
可以通过构建不同的注意力模块(通道注意力模块、光谱注意力模块、空间注意力模块)然后将其并入到原有的卷积网络中,所构建的注意力子网络模块能够分别关注到通道、光谱域和空间域中更多的信息。
- 通道注意力机制(Channel Attention,CA)是对同一个特征图的不同通道进行选择 优化,获取重校订的通道信息;
- 空间注意力机制(Spatial Attention,SA)则是对同一个特征图的所有空间位置重新分配权重,然后通过 Sigmoid 函数来激活得到非线性的重校订上下文信息。
参考:
- 程文娟,陈文强 . 基于 MCFFN-Attention 的高光谱图像分类 . 计算机工程与应用,2020,56(24):201-206. CHENG Wenjuan, CHEN Wenqiang. Hyperspectral image classification based on MCFFN-Attention. Computer Engineering and Applications, 2020, 56(24):201-206.
- 机器之心注意力机制
- https://stackoverflow.com/questions/42883547/intuitive-understanding-of-1d-2d-and-3d-convolutions-in-convolutional-neural-n
- https://zhuanlan.zhihu.com/p/53036028