本文是一套提高feature提取以及描述能力的通用方案,可以认为是一种refine原始网络的方案。
可以应用到任何类似superpoint这样的网络上,不需要数据标注,而且改造成本很小!!!!!
问题描述:像superpoint这样的网络训练的时候是在一些合成图上训练,并且这样的网络几乎都是在low-level层次训练,
并没有在high-level层次训练网络,因此往往在解决实际任务的时候泛化能力不强
(比如我想进行2d-3d求解pose任务上,或者想在求解两张图的relative pose任务上(high-level),
那么假设我的任务是求解两张图的relative pose是不是网络直接在这样的任务上训练好呢,答案是肯定的,
是否能实现呢,答案也是肯定的)。下边看实现方法。
本文选择执行两张图的匹配获取relative任务
符号说明:
: 表示匹配的两张图
: 表示这两张图之间的relative pose,
: 表示第i个位置的特征点(x,y)坐标
: 表示特征点I的descriptor(superpoint中是256维)。
:表示两张图中某一个匹配。
特征点选择转换成概率问题(detector)
在superpoint中存在两个网络分支,一个是detector一个是descriptor,这里先解释detector的转换。
假设原始网络输出detector层是
(在superpoint中这是一个W*H*1的score 层)而且他还是被归一化了,那么我们很可以将其当成是一个概率呀:
,这个概率表示一个pixel是一个keypoint的概率,那么假设我们要随机选择N个keypoint是不是概率就是:
(每个pixel都是独立同分布的)。
那么我们如果想在待匹配的这两张图上找两组匹配keypoint是不是概率是:
feature匹配转换成概率问题(match)
上述公式表示某个匹配是匹配的概率,先看分母:k的取值是集合i中所有的数值,k’的取值是集合j中的所有匹配。
再来看分子:就是要求解的这个匹配的descriptor之间的距离。
上述概率可以发现,越是正确的匹配概率越大,所以按照这个方向如果最大化概率网络将向着正确的匹配的descriptor越来月接近,
不正确的匹配的descriptor越来越远离。
那么如果有一堆匹配(可以通过最近邻算法得到),他的概率就是:
有了上述经验,我们看怎样学习网络以及如何设置loss
因为我们的目的是学习的descriptor用来做求解relative pose,那么我们是可以得到relative pose的ground truth的,这件事很简单。
假设我们得到了通过上述选择的N个keypoint也通过descriptor计算出来match的P,那么我们是可以通过ransac+5点法求解出relative pose的。
这个pose:T和ground truth T之间的差值(角度+translation)定义为误差:
(这是一个具体的数,根据选择的detector和descriptor计算得到的)
现在有了误差,还有得到这个误差的概率。这样问题就很明确了啊,那么其实我们的网络的任务就是将上述误差的期望最小化即可。
怎么办呢??全概率公式啊,因此定义loss:
,好了可以直接求导了:
反向传播吧!!!!!!!!!!,网络已经可以run起来了。
最后完整的网络结构图如下(可以将ransac+5点法求解T的过程当成黑盒子,目的就是为了求解出来具体的误差数,然后好用来求解期望)
备注:!!!选择keypoint的时候要随机多选择几次每次都会得到pose,使用最大的误差进行回传。