Learning the Depths of Moving People by Watching Frozen
基于双目的传统算法
- 对静止的物体, 在不同的 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 估计相机位姿
- 给定一个视频, 使用 ORB-SLAM2 算法计算 frame 之间的 track, 再估计每一个 frame 的相机位姿
- 再使用 visual SfM 优化相机位姿(外参数)和内参数(相机内部, 包括径向畸变系数, 焦距)
- 知道了相机位姿就知道每个 frame 之间的位移关系, 去掉相机位姿不平滑的 frame (拍摄的人不稳定等)
1.2 制作 Ground truth
在获取了每个 frame 的相机位姿之后, 使用 COLMAP(一种 MVS 算法) 恢复每个 frame 的深度图
因为数据是从网络上获取的, 包含了一些噪声(motion blur, shadows, reflections, MVS 算法本身的要求(不能有动的物体, 背景不能是后期电脑合成的)等), 需要对 COLMAP 算法获取的深度图进行过滤
定义 depth value 过滤器1, 不符合的像素对应的 depth = 0
- \(D_{MVS}\) 表示使用 COLMAP 算法得到的深度图
\(D_{pp}\) 表示两个 frame 的 motion paralax(该论文首次提出), 通过 FlowNet2.0 计算出整张图的 \(D_{pp}\)
使用公式计算每个 frame 的 normalized error \(\Delta{(p)}\) , 其中 \(p\) 为像素
\[
\Delta(p)={{|D_{MVS}(p)-D_{pp}(p)|}\over{D_{MVS}(p)+D_{pp}(p)}}
\]- 如果 \(\Delta(p)>0.2\) 则 \(p\) 对应的 depth = 0, 意味着该 pixcel 距离我们无限远, 不关心该像素的深度
一张 MVS 的深度图经过第 3 点的过滤器之后, 如果保留的非 0 的个数占总共的比例小于 20% 则不要这个 frame 和对应的深度图
定义过滤器2
- 如果估计出相机内参数的径向畸变系数 \(|k_1|>0.1\) 或者焦距 \(focal\ length \le 0.6\) 或者 \(focal\ length \ge 1.2\) 则去掉该 frame 和对应的深度图
保证视频的帧数至少 30, 宽高比为 16:9, 宽至少为 1600px
对剩下的 frame 和深度图, 采用人工的方法去掉明显错误的 frame
1.3 总结
- dataset 提供了 RGB, 深度图(GT), 相机的位姿
2. 网络模型
1.1 输入
\(I^{r}\) reference image
\(M\) 人的分割图
\(D_{pp}\) non-human regions 的 depth map which estimated from motion parallax w.r.t another view of the scene
- \(D_{pp}\) 需要通过两个 frame 计算, 一个 \(I^{r}\), 另外一个是 \(I^{r}\) , 当确定了 \(I^{r}\) 之后, 使用 Keyframe selection 计算出 \(I^{r}\) 对应的 \(I^{s}\)
- 使用 FlowNet2.0 网络估计出 \(I^{r}\) 和 \(I^{s}\) 的 optical flow field
- 根据两个相机在两个 view 中的相对坐标以及估计出来的 optical flow field 通过 Plane-Plus-Parallax(P+P) 表示
\(C\) confidence map
- 因为数据集中可能有 motion blur, shadows, low lighting and reflections, 为了提高准确度, 将 confidence map 输入
optional: human keypoint map \(K\)
1.1.1 详解输入
- 给定 \(I^{r}\) 和 \(I^{s}\) , 使用 FlowNet2.0 估计出光流场
1.2 输出
a full depth map for the entire scene
在输入时, \(C\) 和 \(D_{pp}\) 都没有人的区域, 但是因为 GT 有人的深度信息, 为了匹配上 GT 的 depth 的值, 网络学习人的信息, 优化没有人的区域(\(D_{pp}\))
1.3 网络
- 沙漏网络的变体, 将原来的最近邻上采样层替换成了双线性上采样层
1.4 损失
公式
\[
L_{si}=L_{MSE}+\alpha_1L_{grad}+\alpha_2L_{sm}
\]\(L_{MSE}\)
\(L_{grad}\)
\(L_{sm}\)
- 当 MVS 无法恢复深度信息时, 通过此 term 进行 smooth interpolation
Learning the Depths of Moving People by Watching Frozen的更多相关文章
- [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 ...
- 一个小笔记(8):EN_2
Why is programming fun? What delights may its practitioner expect as his reward? First is the sheer ...
- (转) ICCV 2015:21篇最火爆研究论文
ICCV 2015:21篇最火爆研究论文 ICCV 2015: Twenty one hottest research papers “Geometry vs Recognition” ...
- Calculating Stereo Pairs
Calculating Stereo Pairs Written by Paul BourkeJuly 1999 Introduction The following discusses comput ...
- 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 ...
- Policy Gradient Algorithms
Policy Gradient Algorithms 2019-10-02 17:37:47 This blog is from: https://lilianweng.github.io/lil-l ...
- 2015,2016 Open Source Yearbook
https://opensource.com/yearbook/2015 The 2015 Open Source Yearbook is a community-contributed collec ...
- 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 ...
- 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? ...
随机推荐
- WPF 窗体边框处理
一般做wpf窗口时都不会使用默认的标题栏等,会把他隐藏掉 此时设置以下属性 WindowStyle.AllowsTransparency.ResizeMode 中的两个或三个都能达到目的. 有一种场景 ...
- C++函数不写bool返回值,居然编译运行全部通过,但判断结果就不对了
bool MyStart::IsCoorectParam(QString strParam) { if (strParam=="-aa" || strParam=="-b ...
- 多态与虚拟 : 物件导向的精髓 (侯捷在石器时代对OO的理解)
[自序]虑而後能得(自序)故事接触 C++ 大约是 1989 年的事.那时候的 PC 以现在的眼光看,除了「蛮荒」之外没有更合适的形容词了.横扫千军的 Windows 3.0 还没有诞生,如今以 C+ ...
- 新兴技术袭来,Web开发如何抉择?
土豆网同步更新:http://www.tudou.com/plcover/VHNh6ZopQ4E/ 使用HTML 创建Mac OS App 视频教程. 官方QQ群: (1)App实践出真知 434 ...
- QT运行cmd指令(两种办法:QProcess.start然后waitForFinished,运行cmd /c命令)
QProcess p(); p.start("route");//写入要运行的指令即可 p.waitForStarted(); p.waitForFinished(); qDebu ...
- 孟岩:技术路线的选择重要但不具有决定性(什么是核心竞争力?是你独特的个性知识经验组合,正确的态度应该是着重于你要干的事情,然后认真把这件事情做好,然后融会贯通)good
转自 http://blog.csdn.net/myan/article/details/3247071 孟岩 2008 年的文章,现在看来还是挺有启发, 送给大家,也送给自己. 最近微软在技术上 ...
- PHP网站开发方案
一. 开发成员 a)项目主管 b)页面美工c)页面开发 d)服务端程序开发e)系统与数据管理f)测试与版本控制 二. 网站组开发简明流程 三. 开发工具与环境 a) 服务器配置i. WEB服务器: F ...
- 本地线程-ThreadLocal
线程本地存储是一个自动化机制,可以为使用相同变量的每个不同的线程都创建不同的存储.简单来说,就是对于某个变量,针对不同的线程存储不同的值. 实例: import java.util.Random; i ...
- vuex分模块后,如何获取state的值
问题:vuex分模块后,一个模块如何拿到其他模块的state值,调其他模块的方法? 思路:1.通过命名空间取值--this.$store.state.car.list // OK 2.通过定义该属性的 ...
- throw 与 throws的比较
说实话,今天在公司的实习,确确实实编号被严重打脸了,说真的,自己的基础功不扎实,希望慢慢弥补吧! 抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常,下面它们之间的异同. 一 ...