基于双目的传统算法

  • 对静止的物体, 在不同的 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. 微信小程序把玩(十一)icon组件

    原文:微信小程序把玩(十一)icon组件 这些是提供的所支持的图标样式,根据需求在此基础上去修改大小和颜色. 主要属性: 使用方式: wxml <!--成功图标--> <icon t ...

  2. Android零基础入门第46节:下拉框Spinner

    原文:Android零基础入门第46节:下拉框Spinner 上一期学习了GridView的使用,你已经掌握了吗?本期一起来学习Spinner的使用. 一.认识Spinner Spinner其实就是一 ...

  3. DirectX的替代品 SDL 简介

    DirectX的替代品 SDL 简介 什么是SDL? 即 Simple DirectMedia Layer,使用 LGPL 许可证. 免费的跨平台多媒体应用编程接口 用于游戏.游戏开发工具.模拟器.样 ...

  4. SpringCloud-分布式配置中心【加密-非对称加密】

    案例代码:https://github.com/q279583842q/springcloud-e-book 非对称加密 一.什么是非对称加密(Asymmetric encryption) 二.Jav ...

  5. 第二章 在Linux上部署.net core

    项目目标部署环境:CentOS 7+ 项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx 开源地址:https ...

  6. apache虚拟主机防止php网页木马vhost.conf文件配置

    <VirtualHost *> DocumentRoot "/www/www.abc.com" ServerName www.abc.com ServerAlias a ...

  7. Ubuntu --- Xshell 连接 VirtualBox下安装的Ubuntu

    1.桥接模式 打开VirtualBox管理器---设置---网络---连接方式选择桥接网卡 2.安装ssh服务 安装: sudo apt-get install openssh-server 启动: ...

  8. l论文查重平台

    推荐大家一个靠谱的论文检测平台.重复的部分有详细出处以及具体修改意见,能直接在文章上做修改,全部改完一键下载就搞定了.怕麻烦的话,还能用它自带的降重功能.哦对了,他们现在正在做毕业季活动, 赠送很多免 ...

  9. wince kill 进程

    http://www.cnblogs.com/fujinliang/archive/2012/09/13/2684165.html 原文地址 http://www.2cto.com/kf/201504 ...

  10. python三大主流web框架之Django安装、项目搭建

    这一篇我们将迎来python强大的web框架Django,相信大家都已经不陌生,本篇将介绍Django的安装及基础项目搭建,大神略过~ Django是需要我们手动pip安装的,首先我们来安装Djang ...