Unsuperpiont:端到端的兴趣点检测器和描述符
1、Abstract
对于自然图来说,创造一个真正兴趣点标签图是困难的,因为对于不同的标注者来说,很难统一他们对标签兴趣点的定义和理解。这使得兴趣点检测器难以构建,本次工作我们介绍了一个基于深度学习的的兴趣点检测器和描述器,用自监督的方式,我们利用了Siamese network,为了使这个网络可以自动的学习训练我们创造了一个新颖的损失函数。我们使用回归来预测点的坐标,一是为了使模型可以端到端的被训练,二是为了引入NMS机制。我们的模型训练起来很方便,除此之外我们还创造出一种新颖的损失函数使得网络的预测符合均匀分布。在224x320分辨率的图片上,我们的运行速度是323fps,在480x640是90fps,它更加有竞争力,并且在HPatch数据集上测试,在速度,可重复性,定位,分数匹配,透视效果,比目前最先进的模型更好。
Introduction
近些年,以深度学习为基础的兴趣点检测器和描述符变得很流行,然而大多数的实验都是围绕描述符的,在点的探测上他们依然依赖于传统的点的探测器。
给一张自然做兴趣点标注的真正挑战是,兴趣点无法被准确定义,并且标注者们无法做到准确如一的标准。缺乏正真的标签,所以模型难以构建和训练。
2、Network architect
图1:分数,位置,描述符共享通过主干网络计算出来的特征图,每一个兴趣点m都被分数 s m s_m sm,位置 p m p_m pm,描述符 f m f_m fm标识。
2.1Network overview and notation
每一个兴趣点在原图上的真实坐标 P r e l a t i v e P_{relative} Prelative,很容易被我们网络输出的 P m a p P_{map} Pmap转化得出。
分数图 S m a p S_{map} Smap用来表示每一个点的置信度,也用来选择最好的前N个点。
描述符图 F m a p F_{map} Fmap有F个通道(F=256),是兴趣点的唯一标识。
S m a p S_{map} Smap, P m a p P_{map} Pmap, F m a p F_{map} Fmap,被改变形状分别变成M(M= w 8 \frac{w}{8} 8w* h 8 \frac{h}{8} 8h),Mx2,MxF的矩阵,并且根据分数排序.
所有的卷积和都是size=3,s=1,所以不会改变特征图的大小,除了每个子任务的最后一层,所有卷积后加BN和Relu激活函数。
2.2Backbone module
输入图片,主干网络提取特征,生成特征图。主干是四对卷积层,这四对卷积层被三个最大池化层分开,最大池化层的步长是2,每经过一个池化下个卷积的通道数加倍,八个卷积的通道数是32-32-64-64-128-128-256-256.所以主干网络的下采样因子是8,对于特征图上的一个像素来说,它关联的是原图上8x8的区域。
2.3Scroe module
分数模型有两个卷积层一个通道数是256,一个通道数是1,最后跟着sigmoid激活函数,为了把预测的分数限制在[0,1]内,分数是用来选择前N个点的。
2.4Position module
位置模型有两个卷积一个通道数是256,一个通道数是2,最后跟着sigmoid激活函数,主干网络的采样因子是8,所以原图上8x8的区域内只会预测一个点,通过 P m a p P_{map} Pmap来推断原图上的位置的计算公式如下:
原图兴趣点的x坐标 = ( c + P m a p , x ( r , c ) ) ∗ f d o w n s a m p l e =(c+P_{map,x}(r,c))*f_{downsample} =(c+Pmap,x(r,c))∗fdownsample
原图兴趣点的y坐标 = ( r + P m a p , y ( r , c ) ) ∗ f d o w n s a m p l e =(r+P_{map,y}(r,c))*f_{downsample} =(r+Pmap,y(r,c))∗fdownsample
这样有两个好处:1是使得我们预测的兴趣点分布的更加均匀,这又会使得我们在做透视变换的时候效果更好,因为我们不受密集点的影响。2是可微,使得网络自监督训练。
2.5描述符模型
描述符模型包含两个卷积层,一个通道是256,一个通道数数256,最后一层没有激活函数,(在SuperPoint中插值是?)模型把 P m a p P_{map} Pmap的所有元素插入操作到 F m a p F_{map} Fmap( The model use all point positions in P m a p P_{map} Pmap to interpolate all entries in descriptor map F m a p F_{map} Fmap)
3 Self-supervised framework
图2:其中分支B的图片被单应性算子T(旋转,放缩,扭曲,透视)转换,并且加入噪声(高斯噪声,亮度,饱和度)
为了和分支B对齐,分支A上点的位置也要通过单应性算子T转化,这时我们定义通信点对——如果他们在对齐后的空间足够紧密,通信点对可以用来计算损失函数。
4Loss functions
l t o t a l = α u s p l u s p + α u n i _ x y l u n i _ x y + α d e s c l d e s c + α d e c o r r l d e c o r r l_{total}={\alpha_{usp}}l^{usp}+{\alpha_{uni\_xy}}l^{uni\_xy}+{\alpha_{desc}}l^{desc}+{\alpha_{decorr}}l^{decorr} ltotal=αusplusp+αuni_xyluni_xy+αdescldesc+αdecorrldecorr
l u s p l^{usp} lusp是用来学习兴趣点的位置和分数的。
l u n i _ x y l^{uni\_xy} luni_xy是正则化部分,为了鼓励有关联的点的位置符合均匀分布。
l d e s c l^{desc} ldesc和 l d e c o r r l^{decorr} ldecorr用来优化描述符。 l d e c o r r l^{decorr} ldecorr是正则化部分为了减少过拟合。
Point-pair correspondences:为了计算损失函数我们首先阐述一个概念——通信点对。
我们计算一个大小为 M A ∗ M B {M^A}*{M^B} MA∗MB的距离矩阵G:
G = [ g i j ] M A ∗ M B = [ ∣ ∣ p i A → B − p j B ∣ ∣ 2 ] M a ∗ M B G=[g_{ij}]_{{M^A}*{M^B}}=[||p_{i}^{A{\rightarrow}B}-p_{j}^B||_2]_{{M^a}*{M^B}} G=[gij]MA∗MB=[∣∣piA→B−pjB∣∣2]Ma∗MB
每一个 g i j g_{ij} gij 是转换后的点 p i A → B p_i^{A{\rightarrow}B} piA→B=T p i A p_i^A piA在分支A中索引为i的点与在分支B中索引为j的点 P j B P_j^B PjB之间的距离。
我们定义通信点对:在分支A转化后,对分支A上的点i,我们可以在分支B上找到他的最近邻点j,如果他们之间的距离小于我们设定的阈值,那么就可以点对ij关联。所以并不是所有分支A上点都可以找到自己的关联点对。
有了通信点对,我们就可以重新定义一个集合corresponding tensor map( s ^ b \hat{s}^b s^b, P ^ b \hat{P}^b P^b, F ^ b \hat{F}^b F^b,分别被称为点对分数,点对位置,点对描述符),最后我们再定义一个点对距离 d k d_k dk,计算方式和G一样。
4.1 Unsupervised point loss l u s p l^{usp} lusp
l u s p l^{usp} lusp提高了兴趣点检测器的可重复度,这意味着一样的兴趣点对可以被检测出来,不受照相机视角的影响。换句话说,我们的检测器要从各种不同的角度拍摄的照片中去预测兴趣点。
l u s p = α p o s i t i o n ∑ k = 1 K l k p o s i t i o n + α s c o r e ∑ k = 1 K l k s c o r e + ∑ k = 1 K l k u s p l^{usp}={\alpha}_{position}{\sum}_{k=1}^{K}l_k^{position}+{\alpha}_{score}{\sum}_{k=1}^{K}l_k^{score}+{\sum}_{k=1}^{K}l_k^{usp} lusp=αposition∑k=1Klkposition+αscore∑k=1Klkscore+∑k=1Klkusp
l k p o s i t i o n l_k^{position} lkposition是为了确保点对描绘的是输入图片的一样的点,我们要最小化点对距离。
l k p o s i t i o n = d k l_k^{position}=d_k lkposition=dk
l k s c o r e l_k^{score} lkscore是为了保证点对的分数是相似的,我们可以最小化点对分数的欧式距离。
l k s c o r e = ( s ^ k A − s ^ k B ) 2 l_k^{score}=(\hat{s}_k^A-\hat{s}_k^B)^2 lkscore=(s^kA−s^kB)2
在图像匹配时,场景里表示一样点的点对有一样的分数很重要,这样我们从场景中更好地选择置信度最高的点。
l k u s p l_k^{usp} lkusp是为了确保分数图能正真的代表兴趣点的置信度,意思就是分数越高是重复点的可能性就越高,分数越低是重复点的可能性就越低。
l k u s p = s ^ k ( d k − d ~ ) l_k^{usp}=\hat{s}_k(d_k-\tilde{d}) lkusp=s^k(dk−d~)
s ^ k = s ^ k A + s ^ k B 2 \hat{s}_k=\frac{\hat{s}_k^A+\hat{s}_k^B}{2} s^k=2s^kA+s^kB
d ~ \tilde{d} d~是点对距离的平均值。
l k u s p l_k^{usp} lkusp的核心概念就是网络预测一个好的兴趣点,它与它的通讯点的距离应该小。根据公式对于 d k < d ~ d_k<\tilde{d} dk<d~的点对,我们要增加分数来最小化损失,相反则需要减小分数来最小化损失。
4.2Uniform point predicate, l u n i _ x y l_{uni\_xy} luni_xy
图3
如果只用上面的损失函数,我们会引入一些我们不想要的“假造”的点,图3展示的是预测出来的x坐标的概率分布,考虑到网络预测都是原图的8x8的区域相关联,所以x,y坐标的分布应该符合均匀分布,然而图3展示了大量的点都接近边缘(0和8),其中的一个原因是,对于那些不重复出现的点,为了最小化 d k d_k dk,他们要去接近不属于自己管辖范围之外的点。因此我们应该强制模型只负责自己管辖的8x8区域之内的点,所以我们使得x,y坐标符合均匀分布。
为了做到这一点,我们阐述一个核心概念:从均匀分布中采样,对样品从小到大排序,绘制直方图,图像近似从均匀分布下界到上界的直线。
所以我们可以用下面的公式来描述,样本符合[0,1)均匀分布的符合程度:
D ( U ( 0 , 1 ) , V ) = ∑ i = 1 s o r t e d ( v i s o r t e d − i − 1 L − 1 ) 2 D(U(0,1),V)=\sum_{i=1}^{sorted}(v_i^{sorted}-\frac{i-1}{L-1})^2 D(U(0,1),V)=∑i=1sorted(visorted−L−1i−1)2
对我们的模型来说,x,y坐标分布与均匀分布的差异我们用 l u n i _ x l_{uni\_x} luni_x和 l u n i _ y l_{uni\_y} luni_y来计算:
但是需要注意的是这个损失是在整个分支预测的特征图上计算,而不依赖通信点对。
l u n i _ x y = α u n i _ x y ( l u n i _ x + l u n i _ y ) l^{uni\_xy}=\alpha_{uni\_xy}(l^{uni\_x}+l^{uni\_y}) luni_xy=αuni_xy(luni_x+luni_y)
l u n i _ x = ∑ i = 1 M ( x i s o r t e d − i − 1 M − 1 ) 2 l^{uni\_x}=\sum_{i=1}^{M}(x_i^{sorted}-\frac{i-1}{M-1})^2 luni_x=∑i=1M(xisorted−M−1i−1)2
l u n i _ y = ∑ i = 1 M ( y i s o r t e d − i − 1 M − 1 ) 2 l^{uni\_y}=\sum_{i=1}^{M}(y_i^{sorted}-\frac{i-1}{M-1})^2 luni_y=∑i=1M(yisorted−M−1i−1)2
效果如图3(b)
4.3Descriptor, l d e s c l^{desc} ldesc
描述符损失利用了Superpoint中阐述到的hingle loss,hingle loss要用到正和负边界(阈值)。
我们定义一个与G有同样大小的矩阵C
c i j = { 1 , g i j < = 8 0 , o t h e r w i s e c_{ij}=\begin{cases} 1,g_{ij}<=8 \\0,otherwise \end{cases} cij={1,gij<=80,otherwise
损失计算公式如下:
l i j d e s c = ∑ i = 1 M A ∑ j = 1 M B l i j d e s c l_{ij}^{desc}=\sum_{i=1}^{M^A}\sum_{j=1}^{M^B}l_{ij}^{desc} lijdesc=∑i=1MA∑j=1MBlijdesc
l i j d e s c = λ d ∗ c i j ∗ m a x ( 0 , m p − f i A T f j B ) + ( 1 − c i j ) ∗ m a x ( 0 , f i A T f j B − m n ) l_{ij}^{desc}=\lambda_d*c_{ij}*max(0,m_p-f_i^{A^T}f_j^B)+(1-c_{ij})*max(0,f_i^{A^T}f_j^B-m_n) lijdesc=λd∗cij∗max(0,mp−fiATfjB)+(1−cij)∗max(0,fiATfjB−mn)
4.4Decorrelate descriptor, l d e c o r r l^{decorr} ldecorr
与 Deep learning of discriminative patch descriptor in euclidean space.相似,我们通过最小化分支的协方差矩阵 R b = [ r i j b ] F ∗ F R^b=[r_{ij}^b]_{F*F} Rb=[rijb]F∗F的非对角项来降低维度之间的相关性。
损失计算公式如下:
l d e c o r r = ∑ i ̸ = j F ( r i j A ) + ∑ i ̸ = j F ( r i j B ) l^{decorr}=\sum_{i\not=j}^F(r_{ij}^A)+\sum_{i\not=j}^F(r_{ij}^B) ldecorr=∑i̸=jF(rijA)+∑i̸=jF(rijB)
R b R^b Rb中的 r i j b r_{ij}^b rijb 是:
r i j b = ( v j b − v ~ j b ) T ( v i b − v ~ i ) ( v j b − v ~ j b ) ( v i b − v ~ i b ) ( v j b − v ~ j b ) ( v i b − v ~ i b ) r_{ij}^b=\frac{(v_j^b-\tilde{v}_j^b)^T(v_i^b-\tilde{v}_i)}{\sqrt{(v_j^b-\tilde{v}_j^b)(v_i^b-\tilde{v}_i^b)}\sqrt{(v_j^b-\tilde{v}_j^b)(v_i^b-\tilde{v}_i^b)}} rijb=(vjb−v~jb)(vib−v~ib)(vjb−v~jb)(vib−v~ib)(vjb−v~jb)T(vib−v~i)