如果觉得本文对您有所帮助的话,可以给我的github点个赞呀~本人有空会更新一些视频行人再识别的相关资料,比如代码注释、论文翻译等等。
github:https://github.com/AsuradaYuci/awesome_video_person_reid
1.引言
注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。上述机制通常被称为注意力机制。人类视网膜不同的部位具有不同程度的信息处理能力,即敏锐度(Acuity),只有视网膜中央凹部位具有最强的敏锐度。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部分,然后集中关注它。例如,人们在阅读时,通常只有少量要被读取的词会被关注和处理。
综上,注意力机制主要有两个方面:1.决定需要关注输入的哪部分;2.分配有限的信息处理资源给重要的部分。(来自百度百科)
2.注意力机制的几种基本形式
注意力机制本质是一种自动加权平均,可以把两个需要联系起来的不同模块,通过加权的形式进行联系(比如联系probe序列和gallery序列),一般主要有图中的几种方式。
- 首先,设计一个打分函数f,将目标模块mt和源模块ms联系起来,图中给出了4种形式
- 然后,采用一个softmax函数将其归一化,得到概率分布。
3.注意力机制在video person reid中的应用例子
虽然注意力机制最早在计算机视觉领域中提出,近几年其在自然语言处理领域大放异彩,因而计算机视觉领域的一些注意力机制是照搬或者模仿自然语言处理领域的。
非常经典的一篇文章是Jointly Attentive Spatial-Temporal Pooling Networks for Video-based Person Re-Identification(ICCV2017),论文链接:paper 。相应的自然语言领域文章为Attentive Pooling Networks(2016),论文链接:paper
文章的创新点:
- 文中提出了一种基于视频的person reid的联合空间和空间注意力池化网络ASTPN,它使特征提取器能以匹配项的相互依赖性方式,了解当前输入视频序列,并可以直接影响彼此表征的计算。
- 具体而言:空间注意力网络能从每个图像帧中选择区域;时间注意力网络可以在该序列上选择有用的信息帧。两个网络都由距离匹配信息引导。
视频reid的一般处理过程:
- 视觉编码器CNN/RNN从视频片段中提取视觉表征
- 一个损失函数来优化视频编码器和一个用来匹配查询视频和图库视频的方法(一般是距离信息)
加入注意力机制的动机:
- 采用传统方法(max pooling或average pooling)获取序列特征时存在问题,没有充分反映样本的特征。
- 不采用max pooling或average pooling,而是利用注意力信息来形成每一步的距离,从而使模型更加注意图像层次上的兴趣区域ROI和序列层次上的有效时间步。
4.整体网络结构
网络的整体结构如图所示:主要由空间注意力池化网络和时间注意力池化网络组成。
每一时步的输入:一个RGB图像 + 1个光流图 => 3个RGB通道 + 2个光流 = 5个channel
在CNN的最后一层:提取每张图像特征
空间金字塔池化层:获得一个时间步的图像层次表征
RNN:提取视频序列的特征
时间注意力池化层:汇总序列特征信息,形成序列层次的表征
5.空间注意力池化网络–金字塔池化
空间金字塔池化(SPP)的优点:
解决了CNN输入图像大小必须固定的问题,从而可以使得输入图像高宽比和大小任意。卷积层可以接受任意大小的输入,经过SPP之后会产生固定大小的输出以适应全连接层,大小由SPP结构而定。
- 首先,SPP的输入来自CNN最后的输出(特征图)
- 然后,经过中间的空间金字塔池化层,有多个层次的空间bins (8×8,4×4,2×2,1×1),从而生成多个层次的空间表征。
- 最后,这些不同层次的空间表征被cat,生成一个固定维度的图像层次表征。
6.时间注意力池化网络
文章采用的注意力机制如图所示。其下方是自然语言领域里的注意力机制示意图,可见是借鉴了NLP领域的想法。
具体步骤:
- 卷积和RNN用于计算矩阵P和矩阵G,矩阵P和矩阵G的第i行分别表示probe和gallery的第i个时步中,RNN的输出。
- 矩阵U是网络需要学习获得的目标信息共享矩阵,在梯度下降阶段,矩阵U通过反向传播更新,并影响卷积参数和RNN隐藏层状态来指导模型关注有效信息。注意力矩阵A(打分函数)从式中可以看出,注意力矩阵A能在probe和gallery序列特征上有一个共同视野,并计算它们在时间维度上的权重分数。
- 接着,分别在注意力矩阵A上,应用逐行max pooling和逐列max pooling来获取序列注意力分数(时间权重向量) 和:
- 之后,在时间权重向量 和上应用函数,以生成相应的注意力向量 和。具体地,函数将时间权重向量 和的第个权重和,转化为注意率和:
- 最后,分别在特征矩阵P和注意力向量,以及特征矩阵Q和注意力向量上应用点积,获得最后的序列层次表征 和。
7.结果
结语
视频reid中的注意力机制先简单介绍到这里,网络训练,超参数设计等未做介绍。接下来有空会介绍更多的注意力机制在视频reid中的应用。最后打个广告,我收集了近几年的一些视频reid论文以及相应的代码,放在我的github中:[链接],欢迎大家star和fork,有空会继续更新的, 谢谢啦。