社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

一种深度学习特征SuperPoint

3D视觉工坊 • 3 年前 • 322 次点击  

编辑丨计算机视觉SLAM

本文出自近几年备受瞩目的创业公司MagicLeap[1],发表在CVPR 2018,一作Daniel DeTone[2]paper[3]slides[4]code[5]
这篇文章设计了一种自监督网络框架,能够同时提取特征点的位置以及描述子。相比于patch-based方法,本文提出的算法能够在原始图像提取到像素级精度的特征点的位置及其描述子。本文提出了一种单映性适应(Homographic Adaptation)的策略以增强特征点的复检率以及跨域的实用性(这里跨域指的是synthetic-to-real的能力,网络模型在虚拟数据集上训练完成,同样也可以在真实场景下表现优异的能力)。

介绍

诸多应用(诸如SLAM/SfM/相机标定/立体匹配)的首要一步就是特征点提取,这里的特征点指的是能够在不同光照&不同视角下都能够稳定且可重复检测的2D图像点位置
基于CNN的算法几乎在以图像作为输入的所有领域表现出相比于人类特征工程更加优秀的表达能力。目前已经有一些工作做类似的任务,例如人体位姿估计,目标检测以及室内布局估计等。这些算法以通常以大量的人工标注作为GT,这些精心设计的网络用来训练以得到人体上的角点,例如嘴唇的边缘点亦或人体的关节点,但是这里的问题是这里的点实际是ill-defined(我的理解是,这些点有可能是特征点,但仅仅是一个大概的位置,是特征点的子集,并没有真正的把特征点的概念定义清楚)。
本文采用了非人工监督的方法提取真实场景的特征点。本文设计了一个由特征点检测器监督的具有伪真值数据集,而非是大量的人工标记。为了得到伪真值,本文首先在大量的虚拟数据集上训练了一个全卷积网络(FCNN),这些虚拟数据集由一些基本图形组成,例如有线段、三角形、矩形和立方体等,这些基本图形具有没有争议的特征点位置,文中称这些特征点为MagicPoint,这个pre-trained的检测器就是MagicPoint检测器。这些MagicPoint在虚拟场景的中检测特征点的性能明显优于传统方式,但是在真实的复杂场景中表现不佳,此时作者提出了一种多尺度多变换的方法Homographic Adaptation。对于输入图像而言,Homographic Adaptation通过对图像进行多次不同的尺度/角度变换来帮助网络能够在不同视角不同尺度观测到特征点。综上:SuperPoint = MagicPoint+Homographic Adaptation

算法优劣对比

  • 基于图像块的算法导致特征点位置精度不够准确;
  • 特征点与描述子分开进行训练导致运算资源的浪费,网络不够精简,实时性不足;或者仅仅训练特征点或者描述子的一种,不能用同一个网络进行联合训练;

网络结构

上图可见特征点检测器以及描述子网络共享一个单一的前向encoder,只是在decoder时采用了不同的结构,根据任务的不同学习不同的网络参数。这也是本框架与其他网络的不同之处:其他网络采用的是先训练好特征点检测网络,然后再去进行对特征点描述网络进行训练。网络共分成以下4个主要部分,在此进行详述:

1. Shared Encoder 共享的编码网络

从上图可以看到,整体而言,本质上有两个网络,只是前半部分共享了一部分而已。本文利用了VGG-style的encoder以用于降低图像尺寸,encoder包括卷积层,max-pooling层,以及非线性激活层。通过3个max-pooling层将图像的尺寸变成 ,经过encoder之后,图像由 变为张量

2. Interest Point Decoder

这里介绍的是特征点的解码端。每个像素的经过该解码器的输出是该像素是特征点的概率(probability of “point-ness”)。通常而言,我们可以通过反卷积得到上采样的图像,但是这种操作会导致计算量的骤增以及会引入一种“checkerboard artifacts”。因此本文设计了一种带有“特定解码器”(这种解码器没有参数)的特征点检测头以减小模型计算量(子像素卷积)。例如:输入张量的维度是 ,输出维度 ,即图像的尺寸。这里的65表示原图 的局部区域,加上一个非特征点dustbin。通过在channel维度上做softmax,非特征点dustbin会被删除,同时会做一步图像的reshape 。(这就是子像素卷积[6]的意思,俗称像素洗牌)

3. Descriptor Decoder

首先利用类似于UCN的网络得到一个半稠密的描述子(此处参考文献UCN[7]),这样可以减少算法训练内存开销同时减少算法运行时间。之后通过双三次多项式插值得到其余描述,然后通过L2-normalizes归一化描述子得到统一的长度描述。特征维度由 变为
由特征点得到其描述子的过程文中没有细讲,看了一下源代码[8]就明白了。其实该过程主要用了一个函数即grid_sample,画了一个草图作为解释。
  • 图像尺寸归一化:首先对图像的尺寸进行归一化,(-1,-1)表示原来图像的(0,0)位置,(1,1)表示原来图像的(H-1,W-1)位置,这样一来,特征点的位置也被归一化到了相应的位置。
  • 构建grid:将归一化后的特征点罗列起来,构成一个尺度为1*1*K*2的张量,其中K表示特征数量,2分别表示xy坐标。
  • 特征点位置反归一化:根据输入张量的H与W对grid(1,1,0,:)(表示第一个特征点,其余特征点类似)进行反归一化,其实就是按照比例进行缩放+平移,得到反归一化特征点在张量某个slice(通道)上的位置;但是这个位置可能并非为整像素,此时要对其进行双线性插值补齐,然后其余slice按照同样的方式进行双线性插值。注:代码中实际的就是双线性插值,并非文中讲的双三次插值;
  • 输出维度:1*C*1*K。

4. 误差构建

可见损失函数由两项组成,其中一项为特征点检测loss ,另外一项是描述子的loss
对于检测项loss,此时采用了交叉熵损失函数:
其中:
描述子的损失函数:
其中 Hinge-loss(合页损失函数,用于SVM,如支持向量的软间隔,可以保证最后解的稀疏性);
同时指示函数为 , 表示所有正确匹配对集合:

网络训练

本文一共设计了两个网络,一个是BaseDetector,用于检测角点(注意,此处提取的并不是最终输出的特征点,可以理解为候选的特征点),另一个是SuperPoint网络,输出特征点和描述子。
网络的训练共分为三个步骤:
  1. 第一步是采用虚拟的三维物体作为数据集,训练网络去提取角点,这里得到的是BaseDetector即,MagicPoint
  2. 使用真实场景图片,用第一步训练出来的网络MagicPoint +Homographic Adaptation提取角点,这一步称作兴趣点自标注(Interest Point Self-Labeling)
  3. 对第二步使用的图片进行几何变换得到新的图片,这样就有了已知位姿关系的图片对,把这两张图片输入SuperPoint网络,提取特征点和描述子。

预训练Magic Point

此处参考作者之前发表的一篇论文[Toward Geometric Deep SLAM[9]],其实就是MagicPoint,在此不做展开介绍。

Homographic Adaptation

算法在虚拟数据集上表现极其优秀,但是在真实场景下表示没有达到预期,此时本文进行了Homographic Adaptation。 作者使用的数据集是MS-COCO,为了使网络的泛化能力更强,本文不仅使用原始了原始图片,而且对每张图片进行随机的旋转和缩放形成新的图片,新的图片也被用来进行识别。这一步其实就类似于训练里常用的数据增强。经过一系列的单映变换之后特征点的复检率以及普适性得以增强。值得注意的是,在实际训练时,这里采用了迭代使用单映变换的方式,例如使用优化后的特征点检测器重新进行单映变换进行训练,然后又可以得到更新后的检测器,如此迭代优化,这就是所谓的self-supervisd。

最后的关键点检测器,即
可以表示为再所有随机单映变换/反变换的聚合:

利用上面网络得到的关键点位置以及描述子表示构建残差,利用ADAM进行优化。

实验结果

总结

  1. it is possible to transfer knowledge from a synthetic dataset onto real-world images
  2. sparse interest point detection and description can be cast as a single, efficient convolutional neural network
  3. the resulting system works well for geometric computer vision matching tasks such as Homography Estimation

未来工作:

  1. 研究Homographic Adaptation能否在语义分割任务或者目标检测任务中有提升作用
  2. 兴趣点提取以及描述这两个任务是如何影响彼此的
作者最后提到,他相信该网络能够解决SLAM或者SfM领域的数据关联,并且learning-based前端可以使得诸如机器人或者AR等应用获得更加鲁棒。

参考资料

[1]

MagicLeap: https://www.magicleap.com/

[2]

Daniel DeTone: http://www.danieldetone.com/

[3]

paper: https://arxiv.org/abs/1712.07629

[4]

slides: https://github.com/MagicLeapResearch/SuperPointPretrainedNetwork/blob/master/assets/DL4VSLAM_talk.pdf

[5]

code: https://github.com/MagicLeapResearch/SuperPointPretrainedNetwork

[6]

子像素卷积: https://blog.csdn.net/leviopku/article/details/84975282

[7]

UCN: https://arxiv.org/abs/1606.03558

[8]

SpatialGridSamplerBilinear: https://github.com/pytorch/pytorch/blob/f064c5aa33483061a48994608d890b968ae53fb5/aten/src/THNN/generic/SpatialGridSamplerBilinear.c

[9]

Toward Geometric Deep SLAM: https://arxiv.org/abs/1707.07410

本文仅做学术分享,如有侵权,请联系删文。

下载1
在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。
下载2
「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。
下载3
「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。


一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
 圈里有高质量教程资料、可答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~  

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/112033
 
322 次点击