十八、深度学习模型30年演化史

 

1、模型分类
    深度学习是解决问题的一系列模型与方法,但深度学习模型不是深度学习领域中唯一的研究方向,且不一定是最重要的研究方向。除了模型之外,比较重要的还有优化算法、损失函数、采样方法等。
1.1 DNN 
    深度神经网络(Deep Neural Networks, 以下简称DNN)是深度学习的基础,DNN有时也叫做多层感知机(Multi-Layer perceptron,MLP)
    DNN内部的神经网络层可以分为三类,输入层,隐藏层和输出层,包括前向传播算法,反向传播算法BP(back propagation)
    BP神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,Vanilla Neural Networks实际上就是BP神经网络。Vanilla本意是香草,在这里基本等同于raw,即最原始的CNN。
1.2 CNN 卷积神经网络
    能够将大数据量的图片有效的降维成小数据量 (并不影响结果);能够保留图片的特征,类似人类的视觉原理;
    实际应用:图片分类、检索;目标定位检测;目标分割;人脸识别;骨骼识别。
1.3 RNN 循环神经网络
    传统神经网络的结构:输入层 – 隐藏层 – 输出层。RNN 跟传统神经网络最大的区别在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。RNN 有短期记忆问题,无法处理很长的输入序列;训练 RNN 需要投入极大的成本;长期信息可以有效的保留(GRU);不重要的信息会选择“遗忘”(LSTM)
    实际应用:文本生成;语音识别;机器翻译;生成图像描述;视频标记
1.4 GANs 生成对抗网络
    由 2 个重要的部分构成:生成器 (Generator)通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器。判别器 (Discriminator):判断这张图像是真实的还是机器生成的,目的是找出生成器做的“假数据”
    优势是能更好建模数据分布(图像更锐利、清晰),无需在学习过程中进行推断,没有复杂的变分下界,避开近似计算棘手的概率的难题。
    缺陷是难训练,不稳定。生成器和判别器之间需要很好的同步,但是在实际训练中很容易 D 收敛,G 发散。D/G 的训练需要精心的设计。GANs 的学习过程可能出现模式缺失,生成器开始退化,总是生成同样的样本点,无法继续学习。
    实际应用:生成图像数据集;生成人脸照片;生成照片、漫画人物;图像到图像的转换;文字到图像的转换;语意 – 图像 – 照片的转换
1.5 RL 深度强化学习
    如果 Agent 的某个行为策略导致环境正的奖赏 (强化信号),那么 Agent 以后产生这个行为策略的趋势便会加强。Agent 的目标是在每个离散状态发现最优策略以使期望的折扣奖赏和最大。
    RL 与其他机器学习算法不同的地方在于:没有监督者,只有一个 Reward 信号;反馈是延迟的,不是立即生成的;
    实际应用: 智能控制机器人及分析预测;自动驾驶,推荐,路径优化
    
2、模型组成
    在深度学习中,通常将模型分为三个部分:backbone、neck 和 head。
  Backbone:是模型的主要组成部分,通常是一个卷积神经网络(CNN)或残差神经网络(ResNet), 负责提取输入图像的特征.
  Neck:是连接 backbone 和 head 的中间层, 对来自 backbone 的特征进行降维或调整,可以采用卷积层、池化层或全连接层等。
  Head:是模型的最后一层,通常是一个分类器或回归器,产生最终的输出。
2.1 常用Neck:
  卷积层:增加特征图的通道数和深度,可以是普通卷积层、空洞卷积层或分组卷积层等不同类型的卷积。
  池化层:减少特征图的尺寸和参数数量,可以是最大池化或平均池化。
  上采样层:增加特征图的分辨率,可以是双线性插值、转置卷积或反卷积等不同类型的上采样。
  注意力机制:增强特征图的重要性和关联性,更好地捕捉物体间的语义关系和上下文信息。可以是通道、空间或多头注意力机制等。
  FPN(Feature Pyramid Network):通过多个不同分辨率的特征图之间的连接,实现多尺度特征融合。
2.2 常用Head
  全连接层:将特征图转换成向量形式,并通过多个全连接层实现分类。
  池化层:提取特征图的最大值或平均值,以减少特征图的尺寸和参数数量。
  Softmax层:将输入向量映射到概率分布,以实现多类别分类。
  Sigmoid层:常用于二分类任务中,将输入向量映射到0到1的概率范围内。
  RPN(Region Proposal Network)层:用于生成候选框,并对其进行分类和回归。
  RoI Pooling层(Region of Interest-感兴趣区域):从特征图中提取RoI的特征。
  分支层:将特征图分支到不同的任务上,以实现联合训练。
2.3 常用Backbone
  通常说的语义分割模型,指的就是这一层的模型。语义分割,一般是针对图像进行像素级分类,将每个像素都标注上其对应的类别。输入(H*W*3)就是正常的图片,输出( H*W*class )可以看为图片上每个点的one-hot表示,对每一个pixel位置,都有class数目的值。
  
3、语义分割模型
3.1 传统的语义分割模型: 
    又可以分为基于统计的方法和基于几何的方法。
3.2 基于候选区域的模型: 
    而基于卷积神经网络,可以自动学习图像的特征,进行端到端的分类学习,大大提升语义分割的精确度。 
    首先从图像中提取自由形式的区域并对他们的特征进行描述,然后再基于区域进行分类,最后将基于区域的预测转换为像素级预测,使用包含像素最高得分的区域来标记像素。
    生成候选区域的过程要花费大量的时间和内存空间。此外,不同算法提取的候选区域集的质量也千差万别,直接影响了最终的语义分割效果。
3.3 基于卷积的模型
    cnn卷积神经网络在卷积之后会接上若干个全连接层,将卷积层产生的特征图(feature map)映射成为一个固定长度的特征向量。用于图像级别的分类和回归任务。
    FCN全卷积神经网络对图像进行像素级的分类,从而解决了语义级别的图像分割问题。采用反卷积层对最后一个卷基层的特征图(feature map)进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每一个像素都产生一个预测。


3.4 基于监督学习、弱监督或无监督:
    假设输入与输出的随机变量X和Y遵循联合概率分布P(X, Y),监督学习的目的在于学习一个由输入到输出的映射(模型),这个模型可以是概率模型P(y|x),也可以是非概率模型y=f(x),非概率模型也就是决策函数。
    损失函数是用来度量预测错误的程度,常用的有0-1损失函数,平方损失函数,绝对值损失函数和对数损失函数,损失函数由记号L(Y, f(x))表示。
    针对需要大量的标注数据集才能提高网络模型的精度这个问题,弱监督或无监督的语义分割技术将会是未来发展的趋势。
    如边界框标注、简笔标注、图像级标注等
3.5 基于实时语义
    现阶段评价应用于语义分割的网络模型主要着重点在精确率上,尽量缩短响应时间应是今后工作的方向。
3.6 基于三维场景
    目前训练的数据主要是二维的图片数据,未来需要针对三维数据的语义分割技术进行研究。

4、CNN分类演化史
    卷积神经网络(Convolutional Neural Networks, CNN)是深度学习中非常常见的算法(模型)。
4.1 LeNet5
     诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。从 1998 年到 2010 年神经网络处于孵化阶段。由于当时缺乏大规模训练数据,计算机的计算能力也跟不上,LeNet-5 对于复杂问题的处理结果并不理想。大多数人没有意识到它们不断增长的力量,与此同时其他研究者则进展缓慢。由于手机相机以及便宜的数字相机的出现,越来越多的数据可被利用。并且计算能力也在成长,CPU 变得更快,GPU 变成了多种用途的计算工具。这些趋势使得神经网络有所进展,虽然速度很慢。数据和计算能力使得神经网络能完成的任务越来越有趣。之后一切变得清晰起来……
4.2 AlexNet
    2012年,Hinton的学生Alex提出了深度卷积神经网络模型AlexNet,以显著的优势赢得了竞争激烈的ILSVRC 2012比赛,top-5的错误率降低至了16.4%,相比第二名的成绩26.2%错误率有了巨大的提升。是神经网络在低谷期后的第一次发声,确立了深度学习(深度卷积网络)在计算机视觉的统治地位。
    AlexNet将LeNet的思想发扬光大,成功使用ReLU作为CNN的激活函数,成功解决了Sigmoid在网络较深时的梯度弥散问题,虽然ReLU很久之前就被提出但直到AlexNet的出现才将其发扬光大。训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合,Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在CNN中使用重叠的最大池化,避免此前普遍使用平均池化的模糊化效果,且提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。提出了LRN(局部响应归一化层=Local Response Normalization)层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。使用CUDA(NVIDIA的通用并行计算架构)加速深度卷积网络的训练,利用GPU强大的并行计算能力。数据增强,随机地从256x256的原始图像中截取224x224大小的区域以及水平翻转的镜像,相当于增加了(256-224)^2x2=2048倍的数据量,大大减轻过拟合,提升泛化能力,数据增强技术包括图像转换,水平反射和补丁提取。
    该数据包含来自22,000多个类别的超过1500万个带注释的图像。在两个GTX 580 GPU上训练五到六天。
4.3 牛津大学-VGGNet
    VGG(Visual Geometry Group)模型是2014年ILSVRC竞赛的第二名,第一名是GoogLeNet。但是VGG模型在多个迁移学习任务中的表现要优于googLeNet。而且,从图像中提取CNN特征,VGG模型是首选算法。它的缺点在于,参数量有140M之多,需要更大的存储空间。但是这个模型很有研究价值。
    是第一个在各个卷积层使用更小的 3×3 过滤器(filter),并把它们组合作为一个卷积序列进行处理的网络。主要特点是 “简洁,深度”。 深, 是因为VGG有19层,远远超过了它的前辈; 而简洁,则是在于它的结构上,一律采用stride为1的3×3filter,以及stride为2的2×2MaxPooling。所以虽然深,但是结构大家一眼就可以记住。
     VGG 巨大的进展是通过依次采用多个 3×3 卷积,能够模仿出更大的感受野(receptive field)的效果,2个3´3=5´5,3个3´3=7´7,且参数量更少【(3x3x3 ) /(7x7) = 55%】,更多的非线性变换【多了2次relu】。这些思想也被用在了最近更多的网络架构中,如 Inception 与 ResNet。
     总结出:LRN层作用不大;越深的网络效果越好;1´1的卷积也是很有效的,但是没有3´3的卷积好,大一些的卷积核可以学习更大的空间特征。
     VGGNet是继承了AlexNet的思路,最主要的区别在于,VGGNet的每个卷积层并不是只做一次卷积操作,而是连续卷积2~4次。
     使用Caffe工具箱构建模型。在训练期间使用scale jittering比例抖动作为一种数据增强技术。在4个Nvidia Titan Black GPU上训练了两到三周。
     
4.4 加州伯克利分校-FCN
    产生于2015年,是CNN语义分割的开山之作,是不含全连接层(fc)的全卷积(fully conv)网络,包含三种模型FCN-32S, FCN-16S, FCN-8S·。
    主要贡献是将端到端的卷积网络推广到语义分割中;重新将预训练好的Imagenet网络用于分割问题中;使用反卷积层进行上采样;提出了跳跃连接来改善上采样的粗糙程度。
    U-Net及各种变体,基于FCN构建模型,提出的方法有效的提升了使用少量数据集进行训练检测的效果. 提出了处理大尺寸图像的有效方法.U-Net对解码器(图像->高语义feature map的过程看成编码器,高语义->像素级别的分类score map的过程看作解码器)进行了加卷积加深处理,FCN只是单纯的进行了上采样。在FCN中,Skip connection的联合是通过对应像素的求和,而U-Net则是对其的channel的concat过程。
    SegNet继续改进,FCN网络仅仅复制了编码器特征,而Segnet网络复制了最大池化指数。这使得在内存使用上,SegNet比FCN更为高效。尽管SegNet在评价指标不如FCN-8s效果好,但其提出的编码-解码的思想影响着后面的很多模型。
    DeepLab基于FCN理念,从2015年到2018年发布了四个版本,分别称为V1,V2,V3和V3+。v1使用了空洞卷积;提出了在空间维度上实现金字塔型的空洞池化atrous spatial pyramid pooling(ASPP);使用了全连接条件随机场。V2用了新的Resnet结构,并将卷积替换成了空洞卷积部分;在特征图的最后加入了ASPP,简单理解就是通过不同大小的空洞卷积模块来达到不同的感受野的目的,这样就可以对不同大小的物体都能做到比较准确地检测,进而提高准确率,事实也证明这个网络模块非常有效!V3加入了像素级别的特征图以及原始的图片信息在ASPP模块中,实际上没改什么东西,也就是把特征融合地更多了,这有点显而易见,必然结合的特征越多,对于效果的提升越来越大;V3+使用深度分离卷积替代了pooling,并且使用了Xception,来自inception结构,先对输入进行1*1的卷积,之后将通道分组,分别使用不同的3*3卷积提取特征,最后将各组结果串联在一起作为输出。
    RefineNet带有精心设计解码器模块的编码器-解码器结构;所有组件遵循残差连接的设计方式。
    PSPNet: Pyramid Scene Parsing Network提出了金字塔池化模块来聚合背景信息;使用了附加损失(auxiliary loss)。
    FastFCN提出了一种被称作联合金字塔上采样(Joint Pyramid Upsampling/JPU)的联合上采样模块来代替消耗大量时间和内存的带洞卷积。它通过把抽取高分辨率图的方法形式化,并构建成一个上采样问题来取得很好的效果。
    EncNet、DANet、OCRNet、Deconvnet、GCN
    
4.5 谷歌-InceptionNet
    更深的网络需要更多的数据才能有更好的效果,否则就比较容易过拟合。另一方面,复杂的网络意味着更大的计算量,这对于应用来说非常不利。Google的大神们启动了Inception项目,GoogleNet就是它的第一个版本(目前共有4个版本)。谷歌于2016年提出了InceptionResNetV1和InceptionResNetV2。二者都是将Inception同ResNet相融合,加上了shortcut的分支。
    对于卷积核大小的选择是需要经验和大量实验才可以确定的,到底是选3*3呢,还是5*5或者7*7?通过增加“宽度”的方式增加网络复杂度,避免陷入卷积核选择的陷阱,让程序自己学习如何选择卷积核。具体来说中,是在每一个卷积层,并行使用1*1卷积核,3*3卷积核,5*5卷积核和池化,同时提取不同尺度的特征,然后通过1*1的卷积核对每一个分支进行降维后,最后将结果合并拼接在一起。
    1*1卷积并没有对图像本身产生什么影响,作用在于改变通道数,比如,原图像 3*64*64的rgb,通过5个1X1卷积核就变成了5*64*64.用5个卷积核代替了原来RGB三通道的表示方法。因此,该卷积核既可以升维又可以降维;
    Inception-v2是在第一代的GoogleNet基础上加入了批标准化(Batch Normalization)技术。其具体做法是,对mini-batch中所有的信号量进行统一的归一化,使得一个批次中所有的信号量符合均值为0,方差为1的高斯分布。
    Inception-v3在之前的版本上又有提高。其最核心的思想是将卷积核操作继续分解成更小的卷积核。
    input=192*32x32,output=256*32x32
        1) kenel=3x3,param=192x256x3x3x32x32=452984832次乘法;
        2) kenel1=1x1,output=96*;kenel2=3x3, output=256*,param=192x96x1x1x32x32+96x256x3x3x32x32=245366784次乘法
        使用1x1卷积降维的方法节省了一半的计算量。有人会问,用1x1卷积降到96个特征后特征数不就减少了么,会影响最后训练的效果么?答案是否定的,只要最后输出的特征数不变(256组),中间的降维类似于压缩的效果,并不影响最终训练的结果。    
    把1x1,3x3,5x5的特征分开,这种全新的结构有什么好处呢?赫布认为“两个神经元或者神经元系统,如果总是同时兴奋,就会形成一种‘组合’,其中一个神经元的兴奋会促进另一个的兴奋”。因为训练收敛的最终目的就是要提取出独立的特征,所以预先把相关性强的特征汇聚,就能起到加速收敛的作用。
    使用了9个Inception模块,总共超过100层!使用的参数比AlexNet少12倍。接受“一周内几个高端GPU”的训练。
    Xception模型中是由Inception v3直接演变而来。其中引入了Residual learning的结构。提出了“depth-wise separable convolution”的结构。depthwise separable convolution就是先用M个3x3卷积核一对一卷积输入的M个feature map,不求和,生成M个结果;然后用N个1x1的卷积核正常卷积前面生成的M个结果,求和,最后生成N个结果。
    EfficientNet是由谷歌在2019年提出的一种卷积神经网络,它使用复合系数扩展方法来提高模型的效率和准确性。
    
4.6 微软-ResNets
    VGGNets证明了加深网络层次是提高精度的有效手段,但是由于梯度弥散的问题导致网络深度无法持续加深。经过测试,20层以上的深层网络,会随着层数的增加,收敛效果越来越差,50层的网络是20层的网络所得错误率的一倍。这一现象称为深度网络的退化问题。
    ResNets告诉我们残差网络是一种避免梯度消失的更容易优化的结构,ResNets的成功,使整个卷积神经网络的研究上了一个新的台阶,inception也将残差结构融入其中,实现了更优秀的模型inception-v4。
    152层,在8 GPU机器上训练两到三周。是目前拥有的最佳CNN架构,是残差学习理念的重大创新。
    RIR模型的全称是ResNet in ResNet,这是一种深度dual-stream架构,它对ResNets和标准的CNN进行了推广,并且很容易实现
    PreActResNet在进行卷积之前加入了BatchNorm和ReLU。通过实验我们得到这样的结论:不管网络有多深,整个网络中的梯度流都不会产生弥散问题。
    ResNeXt网络结构Facebook于2017年提出,是基于将模型做的更深及更宽。可以在不增加参数复杂度的前提下提高准确率,还减少了超参数的数量。VGG是堆叠网络(即深度)来提高网络性能,Inception(即提高宽度)来提高网络性能,而ResNeXt将二者结合起来。
    WideResNet的提出是因为ResNet的跳跃连接导致只有少量的残差块学习到特征。于是作者尝试着利用另一种思路:减少深度,增加宽度,就提出了WideResNet。
    DenseNet密集网络于2017年提出,因为ResNet是通过shortcut来避免出现梯度消失/爆炸。DenseNet的核心思想就是在每一层上都加上一个单独的shortcut,使得任意两层都能直接连通。实验结果证明,DenseNet在与ResNet同等复杂度和参数的情况下,效果要优于ResNet。
    SENet的全称是Squeeze and Excitation Networks,目的是显式地建模卷积特征通道之间的相互依赖性来提高网络的表达能力。Squeeze通过空间维度压缩特征,在空间上做全局平均池化,每个通道的二维特征变成了一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的通道数相匹配。而Excitation的作用是用两个全连接层和Sigmoid函数得到各通道的权值
    SKNet是SENet的加强版,是attention机制中的与SE同等地位的一个模块,可以方便地添加到现有的网络模型中,对分类问题,分割问题有一定的提升
    SqueezeNet 提出了squeeze层和expand层。Squeeze层只采用了1x1的卷积核,使得卷积过后的通道尽可能小,以减少计算量。然后进入expand层,expand层的卷积核由1x1和3x3的卷积核构成,其思想就和Inception类似。
    DarkNet53,实际上它和ResNet已经有很大的不同了,只是使用到了残差连接从而复用特征。DarkNet系列没有使用残差结构,运行速度更快。DarkNet53在ImageNet上的准确率已经可以和ResNet-152媲美,而且比它更快,但是也要注意到的是它的BFLOP/s暴增了很多。可能是因为在x2、x4阶段呆了太久的原因。
    空洞残差网络(简称DRN),主要是提出了使用空洞卷积而非降采样的方式去扩大感受野,这样就可以避免下采样带来的信息丢失了。
    ConvNeXt,全面超越Swin Transformer的CNN。“ConvNet派”还没到低头认输的时候。2022年1月,Meta AI研究院、加州大学伯克利分校的研究人员发表了卷积神经网络的“扛鼎之作”——ConvNeXt,基于纯ConvNet新架构,取得了超过先进ViT的计算速度和精度。1)将 ResNet 各阶段的堆叠次数从 (3, 4, 6, 3) 调整为 (3, 3, 9, 3);2) stem 层换成了与 Swin-T 网络相同的卷积核大小为 4,步距为 4 的卷积层;3)在卷积块的中间部分采用了 group-wise convolution 使得卷积块形成了一个平行结构; 4)加大了输出维度的数量使其与 Swin-T 网络相同,大幅提升了网络的准确率,但同时也不可避免地增加了模型的参数规模;5)发现当卷积核的尺寸为 7 时,网络的准确率和参数规模达到最优;6)将 RELU 替换为更常用的 GELU 激活函数;网络减少了激活函数的使用;减少了正则化函数的使用;还将正则化函数由 BN 替换成 LN;单独设计了一个下采样层对特征进行单独的下采样操作。通过上面从 Swin-T 网络中借鉴的这五种操作,将经典的 ResNet50 网络中现有的模块改造并构成了一个新的 ConvNeXt 网络。新网络在同样的参数规模下,其准确率由 Swin-T 网络的 81.3% 提升至 82.0%,提升了大约 0.7%,这表明 CNN 网络在图像识别和分类领域仍然能够达到有竞争力的性能表现。

4.7 谷歌-Transformer
    2017年6月12日,8位谷歌研究人员发表了Attention is All You Need,一声炸雷,大名鼎鼎的Transformer横空出世。它的出现,不仅让NLP变了天,成为自然语言领域的主流模型,还成功跨界CV,给AI界带来了意外的惊喜。Transformer并没有发明注意力,而是将其推向极致。Transformer这一经典之作却在NeurIPS 2017没有引起很多人的关注。在一项出色的工作变得有影响力之前,很难让人们认可它。2017年,该领域聪明的人中,很少有人能够预测到今天LLM革命性的规模。就像20世纪80年代一样,很少有人能预见自2012年以来深度学习的海啸。
    主流的序列转换模型都是基于复杂的循环或卷积神经网络,这个模型包含一个编码器和一个解码器。具有最好性能的模型在编码和解码之间通过一个注意力机制链接编解码器。RNN及其衍生的网络最致命的缺点就是慢。关键问题就在于前后隐藏状态的依赖性,无法实现并行。CNN对长序列难以建模。Transformer的注意力机制的话,每次(一层)就能看到序列中所有的位置,就不存在这个问题。但是卷积的好处是,输出可以有多个通道,每个通道可以认为是识别不同的模式,这种多通道输出的效果,所以提出了Multi-Head Attention多头注意力机制。一个新的简单网络结构——Transformer诞生了,它完全摒弃了递归结构,依赖注意力机制,挖掘输入和输出之间的关系,进而实现了并行计算。
    Transformer 在NLP领域掀起巨浪后,Transformer又来「踢馆」计算机视觉领域。自2012年以来,CNN已经成为视觉任务的首选架构。
    2018年已经成为自然语言处理机器学习模型的转折点。我们对如何以最能捕捉潜在意义和关系的方式、最准确地表示单词和句子的理解正在迅速发展。BERT的发布,这一事件被描述为NLP新时代的开始。特点1)contextual word representation 语义词表征,传统的词向量嵌入方法(word2vec等等)没有考虑词的语义,即一词多义。ELMO通过双向LSTM长记忆神将网络结构预训练词语的语义。2)预处理和微调,在训练开始之前使用别人已经学习完大量数据集后的参数,在训练过程中由自己给出的数据集来轻微调整参数来满足需要。3)如何运用self-attention也是Bert与GPT的区别,在GPT中使用单向的结构使得当前token的attention只于前面的token有关,这样忽略了后面token的影响,bert将单向的结构转为同时训练的双向结构。4)MLM,在一个句子中使用随机屏蔽掉 15% 的词,也就是用 [MASK] 取代它们,然后去预测这些词。使得在训练一个句子时不用从前往后单向的进行,而是同时深度双向的表示。5)NSP 是专门为像 QA 这种需要理解两个句子之间关系的任务提出的,具体训练过程是一半的句子 B 是句子 A 的下一句,一半的句子 B 不是句子 A的下一句,预测句子 B 是不是 句子 A 的下一句。
    2020年10月,谷歌提出的Vision Transformer (ViT),不用卷积神经网络(CNN),可以直接用Transformer对图像进行分类。ViT性能表现出色,在计算资源减少4倍的情况下,超过最先进的CNN。2021年,OpenAI连仍两颗炸弹,发布了基于Transformer打造的DALL-E,还有CLIP。DALL-E能够根据文字输出稳定的图像。而CLIP能够实现图像与文本的分类。
    在计算机视觉领域,对Transformer 的应用主要体现在两类方法中:其一是将注意力与卷积神经网络结合,其二是用注意力层替换某些卷积层。显然,这两类方法本质上并不是 Transformer 架构,都没有改变对 CNNs 架构的依赖。目前已经有基于Transformer在三大图像问题上的应用:分类(ViT),检测(DETR)和分割(SETR),并且都取得了不错的效果。
    风头正盛的ViT,是计算机视觉领域过去十年最瞩目的研究突破之一。2020年,谷歌视觉大模型Vision Transformer(ViT)横空出世,凭借碾压各路ConvNet的性能表现,一举掀起Transformer在计算机视觉领域的研究热潮。    vit首先将图像分块,展平为一维后再加上一个用于分类的class token,加上位置编码信息(位置编码通过),送入编码器,之后经过一个MLP head(MLP在预训练中含有一个隐藏层,在fine-tune中不含隐藏层),由class token得到分类结果。
    DETR 在特征提取部分还是使用的 CNN,而 ViT 则是完全使用 Transformer;DETR 用于目标检测任务,而 ViT 用于图像分类任务;都有可学习的嵌入(embedding),DETR 中是 Query,ViT 中是 cls token。
    DETR模型很难收敛,训练困难。在小物体检测上性能较差。于是提出了Deformable DETR,只在参考点附近采样少量的key来计算注意力,结合了DCN稀疏采样能力和Transformer的全局关系建模能力,这个模块可以聚合多尺度特征,不需要FPN。
    swin transformer,是cvpr2021的最佳论文,与Vit相比,1)它是一个层级结构,类似fpn,抽取不同层次的视觉特征,有一个分辨率逐渐降低的过程,分别是4倍,8倍,16倍下采样,而VIT一直保持16倍下采样,因为transformer本身是一个长度序列不变的变换。2)transformer范围不同,VIT是整张图,而它是小窗口。
    
4.8 HRNet
    High-Resolution Network,在高分辨率维度上做出改进,既追求在过程中保持高分辨率。之前的网络结构设计,主要沿袭LeNet的设计思想,既输入一张高分辨图片,然后在高分辨率上做卷积–>中等分辨率上做卷积–>低分辨率上做卷积这么一个串联的过程。这种设计思想很不错,在图像分类领域里取得非常好的成果,但在计算机视觉里面,除了图片分类以外,还有目标检测,语言分割,人脸对齐,人体姿势估计等领域,这些领域对空间相关信息比较敏感。比如人体姿势估计,我们输入一张图片,然后输出一张由一些关节点连线形成的姿势估计。目前主流的一些方法,实际上需要估计一个中间过程,中间会产生一个hidden map。在这个map上,会给每个像素分配一个值,这个值代表这个像素属于哪个keypoint的概率。实际上这个过程,需要一个很大的hidden map,所以像这一类任务其实是需要高分辨表征的。
    由于需要高分辨率表征,现在的一些主流方法是先通过一个识别网络得到一个低分辨率的特征图,然后再通过上采样或者其他一些手段再恢复到高分辨率。这类网络实际实际上有一个缺点,它们都是从高分辨率到低分辨率再到高分辨率这么一个过程,这个过程中其实会损失很多空间信息。与现有方法差别在于,现有方法主要恢复高分辨率,而本研究是让它在过程中一直保持高分辨率。
    其实提出的网络结构也比较简单,传统的网络结构是串联方式,此处提出一个并联的网络结构,把不同分辨率并联起来,并在不同分辨率层之间做交互。
    即改变有三个点:以往的网络结构是串联方式,我们把它变成并联。以往是先降为低分辨率再恢复高分辨率,我们是一直保持高分辨率。通过不同分辨率之间的交互,提高网络性能。
    人体姿态估计(Human Pose Estimation,以下简称为HPE)被定义为图像或视频中,人体关节(也被称为关键点-肘部、手腕等)的定位问题。为什幺人体姿势估计这幺难?灵活、小而几乎看不见的关节、遮挡、衣服和光线变化都为人体姿态估计增加了难度。HPE有一些非常酷的应用,在动作识别(action recognition)、动画(animation)、游戏(gaming)等领域都有着广泛的应用。例如,一个非常火的深度学习APP —— HomeCourt,可以使用姿态估计(Pose Estimation)来分析篮球运动员的动作。
    关节姿态估计的传统方法是使用图形结构框架。这里的基本思想是,将目标对象表示成一堆“部件(parts)”的集合,而部件的组合方式是可以发生形变的(非死板的)。局限性在于,姿势模型并非构建在图像数据之上。因此,研究者把大部分精力都放在了构建更具表现力的模型上了。传统姿态估计方法有其难以克服的局限性,但这一局面因为CNN的出现而被打破。随着Toshev等人对“DeepPose”的引入,人体姿态估计的研究开始从传统方法转向深度学习。
    近年来,大多数姿态估计系统(pose estimation systems)都普遍采用ConvNets作为其主构模块,这在很大程度上取代了手工制作的特征和图形模板;这种方法相比传统方法取得了巨大提升。
    DeepPose:通过深度神经网络(CVPR’14)进行人体姿态估计

    
4.9 MobileNet
    2017年Google人员发表V1,针对手机等嵌入式设备提出的一种轻量级的深层神经网络,采用了深度可分离的卷积。核心思想就是卷积核的巧妙分解,可以有效减少网络参数。它将标准卷积分解成一个深度卷积和一个点卷积(1 × 1卷积核),即Depthwise和Pointwise。Depthwise将每个卷积核应用到每一个通道,体现在代码中的group,而Pointwise中1 × 1卷积则用来组合通道卷积的输出。而后,通过一个流线型的架构(堆叠式),都是由深度可分离的卷积模块堆叠的,构成最后的模型。
    MobileNetV2则是在V1的基础上做出了改进,先进行1x1的Pointwise通道扩张,Depthwise+Pointwise通道压缩,然后Linear激活。
    ShuffleNetV1,2017年旷视科技参考MobileNet和ResNet提出,用Channel Shuffle来增强分组卷积的全局信息流通,是专门为计算能力有限的移动平台设计。采用两个新操作——逐渐群卷积(pointwise group convolution)和通道混洗(channel shuffle)在保障精确率损失不大的同时大大减少了计算成本。
    
4.10 RegNet
    颠覆常规神经网络认知的卷积神经网络,Regnet从更宏观的角度看待神经网络。如Alexnet,VGG,Resnet都是人类发展过程中寻找的比较好的网络结构,但是随着人类的发展,会发现之前的网络结构一定不是最优的最好的,优秀的网络结构如果靠人们一个一个去试的话未免是不是有些太费劲了。就在这个时候出现了NASnet,搜索神经网络
    所谓搜索神经网络,就是人们手动划分一个这个空间的子空间,然后使用搜索的办法去寻找最优解,但是事实上这个方法依然是落后的,第一,NAS系列的算法跑起来费算力和时间,其次,就算我们找到了一个最优解,如果他周围的临近点表现也不好的话,其实效果应该也没有那么好。 如果他周围的临近点表现也好的话,那这个就更没意义了,既然都表现好,那是不是说明人工选择的这个子空间好呢?这样NAS的优秀难道不是依赖于人工子空间的选择吗?以上两个问题让NAS搜索系列神经网络看起来像个笑话。
    Regnet的核心思想在于如何去设计一个有效的空间,并发现一些网络的通用设计准则,然后根据相应数据集,自动找到最优的参数。这样,不再人工选择空间搜索,而是找到一个寻找空间的方法,去搜索最优的参数。
    Regnet网络主要由三部分组成,stem、body和head。其中stem就是一个普通的卷积层(默认包含BN以及激活函数RELU),卷积核大小为3x3,步距为2,卷积核个数为32. 其中body就是由4个stage堆叠组成,如图(b)所示。每经过一个stage都会将输入特征矩阵的height和width缩减为原来的一半。而每个stage又是由一系列block堆叠组成,每个stage的第一个block中存在步距为2的组卷积(主分支上)和普通卷积(捷径分支上),剩下的block中的卷积步距都是1,和ResNet类似。其中head就是分类网络中常见的分类器,由一个全局平均池化层和全连接层构成。
    

5、注意力机制
    人类的视觉注意力机制通过扫描全局图像,获取需要重点关注的目标区域,而后对这一区域获取更多与目标有关的细节信息,而忽视其他无关信息。
    在神经网络学习中,一般而言模型的参数越多则模型的表达能力越强,模型所存储的信息量也越大,但这会带来信息过载的问题。那么通过引入注意力机制,在众多的输入信息中聚焦于对当前任务更为关键的信息,降低对其他信息的关注度,甚至过滤掉无关信息,就可以解决信息过载问题,并提高任务处理的效率和准确性。
    软性注意力(Soft Attention)机制是指在选择信息的时候,不是从N个信息中只选择1个,而是计算N个输入信息的加权平均,再输入到神经网络中计算。相对的,硬性注意力(Hard Attention)就是指选择输入序列某一个位置上的信息,比如随机选择一个信息或者选择概率最高的信息。但一般还是用软性注意力机制来处理神经网络的问题。
    注意力机制是一种通用的思想,本身不依赖于特定框架,但是目前主要和Encoder-Decoder框架(编码器-解码器)结合使用。
    学者们提出了3种方法在CNN中使用Attention机制,卷积前、池化时、二者结合。
5.1 RNN注意力
    以RNN作为编码器和解码器的Encoder-Decoder框架也叫做异步的序列到序列模型,而这就是如雷灌耳的Seq2Seq模型!惊不惊喜,意不意外!?
    未加入注意力机制的RNNEncoder-Decoder框架在处理序列数据时,可以做到先用编码器把长度不固定的序列X编码成长度固定的向量表示C,再用解码器把这个向量表示解码为另一个长度不固定的序列y,输入序列X和输出序列y的长度可能是不同的。《Learning phrase representations using RNN encoder-decoder for statistical machine translation》这篇论文提出了一种RNNEncoder-Decoder的结构,牛逼之处在于首次提出了GRU(Gated Recurrent Unit)这个常用的LSTM变体结构。也就是由单词序列构成的句子,这样的一个解码-编码过程相当于是求另一个长度可变的序列。
    《Neural Machine Translationby Jointly Learning to Align and Translate》这篇论文在上面那篇论文的基础上,提出了一种新的神经网络翻译模型(NMT)结构,也就是在RNNEncoder-Decoder框架中加入了注意力机制。这篇论文中的编码器是一个双向GRU,解码器也是用RNN网络来生成句子。所以增加了注意力机制的RNNEncoder-Decoder框架的关键就在于,固定不变的语义向量表示c被替换成了根据当前生成的单词而不断变化的语义表示ci。
5.2 SE
    提高性能的一个基本方法是设计一个良好的主干架构,如AlexNet、VGGNet、GoogLeNet、ResNet这些主干体系结构都有自己的设计选择,并且比以前的体系结构表现出显著的性能提升。另一个可提升的点在于注意力机制,方便地与现有的CNN架构集成。
    深度学习CNN中可以将注意力机制分为通道注意力和空间注意力两种,通道注意力是确定不同通道之间的权重关系,提升重点通道的权重,抑制作用不大的通道,空间注意力是确定空间邻域不同像素之间的权重关系,提升重点区域像素的权重,让算法更多的关注我们需要的研究区域,减小非必要区域的权重。
    SE (Squeeze and Excitation)注意力机制是通道注意力模式下的一种确定权重的方法,它通过在不同通道间分配权重达到主次优先的目的。
    提出了SE模块的三个变体cSE、sSE、scSE,并通过实验证明了了这样的模块可以增强有意义的特征,抑制无用特征。SE模块可以添加在每个卷积层之后,用于对feature map信息的提炼。
    cSE模块,具体流程如下:
    1、将feature map通过global average pooling方法从[C, H, W]变为[C, 1, 1]
    2、然后使用两个1×1×1卷积进行信息的处理,最终得到C维的向量
    3、然后使用sigmoid函数进行归一化,得到对应的mask
    4、最后通过channel-wise相乘,得到经过信息校准过的feature map
    sSE模块,实现过程变得很简单,具体分析如下:
    1、直接对feature map使用1×1×1卷积, 从[C, H, W]变为[1, H, W]的features
        2、然后使用sigmoid进行激活得到spatial attention map
        3、然后直接施加到原始feature map中,完成空间的信息校准
    scSe模块就是将sSE和cSE相加起来而已
5.3 BAM
    Bottleneck Attention Module(BAM)称为瓶颈注意力模块(BAM),可以与任何前馈卷积神经网络集成。我们的模块沿着两条独立的路径,通道和空间,推断出一张注意力图。我们将我们的模块放置在模型的每个瓶颈处,在那里会发生特征图的下采样。我们的模块用许多参数在瓶颈处构建了分层注意力,并且它可以以端到端的方式与任何前馈模型联合训练。

5.4 自注意力
    首先通过与软注意力Encoder-Decoder模型进行对比,来获得对自注意力模型(Self-Attention Model)的感性认识。
    在软注意力Encoder-Decoder模型中,更具体地来说,在英-中机器翻译模型中,输入序列和输出序列的内容甚至长度都是不一样的,注意力机制是发生在编码器和解码器之间,也可以说是发生在输入句子和生成句子之间。而自注意力模型中的自注意力机制则发生在输入序列内部,或者输出序列内部,可以抽取到同一个句子内间隔较远的单词之间的联系,比如句法特征(短语结构)。
    如果是单纯的RNN网络,对于输入序列是按步骤顺序计算隐状态和输出的,那么对于距离比较远又相互依赖的特征,捕获二者之间联系的可能性比较小,而在序列内部引入自注意力机制后,可以将句子中任意两个单词通过一个计算直接联系起来,就更容易捕获相互依赖的特征。
5.5 多头注意力
    Self-attention,有时称为intra-attention,是一种关联单个序列的不同位置以计算序列表示的关联机制。在此之前已成功用于多种任务。但据我们所知,Transformer是第一个完全依靠self-attention,而不使用卷积或循环的的encoder-decoder 转换模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vandh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值