这是一个无监督学习的网络,也可以理解成自监督(思路挺不错),具体如何无监督下边会说。
-
整体网络结构如下:
![](https://i-blog.csdnimg.cn/blog_migrate/12c095baca33763ce4b22912394bdce2.png)
输入一整图片,直接输出detector和descriptor,并且图片大小没有要求。可以看出网络整体包含两部分,detector网络和descriptor网络。
1.1 首先是detector网络。这里目标同sift一样要学习四个数: x,y, orientation,scale。具体过程如下:
1) 输入image之后使用3层resnet 输出固定大小的feature map(w*h*16)
2)将1)的feature map层resize成N个scale(N=5)的feature map
3)然后通过N个不同的卷积核生成N个“scale”的feature map层
4)将每个feature map层上采样到原始图的size,并且在每个feature map层执行15x15的可微的非极大值抑制(通过softmax)
5)累加每层的权重
,得到最终的score,取topk得分高的位置就是detector的位置(不可微)
![](https://i-blog.csdnimg.cn/blog_migrate/4259a958c600b4cb144e361d48a1f2c1.png)
1.2 orientation,feature map层之后增加一个5X5的卷积每个pixel输出两个数表示角度信息(输出W*H*2的feature map)
1.3 scale,在1.1中得到最终topk的detector之后在channel方向上执行softmax得到scale值。
到这里已经得到了整个和sift一样的detector信息。
1.2 然后是descriptor网络,对每个detector,取crop(使用一个叫做STN的东西),然后卷积得到最终的descriptor
-
train
为了实现无监督,和解决选取topk不可微问题,训练网络如下:
![](https://i-blog.csdnimg.cn/blog_migrate/fcb3f1261fd650ceac6fdf0838cb02d2.png)
左边和右边是两个完全一样的网络,但是输入的是两张不同的图(已知每张图的pose和depth信息(通过sfm或者rgbd得到))。
1) 左边和右边同时输入网络,然后进行detector,因为知道相对pose,因此detector可以从右边转换到左边,那么只在右边取topk的detetocr。
2) 然后手动在这topk的位置进行高斯滤波(其实是为了更加突出topk位置的权重,因为默认的这里就是gt),然后计算image-level-loss:
![](https://i-blog.csdnimg.cn/blog_migrate/34e44e1b7cfcf9245c35191bff7181fd.png)
可以看到该loss将会惩罚两个角点的不一致性(w表示的是从右图转换到左图,g表示2中的高斯滤波)
同时为了增加orientation和scale约束,增加了loss:
![](https://i-blog.csdnimg.cn/blog_migrate/0927eea8316f116bd14e92d2bf0f2d37.png)
另外,还有descriptor的loss(因为path的位置直接影响descriptor)
![](https://i-blog.csdnimg.cn/blog_migrate/c590e9edcafedde7a0c284ae126dbd71.png)
3)descriptor的loss
![](https://i-blog.csdnimg.cn/blog_migrate/b68f90c4c93fdce07e62221bf85488ea.png)
惩罚正确匹配的不一致性和不正确匹配的一致性
实验结果:
![](https://i-blog.csdnimg.cn/blog_migrate/07bba1505bf62890cab2d51b68c76917.png)
10, 20, 30, 60表示的是测评的帧之间的间隔(可以认为数值越大base-line越大),表格统计的是一个什么得分(越大越好)可以看出不适合宽基线
可能是由于orientation和scale的约束只能match上较小变化???
总结:
-
训练数据(任何一个sfm建好图的都可以训练只需要知道pose+3d点,无监督)
-
scale(网络中的scale是通过resize不同的feature map层得到,本文5个scale)
-
orientation(有orientation约束,通过5X5的卷积得到每个pixel的orientation )
-
wild-base(效果不太好)
-
detector & descriptor(输入image 输出detector + descriptor)