单目图像深度估计 - 应用篇:Learning to be a Depth Camera
目录
- 入门篇:图像深度估计相关总结
- 应用篇:Learning to be a Depth Camera
- 尺度篇:Make3D
- 迁移篇:Depth Extraction from Video Using Non-parametric Sampling
- 深度篇:David Eigen
- 无监督篇:Left-Right Consistency & Ego Motion
- 相对深度篇:Depth in the Wild & Size to Depth
- SLAM辅助篇:MegaDepth
- 方法比较篇:Evaluation of CNN-based Methods
单目图像深度估计 - 应用篇:Learning to be a Depth Camera
Fig. 1 Learning to be a Depth Camera
第二篇借助Learning to be a Depth Camera for Close-Range Human Capture and Interaction(Website)这篇论文谈一下相关应用。
上篇文章中提到过,有了深度信息后,图片就从二维变成了三维,机器对图像的理解成几何倍数的增长,自然利用这更多的信息可以做到更多的事情。
当机器人可以实时获取空间的三维信息,当人机交互只需要手势和表情,当智能汽车可以实时推断周围物体距离……
Learning to be a Depth Camera这篇论文提供了一种把普通摄像头改造成深度摄像头的方法,结合硬件的改造和机器学习算法推断可实时获取近距离物体的深度信息。在论文配套的**视频**中展示了多种应用,如人脸3D建模,手势识别等。
Fig. 2 不同应用场景
之所以把这篇叫做应用篇,也是因为在视频中给出的应用场景非常丰富,并且能够直观的深度信息看出在人机交互和3D建模方面的重要性。
1. 硬件改造部分
文中对两种摄像头进行了改造,分别是普通的电脑外接摄像头Microsoft LifeCam(Fig.1 d)和Nexus手机摄像头(Fig.1 c)。
Fig. 3 摄像头改造步骤
如上图,改造的步骤为:
- 去掉相机原有的近红外滤光片(NIR cut filter)
- 增加一个带通滤波片(bandpass filter)
- 增加一圈红色LED光源
其中带通滤波片带宽和新增的LED光源波长均为850nm。
在视频中有详细的改造过程,但此处值得注意的是,目前手机相机镜头可能不是单独的带通滤波片结构,而是一层滤波涂层,因此效果可能会打折。
这种改造的目的是让原本不能感知近红外的镜头对特定波长的近红外光波敏感,改造后的相机输出结果不再为彩色RGB图片。
2. 深度估计算法部分
文章使用机器学习的方法对深度信息进行估计。
Fig. 4 多层决策森林
Fig.4为文章进行深度估计使用的多层决策森林结构,输入为一个红外图像的像素点,输出为深度距离值。网络为两层结构,第一层为分类森林,第二层为回归森林。为了让预测过程更有效率,文章限制了目标物体的距离范围(20cm到1m)。
如图所示,Layer1为每一个像素分配一块对应的深度范围(每一个叶子节点表示一个深度范围),并且生成整幅图片的预测深度概率分布(计算分别属于c个叶子的概率)。由于叶子节点的输出并不是具体的深度值,且输出中有全局概率分布,因此第一层可理解为全局的粗略深度估计。
此处插播一句,深度特征不同于其他特征的地方有一点就在于深度信息是全局性的,是一种相对的值,人类也会通过相对距离来判断深度,因此大多数深度估计方法都采用一种由粗到细由全局到局部的预测过程,典型的例子就是多尺度深度网络。
Layer2针对layer1的c种分类结果,训练了c个对应的专家树,每一个专家树都由属于此范围的train集进行训练得到。通过激活不同的专家树,并赋予每个(被激活的专家树的)预测结果对应的权重(权重由Layer1给的概率分布决定),获得每个像素点最终的深度预测值。第二层的输出是mm单位的连续深度预测值。
值得注意的是,论文中提到可以使用Kinect获得的真实深度数据对模型进行训练,在应用时使用改造后的摄像头数据,也可以实时产生令人满意的效果。
由于决策树这块我还没吃透,再此不对训练过程做详细说明,大致是通过最大化信息增益得到每个节点的判断阈值的过程。实验对比部分也一并略过。
3. 不足及展望部分
本文提出的方法软硬结合的解决了单目摄像头深度估计问题,优点有成本低廉,实时性强,不需要手动提取特征等,缺点有如下几点:
- 不适用于表面介质不同的物体。文中作对比的SFS方法是基于物体的反射特等物理特性进行深度推测的方法,因此作者强调了此种方法只适用于均一介质的人的皮肤,在视频中也有对塑料模型建模失败的效果展示。
- 需要大量覆盖不同情况的train set。这可能是机器学习和深度学习方法的通病了,过于依赖train集,如用室外数据集KITTI训练得到的深度网络在室内数据集NYU_Depth上的表现往往不尽如人意。
- 只能探测近距离的物体。由于对距离进行了限制(20cm到1m),但也正是因此可以忽略背景的干扰降低了算法复杂度,更适合于人机交互的应用。
作者也提出了可以改进的方向,如利用已有可直接获取红外值的Camera(Omni Vision)获取更精确的结果。
4. 总结和思考
这篇文章值得学习的地方有很多,比如引人入胜的视频,通过视频可以看出作者团队做了多少工作;比如丰富的实验,不仅仅横向与其他算法对比,而且与不同的训练方式对比,同时在论文的结尾还对手部区域分类的应用进行了详细的实验说明;比如软硬结合的方法,在工业应用上这篇文章比其他单独对算法进行改进的论文无疑更有实用价值。
最近一直在思考论文的价值,是发表了论文就算有价值吗?为了提高百分之零点几的正确率让算法变得更加复杂真的是正确的研究方向吗?我个人还是比较喜欢简洁的方法,简洁即优雅,就像Science上的CFSFDP一样,提出全新的思路和方向的论文对我来说更有意思一些。
以上。
[1] Fanello S R, Keskin C, Izadi S, et al. Learning to be a depth camera for close-range human capture and interaction[J]. Acm Transactions on Graphics, 2014, 33(4):1-11.
单目图像深度估计 - 应用篇:Learning to be a Depth Camera相关推荐
- 单目图像深度估计 - 泛化篇:S2R-DepthNet
单目图像深度估计 - 泛化篇:S2R-DepthNet 偶然看到微软亚研的单目图像深度估计发表在了CVPR2021上,决定更新一下这个系列. 官方已经有了十分详细的论文解读,我认为这篇文章比较有意思的 ...
- 单目图像深度估计 - 迁移篇:Depth Extraction from Video Using Non-parametric Sampling
目录 入门篇:图像深度估计相关总结 应用篇:Learning to be a Depth Camera 尺度篇:Make3D 迁移篇:Depth Extraction from Video Using ...
- 单目图像深度估计 - 入门篇
由于公司网站设置,基于git的Blog越来越难打开,所以把部分内容搬运到这里. 一转眼都是两年前的内容了,且大部分都是我的个人理解,现在看来也难免有些Bug.虽然后来由于项目安排的关系没有继续单目图像 ...
- 单目图像深度估计 - 尺度篇:Make3D
目录 入门篇:图像深度估计相关总结 应用篇:Learning to be a Depth Camera 尺度篇:Make3D 迁移篇:Depth Extraction from Video Using ...
- 单目图像深度估计 - SLAM辅助篇:MegaDepth
目录 入门篇:图像深度估计相关总结 应用篇:Learning to be a Depth Camera 尺度篇:Make3D 迁移篇:Depth Extraction from Video Using ...
- 单目图像深度估计 - 深度篇:David Eigen的两篇研究
目录 入门篇:图像深度估计相关总结 应用篇:Learning to be a Depth Camera 尺度篇:Make3D 迁移篇:Depth Extraction from Video Using ...
- 单目图像深度估计 - 相对深度篇:Depth in the Wild Size to Depth
目录 入门篇:图像深度估计相关总结 应用篇:Learning to be a Depth Camera 尺度篇:Make3D 迁移篇:Depth Extraction from Video Using ...
- 基于深度学习的单目图像深度估计总结
图像深度估计,是目前计算机视觉研究中的经典问题.深度图(Depth Map)表示每个像素在空间中的位置,是一种普遍的三维场景信息表达方式,广泛应用于自动驾驶.三维重建等方面. 基于深度学习的单目图像深 ...
- 单目图像深度估计——Monodepth2
深度估计方法及网络架构 深度估计方法 网络架构 深度网络 位姿网络 损失函数构建 深度估计方法 Monodepth2使用基于单目图像的无监督学习法完成深度估计的任务.根据SFM模型原理在卷积神经网络中 ...
最新文章
- Bootstrap select 多选并获取选中的值
- 下列那个语句在python中是非法的_下列哪个语句在Python中是非法的()A.x=y=z=1B.x=(y=z+1)C.x,y=y,xD...
- linux cenots 查看cpu核数
- 剑指offer-栈的压入、弹出序列
- python捷联惯导的姿态解算_自动驾驶中高精地图的大规模生产:视觉惯导技术在高德的应用...
- Java集合——题目
- 在线编程网站收集-备用
- 电脑双系统--我想体验不一样的感觉
- MAX30102心率血样模块在STM32F103芯片的程序说明
- Flixel Dame 坦克大战(一)地图
- Centos校准时间
- ice的意思_ice什么意思
- java初始化含十个数的数组_java初始化数组的方法
- 批处理判断操作系统的文件系统类型
- (翻译)采用字母间距提高全大写文本可读性的方式
- Vue接入Google Adsense
- 参考文献格式,依据 GB/T 7714-2015
- js小游戏 (飞行的小鸟--canvas)
- 什么是VR虚拟电子沙盘3D数字沙盘有什么功能
- PAT乙级 1069 微博转发抽奖 (20 分) C语言
热门文章
- vivoy73s和荣耀30青春版的区别
- 在篮球运动中,领先多少分才安全。体育作家Bill 开发了一个算法,用于判断篮球比赛中怎样的领先优势是不可超越的
- 看了这些书籍,进大厂就不难了是吗?
- 共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。
- 学会这招,再也不怕女朋友生气啦。
- linux根据进程号/端口查询应用
- JAVA实现短信接口的使用、短信验证码的发送(第三方短信平台秒嘀云)
- 数字图像处理知识(空间滤波)
- Android获取系统语言(区分简体中文和繁体中文) .
- C. Infected Tree(思维/dfs/树形dp)