本文章整理自国防科技大学王龙光博士在深蓝学院的关于双目视觉公开课演讲。
-----全文约3000字-----
作者提出了一个基于双目视觉领域的视差注意力机制,并将此机制应用到双目立体匹配和双目超分辨领域,取得了非常好的效果。相关成果已经被CVPR 2019和TPAMI 2020接收,文章和代码链接如下图所示。
↓↓↓
全文分为四个部分
1、双目视觉的介绍
2、提出的视差注意力机制(PAM)
3、将PAM应用到双目立体匹配中
4、将PAM应用到双目超分辨中
双目视觉的介绍
双目视觉受仿生学的启发。人的两只眼睛,由于位置不同,看到的物体景色也是有一定的差异,这种差异便可以在大脑中产生对物体景色的三维空间感知。双目视觉则使用一对双目相机,来仿生这种视觉感知机制。
双目视觉的一个最基本的原理就是:不同深度的物体在在双目相机中出现不同的相对位置上。
以下图为例,三种形状的物体在双目相机中的成像位置是不同的,三角形成像基本相同,可以认为三角形处在无穷远的位置,圆形的成像有一个较大的视差(Disparity),说明圆形在离相机较近的位置。
可以认为距离越近,视差越大,由此便可以通过视差来感知空间距离信息。
值得注意的是,上面在双目相机中的成像,只有横向的位置变化,纵向是没有变化的,即同一个点,在不同相机中,纵向坐标是一致的,这是矫正后的结果,下面的工作都是基于矫正后的双目视觉图像展开的。
双目视觉在很多领域有应用,最基础的任务就是双目立体匹配,即找到两张双目图上的对应点。如下图,以左目图像作为参考图,在右目图像中搜索,计算匹配代价,找到最相似的点,即图中直方图的绿色点。
传统的双目立体匹配流程包括:匹配代价计算、代价聚合、视差计算、视差细化(refinement)。深度学习方法,则将由神经网络提取的特征,使用cost volume来进行匹配代价的计算,使用正则化进行代价聚合。
同时,双目视觉还可以应用到双目视觉的风格转换,双目视觉的图像去雾、去噪、超分辨,双目视觉的3D目标检测等等。
提出的视觉差注意力机制PAM
视差注意力机制(Parallax-Attention Mechanism)提出的motivation是:同一个场景下,视差的范围很大,不能确定。
如下图在不同数据集上,视差的分布都有非常大的不同,有的最大到几百,有的只在几十范围内分布。而之前的工作,均是预设了一个超参数,即最大的视差(往往设置192,作为视差搜索阈值),这就不具有一定的自适应的能力。
本文提出的视差注意力机制,去掉的这一个超参数,能够更好的自适应不同的数据集和不同的现实使用场景。
之前的工作多采用cost volume的方法,来做匹配代价计算,但是这种直接基于像元之间的特征匹配,将会带来较大的内存占有、较大的计算量以及无法自适应的设置视差搜索阈值,除此之外,cost volume还会带来一定的匹配的歧义。
由此,提出视差注意力机制的目标有以下几点:
1、采用无监督的方法,即没有ground truth的视差
2、具有一定的嵌入的灵活性和视差搜索的自适应能力
3、较低的内存占有和较低的计算量
4、减少匹配的歧义性
整体的视差注意力机制模块如下图所示:
双目图像各自提取特征之后,分别得到Q和K的特征,Q和K做一个矩阵相乘,就可以得到视差注意力map,这个map再和某一目的图像做一个矩阵乘,即可输出同样分辨率的特征,该特征融合了双目图中的视差特征。
同时也可以从视差注意力map上提炼出遮挡信息,输出遮挡mask。
整个视差注意力机制的核心,都在上面淡蓝色的视差注意力map上,接下来讲解这个视差注意力map的原理。
视差注意力map是由两个特征图(H*W*C和H*C*W)矩阵乘得到,即为H*W*W。
我们可以这么理解,由于工作是基于矫正后的图像,所以匹配只需要在同一条横线上(纵坐标一致)进行匹配,所以我们将H作为矩阵相乘的batch,即有H对矩阵相乘,每对矩阵是W*C和C*W,即有W个点,每个点的特征维度是C,将每个点做一个互相关,就是矩阵相乘,相乘结果是W*W,即互相关矩阵,互相关矩阵内的元素(j,k)表示在某一纵坐标下的左目图像的横坐标为j的元素和右目图像的横坐标为k的元素的匹配相关程度。
在整个图上,再加上H维度,结果输出就是H*W*W,即扩展了纵坐标维度。这一点需要读者去细细揣摩理解,作者这样做,直接用了一个batch矩阵相乘,来进行匹配代价计算,非常巧妙,且不仅降低了内存占有,又减少了计算量。
同时由于做了一个互相关,相当于视差搜索范围扩展到整个feature map上,去掉了这个超参数的设定,且设计很compact,即插即用。可以看到,优秀的方法,往往都是最简单朴素和巧妙的!
在得到了视差注意力map之后,将其和某一目上的图像特征进行矩阵相乘,可以实现该目图像与另一目图像的对齐。即H*W*W和H*W*C相乘,得到H*W*C。
我们可以这样理解,由于视差注意力map是一个相关矩阵,这个矩阵可以理解为一目图像在另一目图像上像素级别的贡献力(相关度),那么将这两个矩阵相乘,就相当于,用这个贡献力矩阵对某一目图像做了一个attention,即加权平均。
可以发现,这种视差注意力机制,相比于cost volume方法,由于是对所有点都进行了互相关,所以不存在突变的情况,平滑性较好。
其次,这里的视差注意力map是隐藏在整个视差注意力模块里的,不需要对其进行一个监督训练,那么在超分辨等任务中,我们便可以直接用这个无监督下产生的视差注意力map,而不需要相关的ground truth标注。
由于视差注意力map的设计,即其反应了左右目图的对应关系,我们可以得到以下特性:
即:右到左图的map可以通过相乘右图对应到左图,左到右图的map可以通过相乘左图对应到右图,以及循环的一致性,读者可以细品,不难理解。
除此之外,视差注意力map的设计还能提炼出遮挡信息。我们可以这么理解,当某一目图像中的一个点在另一目图像中被遮挡了,那么被遮挡点就匹配不到了,在视差注意力map表现就是,对于该点,匹配度一直处于较低的水平,因此我们便可以根据此原理,轻松地提炼出遮挡信息的mask,非常巧妙。
总结:视差注意力机制利用矩阵相乘的方法,进行匹配代价计算,无需设置搜索超参数;视差注意力机制对每个点都进行了匹配,降低了匹配的歧义性,有着更好的匹配分布曲线(瘦高型分布);视差注意力机制足够compact,可以无监督地嵌入到很多任务中去,且内存占有和计算量都很小。
以上便是本次报告的核心内容,接下来讲的是,视差注意力机制,在立体匹配和超分辨的任务中应用。
将PAM应用到双目立体匹配中
整体的网络结构如下图:
双目图像先进行特征提取,此处采用的是沙漏网络,然后将提取的特征送入一个级联的视差注意力模块,级联的视差注意力模块在不同分辨率的feature map上进行提取特征,然后级联视差注意力模块后接一个视差细化模块,最后输出视差图。
在输出模块中,利用了视差注意力模块的遮挡信息,利用遮挡信息,就可以将这些不可靠的遮挡点去除。
整体的loss如下,前两项分别是常用的Photometric loss和smoothness loss。第三项是一个正则化的视差注意力图的loss。
将PAM应用到双目超分辨中
超分辨可以使用单目图像进行超分辨,但是如果引入双目图像,往往能取得更好的效果,所以关键在于如何去融合两目图像的特征。整体框架如下图:
双目图像先过一个超分辨领域的Residual ASPP模块来提取特征,然后将提取后的特征送入视差注意力模块,最后做一个重建,就可以得到超分辨的图像。
同时,作者也发布了一个更适合双目视觉领域的超分辨任务的数据集——Flickr1024。