任务目标:给出图像识别出图像内物体
在图像分类任务中,往往将图像理解为由像素所构成的数组 X ∈ R H × W × 3 X \in \mathbb{R}^{H \times W \times 3} X∈RH×W×3,同时对所检测物体进行编号 y ∈ { 1 , . . . , K } y \in \{1,...,K\} y∈{1,...,K},最终构建出一个抽象函数 F : R H × W × 3 → y F:\mathbb{R}^{H \times W \times 3} \rightarrow y F:RH×W×3→y,从而完成对图像中物体的分类。
但由于图像内容往往与单个像素无关,而与其表现出的特征有关,因此对于图像分类任务,无法设置具体的规制使得算法对图像完成分类,而是需要构建出模型,获取到具体的图像特征,根据该特征完成对物体的分类。
传统机器学习任务在处理图像分类任务时,由于图像数据往往在高维空间中以复杂方式进行缠腰(如下图),仅靠常规的机器学习算法很难处理这种复杂分布的数据,因此需要手动设计特征。
在特征工程中,人们通过手动设计特征(如HOG),提取出高维图像内的特征并将其转化为低维特征向量,在保留大部分物体信息的前提下,极大降低数据维度,最后根据机器学习算法对低维数据进行处理完成分类。例如2010年ILSVRC冠军方案NEC-UIUC,通过手工设计特征+机器学习方法将Top-5错误率降低到了28%左右。但此后受限于信息丢失,在视觉任务中基本达到了性能瓶颈。
不同于传统机器学习方案,深度学习标志着图像任务从特征工程时代开始步入特征学习时代。通过卷积(CNN)、多头注意力(Transformer)等可学习的特征提取模块进行复合,构建出一个端到端的复杂分类器,轻松实现图像特征提取,大幅度提高了检测精度。
自AlexNet在ILSVRC横空出世后,图像任务正式步入深度学习时代,大量优秀的神经网络结构开始涌现,下面主要对几种经典内容进行介绍分析:
AlexNet
作为第一个吃螃蟹的,AlexNet所做的工作不仅仅只有将深度学习方法带入视觉领域,研究团队使用ReLU函数取代了常用的Sigmoid函数,大幅度提高了收敛速度。
同时团队通过实现并开源cuda-convnet,首次将大规模神经网络在GPU上进行训练,在当时那个以CPU训练为主流的环境中,显著提升了训练速度,为后续研究也奠定了良好的基础
VGG
对于VGG来说,其特点更多在于将此前的 5 × 5 5 \times5 5×5大尺寸卷积核拆解为了两个 3 × 3 3\times3 3×3卷积,这种做法在保证了相同感受野的同时,具备更少的参数量和更多的层数和表达能力。
以一个尺寸大小为 x x x的图像为例,假设padding为1:
可以发现二者所得输出图尺寸相同,即二者**感受野相同,**在感受野相同的情况下,计算二者参数量:
发现前者参数量是后者的1.39倍,但大卷积核也并非无用,由于有效感受野的大小是正比于卷积核大小,因此大卷积核可以增加有效感受野,这一点是小卷积核无法替代的,ConvNeXt中 7 × 7 7\times7 7×7大尺寸卷积核的使用就是个明显的例子。
ResNet
由于CNN中网络深度越深,其特征层次越丰富,因此网络模型纷纷开始追求更深的深度,但随着模型的加深,精度退化问题开始凸显,由于ReLU在反向传播时带来的不可逆信息损失,更深的层次往往精度不增反降。
为了缓解精度退化问题,ResNet在设计时引入Skip Connections来实现**恒等映射,**通过跳接在激活函数前,将上一层的输出与本层输出相加,将求和的结果输入激活函数作为本层的输出,即 H ( x ) = F ( x , W i ) + x H(x)=F(x,W_i)+x H(x)=F(x,Wi)+x,其中 F ( x , W i ) F(x,W_i) F(x,Wi)就是需要学习的残差。
ResNet 效果好的原因:
ViT与Swin Transformer
在介绍ViT之前,首先需要对注意力机制和Transformer有所了解。
虽然注意力机制与卷积都注重实现层次化特征,即对空间邻域内的前层特征加权求和,权重越大表示对应位置的特征就越重要。
但在卷积中,权重是可学习的参数,与输入无关,受限于局部感受野仅建模局部关系,其对于远距离的关系只能通过多层卷积去建模实现,但由于池化的存在,使得多次池化后达到理论全局感受野,但实际感受野要小得多。注意力机制则很好的弥补了这一点,其权重是输入的函数,且不受限与局部,通过时空关系可直接显示的建模全局感受野。
Vision Transformer(ViT)
ViT是在Transformer的基础上诞生而来的,由于在NLP任务中,Transformer受限于结构常用于处理一维数据,因此在迁移到视觉领域后,需要将图像切分成若干 16 × 16 16\times16 16×16的小块(Patch),并将这些小块组合成一列向量输入到Transformer的Encoder层中进行处理
Swin Transformer
与NLP相比,Transformer应用在视觉领域有两个难点:
基于上述问题,Swin Transformer的主要思想是把建模能力很强的transformer和视觉信号的先验联系起来,这些先验具有层次性、局部性和平移不变性,具体做法是用shifted window来建立分层特征图,有了分层特征图就可以用FPN/Unet等结构去做密集预测的任务,而且计算量与图片尺寸成正比。
目前在深度学习任务中,模型的学习常见的是监督学习和自监督学习两种学习方法,下面对着两种方法进行介绍。
获取标注后的数据集,包括图像 X i X_i Xi和标签 y i y_i yi
定义损失函数 L : [ 0 , 1 ] K × N → R L:[0,1]^K\times \mathbb{N} \rightarrow \mathbb{R} L:[0,1]K×N→R,模型会依据损失函数来计算预测值和标签的差距,以此衡量单个预测结果的好坏
求解最优化问题,获取使得总Loss值最小的参数(梯度下降)
通过设计辅助任务,使得模型在大规模无标注数据中通过**前置任务(Pretext Task,也叫辅助任务)**去自动构建监督信息,以此获取预训练模型
对于新的下游任务,采用监督学习方法迁移预训练模型参数,并以此在下游任务中进行微调即可。