一、论文阅读与视频学习
1.MobileNet V1&V2
MobileNet网络是由google团队提出的,专注于移动端或者嵌入式设备中的轻量级CNN网络,相比于传统卷积神经网络,在准确率小幅降低的前提下大大减少了模型参数与运算量。
网络的亮点:
·Depthwise Convolution(DW卷积)大大减少运算量和参数数量
·增加超参数
(1) DW卷积
(2)Depthwise Separable Conv
(3)Mobile Net v2
相比v1而言,准确率更高,模型更小
网络的亮点:
·Inverted Residuals(倒残差结构)且激活函数不同:使用ReLU6
·Linear Bottleenecks
·关于shortcut
2.MobileNet V3
网络的亮点:
·更新Block(bneck)
·使用NAS搜索参数(Neural Architecture Search)
·重新设计耗时层结构
相比于V2而言,更准确,更高效。
(1)SE模块:注意力机制
(2)重新设计耗时层结构
- 减少第一个卷积层的卷积核个数(32→16)
- 精简Last Stage
(3)重新设计激活函数
3.ShuffleNet
(1)ShuffleNetV1
由于Gconv虽然能够减少参数与计算量,但Gconv中不同组之间信息没有交流。主要思想是在Gconv后面加一个channel shuffle模块。
·关于block的FLOPs
(2)ShuffleNetV2
- 当卷积层的输入特征矩阵与输出特征矩阵channel相等时MAC最小(保持FLOPs不变时)原理:
2.当Gconv的groups增大时(保持FLOPs不变时),MAC也会增大
3.网络设计的碎片化程度越高,速度越慢
比如图(e)会等着最慢的运行完。
4.Element-wise操作带来的影响是不可忽视的
相比MobileNet各版本错误率是最低的,并且速度也很客观。
4.SENet
基于考虑特征通道之间的关系提出了Squeeze-and-Excitation Networks(SENet)。其中Squeeze和Excitation是两个非常关键的操作。
·显示地建模特征通道之间的相互依赖关系
·采用了一种全新的“特征重标定”策略:就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。
具体通过三个操作来重标定前面得到的特征:
1.Squeeze
顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表示在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野。
2.Excitation
类似于循环神经网络中门的机制。通过参数来为每个特征通道生成权重,其中参数被学习用来显式地建模特征通道间的相关性。
3.Reweight
将 Excitation 的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。
分别嵌入到Inception结构和skip-connections中
5.CBAM
是一种基于通道和空间的注意力机制,结合力SENet的通道注意力和Spatial Attention机制。
(1)上面表示通道注意力机制,会对输入进来的单个特征层,分别进行全局平均池化和全局最大池化。之后对平均池化和最大池化的结果利用共享的全连接层进行处理,然后对处理后的两个结果相加,取一个sigmoid。此时我们获得了输入特征层每一个通道的权值(0-1之间)。在获得这个权值后,我们将这个权值乘上原输入特征层即可。
(2)下面表示空间注意力机制,会对输入来的特征层在每个特征点的通道上取最大值和平均值,之后将这两个结果进行一个堆叠,利用一次通道数为1的卷积调整通道数,取一个sigmoid,此时我们获得了输入特征层每一个特征点的权值(0-1之间)。在获得这个权值后,我们将这个权值乘上原输入特征层即可。
二、代码练习
1.2D卷积和3D卷积
在2D-CNN中,输入数据与2D内核卷积。卷积通过计算输入数据和内核之间的点积之和来进行。内核跨越输入数据以覆盖整个空间维度。卷积特征通过激活函数在模型中引入了非线性。在2D卷积中使用以下等式生成第层的第个特征图中的空间位置处的激活值,表示为
是核宽度,是核高度。
在2D-CNN中,使用以下等式生成第层的第个特征图中的空间位置处的激活值,表示为。
是核沿着谱维度的深度。
2D-CNN本身无法从光谱维度中提取良好的区分特征图。深度3D-CNN在计算上更复杂,并且对于在许多光谱带上具有相似纹理的类来说,单独表现似乎更差。对于HybridSN网络,它包含三个3D卷积,一个2D卷积核三个完全连接的层。
2.代码
参考csdn,HybridSN网络定义
# 两次不同的测试结果
# 显示结果
三、思考题
1.训练HybridSN,然后多测试⼏次,会发现每次分类的结果都不⼀样,请思考为什么?
每次迭代后的Dropout层一定概率让某个神经元激活值停止工作。所以它的随机性导致了每次结果不一样。
2.如果想要进⼀步提升⾼光谱图像的分类性能,可以如何改进?
(1)构建更深的网络
(2)批量归一化,数据增强
3.depth-wise conv 和 分组卷积有什么区别与联系?
区别:深度可分离卷积在每个输入通道上分别进行卷积操作,并且输入的通道数和输出的通道数是相等的;分组卷积将输入的通道分为多组,对每个组的通道都进行卷积,最后将每个组的输出合并。
联系:都在输入通道上进行了分组。
4.SENet 的注意⼒是不是可以加在空间位置上?
可以。
5.在 ShuffleNet 中,通道的 shuffle 如何⽤代码实现?
来源b站:
8.2 使用Pytorch搭建ShuffleNetv2_哔哩哔哩_bilibili
视频的02:45