基于双目的传统算法

  • 对静止的物体, 在不同的 viewpoints 同一时刻进行拍摄, 根据拍摄到的结果, 使用三角测量算法计算出平面 2D 图像在 3D 图像中的坐标

单目

  • Ground Truth

    • 使用 MVS 得到的深度图
    • 使用 MVS 直接得到的深度图有一些也是不符合实验的要求的, 需要对其进行 filtering
  • 神经网络的输入
    • 待计算深度的 RGB 图像(target image)
    • 使用 Mask-RCNN 得到的行人分割图
    • 在原始的 video 中得到的 reference image 与 target image 计算出光流图(表示在成像平面上物体的运行), 用于解决在 training 时输入的仅仅是人物禁止但是摄像机在动的图片序列, 而在 testing 的时候输入的人和摄像机都在运动的图片序列, 为了在 training 的时候弥补这种情况, 需要通过光流图计算出初始环境深度图(借助光流图和分割图得到)
      • 此外光流图还包含了物体的 montion 和形状的信息
  • 目的
    • 得到深度图, where both the camera and people in the scene are naturally moving
  • 该算法使用到的其他算法
    • MVS: 对运动的物体无效, 运动的物体被视为噪声, 用于估计深度图像, 作为 GT
    • Sfm: 对运动的物体无效, 运动的物体被视为噪声, 用于估计相机的位置

算法流程

1. 制作数据集

1.1 估计相机位姿

  1. 给定一个视频, 使用 ORB-SLAM2 算法计算 frame 之间的 track, 再估计每一个 frame 的相机位姿
  2. 再使用 visual SfM 优化相机位姿(外参数)和内参数(相机内部, 包括径向畸变系数, 焦距)
  3. 知道了相机位姿就知道每个 frame 之间的位移关系, 去掉相机位姿不平滑的 frame (拍摄的人不稳定等)

1.2 制作 Ground truth

  1. 在获取了每个 frame 的相机位姿之后, 使用 COLMAP(一种 MVS 算法) 恢复每个 frame 的深度图

  2. 因为数据是从网络上获取的, 包含了一些噪声(motion blur, shadows, reflections, MVS 算法本身的要求(不能有动的物体, 背景不能是后期电脑合成的)等), 需要对 COLMAP 算法获取的深度图进行过滤

  3. 定义 depth value 过滤器1, 不符合的像素对应的 depth = 0

    1. \(D_{MVS}\) 表示使用 COLMAP 算法得到的深度图
    2. \(D_{pp}\) 表示两个 frame 的 motion paralax(该论文首次提出), 通过 FlowNet2.0 计算出整张图的 \(D_{pp}\)

    3. 使用公式计算每个 frame 的 normalized error \(\Delta{(p)}\) , 其中 \(p\) 为像素

    \[
    \Delta(p)={{|D_{MVS}(p)-D_{pp}(p)|}\over{D_{MVS}(p)+D_{pp}(p)}}
    \]

    1. 如果 \(\Delta(p)>0.2\) 则 \(p\) 对应的 depth = 0, 意味着该 pixcel 距离我们无限远, 不关心该像素的深度
  4. 一张 MVS 的深度图经过第 3 点的过滤器之后, 如果保留的非 0 的个数占总共的比例小于 20% 则不要这个 frame 和对应的深度图

  5. 定义过滤器2

    1. 如果估计出相机内参数的径向畸变系数 \(|k_1|>0.1\) 或者焦距 \(focal\ length \le 0.6\) 或者 \(focal\ length \ge 1.2\) 则去掉该 frame 和对应的深度图
  6. 保证视频的帧数至少 30, 宽高比为 16:9, 宽至少为 1600px

  7. 对剩下的 frame 和深度图, 采用人工的方法去掉明显错误的 frame

1.3 总结

  1. dataset 提供了 RGB, 深度图(GT), 相机的位姿

2. 网络模型

1.1 输入

  1. \(I^{r}\) reference image

  2. \(M\) 人的分割图

  3. \(D_{pp}\) non-human regions 的 depth map which estimated from motion parallax w.r.t another view of the scene

    1. \(D_{pp}\) 需要通过两个 frame 计算, 一个 \(I^{r}\), 另外一个是 \(I^{r}\) , 当确定了 \(I^{r}\) 之后, 使用 Keyframe selection 计算出 \(I^{r}\) 对应的 \(I^{s}\)
    2. 使用 FlowNet2.0 网络估计出 \(I^{r}\) 和 \(I^{s}\) 的 optical flow field
      1. 光流参考链接: 在计算机视觉领域,是指视频图像中各点像素随时间的运动情况。光流具有丰富的运动信息,因而在运动估计、自动驾驶和行为识别方面都有广泛应用。光流预测通常是从一对时间相关的图像对中,估计出第一张图像中各个像素点在相邻图像中的位置。光流图采用 HSV 描述, 颜色表示方向, 深度表示速度
      2. FlowNet1.0参考链接
    3. 根据两个相机在两个 view 中的相对坐标以及估计出来的 optical flow field 通过 Plane-Plus-Parallax(P+P) 表示
  4. \(C\) confidence map

    1. 因为数据集中可能有 motion blur, shadows, low lighting and reflections, 为了提高准确度, 将 confidence map 输入
  5. optional: human keypoint map \(K\)

1.1.1 详解输入

  1. 给定 \(I^{r}\) 和 \(I^{s}\) , 使用 FlowNet2.0 估计出光流场

1.2 输出

  1. a full depth map for the entire scene

    在输入时, \(C\) 和 \(D_{pp}\) 都没有人的区域, 但是因为 GT 有人的深度信息, 为了匹配上 GT 的 depth 的值, 网络学习人的信息, 优化没有人的区域(\(D_{pp}\))

1.3 网络

  1. 沙漏网络的变体, 将原来的最近邻上采样层替换成了双线性上采样层

1.4 损失

  1. 公式
    \[
    L_{si}=L_{MSE}+\alpha_1L_{grad}+\alpha_2L_{sm}
    \]

  2. \(L_{MSE}\)

  3. \(L_{grad}\)

  4. \(L_{sm}\)

    1. 当 MVS 无法恢复深度信息时, 通过此 term 进行 smooth interpolation

Learning the Depths of Moving People by Watching Frozen的更多相关文章

  1. [C3] Andrew Ng - Neural Networks and Deep Learning

    About this Course If you want to break into cutting-edge AI, this course will help you do so. Deep l ...

  2. 一个小笔记(8):EN_2

    Why is programming fun? What delights may its practitioner expect as his reward? First is the sheer ...

  3. (转) ICCV 2015:21篇最火爆研究论文

          ICCV 2015:21篇最火爆研究论文 ICCV 2015: Twenty one hottest research papers   “Geometry vs Recognition” ...

  4. Calculating Stereo Pairs

    Calculating Stereo Pairs Written by Paul BourkeJuly 1999 Introduction The following discusses comput ...

  5. Swift Development – List of Resources You Must Bookmark

    Ever since the introduction of iOS, there is iOS development fever across the globe. Many iOS develo ...

  6. Policy Gradient Algorithms

    Policy Gradient Algorithms 2019-10-02 17:37:47 This blog is from: https://lilianweng.github.io/lil-l ...

  7. 2015,2016 Open Source Yearbook

    https://opensource.com/yearbook/2015 The 2015 Open Source Yearbook is a community-contributed collec ...

  8. The Brain vs Deep Learning Part I: Computational Complexity — Or Why the Singularity Is Nowhere Near

    The Brain vs Deep Learning Part I: Computational Complexity — Or Why the Singularity Is Nowhere Near ...

  9. How do I learn machine learning?

    https://www.quora.com/How-do-I-learn-machine-learning-1?redirected_qid=6578644   How Can I Learn X? ...

随机推荐

  1. MinGW和MSYS区别和关系以及MinGW&MSYS在Win7中安装并编译x264

    http://blog.csdn.net/freeape/article/details/50555003

  2. qt的demo中,经常可以看到emum

    最近开始看QT的文档,发现了很多好东西,至少对于我来说 收获很多~~~ 当然很多东西自己还不能理解的很透彻,也是和朋友讨论以后才渐渐清晰的,可能对于QT中一些经典的用意我还是存在会有些认识上的偏差,欢 ...

  3. Qt浅谈之二十七进程间通信之QtDBus good

    一.简介 DBus的出现,使得Linux进程间通信更加便捷,不仅可以和用户空间应用程序进行通信,而且还可以和内核的程序进行通信,DBus使得Linux变得更加智能,更加具有交互性.        DB ...

  4. 生成sql server 数据库 脚本的 存储过程和调用

    USE [db_datadown] GO /****** Object: StoredProcedure [dbo].[GetTBScript] Script Date: 03/05/2015 09: ...

  5. 使用Arcgis Pro 发布矢量切片

    ArcGIS Pro 中的任何地图或底图都可以创建矢量切片,但是有一些局限性和特殊注意事项.为创建矢量切片制作地图的重点是构建一个有效的地图,以快速绘制生成的切片. 软件环境 操作系统:Windows ...

  6. JAVA8之lambda表达式详解

    原文:http://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda ...

  7. never下ioc

    生命周期 当前分单例,作用域(范围),短暂.单例是整个服务中只有一个实例,短暂则是每一次得到的都是新的实例,作用域就是在该一套行动中内得到的是同一个实例,该行动中指的是什么?我们看看demo下的sta ...

  8. vue 开发webapp 手机返回键 退出问题

    vue 开发webapp 手机返回键 退出问题 mui进行手机物理键的监听 首先安装 vue-awesome-mui npm i vue-awesome-mui 在main.js注册 在index.h ...

  9. 智能小程序关于Filter过滤器的简单使用

    <filter module="swan"> export default { imgurl: (imgUrl) => { var imgurlprefix = ...

  10. RocketMQ(6)---发送普通消息(三种方式)

    发送普通消息(三种方式) RocketMQ 发送普通消息有三种实现方式:可靠同步发送.可靠异步发送.单向(Oneway)发送. 注意 :顺序消息只支持可靠同步发送. GitHub地址: https:/ ...