【第四周】MobileNet和HybridSN

本文深入探讨了MobileNet系列网络,包括DW卷积、MobileNetV1至V3的特点。接着介绍了SE-Net的Squeeze和Excitation操作,强调了特征通道间相关性的建模。最后,文章讨论了HybridSN,一种结合2D和3D卷积处理高光谱图像的模型,以提高分类精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MobileNet详解

MobileNet网络是由google团队在2017年提出的,专注于移动端或者嵌入式设备中的轻量级CNN网络。相比传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量。相比VGG16准确率减少了0.9%,但模型参数只有VGG的1/32。

DW卷积

传统卷积

  • 卷积核channel=输入特征矩阵channel
  • 输出特征矩阵channel=卷积核个数

在这里插入图片描述

DW(Depthwise Conv)卷积

  • 卷积核channel=1

  • 输入特征矩阵channel=卷积核个数=输出特征矩阵channel
    在这里插入图片描述

PW(Pointwise Conv)卷积

卷积核size=1的传统卷积
在这里插入图片描述

普通卷积计算量

DK⋅DK⋅M⋅N⋅DF⋅DF D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F DKDKMNDFDF

DW + PW计算量

DK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DE⋅DE D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot N \cdot D_E \cdot D_E DKDKMDFDF+MNDEDE

理论上普通卷积计算量是DW+PW的8到9倍$\frac{DW+PW}{普通卷积} = \frac{1}{N} + \frac{1}{D_{K}^2} $

MobileNetV1

网络中的亮点

  • Depthwise Convolution(大大减少运算量和参数数量)
  • 增加超参数α、β

    在这里插入图片描述

α\alphaα卷积核的个数,β\betaβ输入图像的分辨率

depthwise部分的卷积核容易费掉,即卷积核参数大部分为零。

MobileNetV2

MobileNet v2网络是由google团队在2018年提出的,相比MobileNet V1网络,准确率更高,模型更小。

网络中的亮点

  • Inverted Residuals (倒残差结构)

  • Linear Bottlenecks

Inverted Residuals


采用ReLU6激活函数
在这里插入图片描述

Linear Bottlenecks

针对倒残差结构的最后一个1×11 \times 11×1的卷积层,使用线性激活函数。ReLU激活函数对低维特征信息造成大量损失。

当stride=1且输入特征矩阵与输出特征矩阵shape相同时才有shortcut连接。

网络结构

当一层有多个bottleneck(即n≠2n \not = 2n=2时),仅第一个bottleneck的步距为s,剩下的bottleneck都为1。

MobileNetV3

  • 更新Block(bneck)

  • 使用NAS(Neural Architecture Search)搜索参数

  • 重新设计耗时层结构
    在这里插入图片描述

更新Block

重新设计耗时层结构

重新设计激活函数

SE-Net

卷积核作为卷积神经网络的核心,通常被看做是在局部感受野上,将空间上(spatial)的信息和特征维度上(channel-wise)的信息进行聚合的信息聚合体。卷积神经网络由一系列卷积层、非线性层和下采样层构成,这样它们能够从全局感受野上去捕获图像的特征来进行图像的描述。

已经有很多工作在空间维度上来提升网络的性能,Squeeze-and-Excitation Networks (简称SENet)从特征通道之间的关系去考虑提升网络性能。其动机是希望显式地建模特征通道之间的相互依赖关系,在不引入一个新的空间维度的情况下进行特征通道间的融合,而是采用了一种全新的“特征重标定”策略。具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t8HmjDjv-1659342565782)(img/【第四周】MobileNetV1, V2, V3/1577346401348442.png)]
Squeeze 操作

顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用的。

Excitation 操作

通过参数来为每个特征通道生成权重,其中参数被学习用来显式地建模特征通道间的相关性。

Reweight 操作

将Excitation的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AMTcMuJX-1659342565783)(img/【第四周】MobileNetV1, V2, V3/1577346448967123.png)]
这里使用global average pooling 作为Squeeze 操作。

紧接着两个Fully Connected 层组成一个Bottleneck结构去建模通道间的相关性,并输出和输入特征同样数目的权重。我们首先将特征维度降低到输入的1/16 ,然后经过ReLu激活后再通过一个Fully Connected 层升回到原来的维度。 这样做比直接用一个Fully Connected 层的好处在于:1)具有更多的非线性,可以更好地拟合通道间复杂的相关性;2)极大地减少了参数量和计算量。

然后通过一个Sigmoid的门获得0~1之间归一化的权重,最后通过一个Scale的操作来将归一化后的权重加权到每个通道的特征上。

将SE 嵌入到ResNet模块中的操作过程基本和SE-Inception一样,只不过是在Addition前对分支上Residual的特征进行了特征重标定。如果对Addition后主支上的特征进行重标定,由于在主干上存在0~1的scale操作,在网络较深BP优化时就会在靠近输入层容易出现梯度消散的情况,导致模型难以优化。

SENet构造非常简单,而且很容易被部署,不需要引入新的函数或者层。除此之外,它还在模型和计算复杂度上具有良好的特性。

import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
import torch.optim as optim

class BasicBlock(nn.Module):
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值