【第4周】MobileNet_ShuffleNet
1 论文阅读与视频学习
1.1 MobileNet V1 & V2
1.1.1 MobileNet V1
什么是MobileNet V1
网络亮点
使用了DW卷积和PW卷积
计算量对比
1.1.2 MobileNet V2
什么是MobileNet V2
网络亮点
1.2 MobileNet V3
1.3 ShuffleNet V1
1.4 SENet
网络结构
- Squeeze(压缩)。顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用。
- Excitation(激发)。它是一个类似于循环神经网络中门的机制。通过参数来为每个特征通道生成权重,其中参数被学习用来显式地建模特征通道间的相关性。
- Reweight(缩放)。将Excitation的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。
实验结果
2 代码作业
2.1 准备工作
2.2 定义网络
2.3 创建数据集
结果如下
2.4 训练网络
2.5 测试网络
3 思考题
3.1 训练HybridSN,然后多测试几次,会发现每次分类的结果都不一样,请思考为什么?
训练HybridSN多次,每次分类结果不一样的原因可能是由于该模型具有较大的容量,训练数据较少,或者是模型在训练过程中受到了不同程度的随机性影响(例如权重的随机初始化、数据的随机扰动、随机梯度下降等)。这些因素导致了模型在不同训练过程中学习到不同的特征表示,从而产生分类结果的差异。
3.2 如果想要进一步提升高光谱图像的分类性能,可以如何改进?
- 收集更多高质量的训练数据,以增加模型的泛化能力。
- 考虑使用更复杂的网络结构,例如深层的卷积神经网络或者引入注意力机制来增强模型的表示能力。
- 调整超参数,如学习率、正则化项等,以获得更好的优化效果。
- 使用更先进的数据增强技术,如随机裁剪、颜色增强等,以增加数据的多样性。
- 尝试迁移学习,将已经在其他高光谱图像数据上训练好的模型进行微调,以加速训练过程和提高性能。
3.3 depth-wise conv 和 分组卷积有什么区别与联系?
Depth-wise conv(深度可分离卷积)和分组卷积是两种用于减少卷积计算量的优化技术。区别在于:
- Depth-wise conv是在每个输入通道上独立地进行卷积操作,然后再将结果在通道维度上进行组合。这样可以减少参数数量和计算量,但每个通道之间没有交互信息。
- 分组卷积是将输入通道分为若干组,然后在每组内进行卷积操作。这样可以在一定程度上减少计算量,并且每组内的通道可以相互交互信息。但相比普通卷积,分组卷积可能引入一定的信息损失。
3.4 SENet 的注意力是不是可以加在空间位置上?
是的,SENet的注意力机制可以加在空间位置上。SENet的注意力机制主要是通过学习通道之间的关系来提升特征的重要性,但也可以通过适当的调整将注意力扩展到空间位置上,从而使网络能够关注不同空间位置上的特征,进一步提升性能。
3.5 在 ShuffleNet 中,通道的 shuffle 如何用代码实现?
import torch
def channel_shuffle(x, groups):
batch_size, height, width, channels = x.size()
channels_per_group = channels // groups
# Reshape the tensor to (batch_size, height, width, groups, channels_per_group)
x = x.view(batch_size, height, width, groups, channels_per_group)
# Transpose the tensor along the last two dimensions (swap channels_per_group and groups)
x = x.permute(0, 1, 2, 4, 3)
# Reshape the tensor back to its original shape
x = x.view(batch_size, height, width, channels)
return x