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 调用API修改窗体风格实现真正的无边框窗体
原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm ...
- Advanced Installer,搜索注册表,根据注册表选择安装路径
原文:Advanced Installer,搜索注册表,根据注册表选择安装路径 又停了一段时间没有更新了,今天上博客,发现有位朋友就打包的时候需要搜索注册表(不同版本注册表路径不一致,需要搜索多次来确 ...
- HTML 滚动条实现
##在对应的div中,添加overflow,固定高度为400px<div class="panel-body" style="height: 400px; over ...
- Android零基础入门第75节:Activity状态和生命周期方法
前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还需要学习了解更多. 生命周期就是一个对象从创建到销毁的过程,每一个对象 ...
- UWP ObservableCollection<Evaluate>集合中ObservableCollection<PictureInfo>变更通知到xaml界面
ObservableCollection<Evaluate> EvaluateList = new ObservableCollection<Evaluate>();//评论集 ...
- C# ACCESS 修改表记录提示"UPDATE 语句语法错"问题
错误的sql 语句如下: sqlStr = "update tb_userInfo set passWord='" + pw + "' where userName=' ...
- [2017.02.05] 阅读《Efficient C++》思维导图
- mac下 编译php的 openssl
编译openssl.so tar zxvf php-7.2.8.tar.gz# 进入PHP的openssl扩展模块目录cd php-7.2.8/ext/openssl/brew install ope ...
- Spark之常用操作
-- 筛选 val rdd = sc.parallelize(List("ABC","BCD","DEF")) val filtered = ...
- jvm异常记录
1.如果出现java.lang.OutOfMemoryError: Java heap space异常.原因:Java虚拟机的堆内存不够. 具体如下: a.Java虚拟机 ...