本文是一个集合detector和descriptor为一体的网络,并且只需要知道匹配就能同时训练一个detector和descriptor的网络
这也是D2的来历
一些思考:1. 一些deeplearning的feature匹配其实在descriptor表现的已经很好了(感受野也比较稳定),
所以认为瓶颈在detector上,本文主要解决的问题就是这个。
2. descriptor中融合了许多信息,那么是否这种detector的稳定性score也可反应出来呢(肯定可以)
先看网络形式
1.输入一张图,经过cnn网络输出W*H*C的feature map,一般descriptor就是从channel中获取比如C=128,
那么(I, j)位置的descriptor就是1x1x128的向量
这样其实是一个dense 的feature map(每个像素都有一个channel方向的vector)
2.再然后根据一些方法在这个dense 的feature map上找到是否是角点即可得到最终detector和descriptor
那么我们来看如何判断是否是角点,下图是网络输出的feature map层:
可以看出 dij表示的是1x1x128的descriptor,从这个feature map的结构看,每一层(每一个channel)
是不是都类似一个sift中的金字塔的一层呢?只不过金字塔每一层有大有小,feature map每一层的大小都一样而已,
那么detector信息肯定也能从这个feature map中提取出来(类似金字塔)
因此定义:
这个公式的意思是,如果上述feature map中的某个元素在channel上最大(其实就是sift金字塔上的最大),
并且在那层局部也是最大
(和sift一模一样的判断方式),那么他就是一个角点。
为了使其可微分,定义:
上述四个公式最终将feature map层输出W*H*1的score map,并且这个单层的score map所有元素之和为1(其实就是上述过程公式化),
最终得到一个scoremap,一会训练的时候作为loss中descriptor的权重。
train & loss
训练的时候通过sfm是可以得到一些匹配的(最好是dense的重建或者rgbd的数据),然后直接以这个匹配为gt。
学习的目的有三个:1,正确的匹配descriptor更加接近。2,错误的匹配descriptor更加远离。3,匹配的位置detector的score还应该挺高。
1. 正确匹配的特征的度量方式还是L2距离,
,其中d表示的是特征向量,
用来惩罚正确匹配的不一致性
2. 正确匹配局部的次近邻应该用来惩罚不匹配的相似性
3. 1和2一起就是:
4. 最终的loss,在考虑descriptor的同时还应考虑该地方的score:
结果不错,时间论文没有提,文中提到解决scale的问题可以将原始image resize成多个size,然后分别通过网络生成feature map,最后
将他们的feature map累加,得到最后的feature map(这个只在test的时候使用,也合理,毕竟角点在任意scale的feature上都应该是角点,响应很高)
总结
0. 要解决什么问题(现在的deep feature detector是瓶颈,对光照或者纹理变化的时候detector根本检测不出来,更别说匹配了)
训练数据(最好使用dense 的rgbd 重建的match)
scale(train的时候未考虑,在test的时候可以resize不同size的image然后求和得到)
oritation(未考虑,
全靠训练数据
)
wild-base(未考虑,全靠训练数据)
detector & descriptor(同时进行,其实这样的话,他的descriptor中就已经融合了一些detector信息)
网络的输入输出(输入image,输出完整的feature)