阅读一个关于预测深度图和相机姿态的一篇论文《DRO: Deep Recurrent Optimizer for Structure-from-Motion》用于SFM的深度循环优化器。

通过机器学习的方法研究SFM问题越来越多了,早期的风法是直接从图像中得到一个深度图和相机姿态,现在出现很多通过在网络中嵌入优化器用多视角提高精度。这个论文展示了一个基于循环网络的优化方法来进一步探索SFM网络中的潜力。优化器通过迭代来最小化feature-metric cost来更新深度和相机位姿。该方法作为一个零次优化器,避免了高昂的体积或梯度的计算。作者说他的效果和速度又高又快。代码开源地址:https://github.com/aliyun/dro-sfm

1 介绍

给定一组图像序列,SFM方法优化深度图和相机pose来恢复场景的3D结构,传统方法主要解决Bundle-Adjustment 问题,最小化重投影误差,前期的深度学习的方法主要是直接预测结果,并没有利用到多视角的一些领域知识(domain knowledge),现在的方法主要设设计一个基于几何的优化器,作为一个可微层嵌入到网络中。

下图为作者提出的gated recurrent network,网络会不断更新depth和pose来最小化feature-metric cost,循环迭代使得,最后重投影误差最小。(其实这个NN优化器实际上就是根据输入的pose预测pose偏移量,直到最优)

一些方法通过建立cost-volume来预测稠密depth map。cost-volume在计算机视觉中特指计算机视觉中的立体匹配stereo matching问题中的一种左右视差搜索空间。cost volume 对每个像素的多种不同深度值误差进行编码,尽管证明了在计算深度图是有效的,但是时间和空间都耗损巨大。作者提出的优化器是零次的而且在整个迭代利用了时间信息。

论文的展示效果:

2 深度循环优化器

目前网络分析是跟着论文来的,可能代码与论文有差异,后续代码读通了再补充细节

网络结构如下图所示,网络需要输入一个参考图像I0I_0I0​和NNN个相邻图像IiI_iIi​,这个NNN可以理解为深度学习的batch,整个网络的输入是两张图,最后会有一个cost,而N张图实际上就是每一对cost的平均。

所以以下图为例,假设输入图像I0I_0I0​和IiI_iIi​,首先需要提取特征Feature Net,这个网络就是ResNet18,输出特征图的尺寸是原图的1/81/81/8,定义为F0,FiF_0, F_iF0​,Fi​,共享同一个参数。Depth Head由两个CNN构成,输出depth map DDD,而Pose Head在两个CNN的基础上又来一个平均池化层,输出pose参数 TiT_iTi​。

一对图像进来,先得到特征F0,FiF_0, F_iF0​,Fi​,进而估算位姿,然后另一种网络用来计算上下文特征图F0c,FicF^c_0, F^c_iF0c​,Fic​用于输入后面的优化器中。

网络细节如下所示,实际上输出特征图维度都是输入的1/8。

无论是前面说的pose head 还是depth head 其网络结构如下所示,depth最后输入的特征图维度为1,pose输出的维度为6

给定F0,Fi,D,TiF_0, F_i, D, T_iF0​,Fi​,D,Ti​即可算出一个cost map CiC_iCi​,作者认为第iii张特征图的一个点,在参考图上的投影之后的位置处的特征值相等,基于这个就构建出了一个cost计算方法,对于参考图像特征图F0F_0F0​上的一个点x,cost计算如下所示,D(x)⋅π−1(x)D(x)\cdot\pi^{-1}(x)D(x)⋅π−1(x)表示参考图像的3d点,π(Ti,D(x)⋅π−1(x)))\pi(T_i, D(x)\cdot\pi^{-1}(x)))π(Ti​,D(x)⋅π−1(x)))表示这个3d点在第i张特征上的位置。

Ci(x)=∣∣Fi(π(Ti,D(x)⋅π−1(x)))−F0(x)∣∣2C_i(x) = ||F_i(\pi(T_i, D(x)\cdot\pi^{-1}(x))) - F_0(x)||_2Ci​(x)=∣∣Fi​(π(Ti​,D(x)⋅π−1(x)))−F0​(x)∣∣2​

遍历所有像素,即可得到一个Cost Map CiC_iCi​,对于多张相邻图,整体的loss就是CiC_iCi​的平均数。


上图为作者提出的GRU方法,这个就是循环神经网络,想看懂RNN的图可以参考这个链接:一文搞懂RNN(循环神经网络)基础篇。如果不懂也没关系,咱们就记着,输入的是cost map Ct−1C_{t-1}Ct−1​和当前预测值Vt−1V_{t-1}Vt−1​,这个预测值就是前面的深度图或位姿信息。网络的输出就是ΔV\Delta VΔV,这样新的值就可以被更新了:Vt=Vt−1+ΔVV_{t} = V_{t-1}+\Delta VVt​=Vt−1​+ΔV,上图4个循环叫做一个stage,位姿修正和深度修正之后,重新计算cost map,再循环几个stage就作为输出。所以再调参时候,可以控制mmm stages nnn times。

GRU输入网络之前需要对三种数据进行处理,具体操作如下所示。

下图是每个stage的结果,深度图越来越精确,图像也对的越来越齐

3 训练Loss

3.1 有监督情况

有监督指的是有深度图真值和相机变换之间的真值

深度的loss计算方法如下所示,在优化过程中,每个stage都会输出一个深度图,γ\gammaγ是一个滞后因子,说明越早得到的深度图对应的权重越小,最后以最终的输出深度图为主。

Ldepth=∑s=1mγm−s∣∣Ds−D∣∣1L_{depth} = \sum^{m}_{s=1}\gamma^{m-s}||D^s-D||_1Ldepth​=s=1∑m​γm−s∣∣Ds−D∣∣1​

关于位姿的loss,思路简单,就是利用深度图真值DDD ,用预测变换出来的和真值变幻出来的深度图做差。

Lpose=∑s=1m∑xγm−s∣∣π(Tis,D(x)⋅π−1(x))−π(Ti,D(x)⋅π−1(x))∣∣1L_{pose} = \sum^{m}_{s=1}\sum_x\gamma^{m-s}||\pi(T_i^s, D(x)\cdot \pi^{-1}(x)) - \pi(T_i, D(x)\cdot \pi^{-1}(x)) ||_1Lpose​=s=1∑m​x∑​γm−s∣∣π(Tis​,D(x)⋅π−1(x))−π(Ti​,D(x)⋅π−1(x))∣∣1​

最后将这两个loss加在一起就是最后真值。

3.2 自监督情况

用了两种loss,光度损失 photometric loss 和平滑度损失smoothness loss。

关于photometric loss,利用预测出的深度图和pose,可以将相邻图像IiI_iIi​变换到参考图像下Ii′I'_iIi′​,原理上两个图像的差应该特别小。作者又引入了一个结构相似度的概念,SSIM,评价两个图像的相似度的,这样这个loss可以定义为:

Lphoto=α1−SSIM(Ii′,I0)2+(1−α)∣∣Ii′−I0∣∣1L_{photo} = \alpha \dfrac{1-SSIM(I'_i,I_0)}{2} + (1-\alpha)||I'_i-I_0||_1Lphoto​=α21−SSIM(Ii′​,I0​)​+(1−α)∣∣Ii′​−I0​∣∣1​

关于smoothness loss,基于相邻的像素应该具有相似的深度这个性质,特别是颜色相似的时候,这样就构建处一个loss

lSMOOTH=∣∂xD∣e−∣∂xI0∣+∣∂yD∣e−∣∂yI0∣l_{SMOOTH}=|\partial_xD|e^{-|\partial_xI_0|} + |\partial_yD|e^{-|\partial_yI_0|}lSMOOTH​=∣∂x​D∣e−∣∂x​I0​∣+∣∂y​D∣e−∣∂y​I0​∣

图像的颜色越相似,∣∂xI0∣|\partial_xI_0|∣∂x​I0​∣越小,则该深度误差给的权重越大。

最后自监督的总体误差为: Lself=Lphoto+λLsmoothL_{self}=L_{photo}+\lambda L_{smooth}Lself​=Lphoto​+λLsmooth​

4 实验结果

时间和内存占用情况。

总结

从结果来看重建效果非常好,但是从他的对比算法结果来看,深度图提升效果不明显,但是旋转平移矩阵这个提升还是很明显的,所以后续要研究的话也要搞清楚为什么depth不足够好。

论文阅读 2021 —— DRO: Deep Recurrent Optimizer for Structure-from-Motion相关推荐

  1. 论文阅读:Regularizing Deep Networks with Semantic Data Augmentation

    论文阅读:Regularizing Deep Networks with Semantic Data Augmentation 动机 特征空间的语义变换 Implicit semantic data ...

  2. 论文阅读笔记——A deep tree-based model for software defect prediction

    本论文相关内容 论文下载地址--Web Of Science 论文中文翻译--A deep tree-based model for software defect prediction 论文阅读笔记 ...

  3. 论文阅读:Practical Deep Raw Image Denoising on Mobile Devices

    论文阅读: Practical Deep Raw Image Denoising on Mobile Devices 旷视 2020 ECCV 基于深度学习的降噪方法在近几年得到了大量的研究,这些方法 ...

  4. 论文阅读笔记:Deep Object Co-segmentation via Spatial-Semantic Network Modulation(AAAI2020)

    协同分割论文阅读:Deep Object Co-segmentation via Spatial-Semantic Network Modulation(AAAI2020) 论文原文    代码 提出 ...

  5. 【论文阅读】Parametrized Deep Q-Networks Learning: RL with Discrete-Continuous Hybrid Action Space

    [论文阅读-深度强化学习打王者荣耀]Parametrized Deep Q-Networks Learning: Reinforcement Learning with Discrete-Contin ...

  6. 论文阅读(2)--Picking Deep Filter Responses for Fine-grained Image Recognition

    这次阅读的文章是Picking Deep Filter Responses for Fine-grained Image Recognition,这篇文章是来自上海交通大学Xiaopeng Zhang ...

  7. 论文阅读计划2(Deep Joint Rain Detection and Removal from a Single Image)

    Deep Joint Rain Detection and Removal from a Single Image[1] 简介:多任务全卷积从单张图片中去除雨迹.本文在现有的模型上,开发了一种多任务深 ...

  8. 【论文阅读】DCAN: Deep Contour-Aware Networks for Accurate Gland Segmentation

    DCAN: Deep Contour-Aware Networks for Accurate Gland Segmentation 作者:Hao Chen Xiaojuan Qi Lequan Yu ...

  9. 论文阅读《Adapted Deep Embeddings: A Synthesis of Methods for k-Shot Inductive Transfer Learning Tyler》

    Adapted Deep Embeddings 文章提出神经网络迁移学习的三条主线:权重迁移.深度度量学习.小样本学习.比较了三条主线的三个 SOTA 方案,探索了一种混合的自适应嵌入方法,用目标域的 ...

最新文章

  1. camunda视频教程_【Camunda工作流(1)工作笔记:SpringBoot整合Camunda】
  2. NIOS2随笔——DMA(1)
  3. python websocket实现消息推送_Python Websocket消息推送---GoEasy
  4. 链表的基本操作 java_JAVA实现单链表的基本操作
  5. 一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)
  6. 强化学习 求解迷宫问题_使用天真强化学习的迷宫求解器
  7. python之解析最简单的xml
  8. python整数类型在每一台计算机上的取值范围是一样的_关于python统计一个整数列表中不同数值种类数的问题。...
  9. 数学生物学:生命是数字游戏
  10. 用javascript实现动态增加DataGrid行
  11. java取下一天的零点
  12. Prolog 语言入门(一)
  13. 我们为什么要使用NodeJS
  14. 电脑初学者怎么学习写代码?代码怎样写入电脑?
  15. 武汉大学惯性导航课程精要
  16. macOS 桌面应用 图标制作教程
  17. 海贼王java7723_我的世界海贼王模组7723首发版
  18. 产品生命周期,鸿沟理论和CNCF项目孵化
  19. matlab——求矩阵最大特征值对应的特征向量
  20. NPN型三极管的工作原理

热门文章

  1. 智能手机鼻祖黑莓帝国陨落:黑莓品牌或将消失
  2. ObjectARX如何判断点和多段线的关系
  3. html input patten,Html5 input pattern
  4. 草根创业秘诀:如何在3月内单月出货10万元
  5. 通过查看Windbg中汇编指令及内存中的值去定位软件崩溃问题
  6. 历经8年之久打磨的成熟c#版PACS系统源码
  7. Sequence Model-week2编程题1-词向量的操作【余弦相似度 词类比 除偏词向量】
  8. 用光影魔术手制作一寸照片(8张一寸)
  9. 设计模式之原型模式详解(附应用举例实现)
  10. PS——钢笔工具高级应用