图像分类
整理一些图像分类(image classification
)相关的文章、论文和实现
概念
- 图像分类(
image classification
):给定图像,判断图像所属类别。
论文
2022
- A ConvNet for the 2020s
- 基于
Vision Transformer
的设计逐步将标准ResNet
改造成为ConvNeXt
,证明了标准卷积网络的简单性和高效性
2021
- EfficientNetV2: Smaller Models and Faster Training
EfficientNet
的进阶版本- 重新设计搜索空间,增加额外算子,比如
Fused-MBConv
; - 应用训练感知
NAS
和放大策略共同优化模型精度、训练速度和参数量;
- 重新设计搜索空间,增加额外算子,比如
- 另外提出渐进式学习算法:在训练早期阶段使用小图像和弱正则化强度(应用在随机失活方法或者数据增强策略上);后期逐步增加图像大小和正则化强度。
- RepVGG: Making VGG-style ConvNets Great Again
- 在训练阶段插入构建块
RepVGGBlock
,用于增强训练阶段的模型泛化能力;在推理阶段通过结构重参数化技术来融合多分支,仅包含Conv3x3
和ReLU
,类似于VGG
结构,得到一个快速推理模型
2020
- EfficientNet-lite
- 基于
EfficientNet
优化的适用于移动/物联网的图像分类模型- 移除
squeeze-and-excitation
注意力层 - 使用
ReLU6
替代Swish
激活函数,能够显著提高训练后量化阶段的性能 - 固定
stem
层和head
层的大小,能够避免额外的模型缩放产生的权重和计算量
- 移除
- Model Rubik's Cube: Twisting Resolution, Depth and Width for TinyNets
- 通过大量实验证明了
EfficientNet
提出的复合缩放公式(同步缩放深度/宽度/分辨率)不适用于反向模型缩减,根据实验数据观察到分辨率和深度(层数)比宽度(通道数)更重要,并设计了一个缩小公式(这个公式描述不清晰,无法直接迁移到其他领域。感觉就是做了这么多的实验,必须得发篇论文出来证明一下),得到一个小模型簇 -TinyNet
- ResNeSt: Split-Attention Networks
- 提出
ResNeSt
,参数化SKNet
实现:先对上一层特征数据进行分组,然后对每组数据单独执行多分支特征提取+注意力机制,最后通过串联的方式输出特征数据 - 改进
ResNet
架构,提出ResNet-D
- 使用3个\(3\times 3\)卷积替代
stem
层的\(7\times 7\)卷积; - 对于一致性连接,如果需要执行下采样,那么在卷积之前执行\(2\times 2\)平均池化
- 使用3个\(3\times 3\)卷积替代
2019
- GhostNet: More Features from Cheap Operations
- 设计
Ghost
模块,通过线性映射扩充卷积生成特征图,以保持卷积特征冗余性,堆叠Ghost
模块生成GhostNet
- ACNet: Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution Blocks
- 设计了非对称卷积块(
Asymmetric Convolution Block (ACB)
),能够替换标准平方核卷积实现非对称卷积网络(Asymmetric Convolutional Network (ACNet)
)。在训练过程中能够增强网络的泛化性能,完成训练后可以等效的将网络转换成为原始架构 - EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
- 使用神经架构搜索技术创建一个基准网络(
EfficientNet-B0
),然后设计复合放大公式来同步缩放深度/宽度/分辨率,扩展成一个模型簇 -EfficientNets
- Searching for MobileNetV3
- 设计了新的网络架构搜索算法,最终获取
MobileNetV3-Large
和MobileNetV3-Small
- Selective Kernel Networks
- 设计了
SKUnit(Selective Kernel Unit)
,可分为3
步操作:分离(split
)、融合(fuse
)和选择(select
)- 分离操作指的是通过多分支卷积提取多尺度空间信息,当前默认为两个分支
- 融合操作为了使得神经元能够自适应调整感受野大小(多分支加法融合特征 + 全局平均池化嵌入全局信息 + 全连接层缩放特征维度)
- 最后使用
soft
注意力机制执行跨通道自适应调整空间尺度信息
- 堆叠多个
SKUnit
得到深度网络选择性核心网络(SKNet
),其核心思想为多分支连接+残差连接+注意力机制
2018
- MnasNet: Platform-Aware Neural Architecture Search for Mobile
MobileNetV2
的进阶版本,在移动神经架构搜索(MNAS
)中同时考虑模型准确性和延迟,搜索得到MnasNet
- ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
- 论文推导了
4
条设计原则,并设计了一个新的模型 -ShuffleNetV2
- 相同输入输出通道数能够保证最小
MAC
使用 - 过多的分组卷积操作会增加
MAC
使用 - 网络碎片化降低了并行度
- 不能忽略逐元素操作的时间
- 相同输入输出通道数能够保证最小
- MobileNetV2: Inverted Residuals and Linear Bottlenecks
- 在
MobileNet
基础上设计了MobileNetV2
:- 结合线性瓶颈层(
linear bottleneck
)和反向残差块(inverted residuals
)组合成瓶颈残差块(bottleneck residual block
) - 设计了
ReLU6
(\(ReLU6(x)=min(max(0, x), 6)\)),其最大输出值为6
,适用于移动端低精度设备
- 结合线性瓶颈层(
- 同时对
SSD
进行了修改,使用MobileNetV2
作为特征提取层,同时将预测层的标准卷积替换为深度可分离卷积,称该变体为SSDLite
2017
- Squeeze-and-Excitation Networks
- 提出一个新的架构 -
Squeeze-and-Excitation (SE) block
(挤压和激励模块),- 在挤压(
squeeze
)阶段对输出特征图执行逐通道的全局平均池化,以融合通道信息 - 在激励(
excitation
)阶段利用全局通道信息对每个通道的特征响应进行自适应重校准
- 在挤压(
- 将
SE
模块嵌入到现有的网络模型中,在增加少量计算复杂度的同时能够有效的提升网络性能 - ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile
- 使用逐点分组卷积(
group conv
)替代\(1\times 1\)卷积加速计算,使用通道重排(channel shuffle
)实现跨通道信息交互 - 改造残差块(
bottleneck
, \(1\times 1\)Conv
+ \(3\times 3\)Conv
+ \(1\times 1\)Conv
),提出shuffle unit
(\(1\times 1\)GConv
+channel shuffle
+ \(3\times 3\)DWConv
+ \(1\times 1\)GConv
),堆叠shuffle unit
得到ShuffleNet
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
- 基于深度可分离卷积构建
MobileNet
,同时介绍了宽度乘法器(控制每层通道数)和分辨率乘法器(控制输入分辨率)
2016
- Aggregated Residual Transformations for Deep Neural Networks
- 提出
ResNeXt
,在深度、宽度之外增加基数
设计,符合分离 - 转换 - 聚合
思想 - Identity Mappings in Deep Residual Networks
ResNet
后续的优化版本- 分析了恒等式映射的重要性\(y_{l}=x_{l}+F(x_{l}, W)\);
- 将后激活(
Conv-BN-ReLU
)替换为前激活(BN-ReLU-Conv
); - 在
CIFAR-10/100
上训练了ResNet-1001
,在ImageNet
上训练了ResNet-200
。
- Densely Connected Convolutional Networks
- 提出密集连接卷积网络
DenseNet
。对于每层而言,之前所有层的输出特征图都作为输入,其输出的特征图作为所有后续层的输入 - SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
- 论文探索了各种微架构(
Inception、BottleBlock
)和宏架构,设计了Fire
模块,通过堆叠Fire
模块得到SqueezeNet
- Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
- 结合
Inception
结构和残差结构,得到Inception-v4、Inception-ResNet-v1、Inception-ResNet-v2
2015
- Rethinking the Inception Architecture for Computer Vision
- 针对
GoogLeNet
架构进行优化,提出Inception-v2
和Inception-v3
架构- 堆叠两个\(3\times 3\)卷积替代一个\(5\times 5\)卷积,同时减少了计算量和参数量;
- 使用非对称卷积替换正常卷积操作,比如\(1\times n\),然后\(n\times 1\)卷积来替代\(n\times n\)卷积;
- 增加辅助分类器,加快极深网络训练的收敛;
- 通过并行卷积层和池化层设计,减少计算量的同时缩减空间尺寸;
- 另外提出标签平滑正则化(
label-smoothing regularization, or LSR
)损失函数。 - Deep Residual Learning for Image Recognition
- 提出
ResNet
,证明了残差学习和网络深度的重要性 - Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
- 文章提出批量归一化方法,对每层输入数据进行标准化预处理,保证输入数据符合标准化分布,以避免输出数据进入过饱和区域,从而避免梯度消失,加快模型收敛速度
- 论文在
GoogLeNet
架构中加入批量归一化层得到GoogLeNet_BN
2014
- Going deeper with convolutions
- 设计一个深度卷积神经网络架构 -
Inception
,通过多分支架构提高网络内部计算效率。堆叠Inception
模块得到GoogLeNet
- 训练过程中添加连接到中间层的辅助分类器,增加早些层的梯度信号,提供额外的正则化
- very deep convolutional networks for large-scale image recognition
- 提出
VGGNet
网络架构,调研\(3\times 3\)小卷积的优势,证明了堆叠深度能够有效提高网络性能
2013
- Network In Network
- 提出新的网络模型
NIN(Network In Network)
- 设计了一种新的深度网络结构
MLPConv
,使用微神经网络(micro neural network
)代替传统卷积层的线性滤波器 - 利用全局平均池化(
global average pooling
)代替全连接层作为分类器
- 设计了一种新的深度网络结构
- Visualizing and Understanding Convolutional Networks
- 提出一种可视化方法来观察中间层特征,以此发现不同模型层的性能分布,调整
AlexNet
参数得到ZFNet
- 第一层的滤波器大小修改为
7x7
- 第一和第二个卷积层的步长修改为
2
- 第一层的滤波器大小修改为
2012
实现
- 数据集
- 实现
- NVIDIA/apex
NVIDIA
提供的一个示例Demo
,用于展示NVIDIA
开发的混合精度插件,同时提供了一个很好的分类工程- facebookresearch/ConvNeXt
2022
年论文ConvNeXt
的官方实现- pytorch/examples
Pytorch
官方提供的示例Demo
- pytorch/vision
- 另一个
Pytorch
官方提供的视觉库,也提供不少分类训练推理的工程
- 自定义
- zjykzj/PyNet
- 基于
Numpy
实现的深度学习训练框架,实现了基本的模型定义、训练器、损失函数、优化器和学习率调度器 - ZJCV/ZCls
- 基于
Pytorch
实现的图像分类训练框架 - ZJCV/ZCls2
ZCls
升级版本,参考NVIDIA/apex
实现,提高了训练速度以及优化模块设计