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