【轻量化网络】初识: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: 适合在资源受限的设备上进行部署,例如物联网设备、边缘计算设备等。


相关文章
|
7月前
|
机器学习/深度学习 计算机视觉 网络架构
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
740 0
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
|
7月前
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
|
5月前
|
机器学习/深度学习 计算机视觉 异构计算
【YOLOv8改进 - Backbone主干】ShuffleNet V2:卷积神经网络(CNN)架构
【YOLOv8改进 - Backbone主干】ShuffleNet V2:卷积神经网络(CNN)架构
|
7月前
|
机器学习/深度学习 编解码 边缘计算
YOLOv5改进 | 卷积模块 | 用ShuffleNetV2卷积替换Conv【轻量化网络】
本文介绍了如何在YOLOv5中用ShuffleNetV2替换卷积以减少计算量。ShuffleNetV2是一个轻量级网络,采用深度可分离卷积、通道重组和多尺度特征融合技术。文中提供了一个逐步教程,包括ShuffleNetV2模块的代码实现和在YOLOv5配置文件中的添加方法。此外,还分享了完整的代码链接和GFLOPs的比较,显示了GFLOPs的显著减少。该教程适合初学者实践,以提升深度学习目标检测技能。
YOLOv5改进 | 卷积模块 | 用ShuffleNetV2卷积替换Conv【轻量化网络】
|
2月前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLO11改进 - C3k2融合】C3k2融合YOLO-MS的MSBlock : 分层特征融合策略,轻量化网络结构
【YOLO11改进 - C3k2融合】C3k2融合YOLO-MS的MSBlock : 分层特征融合策略,轻量化网络结构
|
5月前
|
机器学习/深度学习 文件存储 算法框架/工具
【YOLOv8改进- Backbone主干】2024最新轻量化网络MobileNetV4替换YoloV8的BackBone
YOLO目标检测专栏聚焦于模型的改进和实战应用,介绍了MobileNetV4,它在移动设备上优化了架构。文章提到了UIB(通用反向瓶颈)模块,结合了多种结构,增强了特征提取;Mobile MQA是专为移动平台设计的注意力层,提升了速度;优化的NAS提升了搜索效率。通过这些创新,MNv4在不同硬件上实现了性能和效率的平衡,且通过蒸馏技术提高了准确性。模型在Pixel 8 EdgeTPU上达到87%的ImageNet-1K准确率,延迟仅为3.8ms。论文、PyTorch和TensorFlow实现代码链接也已提供。
|
7月前
|
机器学习/深度学习 算法 计算机视觉
YOLOv8改进 | 融合模块 | 用Resblock+CBAM卷积替换Conv【轻量化网络】
在这个教程中,介绍了如何将YOLOv8的目标检测模型改进,用Resblock+CBAM替换原有的卷积层。Resblock基于ResNet的残差学习思想,减少信息丢失,而CBAM是通道和空间注意力模块,增强网络对特征的感知。教程详细解释了ResNet和CBAM的原理,并提供了代码示例展示如何在YOLOv8中实现这一改进。此外,还给出了新增的yaml配置文件示例以及如何注册模块和执行程序。作者分享了完整的代码,并对比了改进前后的GFLOPs计算量,强调了这种改进在提升性能的同时可能增加计算需求。教程适合深度学习初学者实践和提升YOLO系列模型的性能。
|
7月前
|
机器学习/深度学习 计算机视觉 异构计算
【CVPR2023】Backbone FasterNet:我不允许你不知道世界上还有比ShuffleNetV2还轻量的网络!
【CVPR2023】Backbone FasterNet:我不允许你不知道世界上还有比ShuffleNetV2还轻量的网络!
295 0
【CVPR2023】Backbone FasterNet:我不允许你不知道世界上还有比ShuffleNetV2还轻量的网络!
|
6天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
|
6天前
|
安全 算法 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在当今数字化时代,网络安全和信息安全已经成为了全球关注的焦点。随着技术的发展,网络攻击手段日益狡猾,而防范措施也必须不断更新以应对新的挑战。本文将深入探讨网络安全的常见漏洞,介绍加密技术的基本概念和应用,并强调培养良好安全意识的重要性。通过这些知识的分享,旨在提升公众对网络安全的认识,共同构建更加安全的网络环境。