图像分类
整理一些图像分类(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实现,提高了训练速度以及优化模块设计
阅读
- 讨论
- 博客
- 自定义(目标分类):相关论文、实现算法解析