报告笔记:黄高-CV-骨干模型研究

目录

一、骨干模型研究历程

二、借鉴人类的视觉系统的动态机制

 1、基于样本维度

 2、基于空间维度

3、基于时间维度

三、动态神经网络模型

1、基于样本维度(基于vit)

2、基于空间维度

1)Dynamic Network

2)From Deformable Convolution to Deformable Attention

3、基于时间维度(面向视频)

 4、总结

四、综述

五、cnn vs. transformer(convolution vs. self-attention)

回顾了计算机视觉领域骨干模型研究历程,并介绍一类在推理过程中能够根据输入的变化改变自身结构或参数的动态神经网络模型。相较于当前主流的静态深度模型(把一个模型训练好了,它这个结构不会再变动了,在推理阶段具有固定计算图和参数,有局限性),动态网络能够针对输入的变化相应地调整自身的深度、宽度或者参数值等,实现计算量的“按需分配”,进而提升模型的准确性、适应性、计算效率,降低系统功耗,如若实施便可极大程度提高深度学习效率,能够用于边缘计算等多个应用场景,为产业界带来生产力的极大提升(难点:传统神经网络理论的不适应、硬件方面的不匹配)。报告将介绍几类典型的样本自适应动态网络和时空自适应动态网络,并讨论现有方法的局限以及未来发展前景。

一、骨干模型研究历程

 transformer较cnn的优点:更适合于多模态的输入。

二、借鉴人类的视觉系统的动态机制

 1、基于样本维度

人类对于上面两张马的照片识别反应时间不一样,消耗计算不一样 ,人类视觉系统天然有在不同样本上的动态性,而神经网络对于这两张照片都是从第一层慢慢向后传,没有动态性。所有我们想让神经网络在右边图像这种简单的样本上快速推理(不一定需要很多层数),在左边图像这种复杂的样本上用多一点层数。

(对样本难度进行区分,DKD类似)

 2、基于空间维度

一眼看到有车,有建筑,接着再看到更多的细节有摩托,有窗户,所以人在看一个图像在不同区域(不同像素)上做的计算也不一样 ,人类在不同区域计算分配是不均匀的,不会在无关区域做大量计算,更关注显著区域(有针对性,高效)。而深度学习对每个像素逐个卷积,把每个patch当做一个token,没有空间上的动态性。

3、基于时间维度

 对于视频信号,时间上的动态性:比如拐弯、车多的时候比较紧张,直行、车少的时候比较放松;处理视频的时候有的帧信息丰富大脑需要做大量计算;而深度学习处理视频在时间上,几乎每一帧都在做类似的处理。

4、总结:想要提高神经网络的效率,可以从以上三方面进行挖掘,不同样本上,有的样本不需要那么多计算,空间维度上,有的像素不需要那么多计算,在时间维度上,有的时间帧没有那么重要,所有没有必要总是用一百层去计算,而是有选择性地动态地去分配计算,把计算分配到最需要的地方。

三、动态神经网络模型

1、基于样本维度(基于vit)

 

有的图像确实需要256个words,而有的图像比较简单,可以用更少长度的序列去处理。实现方式:上图右边框架,从小到大有多个vision transformer(比如图中有三个),第一个transformer处理序列比较短的(预先不知道要用哪个transformer要把图像切成多大的序列,就把图像全丢给第一个,如果得出精度很高就不需要再进行下一步操作,只消耗4个长度的token对应的计算),如果精度不够高,将图像更加细致的表示(3*3个patch,即9个token),置信度高就stop,不高就用更多的patch。对于需要高精度的图像,经过之前很多步,有很多冗余的计算,所以设计红色和蓝色的reuse结构,上面提取的有用信息用到下一步,下图为两个reuse模块的设计。

 结果:

动态网络与其他网络压缩的方式量化、剪枝、蒸馏是相互正交、兼容的。(可以在动态网络的基础上再进行量化、剪枝、蒸馏)

2、基于空间维度

1)Dynamic Network

人实现空间上的动态性是一个序列的过程,在每一步都会看到一些特定的物体关注到特定的特征,持续不断地阅读这张图,我们试图将这种模式借鉴到深度学习中,使其序列地处理图像内容,从而实现在不同的空间上分配不同的计算。

人类:一眼看到图片中有只鸟,分辨什么类型的鸟需要再去关注头部尾部特征。transformer或者cnn是把图全部输入神经网络第一层,然后到第二层第三层……是并发的过程而不是序列地过程,怎么把图像识别的过程变成序列地过程呢?——提出Glance and Focus Networks(GFNet)

首先模拟人快速浏览全图的能力,resize为一个低分辨率的图,经过backone处理(对于绝大部分的网络包括cnn、transformer,处理一个图像,边长缩小为原来的1/4,计算就为原来的1/16。),然后算置信度,不够高就再关注局部细节(例如在更高的分辨率上把头框出来,进行精细的特征提取),看完头可能还需要再去看更多的局部细节特征。,整个过程可以随时终止,类似人对图像识别的过程,不用所有的像素都仔仔细细地看一遍。

训练好上图绿框后(stage 1),固定不再变,训练下图的Patch Proposal Network(stage 2)Patch Proposal Network与检测网络中的RPN类似,但是没有groud truth,怎么去监督呢?用强化学习的方式(action输出决策:到底看哪个位置,即一个横纵坐标(这里框的大小是固定的)、reward loss的下降(Discounted Rewards:更少的patch)、stage 选择的特征)(按什么原则来crop:patch通过Patch Proposal Network选出,Patch Proposal Network通过强化学习的方式学出,训练阶段告诉它这个位置选的好不好,好不好当成一个奖励信号,也就是选出一个patch扔到模型中去做分类,如果选了猫的头部,那么训练loss马上降低,因为它对应猫的属性很强,如果选了一个背景区域,对loss就没贡献)。

训练好Patch Proposal Network(stage 2)后,crop不再是随机的,所以再训练一次stage1(stage 3)

backbone可以基于任何的模型,这里基于mobilenetv3(边缘端效率最高的模型)和Regnet

左侧glance就能识别,右侧需要再提取local feature才能识别

以上是把视觉识别建模成一个序列的过程,实现空间上的动态,即在图像不同区域进行不同的计算量(选了这几个局部patch,那没选的地方计算量就变少了)

2)From Deformable Convolution to Deformable Attention

卷积核发生形变,形变不是预先定制好的,而是data dependent,不同图像进来,不同区域上,形变都是不一样的,变形的方向即在二维平面上水平竖直偏移多少offset是学出来的,这其实就是一种空间上的动态的计算,比如说关键物体出现在图像的左上角区域,那卷积核都往左上角偏移,所以基于这种可形变卷积是可以实现空间上的动态计算的。

 

在transformer里是不是也能产生这样的形变?

图(a):如果只看vit结构,首先这个形变是没有意义的,上图(a)红色五角星和蓝色五角星为两个query,每个query都attend到的都是全图,而且attention在某种意义上就是deform了,其次计算上几乎不可实现,每个位置存这么多offset,显存会爆炸,卷积核3*3就预测9个数偏移量不大,vit是全图,本身attention就很多,每个query存一组offset是不可能的。

图(b):但是做deformation的动机还是有的,swim transformer是transformer(虽然attend到全图但attention值会计算在物体,attend全图浪费计算,attention值很低的地方还是在做计算,没有真正把计算值cut掉只是attention值小一点)的改进版本,它变成了window attention,就在window里面做attention,效率就会提升。(分块的思想,人工智能案例课上讲过

 图(c):DCN每个卷积核做一个小的形变,swim transformer形变是固定的与数据无关的

动机:我们想在vit上做形变deformation,因为swim transformer的成功告诉我们并不一定要关注到全图,DCN告诉我们做形变是有意义的

图(d):提出Deformable Attention(DAT),与DCN最大的区别就是,DCN里每个query有自己的形变(卷积核扫完每个位置都做一个特定的形变),DAT里attention到的东西比卷积核大很多不是3*3,而是一个更大的区域,为了解决计算上的问题,我们可以让attend的区域所有位置共享,DCN里红星和蓝星是shared(make sense:比如这个狗出现在某个位置,那么所有的query都应该关注这个重要区域而不应该在草地上,哪怕有多个物体也应该聚集在重要物体上)。

DAT具体实现:

先有一个reference points(规整的参考点),相比reference points去做偏移,告诉我们attention应该往哪个方向attend。(预测形变的网络,与deformable convolution类似,详细见文章)

deformable convolution本身关注的是检测和分割,因为当图像比较大的时候形变的意义更大,但在ImageNet上做分类(上游任务)也能涨部分点(下左图),在Semantic Segmentation(下游任务)上涨点更明显。

可视化中可以看到,基本上attention会往物体的边界去偏移。下图羊,五角星是query,swin transformer中attend到羊的头部区域,框起一个小的window(attention值比较大的区域),DAT中可以看到黄色五角星更散开到羊全身不同部位,边界点会更多一点。

3、基于时间维度(面向视频)

关心跳水的动作,前提准备动作和已经入水的动作其实不太重要,做视频的任务,比如action information或者特定动作识别处理,数据上是有很多时间上的冗余性(如何去除?)

针对视频去设计时空两个维度的自适应动态网络,思路与Glance and Focus Networks(GFNet)类似。首先有一个Policy的网络(策略网络,通过强化学习学得),会在处理每一帧的时候告诉这一帧到底该不该看,如果需要看的话该看什么区域。(详细见文章)

v2:把强化学习扔掉,直接搭一个模型,把loss定义好就能训。

 4、总结

效率更高,表征能力更强(对于某个特定问题,特征对于问题本质的反映能力、决断能力)(静态网络结构固定参数固定,动态网络推理时结构可根据输入变化),自适应能力更强,兼容性一般性更好(有了backbone,可以做分割检测等下游任务 ),可解释性更好(例如处理视频时,原来模型识别出结果是啥就是啥,现在还能告诉,在做出这个识别时,关注的是视频的哪一段,以及在这一段里关注的是视频的哪些区域)

四、综述

五、cnn vs. transformer(convolution vs. self-attention)

 

通常我们认为convolution与self-attention是两种不一样的模型(transformer的核心就是attention),但在某种意义上这两种网络的相关性挺高的,虽然self-attention中没有convolution,但是学q、k、v等价于用1*1的卷积。对卷积和attention进行拆解的话,attention就是先学q、k、v,学的过程用一个projection等价于1*1的卷积,得到的q、k、v算相似度再加上attention再aggregate,convolution的话,通常为3*3的卷积,可以拆成9个1*1的卷积,shift然后再aggregation(3*3的卷积得到1组特征图,9个1*1的卷积得到9组特征图,移位再相加变成1组特征图)。都是两阶段的过程,第一阶段对于卷积和attention都是计算复杂度Oc^2(其实卷积计算复杂度更高,因为要考虑通道),第二阶段是线性的计算复杂度是Oc,计算主要都集中在第一阶段,而第一阶段是一样的操作,所以我们如何去做一个巧妙的融合呢?attention的优势是在深层学relation,convolution的优势是在浅层提边缘、纹理等特征。

idea(动态网络):

1)先验知识:场景先验

2)无人机数据集

key

call back / idea

参考:回放[2022-01-25]数据智能系列-黄高-视觉骨干模型研究前沿与探讨

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值