想要了解深入了解D3Feat产生的原因,建议可以先去看一下D2Net[1],再来看D3Feat.

D3Feat核心优势:

  1. D3Feat提供了一种联合框架,在学习描述子的同时进行关键点的检测,传统匹配可能是detect and describe,而本文遵循describe to detect的范式,即不需要额外显式预测关键点,在提取描述子的同时进行关键点的选取。

  2. 采用KPConv作为特征提取backbone,全卷积的网络架构能够使整个网络前向传播速度很快,作一次inference基本在1s以内。

  3. 最终用来做RANSAC配准的点不再是随机选取,而是选取网络学习出来的关键点。(其实关键点这种策略在3DMatch中效果并不是特别明显,原因是3DMatch benchmark作过2.5cm下采样后,基本点数在20K左右,随机选取5K点和选取5K关键点,最后RANSAC出来效果其实相差不大,或者说并没有很显著的优势,但在小点数比如250点时优势会比较明显

Work Flow:

  1. 采用KPConv作为backbone进行特征提取,本文中不作重点介绍,需要的可以去看原文。(代码方面不得不说原作者Hugues THOMAS真的很强,但是会相对比较难理解一些,建议上手KPConv代码可以先从白博的这里入手)
    KPConv在这里可以粗浅的理解为一个Encoder-Decoder结构:输入点云 P ∈ R N × 3 P \in {R^{N \times 3}} P∈RN×3,输出feature map F ∈ R N × c F \in {R^{N \times c}} F∈RN×c, c c c = 32.

  2. 重要假设:可以认为,关键点的特征是具有一些特殊属性,即与领域点的特征会有较大差别的,因此使用这一点来进行关键点的选取:
    首先约定一些符号:
    D k = F : k , D k ∈ R N {D^k} = {F_{:k}},{D^k} \in {R^N} Dk=F:k​,Dk∈RN,即 D k {D^k} Dk代表feature map的第 k k k列
    d i = F i : , d i ∈ R c {d_i} = {F_{i:}},{d_i} \in {R^c} di​=Fi:​,di​∈Rc,即 d i {d_i} di​代表feature map的第 i i i行
    判断一个点是否为关键点的标准:

    即: x i {x_i} xi​是关键点 ⇔ \Leftrightarrow ⇔ d i {d_i} di​中最大的那一维(假设是第 k k k维,即第 i i i行 k k k列)特征同时在 x i {x_i} xi​的所有邻域点 N x i {N_{{x_i}}} Nxi​​在第 k k k维上特征中是最大的。
    描述会有些绕,上面的式子其实还是比较好看懂的。

  3. 如何把上述关键点选取的准则soften以进行训练呢,作者定义两个score来描述上述两个 a r g m a x argmax argmax操作:

    其实看懂了第二步,这一步也不难理解, β i k \beta _i^k βik​与 α i k \alpha _i^k αik​分别对应第二步中的两个 a r g m a x argmax argmax操作。
    β i k \beta _i^k βik​ ⇔ \Leftrightarrow ⇔depth_wise_max_score
    α i k \alpha _i^k αik​ ⇔ \Leftrightarrow ⇔local_max_score
    接着两个相乘,得到最终的saliency score map ∈ R N × 1 \in {R^{N \times 1}} ∈RN×1,代表每个点是否为关键点的置信度。

    在代码中就是这样操作的:

    至此,网络输出一个dense descriptor ∈ R N × 32 \in {R^{N \times 32}} ∈RN×32,一个saliency score map ∈ R N × 1 \in {R^{N \times 1}} ∈RN×1.

Loss:

Descriptor Loss:首先为了监督提取的特征,文中说用Hardest Contrastive Loss,其实代码中使用的是Circle Loss[2],这个loss现在在metric learning中用的也比较多了,效果非常好,这里不作展开。
Detector Loss:本文主要是看detector loss的设计,由于缺少哪些点是关键点的这种ground truth信息,因此使用on-the-fly技术对关键点信息进行监督:

从式子来分析(这里还是假设用的是Contrastive Loss),当 d p o s ( i ) < d n e g ( i ) {d_{pos}}(i) < {d_{neg}}(i) dpos​(i)<dneg​(i)时,说明此时若在特征空间中作KNN query,点 i i i是大概率被视作correspondence的,这时就希望点 i i i的saliency score越大越好,因此两者相乘,一负一正,正好是loss降低的方向。反过来也是如此。

Training:

默认150 epochs,总时长:

在训练集上circle loss和detector loss的收敛曲线:


可以看到整体收敛曲线非常平稳,接着分别在5000、2500、1000、500、250个点上进行evaluate,reported metrics是inlier ratio与feature match recall (registration recall在D3Feat的pytorch版本上的测试代码中没有写,tensorflow版本有,但我比较懒就没自己去写registration recall的scripts).

Keypoints 5000 2500 1000 500 250
Feature Matching Recall 95.76 95.74 95.61 94.64 93.31
Inlier Ratio 43.06 42.76 42.45 40.73 37.86

文中结果:

可以看到整体复现性还是非常高的。
可视化250个关键点:

Summary:

从上图也可以看到,关键点基本都避免选取在平坦区域,说明detector策略还是比较成功的,只不过和之前的分析一样,在结果方面,D3Feat在大点数时几乎没有什么优势,registration recall没有随机选点的FCGF高,但是在小点数比如250点时优势会比较明显。

个人感觉是数据集3DMatch的限制,导致关键点策略会不那么亮眼,毕竟从2w个点里选5k个点,也选不出什么花来,后面还有RANSAC给你兜底…

Pretrained Model can be found at here:link

Done

(CVPR 20) D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features相关推荐

  1. [CVPR 2020] D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features

    零.概要 论文: D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features tag: CVPR 20 ...

  2. 基于深度强化学习的车道线检测和定位(Deep reinforcement learning based lane detection and localization) 论文解读+代码复现

    之前读过这篇论文,导师说要复现,这里记录一下.废话不多说,再重读一下论文. 注:非一字一句翻译.个人理解,一定偏颇. 基于深度强化学习的车道检测和定位 官方源码下载:https://github.co ...

  3. CutPaste: Self-Supervised Learning for Anomaly Detection and Localization 全文翻译+详细解读

    CutPaste: Self-Supervised Learning for Anomaly Detection and Localization 全文翻译+详细解读 文章速览 全文翻译及详细解释 0 ...

  4. 【Paper】Deep Learning for Anomaly Detection:A survey

    论文原文:PDF 论文年份:2019 论文被引:253(2020/10/05) 922(2022/03/26) 文章目录 ABSTRACT 1 Introduction 2 What are anom ...

  5. CutPaste:Self-Supervised Learning for Anomaly Detection and Localization 论文解读(缺陷检测)

    CutPaste:Self-Supervised Learning for Anomaly Detection and Localization CutPaste:用于异常检测和定位的自监督学习 文章 ...

  6. [论文解读]Deep active learning for object detection

    Deep active learning for object detection 文章目录 Deep active learning for object detection 简介 摘要 初步 以前 ...

  7. 2022TGRS/云检测:用于遥感图像云检测的无监督域不变特征学习Unsupervised Domain-Invariant Feature Learning for Cloud Detection

    2022TGRS/云检测:Unsupervised Domain-Invariant Feature Learning for Cloud Detection of Remote Sensing Im ...

  8. On the Use of BERT for Automated Essay Scoring: Joint Learning of Multi-Scale Essay Representation学习

    BERT在作文自动评分中的应用:多尺度作文表征的联合学习 1. Introduction 针对预训练语言模型在AES领域效果不好的问题进行分析: 首先,预先训练的模型通常是在句子层面上进行训练,但没有 ...

  9. 论文阅读32 | Channel Augmented Joint Learning for Visible-Infrared Recognition

    论文:Channel Augmented Joint Learning for Visible-Infrared Recognition 出处:CVPR 2021 1.摘要 这篇文章介绍了一种通道增强 ...

最新文章

  1. CBV装饰校验的三种方式session
  2. vue项目默认IE以最高级别打开
  3. 老鸟程序员才知道的40个小技巧
  4. 淘宝快捷通道——百汇家园
  5. vue-cli打包后的思索--代码优化
  6. 【今日CV 计算机视觉论文速览 第116期】Mon, 13 May 2019
  7. 秒杀安全狗的经验总结
  8. SQL to ElasticSearch DSL
  9. 令人蛋疼的错误提示 0xcdcdcdcd ,0xdddddddd ,0xfeeefeee ,0xcccccccc ,0xabababab
  10. vs2008的永久破解安装
  11. 三菱GXWorks2 监视梯形图状态
  12. WAREZ无形帝国(盗版之源)
  13. 以下不正确的C语言标识符是( ),以下不正确的C语言标识符是 _____。
  14. 注塑工艺工程师视频教程 注塑机调机成型参数教程
  15. 短信格式(sms)以及编码总结
  16. YEEZY 350灰橙被叫成灰橘,BOOST V2椰子表示很慷慨
  17. 绝对女神 - Introduction
  18. Monitor 采集方式
  19. pandas常用方法
  20. 在c语言中输出8进制数,16进制数

热门文章

  1. android 自定义 radiobutton布局,RadioButton的自定义布局
  2. 国产智多晶FPGA使用Modelsim仿真时器件库的编译方法
  3. dedecms 自定义 html,怎样自定义织梦dedecms标签初探
  4. 虚拟机+Ubuntu16.04:安装anaconda3
  5. SQL Server 定位备份文件权限错误
  6. 面向对象——类的定义
  7. MySQL数据库实验六 简单数据库应用系统设计与实现
  8. 阔别枭雄张近东,苏宁开启新新零售
  9. 《网络安全0-100》安全事件案例
  10. css 新增div滚动条、修改滚动条样式