【轻量化网络】初识:SqueezeNet网络&MobileNet网络& ShuffleNet网络

简介: 【轻量化网络】初识:SqueezeNet网络&MobileNet网络& ShuffleNet网络

前言

   轻量化网络是指在保证模型精度的前提下,通过一系列优化技术使得模型参数数量大幅减少的深度学习模型。它的诞生主要是为了解决深度学习在移动端等资源受限环境中应用受限的问题。随着近年来深度学习的应用场景不断扩大,轻量化网络也逐渐成为了热门的研究方向,各种轻量化网络层出不穷。

   例如MobileNet、ShuffleNet、SqueezeNet等。 这些轻量化网络都采用了一系列优化技术,如深度可分离卷积、通道重排等,可以在保证模型精度的同时大幅减少参数数量和计算量,从而在移动端等资源受限的环境中有更好的应用表现。

初识

SqueezeNet网络

  SqueezeNet相比于传统的卷积神经网络使得网络模型在参数量计算量上都比较小,同时保持较高的准确率。更适合在资源受限的设备上进行部署。

  SqueezeNet的设计思路主要有两个关键点:

  1. 采用了1×1卷积核来降低网络的参数量和计算量;
  2. 采用了“squeeze-and-excitation”模块来提高网络的表示能力。

  具体来说,SqueezeNet中的大多数卷积层都采用了1×1卷积核,这种卷积核的参数量较少,可以在不增加计算量的前提下降低网络的参数量。而“squeeze-and-excitation”模块则通过对不同通道的特征进行压缩和激励,进一步提高了网络的表示能力。

python

复制代码

import torch
import torch.nn as nn
import torch.nn.functional as F
class SEBlock(nn.Module):
    def __init__(self, in_channels, reduction_ratio=16):
        super(SEBlock, self).__init__()
        self.avgpool = nn.AdaptiveAvgPool2d(1)
        self.fc1 = nn.Linear(in_channels, in_channels // reduction_ratio)
        self.fc2 = nn.Linear(in_channels // reduction_ratio, in_channels)
        
    def forward(self, x):
        b, c, _, _ = x.size()
        # 使用全局平均池化操作对特征进行压缩
        y = self.avgpool(x).view(b, c)
        # 通过两层全连接层对特征进行激励
        y = F.relu(self.fc1(y))
        y = torch.sigmoid(self.fc2(y))
        # 将激励系数乘回原始特征
        y = y.view(b, c, 1, 1)
        return x * y

MobileNet网络

  MobileNet由Google于2017年提出,主要用于在移动设备等资源受限的环境中进行图像分类和目标检测等任务。MobileNet的特点在于,通过使用深度可分离卷积全局平均池化等技术,大幅减少了网络的参数数量和计算量,从而在保证模型精度的前提下,可以在移动设备等低功耗场景下高效地进行图像识别任务。

  深度可分离卷积将传统卷积操作分成深度卷积逐点卷积两步,分别处理空间信息和通道信息,从而减少了参数数量和计算量。线性整流单元(ReLU)则可以增强网络的非线性表达能力。

ini

复制代码

import torch
import torch.nn as nn
def conv_bn(inp, oup, stride = 1):
    return nn.Sequential(
        nn.Conv2d(inp, oup, 3, stride, 1, bias=False),
        nn.BatchNorm2d(oup),
        nn.ReLU6(inplace=True)
    )
    
def conv_dw(inp, oup, stride = 1):
    return nn.Sequential(
        # part1
        nn.Conv2d(inp, inp, 3, stride, 1, groups=inp, bias=False),
        nn.BatchNorm2d(inp),
        nn.ReLU6(inplace=True),
        # part2
        nn.Conv2d(inp, oup, 1, 1, 0, bias=False),
        nn.BatchNorm2d(oup),
        nn.ReLU6(inplace=True),
    )

  MobileNet中另一个重要的技术是全局平均池化,它可以将整个特征图转化为一个数,从而减少了参数数量和计算量。同时,全局平均池化也可以降低过拟合的风险,提高模型的泛化能力。

ShuffleNet网络

  ShuffleNet与MobileNet等轻量化网络不同,ShuffleNet的主要特点在于采用了通道重排等技术,以更高效地利用计算资源和减少信息流量。

  ShuffleNet的主要结构由逐层组合的ShuffleNet块(ShuffleNet Unit)构成。每个ShuffleNet块主要包括分组卷积通道重排逐点卷积(pointwise convolution)三个步骤。其中,分组卷积可以将卷积操作分为多个小组进行,减少了参数数量和计算量。通道重排则将特征通道重新排列,使得不同的通道之间可以相互交流,提高了信息流动性。逐点卷积则可以对通道上的信息进行整合。

ini

复制代码

import torch.nn.functional as F
def channel_shuffle(inputs, num_groups):
    # 获取输入的形状和通道数
    batch_size, num_channels, height, width = inputs.size()
    
    # 将输入张量按通道数分成 num_groups 组
    channels_per_group = num_channels // num_groups
    input_groups = inputs.view(batch_size, num_groups, channels_per_group, height, width)
    
    # 转置第一和第二维,并合并前两维
    input_groups = input_groups.transpose(1, 2).contiguous()
    input_groups = input_groups.view(batch_size, -1, height, width)
    
    return input_groups

  ShuffleNet还引入了两种类型的ShuffleNet块,即ShuffleNet V1和ShuffleNet V2。ShuffleNet V1采用的是分组卷积和通道重排的方式,而ShuffleNet V2则引入了更加复杂的结构,包括逐通道卷积(depthwise convolution)、通道拆分(channel split)和逐点卷积等。

  与其他轻量化网络相比,ShuffleNet的优势在于,通过通道重排技术可以减少信息流量和计算量,从而在保证模型精度的同时提高了计算效率。

总结

  SqueezeNet、MobileNet和ShuffleNet是三种轻量化卷积神经网络,具有较小的参数量和计算量,适合在资源受限的设备上进行部署。它们都采用了不同的设计策略,以实现轻量化和高效的特点。

SqueezeNet: 它适合在资源受限的环境下进行部署,例如移动设备、物联网设备等。

MobileNet: 适合在移动端进行部署,例如手机、平板等。

ShuffleNet: 适合在资源受限的设备上进行部署,例如物联网设备、边缘计算设备等。


相关文章
|
机器学习/深度学习 编解码 自动驾驶
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
563 3
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
|
机器学习/深度学习 移动开发 测试技术
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
568 1
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
|
机器学习/深度学习 编解码 TensorFlow
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构
661 0
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构
|
机器学习/深度学习 数据采集 算法
基于MobileNet深度学习网络的MQAM调制类型识别matlab仿真
本项目基于Matlab2022a实现MQAM调制类型识别,使用MobileNet深度学习网络。完整程序运行效果无水印,核心代码含详细中文注释和操作视频。MQAM调制在无线通信中至关重要,MobileNet以其轻量化、高效性适合资源受限环境。通过数据预处理、网络训练与优化,确保高识别准确率并降低计算复杂度,为频谱监测、信号解调等提供支持。
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型
516 2
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型
|
机器学习/深度学习 编解码 异构计算
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 ICCV 2023的EfficientViT 用于高分辨率密集预测的多尺度线性关注
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 ICCV 2023的EfficientViT 用于高分辨率密集预测的多尺度线性关注
431 1
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 ICCV 2023的EfficientViT 用于高分辨率密集预测的多尺度线性关注
|
机器学习/深度学习
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
659 11
|
机器学习/深度学习 文件存储 异构计算
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
327 1
|
机器学习/深度学习 存储
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
494 0
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络

热门文章

最新文章