本文的核心思想是提出一套同时detector和descriptor的网络,区别于别的网络,本文会输出Repeatable和Reliable层
用来表示feature map的score和权重(置信度)。
首先我们来看下整体网络结构:
输入一张W*H的image,输出三块东西:
1)dense 的descriptor 的feature map(H*W*128)
2)H*W*1的reliability层表示每个像素的feature的置信度(可靠性)Rij ∈ [0, 1]
3)repeatability层表示每个像素的score(其实就是detector)(S ∈ [0, 1])
1.Learning repeatability
假设知道两张匹配图,并且知道他们之间的转换关系U,那么理想情况下:
最大
(第一项是一张图输出的score map,第二项是另一张图输出的scoremap通过U变换到和第一章图一样的坐标下,
理想情况下两个向量W*H的数值完全相同),但是由于S维度很大,往往很难满足,因此将S拆分成一个一个
有overlap的patch,计算每个应该相同的小patch的相似性,如下:
考虑到????不知道啥意思,增加了一项约束项
Learning reliability
feature层和reliability层的loss同时回传,定义feature之间的相似性度量矩阵D
,
假设匹配图是A和B,本文由于是dense的descriptor map因此构建D的行是图像A中的descriptor个数。
列是图像B中descriptor的个数,每个元素表示的是一个匹配距离。
引用了一个AP概念,所谓的AP就是对D中的每一行距离进行排序,距离越近的越靠前,如果真正的匹配越靠前,这时候两张图的匹配的AP值越大,
因此最大化AP即可监督学习descriptor,具体公式如下;
·····
文中提到如果使用AP来训练就需要作用到整个descriptor上并且计算复杂,因此引入了
reliability层,该层就是类似score一样提供每个pixel位置
descriptor的置信度(比如天空了,树叶了等不应该作用在网络上),因此使用如下loss:
上述公式是(i, j )表示每个像素位置,Rij表示
reliability
层输出的置信度,k是设置的阈值,
,这样就在R=0的时候不再计算AP
这个loss同时回传到descriptor网络和reliability网络。
!!!!!!!!!!!!!!!上述是训练的过程!!!!!!!!!!!!!!!!!!!!!!
teset的时候:首先输入image,然后在S层进行非极大值抑制得到最终的score map,然后将S和R相乘的到每个像素上的最终的score,
然后取出score>阈值的descriptor作为最终的descriptor和detector。