【第4周】MobileNet_ShuffleNet

本文介绍了MobileNetV1、V2、V3、ShuffleNetV1和SENet的网络结构特点,讨论了深度可分离卷积和分组卷积的区别,以及如何通过注意力机制和数据增强提升高光谱图像分类性能。还探讨了训练中可能出现的随机性和改进策略。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值