神经网络学习笔记11——高效卷积神经网络架构SqueezeNet

系列文章目录


文章目录


前言

模型的发展

从2012年发展至今,神经网络模型经历了从卷积神经网络CNN到注意力机制Transformer等范式性的演进。然而,贯穿始终的核心研究驱动力始终围绕着两个相辅相成又看似矛盾的方向:

更大更强

追求模型的​​极致能力​​和​​认知边界突破​​。

能够学习更多的信息,捕捉更细的特征,提升泛化能力,解决开放域问题等。

目的是为了能处理更复杂的任务,比如通用人工智能、自然语言理解与生成、科学计算模拟等。主要通过增大模型参数规模、增加训练数据量、构建复杂的架构以及优化训练技术来实现这一目标。

​​更小更快

​​追求模型的​​实用效率​​和​​普适部署​​。

能够为了在能维持一定精度的前提下减少参数量和运算量。

目的是满足边缘/终端设备的低功耗、实时性、低成本、隐私保护要求,降低云端推理成本、提高响应速度,主要通过设计更高效的模型架构,进行裁剪、量化、蒸馏对模型进行压缩,优化特定算子和结合AI硬件加速来实现这一目标。

高效卷积神经网络架构

SqueezeNet-skwiːz斯奎兹

MobileNet-məʊbaɪl莫拜尔

ShuffleNet-ˈʃʌfl沙弗

EfficientNet-ɪˈfɪʃənt伊菲申特

GhostNet-ɡəʊst戈斯特

模型名称

表示轻量化神经网络模型的名称,名称中包含着几个重要信息:

1、不同的架构家族 (如 squeezenet, Mobilenet, ShuffleNet, EfficientNet, GhostNet, DeiT, ConvVT)。

2、不同的版本/变体标识 (如V1, V2, V3)。

3、不同的规模/宽度乘子 (如 0.5, 0.75, 1.0, 1.5x, 2x, -Small, -Large)。

4、其他配置参数 (如 160, 224 通常指输入图像的尺寸, g=3/8 对 ShuffleNet 指分组卷积的分组数,还有像b0/b1/b2/b3、S/M/L、A1/A2/A3、lite0/lite1/lite2/lite3/lite4等模型设置,特指不同尺寸或者不同复杂度)。

参数量

​​参数量是指模型中需要学习的参数总数。

1、参数量决定模型的内存占用(如显存和内存)和数据加载和传输时间,参数需从内存频繁读取到计算单元,高参数量可能导致​​内存带宽瓶颈​​,拖慢推理速度(尤其在移动设备)。

2、参数量与模型的​​复杂度、学习能力和表达能力有紧密关系(通常参数越多,模型越复杂,理论上拟合能力越强)。

3、参数量也是衡量模型​​"轻量化"​​程度的最关键指标之一,轻量化模型的核心目标就是在保持一定性能的前提下,尽可能减少参数量。​​

乘加运算量

乘加运算量是指模型进行一次前向推理(处理一张图片)所需完成的 ​​乘法累加操作的总次数。一次乘加运算通常指 a * b + c 这样的计算。​​

1、乘加运算量是衡量模型​​计算复杂度​​和​​推断速度​​(尤其是在硬件上)的最常用指标之一,与模型的​​耗电量​​(对移动设备尤为重要)强相关。

2、乘加运算量是衡量模型​​"轻量化"​​程度的核心指标,直接决定计算时间(如GPU/CPU的浮点运算耗时),需要在满足性能要求下降低此值。

​​3、神经网络中的主要计算(如卷积、全连接层)绝大部分都是由大量的乘加操作构成的,统计乘加次数能有效反映整体的计算负担。

评价指标

ImageNet fp32 top1 accuracy评价指标是衡量不同轻量化模型分类​​准确性的核心依据。它直观地告诉我们在识别 1000 类物体时,模型猜中"第一名"的概率是多少。用户可以通过这个值直接比较不同模型在相同的权威数据集和评估标准下的表现优劣。数值越高越好。

1、fp32是模型在运行/评估时使用的​​数值精度​​,代表 ​单精度浮点数(Single-precision floating-point format)​​,是一种在计算机中表示实数的格式,使用 32 位(4 字节)存储一个数字。有些轻量化模型在部署时可能会使用更丰富的精度选择,比如fp16、int8、int4、int2以及混合精度,通过对模型量化以加速和减小模型体积,但在学术论文和基准对比中,通常报告 fp32 精度以保证公平比较。

2、​​ImageNet数据集是一个巨大的、公开的​​图像数据集​​,具体是指 ​​ILSVRC 2012​​ 数据集(ImageNet Large Scale Visual Recognition Challenge 2012)。它包含超过 ​​140万​​ 张训练图像,​​5万​​ 张验证图像,​​10万​​ 张测试图像,涵盖了 ​​1000 个不同的物体类别​​(如"猫"、"狗"、"汽车"、"杯子"等)。

3、top1 accuracy是评估图像分类任务最直接、最重要的​​性能指标​​。在推理过程中对验证/测试集中的每一张图片都会输出一个包含 1000 个类别的​​概率分布也就是置信度​。而​​top1 accuracy指的是模型预测的​​概率最高的那个类别恰好等于图片真实标签的比例​​。有时还会使用top5 accuracy​​,它指的是​​图片的真实标签出现在模型预测的前5个最高概率类别之中的比例​​。​​

高效卷积神经网络的比较


一、SqueezeNet

SqueezeNet论文地址

1、优化策略

1.优化一

替换卷积核:

使用 1×1卷积替代大部分 3×3卷积,1×1卷积的参数量仅为3×3卷积的1/9,且能实现跨通道交互,显著降低计算复杂度。

2.优化二

减少输入通道数:

使用 1×1卷积压缩输入通道数,比如减少至原尺寸的 1/n,降低后续计算复杂度,

3.优化三

延迟降采样:

将池化层后移至网络中后段,保留更多高分辨率特征图,提升分类精度。

2、模型结构

SqueezeNet 的其核心创新在于 ​​Fire Module​​ 的设计,由 ​​Squeeze 层​​和 ​​Expand 层​​组成。输入特征图首先通过 ​​Squeeze 层​​进行通道数的压缩,然后通过 ​​Expand 层​​进行通道数的扩张。这两个层通过参数高效的结构,在保持模型精度的同时显著减少计算量和存储需求。

1.​Squeeze 层​​

Squeeze层负责压缩输入特征图的通道数,减少后续计算量。通过 1×1 卷积实现​​通道降维​​,在网络中创造了一个瓶颈层,使网络在低维度空间学习输入数据的​​压缩表示​​,只保留最核心的信息,丢弃冗余信息。

将通道数从 C_input压缩至 C_squeeze(C_squeeze < C_input),输出特征图的尺寸由 H x W x C_input 变为 H x W x C_squeeze,注意空间尺寸 H x W 保持不变​​。

在Squeeze层后添加ReLU激活函数,引入非线性表达能力,避免信息损失。

2.​Expand 层

Expand层负责接收 Squeeze 层输出的低维特征,通过并行卷积路径​​扩展通道数并融合多尺度信息​​。在 Squeeze 层进行了强力压缩之后,需要通过增加通道数并提供不同尺寸的卷积核来保持网络的表达能力。

​​1×1 卷积路径​​:使用填充padding为0,步长​stride为1的 e ₁ e_₁ e₁个 1 x 1 卷积核,捕捉局部感受野的空间特征,参数量小且计算高效。

​​3×3 卷积路径​​:使用填充padding为1,步长​stride为1的 e ₃ e_₃ e₃个 3 x 3 卷积核,捕捉更大感受野的空间特征,增强模型对复杂模式的识别能力。

通道拼接:H x W大小的特征图经过1×1 卷积核计算得到的新特征图为H x W大小,经过3×3 卷积核计算得到的新特征图依然为H x W大小,所以两条路径输出得新特征图大小一致,可以在通道维度进行拼接,形成最终的高维特征。

Expand层中的 ​​1 x 1 和 3 x 3 卷积并联​​提供了不同大小的感受野,拼接它们的输出相当于在网络底层就融合了​​不同尺度的特征​​,有助于模型捕获更丰富的信息。

在Expand层后添加ReLU激活函数,引入非线性表达能力,避免信息损失。

3.Fire Module模块

一个完整的 Fire Module由Squeeze-Expand组成:

Squeeze层:​​

1x1 卷积 (s₁个核)。

Expand层:

并行分支 1:​​ 1 x 1 卷积 (e₁个核)。

并行分支 2:​​ 3 x 3 卷积 (e₃个核)。

**​​超参数:**​​

s₁: Squeeze 层输出的通道数 (也是 Expand 层两路分支共同的输入通道数)。

e₁: Expand 层 1 x 1 分支的输出通道数。

e₃: Expand 层 3 x 3 分支的输出通道数。

​​通常满足:​​ s₁ < (e₁ + e₃)。即先压缩通道,再扩增通道。

Fire Module模块通过​​先大幅压缩通道数建立瓶颈,再在低维空间高效地利用多尺度卷积扩展通道​​的设计,在​​显著降低参数数量和计算量​​的同时,努力​​保持网络的准确率​​。

input:224 x 224 x 3

conv1:7×7卷积,stride=2,降采样(224×224→111×111),输入特征矩阵通道扩展为96通道

maxpool1:3×3池化,进一步降采样(111×111→55×55),维持96通道

​​fire2:Squeeze-Expand结构,96通道压缩为16通道,输出128通道

​​fire3:Squeeze-Expand结构,128通道压缩为16通道,输出128通道

​​fire4:Squeeze-Expand结构,128通道压缩为32通道,输出256通道

maxpool4:3×3池化,进一步降采样(55×55→27×27),维持256通道

​​fire5:Squeeze-Expand结构,256通道压缩为32通道,输出256通道

​​fire6:Squeeze-Expand结构,256通道压缩为48通道,输出384通道

​​fire7:Squeeze-Expand结构,384通道压缩为48通道,输出384通道

​​fire8:Squeeze-Expand结构,384通道压缩为64通道,输出512通道

maxpool8:3×3池化,进一步降采样(27×27→13×13),维持512通道

​​fire9:Squeeze-Expand结构,512通道压缩为64通道,输出512通道

conv10:1×1卷积,stride=1,512通道扩展为1000通道,对应000个类别

avgpool:空间维度压缩(13×13→1×1),生成类别概率向量

softmax:输出预测结果

表中右边的量化内容与该模型结构关系不大,不在这里展开解释。


左侧模型:标准直流SqueezeNet模型

遵循经典 ​​SqueezeNet 架构​​,由输入输出层、conv、maxpool、fire模块、池化层和softmax回归构成,数据严格按顺序流动。

​​
中间模型:跳跃连接SqueezeNet模型

添加残差连接​​,解决如果模型网络过深导致的梯度消失和梯度爆炸问题,加速模型收敛,增强模型泛化能力。

将输出通道和输入通道一致的层进行残差连接:fire2-fire4,maxpool4-fire5,fire6-fire8,maxpool8-conv10。

​​右侧模型:复杂旁路SqueezeNet模型

添加conv1x1卷积旁路​​,结合残差连接确保每一层都能复用上上层的特征数据,使得低层特征信息与高层特征信息能够深度融合。

将输出通道和输入通道不一致的层进行卷积处理然后相连:maxpool2-fire3,fire3-maxpool4,fire5-fire7,fire7-maxpool8。


总结

SqueezeNet相对于传统的深层CNN模型,如VGG或ResNet,具有更小的模型大小和更少的参数,但在一些任务上仍能取得不错的性能。这使得SqueezeNet成为在资源受限环境中进行实时图像分类等应用的有力选择。

相关推荐
知识分享小能手2 小时前
React学习教程,从入门到精通, React教程:构建你的第一个 React 应用(1)
前端·javascript·vue.js·学习·react.js·ajax·前端框架
speop3 小时前
【datawhale组队学习】RAG技术 -TASK05 向量数据库实践(第三章3、4节)
数据库·学习
阿阳微客3 小时前
CSGO搬砖项目详解:从装备选择到市场策略
笔记·学习·游戏
whale fall3 小时前
【雅思020】Opening a bank account
学习
慕伏白3 小时前
【慕伏白】CTFHub 技能树学习笔记 -- Web 之密码口令
笔记·学习
麻雀无能为力3 小时前
python 自学笔记13 numpy数组规整
笔记·python·numpy
17岁的勇气4 小时前
Unity Shader unity文档学习笔记(二十一):几种草体的实现方式(透明度剔除,GPU Instaning, 曲面细分+几何着色器实现)
笔记·学习·unity
long3165 小时前
状态设计模式
java·学习·程序人生·设计模式·状态模式·state-pattern
天下琴川5 小时前
Dify智能体平台二次开发笔记(10):企业微信5.0 智能机器人对接 Dify 智能体
笔记·机器人·企业微信