第四周 MobileNet_ShuffleNet

论文阅读与视频学习

MobileNet V1 & V2

MobileNet V1网络中的亮点:

  • Depthwise Convolution (DW卷积)
    • 卷积核channel=1
    • 输入特征矩阵channel=卷积核个数=输出特征矩阵channel
  • 增加了超参数 α \alpha α β \beta β

depthwise部分的卷积核参数大部分为零。
因此提出MobileNet V2
在这里插入图片描述

MobileNet V3

  1. 加入了SE模块
    在这里插入图片描述
  2. 重新设计耗时层架构
    • 减少第一个卷积层的卷积核个数
    • 精简 Last Stage
      在这里插入图片描述
      在这里插入图片描述
  3. 重新设计激活函数

h-swish [ x ] = x ReLU 6 ( x + 3 ) 6 \text{h-swish}[x]=x\frac{\text{ReLU}6(x+3)}{6} h-swish[x]=x6ReLU6(x+3)

ShuffleNet

ShuffleNet v1的主要特点如下:

  • Shuffle Unit:ShuffleNet v1引入了Shuffle Unit作为其基本构建块。Shuffle Unit通过组合不同的操作来打破通常卷积层的连续性,以增加网络的表达能力。
  • 通道混洗(Channel Shuffle):ShuffleNet v1中引入了通道混洗操作,使得网络中的信息可以在不同通道之间进行交换和混合。这样的设计有助于增加网络的灵活性,使得模型可以更好地学习图像中的特征和关系。

SENet

阅读《ImageNet 2017冠军模型SE-Net详解》

代码作业

class HybridSN(nn.Module):
  def __init__(self, in_channels=1, out_channels=class_num):
      super(HybridSN, self).__init__()
      self.conv3d_features = nn.Sequential(
        nn.Conv3d(in_channels,out_channels=8,kernel_size=(7,3,3)),
        nn.ReLU(),
        nn.Conv3d(in_channels=8,out_channels=16,kernel_size=(5,3,3)),
        nn.ReLU(),
        nn.Conv3d(in_channels=16,out_channels=32,kernel_size=(3,3,3)),
        nn.ReLU()
      )
      self.conv2d_features = nn.Sequential(
          nn.Conv2d(in_channels=32*18,out_channels=64,kernel_size=(3,3)),
          nn.ReLU()
      )
      self.classifier = nn.Sequential(
          nn.Linear(64*17*17,256),
          nn.ReLU(),
          nn.Dropout(p=0.4),
          nn.Linear(256,128),
          nn.ReLU(),
          nn.Dropout(p=0.4),
          nn.Linear(128,16)
      )
  def forward(self,x):
    x = self.conv3d_features(x)
    x = x.view(x.size()[0],x.size()[1]*x.size()[2],x.size()[3],x.size()[4])
    x = self.conv2d_features(x)
    x = x.view(x.size()[0],-1)
    x = self.classifier(x)
    return x

在这里插入图片描述

思考题

● 训练HybridSN,然后多测试几次,会发现每次分类的结果都不一样,请思考为什么?
在网络中使用了 Dropout,训练时随机丢弃一些节点,测试时仍然在丢弃,导致每次测试时分类的结果都不一样。
● 如果想要进一步提升高光谱图像的分类性能,可以如何改进?
可以考虑在HybridSN中引入注意力机制;可以探索更复杂的特征融合方式,可以结合多个尺度和层级的特征,采用更先进的融合方法,如Attention机制、多级特征融合等,提升模型对高光谱图像信息的理解和表达能力。
● depth-wise conv 和 分组卷积有什么区别与联系?

  • 区别:Depth-wise convolution是对每个通道进行独立的卷积操作,而分组卷积是将输入特征图分为多个组,然后对每个组进行卷积操作。
  • 联系:它们都是将大的卷积操作转换为多个小的卷积操作,以减少参数量和计算复杂度,同时在一定程度上保持模型的表达能力。两者都在轻量级神经网络设计中被广泛应用。

● SENet 的注意力是不是可以加在空间位置上?
SENet的注意力机制可以加在空间位置上,通过在空间上计算并应用通道注意力权重,来强调或抑制不同空间位置的特征。同时,它也可以加在通道维度上,通过在通道上计算并应用通道注意力权重,来调整每个通道在全局特征中的重要性。
● 在 ShuffleNet 中,通道的 shuffle 如何用代码实现?

def channel_shuffle(x: Tensor, groups: int) -> Tensor:

    batch_size, num_channels, height, width = x.size()
    channels_per_group = num_channels // groups

    # reshape
    # [batch_size, num_channels, height, width] -> [batch_size, groups, channels_per_group, height, width]
    x = x.view(batch_size, groups, channels_per_group, height, width)

    x = torch.transpose(x, 1, 2).contiguous()

    # flatten
    x = x.view(batch_size, -1, height, width)

    return x
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值