图像分类与基础视觉模型
任务目标:给定一张图片,识别图像中的物体是什么
任务难点:图像内容是像素整体呈现的结果,和个别像素值没有直接关联,难以遵循具体的规则设计算法
任务方法:从数据中学习定义模型->训练->预测
课程内容分为两部分:1、模型设计;2、模型学习。
图像分类模型设计
卷积神经网络
2012 AlexNet使用5个卷基层、3个全连接层、ReLU激活函数成功搭建大规模图像模型,实现并开源了cuda-convnet;
2012-2014 加深神经网络,从而诞生了VGG(提取不同尺寸特征图)、GoogLeNet(不同卷积核不同感受野)
随着神经网络深度增加,分类正确率不增反降,引入近似恒等映射,避免梯度消失等问题;
2015 ResNet,综合VGG和GoogLenet优点,并引入残差链接设计残差模块,获得CVPR2016最佳论文奖;
2016 神经结构搜索NAS,借助强化学习等方法搜索表现最佳的网络;
2020 VIT,使用Transformer替代卷积网络实现图像分类,使用更大的数据集训练,达到超越卷积网络的精度;
2022 ConvNeXt,参考Swin Transformer结构,设计卷积网络结构,性能反超Transformer
轻量化卷积神经网络
对于一个普通的卷积过程:
输入特征图
X
∈
R
H
×
W
×
C
X\in R^{H\times W\times C}
X∈RH×W×C
输出特征图 X ∈ R H × W × C ′ X\in R^{H\times W\times C'} X∈RH×W×C′
卷积的参数量: C ′ × ( C × K × K + 1 ) = C ′ C K 2 + C ′ C^{\prime} \times(C \times K \times K+1)=C^{\prime} C K^{2}+C^{\prime} C′×(C×K×K+1)=C′CK2+C′
卷积的计算量: H ′ × W ′ × C ′ × ( C × K × K ) = H ′ W ′ C ′ C K 2 H^{\prime} \times W^{\prime} \times C^{\prime} \times(C \times K \times K)=H^{\prime} W^{\prime} C^{\prime} C K^{2} H′×W′×C′×(C×K×K)=H′W′C′CK2
GoogLeNet引入1*1的卷积核,在引入不同感受野产生不同的特征的同时,也可以减少参数量
ResNet利用1*1卷积核串联在backbone模块中用于压缩通道,降低开销
MobileNet 可分离卷积,常规卷积=逐层卷积+逐点卷积
ResNeXt 分组卷积,将输入和卷积按照通道分组,在保证输出特征数量的情况下降低计算量
Vision Transformer
Transformer与cnn不同的是,Transformer更注重对应位置的权重信息,权重是输入的函数。
单头注意力如图所示:
多头注意力是在多通道输入concat的结果。
Vision Transformer将图像切分乘16*16小块,形成词向量输入Transformer编码器中,引入token来输入最后的分类,由此注意力模块是基于全局感受野的,复杂度也大。
Swin Transformer提出分层结构,并将图像划分窗口,将编码过程局限于窗口内,减低计算量;窗口与窗口之间,引入Shifted Window Multi-Head Self-Attention概念;以W-MSA和SW-MSA组成块为基础,堆叠4层获得特征图。
图像分类模型学习
学习范式:1、监督学习;2、自监督学习。
监督学习
一般流程流程:标注数据集 -> 定义损失函数 -> 解最优化问题
分类问题常用损失函数:交叉熵损失Cross-Entropy Loss,利用one-hot编码规则,预测越精准(正样本为正,负样本为负)则损失越低;
优化器:SGD和动量SGD,上一节已经讲过
学习率与优化器策略
权重初始化
1、朴素方法,均匀分布或者高斯分布确定初始值;
2、Xavier方法,前传时维持激活值的方差,反传维持梯度的方差:
a
=
6
/
(
fan
in
+
fan
out
)
or
σ
=
2
/
(
fan
in
+
fan
out
)
a=\sqrt{6 /\left(\operatorname{fan}_{\text {in }}+\operatorname{fan}_{\text {out }}\right)} \text { or } \sigma=\sqrt{2 /\left(\operatorname{fan}_{\text {in }}+\operatorname{fan}_{\text {out }}\right)}
a=6/(fanin +fanout ) or σ=2/(fanin +fanout )
3、Kaming方法,针对ReLU函数:
a
=
6
/
n
or
σ
=
2
/
n
, here
n
=
fan
in
or
fan
out
a=\sqrt{6 / n} \text { or } \sigma=\sqrt{2 / n} \text {, here } n=\operatorname{fan}_{\text {in }} \text { or } \operatorname{fan}_{\text {out }}
a=6/n or σ=2/n, here n=fanin or fanout
4、用训练好的模型权重初始化,替换与训练模型的分类头,进行微调
学习率策略-学习率退火
在训练初始阶段使用较大的学习率,损失函数稳定后下降学习率
学习率策略-学习率升温
在训练前几轮学习率逐渐上升,知道预设的学习率,以稳定训练的初始阶段
Linear Scaling Rule
针对同一个训练任务,当batch size扩大为原来的k倍时,学习率也对应扩大k倍
自适应梯度算法
不同的参数需要不同的学习率,根据梯度的历史幅度自动调整学习率:Adam
正则化与权重衰减 Weight Decay
权重衰退加入一个限制,通过限制参数值的选择范围来控制模型容量,应用在SGD,针对Adam等自适应算法不成立,AdamW提出权重衰退独立于归一化步骤,效果优于Adam。
早停 Early Stopping
训练过程中,验证集分类精度达到最值,停止训练,防止过拟合。
模型权重平均EMA
权重计算策略:
Θ
ˉ
0
=
Θ
0
Θ
ˉ
t
=
β
Θ
ˉ
t
−
1
+
(
1
−
β
)
Θ
t
\begin{array}{l} \bar{\Theta}_{0}=\Theta_{0} \\ \bar{\Theta}_{t}=\beta \bar{\Theta}_{t-1}+(1-\beta) \Theta_{t} \end{array}
Θˉ0=Θ0Θˉt=βΘˉt−1+(1−β)Θt
模型权重平均SWA
在训练末期使用较高的学习率,在损失平面的平坦区域做更多的探索,最后平均模型。
数据增强
数据集通过简单的变化扩展副本,扩充训练数据集
AutoAugment:通过强化学习,搜索数据增强的策略
RandAugment:更简单的搜索空间,随机选取N个数据增强操作
Mixup:逐像素混合图像
CutMix:遮盖原图并用另一幅图填充
标签平滑Label Smoothing:因为数据集质量问题,类别标注可能错误或不准确,让模型最大限度拟合标注类别会有碍于泛化性,引入平滑系数,降低标签的自信程度
模型相关策略
DropOut:随机丢弃权重链接,不与BN混用
随机深度:对整个ResBlock卷及部分做了随机丢弃,利用不同的深度训练,最终相当于潜在融合了多个不同深度的网络,提升性能
自监督学习
常见类型:基于代理任务、基于对比学习、基于掩码学习
Relative Location
基本假设:模型只有很好地理解到图片内容,才能够预测图像块之间的关系;
SimCLR
基本假设:如果模型能很好地提取图片内容的本质,那么无论图片经过什么样的数据增强操作,提取出来的特征都应该极为相似。
Masked autoencoders
基本假设:模型只有理解图片内容、掌握图片的上下文信息,才能恢复出图片中被随机遮挡的内容。