1. 论文简介

论文题目:P3Depth: Monocular Depth Estimation with a Piecewise Planarity Prior

Paper地址:paper

Code地址:Github

Paper简单评论:个人觉得是2022 CVPR上depth estimation最优阅读价值的论文,它不同于之前的所有论文:1. 将几何先验用深度神经网络表达出来;2.算是开创了几何的新用法;3.共面这个特性到是不属于新东西,但作者想法奇妙。

2. 摘要

3D场景中含有高度规律(high regularity),作者就想着是否可以利用这种规律来提升深度估计。

特别地,我们引入了分段平面先验,即对于每个像素,都有一个与前者共享相同平面3D曲面的种子像素;

在此基础上,我们设计了一个具有两个head的网络。

第一个head输出像素级平面系数,而第二个head输出密集偏移向量场,用于识别种子像素的位置。

然后利用种子像素的平面系数来预测每个位置的深度。

由此产生的预测自适应地与来自第一个头部的初始预测相融合,通过学习置信度来解释精确局部平面度的潜在偏差。

由于所提出模块的可微分性,整个体系结构是端到端训练的,它学习预测规则深度映射,在咬合边界处具有锐利的边缘。

3. 引言

大多数监督方法使用像素级损失,分别处理不同像素的预测。这种机制忽略了真实世界3D场景的高度规律性,这通常会产生分段平滑的深度图。

建模真实3D场景的几何先验知识的一个常见选择是平面。

平面是局部可微深度映射的局部一阶泰勒近似,它们很容易用三个独立系数参数化。

一旦一个像素与一个平面相关联,它的深度可以从像素的位置和相关平面的系数中恢复。在[83]中,这样的平面系数表示被用来学习显式地预测平面。

我们采用了[83]中的平面表示,但我们脱离了平面的显式预测,而是使用这种表示作为适当的输出空间,用于定义基于平面先验的像素之间的相互作用。

特别是,我们的网络的第一个头部输出密集 平面系数图,再转换为深度图,如图2所示。预测平面系数的动机是,两个像素p和q属于同一个平面,理想情况下具有相等的平面系数表示,而它们通常具有不同的深度。

因此,使用q的平面系数表示来预测p位置的深度,如果像素属于同一平面,则可以正确预测。

我们通过学习识别与被检查像素共享同一平面的种子像素来利用这一性质,只要这些像素存在,就可以选择性地使用这些像素的平面系数来改善预测深度。

这种方法是由分段平面先验驱动的,它表明对于每个具有相关3D平面的像素p,在p的邻域中有一个与p关联的种子像素q。要用这种方案预测深度,我们需要通过预测偏移量q−p来识别(i)先验有效的区域和(ii)这些区域中的种子像素。

 因此,我们在网络中设计了第二个头部,它输出一个密集偏移向量场和一个置信度图,如图2所示。预测偏移量用于从第一个头部重新采样平面系数,并生成第二个深度预测。
然后使用置信度图作为融合权重自适应地融合来自两个头部的深度预测,以降低基于偏移的预测的权重,并主要依赖于在分段平面先验无效的区域的基本深度预测,例如在具有高频结构的场景的部分。

通过对融合深度预测的监督,隐式地应用了偏移量和置信图的监督。由于使用种子像素进行预测,我们的模型隐式地学习根据像素在深度图平滑区域中的隶属度对像素进行分组。这有助于保存尖锐的深度不连续,如图1所示。

最后但并非最不重要的是,我们提出了平均平面损失,它加强了我们预测的3D表面与地面真相的一阶一致性,并进一步提高了性能。

4 相关工作

Supervised monocular depth estimation

假设地面真实深度图可用于训练图像,并需要对单个图像进行推断。一个著名的早期方法是Make3D[59],它在场景中显式手工制作一个分段平面结构,并使用马尔可夫随机场在局部学习相关参数。

[9]的多尺度网络通过学习从图像到深度图的端到端映射,开创了深度cnn在深度估计中的使用。后来有几项工作专注于这一设置,提出了i.a

(i)更高级的架构,如残差网络[32],卷积神经场[43,73],频域多尺度融合[34],基于变压器的块,参与全局深度统计[1]和深度合并网络处理多分辨率[50],

(ii)更适合深度预测的损失,如反向Huber损失[32]、分类损失[3]、有序回归损失[12]、两两排序损失[71]和几种深度相关损失[35]的自适应组合,以及

(iii)深度与法线或语义标签的联合学习[8,53,72]。[78]通过将3D点云编码器应用于提升的深度图,解决了混合数据设置中深度偏移和焦距刻度的模糊性。

我们的方法属于这一类,它将深度预测投射到更合适的空间,以挖掘输入场景的规律。

Other depth estimation setups

包括无监督和半监督单目深度估计,以及基于立体的深度估计。在[16]中引入了基于新型视图合成[10]的立体对深度无监督学习,该合成使用了一种图像重建损失,其中预测的深度用于将对中的一幅图像扭曲到另一幅图像的框架中,并在[18]中以完全可微的公式进行了转换。

这一方向的进一步研究利用了时间信息[47,52,82]。在该框架中对立体对的需求在[85]中得到了提升,它适用于单目视频。在[27,40,48]中强制了估计的3D结构和跨视频帧的自我运动的一致性。

深度和自我运动在[26,79]中结合了光流和语义,在[76]中结合了边缘。在[19]中实现了跨视频帧遮挡的鲁棒性,并具有最小的重投影损失。在[20,61]中,专门的损失促进了优化。

最近的方法利用了测试时的视频输入[69]、分割输出的一致性[86]以及相邻帧之间的缩放一致性[67]。无监督方法通常假设比有监督方法更复杂的训练数据,并且存在规模模糊和违反兰伯假设。在[29]中引入了半监督深度估计,它将稀疏深度测量与图像重建损失相结合。

在[39]中,对存在的特定于数据集的假设和深度监测格式的特定数据集假设也有所放宽,它利用多视图图像收集来生成可靠的大规模深度监测,而在[56]中,利用不同的数据集为单目深度估计提供不同形式的监督,以更好地泛化未见数据。早期的立体声方法依赖于手工制作的匹配成本[22]来估计视差。最初学习匹配函数的方法包括[30,65],而后续的工作依赖于全卷积架构[5,49]。在训练和测试中,立体方法也以立体对的形式假设更复杂的数据,这阻止了它们应用于更一般和不受控制的单目设置。

Geometric priors for depth

在文献中被广泛研究过。特别是在多视图立体[14]和三维重建中,传统上采用分段平面先验[2,6],以使这些问题能够更快地优化。这些方法涉及显式深度平面,并将这些平面拟合到图像超像素或输入点云的点集上。

超像素级深度平面也用于深度去噪和补全[58,66]。在最近的基于深度学习的方法中,几何先验的合并要么通过分割平面显式执行[36,41,42,81],要么通过适当设计损失隐式执行[80]。

在[77]的虚拟法线框架中利用非局部3D上下文,使用来自虚拟平面的监督,这些虚拟平面对应于深度图的非共线点的三元组。在[23]网络中通过深度注意体积嵌入非局部共面性约束。

在[46]中使用表面法线来增加规则结构的几何一致性。[74,83]中使用了一种与图像空间中3D平面系数直接相关的表示,而不依赖于相机的内在参数,用于估计场景中的主导深度平面。

[33]采用同样的平面系数表示法指导深度网络解码器部分的上采样模块,达到了最先进的性能。

我们也将这种表示法用于平面系数,但与[74,83]相反,我们学习它时不需要对平面进行注释。相反,我们优化平面系数和空间偏移向量,以学习识别共面像素,并使用这种共面性来预测深度。

虽然偏移向量在[54]中也用于仅通过重新采样预测的后处理深度,但我们将偏移向量合并到单个端到端架构中,并通过与偏移指向的种子像素相关联的平面插值生成预测。

我们的方法松散地受到[51]的启发,它训练偏移向量来从带注释的图像中识别实例分割中心,而我们专注于深度预测,并在没有监督的情况下对平面实例进行操作

P3Depth: Monocular Depth Estimation with a Piecewise Planarity Prior的更多相关文章

  1. 泡泡一分钟:Towards real-time unsupervised monocular depth estimation on CPU

    Towards real-time unsupervised monocular depth estimation on CPU Matteo Poggi , Filippo Aleotti , Fa ...

  2. 利用光场进行深度图估计(Depth Estimation)算法之一——聚焦算法

    前面几篇博客主要说了光场相机,光场相机由于能够记录相机内部整个光场,可以实现重聚焦(模糊线索)和不同视角的变换(视差线索),同时也可以利用这个特性进行深度估计(Depth Estimation). 先 ...

  3. deep learning+ Depth Estimation

    Depth estimation/stereo matching/optical flow @CVPR 2017 Unsupervised Learning of Depth and Ego-Moti ...

  4. 【HEVC帧间预测论文】P1.9 Coding Tree Depth Estimation for Complexity Reduction of HEVC

    Coding Tree Depth Estimation for Complexity Reduction of HEVC <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见: ...

  5. 利用光场进行深度图估计(Depth Estimation)算法之二——匹配算法

    光场相机由于能够捕获相机内部光线的强度和方向而得到整个光场,可以实现重聚焦(refocus)和视角变换等功能.进而可以进行深度估计获取深度图,前面说过利用重聚焦的图像进行深度估计,今天说一下利用不同视 ...

  6. 2016CVPR论文集

    http://www.cv-foundation.org/openaccess/CVPR2016.py ORAL SESSION Image Captioning and Question Answe ...

  7. CVPR2016 Paper list

    CVPR2016 Paper list ORAL SESSIONImage Captioning and Question Answering Monday, June 27th, 9:00AM - ...

  8. 深度学习结合SLAM研究总结

    博客转载自:https://blog.csdn.net/u010821666/article/details/78793225 原文标题:深度学习结合SLAM的研究思路/成果整理之 1. 深度学习跟S ...

  9. Generative Adversarial Nets[CycleGAN]

    本文来自<Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks>,时间线为2017 ...

  10. (转)Awsome Domain-Adaptation

    Awsome Domain-Adaptation 2018-08-06 19:27:54 This blog is copied from: https://github.com/zhaoxin94/ ...

随机推荐

  1. 18-基于CentOS7搭建RabbitMQ3.10.7集群镜像队列+HaProxy+Keepalived高可用架构

    集群架构 虚拟机规划 IP hostname 节点说明 端口 控制台地址 192.168.247.150 rabbitmq.master rabbitmq master 5672 http://192 ...

  2. 多线程的使用(springboot)

    预备知识 业务使用多线程的原因 目的是面对高并发的时候,提高运行速度 场景一: 一个业务逻辑有很多次的循环,每次循环之间没有影响,比如验证1万条url路径是否存在,正常情况要循环1万次,逐个去验证每一 ...

  3. JVM内存结构模型

  4. Linux学习记录---(1、基本命令)

    文章目录 1 .基本命令 1.1.查看当前文件夹下的文件 1.2.进入某一个文件夹 1.3.一次进入多个文件夹 1.4.返回上一级 1.5.直接进入根目录 1.6.创建一个目录 2.Redis中的相关 ...

  5. LeetCode------移动零(5)【数组】

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/move-zeroes 1.题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末 ...

  6. 齐博x1fun实例 鉴于很多人问列表的筛选怎么放到首页、内容页等等地方 贴出方法

    application\common\fun\Field.php 你可以复制一份 也可以直接改 直接改记得加锁 不然升级就覆盖了 我们把   public function list_filter($ ...

  7. 23.mixin类源码解析

    mixin类用于提供视图的基本操作行为,注意mixin类提供动作方法,而不是直接定义处理程序方法 例如.get() .post(),这允许更灵活的定义,mixin从rest_framework.mix ...

  8. SoringCloud(四) - 微信获取用户信息

    1.项目介绍 2.微信公众平台 和 微信开放文档 2.1 微信公众平台 2.1.1 网址链接 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?ac ...

  9. 如何在Spring Boot开启事务

    说到事务,那什么是事务呢? 事务(Transaction),一般是指要做的或所做的事情. 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行. ...

  10. yum 更新yum源

    yum 更新yum源 # 1.做好备份,防止更新失败时切换回去 $ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base. ...