前面我们介绍了transformer的结构,这一篇是将transformer思想用于CV中的论文,创新点不多,值得写的地方也不多,但还是决定写一下,因为这篇论文可以用来给大家看看transformer用于CV会起到一些什么样的作用,以及transformer可以怎样用于CV中。
介绍transformer结构的时候提到了transformer最大的一个点是可以处理长距离的文本之间的联系,在CV中可以用于处理更大范围的感受野的信息,而不需要通过一层一层的堆叠卷积核来扩大感受野。在NLN中提出构建一个non-local block来实现这一点。
Non-local Block
由于在CNN结构中使用3维张量,在transformer中求Q与K相似度时,计算是全连接的形式,在CV中若使用全连接将是H的四次方,计算量与参数量都将极为巨大。因此在降采样到4*7*7 或4*14*14时才使用Non-local Block。(T指的是时间维度上的维度大小)
其实按照我的理解,当feature maps只有14*14或7*7时,即便没有使用Non-local Block,CNN卷积核对这个大小的feature maps操作可获取的感受野也已经基本接近于全局感受野了,因此这里实际上已经退化成普通的CNN模型了,只不过比CNN模型多了一个计算各个位置上的相似度再进行加权的注意力作用罢了。换句话而言,Non-local Block在这里并没有扩大感受野,只起到了一个注意力模块的作用。
因此,我认为更合理的操作应该是上次解读的那篇论文FPT《feature pyramid transformer》的那三种方式。
注意,Non-local Block中使用了残差链接,这意味着可以把这个Block添加到一些现有的预训练的模型上,就像SElayer一样,因此这也是一个即插即用的模块。
这一部分只是稍微介绍一下这个Block以及个人看法,下面部分才是写本文的出发点所在。
Transformer的作用
在图像识别领域,使用卷积核来提取空间、时间维度上的信息,提取信息后通过损失函数来回传梯度更新参数,因此,对于怎样提取高维度的语义信息这一过程是十分抽象的。它的目标是降低loss值,但怎样去降低并不明确。
在加入transformer的self-attention思想后,似乎给了模型一个稍微明确一点的方法去降低Loss值,即模型去寻找图像空间上局部的语义信息、non-local上相关性、前后帧内容上的相关性,这样可以使得准确率更高或者说损失函数更低。
因此,我认为在加入transformer后由于方法更明确一点,模型的效率会提升,可以需要更少的数据和更短的训练时间即可达到传统CNN模型的效果。
如下图所示,这是一个使用Non-Local Block模块的动作识别的应用,模型更加关注了那些跟该动作相关的局部区域,以及前后帧之间的相关性。如图二,该行为是一个人在打篮球,模型将注意点放在了球,球的轨迹,手和脚的运动变化上,而这一部分也正是识别这一行为的关键信息。
如有错误,欢迎留言指出.