论文笔记 - PSM-Net: Pyramid Stereo Matching Network. CVPR 2018_andyL_05的博客-程序员宅基地

技术标签: 论文阅读  计算机视觉  深度学习  

Pyramid Stereo Matching Network. CVPR 2018

本文指出,通过立体图像对估计深度已经能够表征为监督学习任务并且通过卷积神经网络解决。但是已有算法都依赖于基于patch的孪生网络,缺乏对上下文信息的利用,难以找到非适定区域关联性。本文提出了金字塔立体匹配网络PSM-Net,主要包括了空间金字塔池化与3D CNN。空间金字塔池化能够通过多尺度累积获取全局语境信息,3DCNN能够通过堆叠沙漏网络及中间结果监督规则化cost volume,获取视差图。
Introduction 与Related work部分,本文首先以MC-CNN为例,提出了基于patch的CNN估计视差虽然在精度与时间上都优于传统算法,但是在一些不适定区域比如遮挡、重复纹理、纹理稀疏、反射表面等依然面临一些困难。基于CNN的深度估计面临的核心问题之一就是如何有效利用上下文信息。相关的研究工作文章也做了介绍,例如针对优化匹配代价计算的MC-CNN,优化后处理的Displets、SGM-Net等。对于端到端的深度、视差估计方法,本文分为了基于视差预测回归(如dispnet、CRL等)以及基于cost volume(如GC-Net等),并且还对语义分割领域的深度学习模型做了探讨(事实上分割与深度估计两个任务相似程度还挺高,尤其是网络方面很多东西可以互相借鉴)。个人觉得,本文的related work对2018年以前的这一领域总结和论述的挺不错的,值得一看。
Pyramid Stereo Matching Network
PSM-Net的结构如图所示,左右图像分别经过共享权值的卷积层、空间金字塔模块,得到3D cost volume,经过3D CNN模块预测得到输出结果。
在这里插入图片描述

论文展示了模型的细节:
在这里插入图片描述

首先通过一系列卷积与空洞卷积层进行特征提取,得到长宽为输入1/4,维度为128的特征图。在第一层卷积没有采用常见的7x7“大核开局”,全都采用3x3卷积。然后通过空间金字塔模型获取多尺度上下文信息,文章设计了8x8,16x16, 32x32, 64x64四个不同尺度的分支,池化后结果上采样与前面卷积层的几个特征一起拼接起来,经过3x3以及1x1卷积得到长宽为1/4的特征图。
由于特征图长宽为原图的1/4,对应的视差值其实也降为了1/4,然后通过移动右图特征块拼接出每个视差值下的对应左右特征向量,构成cost volume
在这里插入图片描述

每一张图对应的cost volume是一个4D张量:视差宽*特征。
在这里插入图片描述

3D卷积这里,首先经过两个“平平无奇”的3D CNN层,后面连接了3个堆叠的沙漏网络。me耦合沙漏网络包括2个卷积模块与2个“反”卷积模块(文中称为deconv,但实际指的是trans conv)。这部分有很多残差式的短接连接,个人认为这些一方面发挥了残差网络的作用(避免梯度消失),另一方面结合了深浅层特征。这一点在很多深度估计、语义分割等任务较为常见。
三个沙漏网络模块,每个后面都接卷积网络和上采样输出一个DxHxW的模块,并基于softmax得到最优的视差值,作为预测的视差。换言之网络会输出3个预测结果,这三部分都跟groundtruth计算loss,以达到对中间结果进行监督的目的。
本文的损失函数选择了 smooth L1:
在这里插入图片描述

在训练方面论文采取Adam优化算法,使用了4块Titan-Xp GPU batch size为12(可见对显存的需求还是很大的)
简单放个结果图吧。详细结果对比可以查看原文。
在这里插入图片描述

总体而言,本文是立体匹配近年来效果很好的一篇经典文章。与传统算法类似,同样可以将计算过程分为前面的特征提取与后面的视差计算,结合了空间金字塔池化获取多尺度语义信息,从而提升了较困难区域的匹配精度,结合3D CNN对cost volume进行计算(类似传统算法代价累积环节)得到最后的视差值。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/andyL_05/article/details/111000823

智能推荐

Jaccard similarity相似性系数和Ochiai coefficient落和系数-程序员宅基地

Jaccard coefficient:A,B分别代表符合某种条件的集合:两个集合交集的大小/两个集合并集的大小,交集=并集意味着2个集合完全重合。Ochiai coefficient:A,B分别代表符合某种条件的集合:两个集合的交集大小/两个集合大小的几何平均值。是余弦相似性的一种形式。..._ochiai coefficient

什么是软件工程师_程序员之光的博客-程序员宅基地

你眼里的软件工程师(程序员)1、码农2、高薪3、工作9964、35岁失业5、直男6、头发是地中海7、工作环境高大上生活中真实的软件工程师(程序员)1、不是只会搬砖的码农,而是一群简单务实、热爱创新的人;2、薪酬高,但他们不是利益驱动型的,而是成就感驱动型的;3、996不是工作的必需,而是行业特定发展阶段和公司管理不力的结果;4、35岁的坎儿不是年龄的坎儿,而是能力的坎儿;5、不是没情调,只是他们的情调都在技术中。一、入行前的准备选择一门主攻的语言:1、Java:世界第一大语言_软件工程师

创建 wordpress 插件-程序员宅基地

1. 在wordpress 的安装目录下wp-content\plugins建立插件目录

集成学习投票法_集成学习 投票法_很随便的wei的博客-程序员宅基地

1. 集成学习概述集成学习(ensemble learning)它并不是一个独立的机器学习算法,而是通过构建并结合多个机器学习器完成学习任务,也就是我们常说的“博采众长”。集成学习可以用于分类问题集成、回归问题集成、特征选取集成、异常点检测集成等。2. 投票机制2.1 思路投票机制(voting)是集成学习里面针对分类问题的一种结合策略,基本思想是融合多个数据来降低误差。对于回归模型:投票法最终的预测结果是多个其他回归模型预测结果的平均值。对于分类模型:硬投票法的预测结果是多个模型预测结果中出现_集成学习 投票法

Exchange Server 2010 NDR时postmaster配置_iis postmaster-程序员宅基地

在exchange Sever 2003的时候,当邮件发生失败或被阻档,都会收到一个由postmaster寄出来的邮件,这个配置还可以在图形界面上修改。而exchange 2010/2007想实现此功能,只能通过命令行来完成,在exchange powershell下面执行下列命_iis postmaster

随便推点

python数据分析:一元线性回归_python 一次元回归算法进行数据分析-程序员宅基地

学了一段时间爬虫,接下来学学数据分析吧(感觉有点难,从简单的学起吧),这次学习线性回归,根据广告投入预测销售额,数据参考如下:以下是代码,自行消化哈:from pandas import read_csvfrom matplotlib import pyplot as pltfrom sklearn.linear_model import LinearRegressiondata = read_csv('data.csv',encoding='gbk')#画出散点图,求x和y的相关系数p_python 一次元回归算法进行数据分析

踩坑篇,多达21页的,超级详细的Oracle安装和配置教程,没有之一-程序员宅基地

由于文档直接复制到博客,图片会转存失败。所以下面贴出几张长图。完整的pdf文档下载:https://download.csdn.net/download/qq_43290318/13724306

matlab解薛定谔方程,有限差分法解薛定谔方程与MATLAB实现-程序员宅基地

第30卷 第3期 高 师 理 科 学 刊 Vol. 30 No.3 2010年 5月 Journal of Science of Teachers′ College and University May 2010 文章编号:1007-9831(2010)03-0068-03 有限差分法解薛定谔方程与 MATLAB 实现 刘晓军 (齐齐哈尔大学 理学院,黑龙江 齐齐哈尔 161006) 摘要:介绍了..._matlab 薛定谔方程的数值模拟

php-浮点数计算 高精度计算函数_php 浮点数计算函数-程序员宅基地

真的很有用,写代码估计都会遇到的浮点类型计算的坑,谢谢谦信君的博客内容。原文链接:htytps://www.cnblogs.com/kenshinobiy/p/10797902.htmlphp-浮点数计算,double类型数加减乘除必须用PHP提供的高精度计算函数一、前方有坑php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的..._php 浮点数计算函数

数据结构与算法实验题 9.8 转移炸弹_a国有n个城市-程序员宅基地

★实验任务A国有 N个城市,这些城市编号为 1到 N,有一天,他们调查出恐怖分子在每个城市中都安放了炸弹,于是他们给炸弹也编上了序号,第 i 个城市里的炸弹编号为 i。现在他们想把这些炸弹转移,以便于销毁炸弹。由于炸弹是通过不同人转移的,所以需要一个指挥部门来记录转移炸弹的信息,以便于有些人要查询这些信息。我们有两个操作:1.将 a 炸弹目前所在城市中所有的炸弹转移到 b 炸弹所在的城..._a国有n个城市

一个简单的C语言程序是怎么来的呢?_cd "c:\users\think\desktop\" && gcc untitled-1.c -_PigeonEssence的博客-程序员宅基地

编写代码编辑是通过编辑器,实现C语言代码的编写,即编辑器提供了编写C语言代码的平台;在编辑好代码之后,我们run程序进入C程序的编程通道。一个典型的C程序编译管道,包含预处理、编译、汇编、链接四个环节。预处理预处理一般有三个作用:宏定义,文件包含,条件编译。注:I.宏定义简单的来说就是”#define …”,就是将程序中的某个常量全部替换成某个数据;II.文件包含简单的来说就是”#include …”,就是在文件目录中找到include后的头文件;III.条件编译指..._cd "c:\users\think\desktop\" && gcc untitled-1.c -o untitled-1 && "c:\users\