双目立体匹配_StereoNet网络

端到端立体匹配网络:通常以左右视图作为输入,经卷积模块提取特征后,按相关性操作(Correlation)或拼接操作(Concat)构建代价体,最后根据代价体的维度进行不同的卷积操作,回归出视差图。

根据代价体维度的不同,可分为基于 3D 代价体和基于 4D 代价体的两种方法, 2D 编码器-解码器和 3D 卷积正则化模块是分别用来处理 3D 和 4D 代价体的两种结构。2D 编码器-解码器由一系列堆叠的 2D CNN 组成,并带有跳跃连接。而 3D 正则化模块是在构建代价体时将提取的左右图特征沿视差维度拼接以得到一个 4D 的代价体,而后使用 3D CNN 处理 4D 代价体,充分利用了视差维度的信息。

文章目录

  • 双目立体匹配_StereoNet网络
  • 前言
  • 1、GCNet网络架构
  • 2、StereoNet网络架构
  • 3、双目立体匹配数据集
  • 4、实验过程
    • 实验1:只在Sceneflow数据集上训练
    • 实验2:只在KITTI2012数据集上训练
    • 实验3:先在Sceneflow数据集上pretrain,再在KITTI2012数据集上finetune
    • 实验4:先在Sceneflow数据集上pretrain,再在KITTI2012+2015数据集上finetune
  • 五、细节与想法
  • 六、源代码

前言

传统立体匹配算法通常选取立体校正后的左视图作为参考图像,通过在目标图像上进行行搜索寻找同名点并计算视差,将每个像素的视差进行保存,得到单通道的视差图。距离相机越近的空间点,在视差图中灰度值越大。传统立体匹配算法将双目立体匹配问题转化寻找最小化能量函数的图D问题,此处的D可以时深度图或视差图,因此在深度学习领域立体匹配又被成为视差估计、深度估计。

随着神经网络、深度学习技术的不断发展,学者认识到双目立体匹配问题接近于传统的密集回归问题(如语义分割、光流估计等),受U-Net模型的启发,Mayer等人基于光流估计网络FlowNet提出DispNet,成为第一个非常经典的端到端视差估计网络。与U-Net网络结构类似,DispNet先在收缩路径进行特征提取与空间压缩,然后在扩张路径进行尺度恢复与视差预测,并通过长距离跳跃连接实现多层次特征融合,保留更多的网络层信息。

与受传统神经网络模型启发的架构不同,基于4D代价体的端到端立体匹配网络架构是专门为立体匹配任务而设计,这一架构下的网络不再对特征进行降维操作,从而使代价体能保留更多的图像几何和上下文信息。StereoNet网络是在GC-Net网络的基础上改进而来。

1、GCNet网络架构

GC-Net是由Kendall等人提出的一种新型深度视差学习网络架构,作者创造性地引入了4D代价体,并在正则化模块中首次利用3D卷积来融合4D代价体的上下文信息,开创了专门用于立体匹配的3D网络结构。

GC-Net包含四个步骤:1、利用权值共享的2D卷积层分别提取左右图像的高维特征,并在此阶段进行下采样将原始分辨率减半以减少内存需求;2、将左特征图和对应通道的右特征图沿视差维度逐像素错位串联得到4D代价体;3、利用由多尺度的3D卷积和反卷积组成的编码、解码模块对代价体进行正则化操作,得到大小为1的代价体张量;4、对代价体应用可微的SoftArgMax操作回归得到视差图。GC-Net创造性的使用3D卷积构建3D代价体,通过downsampling构造多尺度的3D卷积,并不像传统方法一样使用特征的差值或者距离来计算代价体,而是使用3D卷积,从而学到更多的语义信息,优化了最终的视差图质量。

尽管上述基于4D代价体的端到端网络展示了出色的匹配效果,但由于3D卷积结构本身的计算复杂度,导致网络在存储资源和计算时间上成本高昂,以GC-Net为例,处理分辨率为1216、352尺寸的图像对大约需要10.4G的GPU内存。为了解决此问题,压缩代价体、构建更低分辨率的代价体或减少3D卷积层个数等多种思路被提出。Khamis等人采取设计低分辨率代价体的思路,提出了实时轻量立体匹配网络StereoNet,算法直接在得到低分辨率的视差图后通过2D卷积网络进行上采样和视差优化,以此降低网络的复杂性。

2、StereoNet网络架构

StereoNet使用Siamese网络从左右图像中提取特征,在非常低分辨率的cost volume中计算视差估计,然后分层进行上采样并重新引入高频细节,利用颜色输入作为指导生成高质量的边缘结果。在整体思路上,StereoNet网络将cost volume设计的比较小,但是仍然可以包含了较多的特征信息,只会有较少的精度损失,这样网络可以先得到一个粗糙的视差图,之后再设计了一种层次化的、边缘敏感的精修网络,实际上是利用卷积网络估计残差,利用残差和粗糙的视差图分层优化,最终可以得到更加细致、保留边缘的视差图。


StereoNet网络大致可分为四个部分。第一部分是特征提取模块,网络采用了一个简单的结构,先利用大小为5、步长为2的卷积进行降采样,然后利用一系列大小为3、步长为1的卷积进行特征提取,重复3到4次。第二部分是匹配代价计算模块,为提高运算效率,网络直接通过错位相减,从而构建匹配代价体。第三部分是代价聚合模块,网络利用一系列3D卷积进行滤波,对代价体进行正则化。第四部分是视差计算和优化模块,网络利用当前尺度的图像对当前尺度的视差图进行导向滤波,即首先利用双线性插值上采样视差图,提高一倍其分辨率,然后将当前尺度的影像和插值得到的视差图一起放到一系列的空洞卷积里优化,得到当前尺度的结果。

3、双目立体匹配数据集

SceneFlow数据集是目前规模最大的双目立体视觉公开数据集,所有场景都是利用3D模型人工合成的虚拟数据,包括三个子数据集:FlyingThings3D、Monkaa和Driving。FlyingThings3D中主要包括静态背景中沿3D轨迹随机飞行的日常物体。Monkaa是基于动画短片创建,其中包含了非刚性和柔和的关节运动,以及视觉上极具挑战性的皮毛问题。Driving模拟的是驾驶场景下的动态街景,与KITTI数据集相似。SceneFlow数据集中共包含35454对立体图像对作为训练集,4370对立体图像对作为测试集,图片大小均为960、540,训练集和测试集均提供了稠密而精细(100%)的真实视差值。该数据集是专门为训练和测试基于深度学习的立体匹配算法设计的。


KITTI Stereo数据集是使用经过校准的双目相机与车载激光雷达在真实室外场景中采集的一个小型数据集,可以测试算法针对室外真实场景的匹配精度与实时性,广泛应用于视差估计、目标检测、语义分割等领域。由于室外场景中包含大量车辆、行人、路标以及周围的房屋和树木等,极具挑战性和多样性。

KITTI Stereo数据集中包含KITTI 2012和KITTI2015两个子数据集。KITTI2012数据集中包含194对具有稀疏真实视差图的立体图像作为训练集,195对没有真实视差图的立体图像作为测试集,图片大小为1240、375,且同时给出了灰度和彩色图像。KITTI2015数据集扩充了车辆玻璃高光反射时的判断以及车辆在运动时拍摄的情况,训练集和测试集都包含200对立体图像,图片大小均为1242、375。其中训练集的真实视差图中只提供了不到50%的稀疏真实视差,测试集没有提供真实视差图。

4、实验过程

实验1:只在Sceneflow数据集上训练

Sceneflow数据集比较大,差不多200G,必须得借助服务器训练。此外FlyingThings3D、Monkaa和Driving不同文件夹的标签分布差异较大,训练起来会比较困难,甚至会出现loss跳跃现象。我在8张RTX3090上联合训练了5天,跑了差不多500个epoch,权重才逐渐收敛。前200个epoch学习率设为1e-4,后面调整至1e-5,采用的是 optim.Adam优化器,batchsize选择4、16、32、64或128都行。


由于Sceneflow数据集标签是稠密视差图,训练起来的效果会好很多。加载Sceneflow数据集预训练得到的模型权重,选取Sceneflow测试集中的双目图像进行测试,计算得到平均视差精度为92.69%,即视差偏差在3像素以内(包括3像素)的像素占所有有效像素的比例。预测视差效果如下图所示,左图代表StereoNet网络预测视差图,右图代表真实视差图。


通常情况下,Sceneflow数据集训练出来的网络权重,可以作为其他数据集的预训练加载权重。

实验2:只在KITTI2012数据集上训练

KITTI2012数据集只有200对双目图像,我划分180对为训练集,20对为测试集。此外KITTI Stereo数据集的视差图为稀疏视差图,只在视差大于0的像素位置提供真值,计算损失时采用L1_smooth回归损失,但仅对y_true大于0的像素部分进行处理,其余像素位置的损失值忽略。如果不加载Sceneflow数据集的预训练权重,其实也能训练出效果。

我在KITTI2012数据集上训练了2000个epoch,前200个epoch学习率为1e-3,后面调整至1e-4,优化器设置为Adam,batch_size设置为4,训练会逐渐收敛,并且可以获得一个还能接受视差预测效果。


计算测试集20对双目图像的计算耗时和视差精度,视差精度表示为视差偏差在3像素以内(包括3像素)的像素占所有有效像素的比例,20对双目图像的平均视差精度为81.85%。

实验3:先在Sceneflow数据集上pretrain,再在KITTI2012数据集上finetune

采用和实验2一样的处理步骤,不过不是从零开始训练,而是加载Sceneflow数据集上的预训练权重,训练效果果然能够提升。此外我尝试了不同学习率下的训练效果,发现在前200轮学习率1e-3,第200轮到第2000轮学习率1e-4,第2000轮后学习率1e-5此时收敛精度最好。而如果采用1e-4+1e-5的设置,训练效果略有欠缺。


加载KITTI Stereo数据集Finetune得到的模型权重,选取测试集中的20对双目图像进行测试,计算得到平均视差精度为86.14%,即视差偏差在3像素以内(包括3像素)的像素占所有有效像素的比例。

实验4:先在Sceneflow数据集上pretrain,再在KITTI2012+2015数据集上finetune

我利用实验3预测出的视差图进行三维重建,重建效果还是不太满意,想进一步提高KITTI数据集的双目重建精度。考虑到KITTI2012数据量还是太少了,于是尝试在实验3的基础上,进一步融合KITTI2012+KITTI2015数据集一起训练。

前200轮学习率1e-3,第200轮到第2000轮学习率1e-4,第2000轮后学习率1e-5,采用Adam优化器,batch_size取4。

加载KITTI Stereo数据集Finetune得到的模型权重,选取测试集中的20对双目图像进行测试,计算得到平均视差精度为90.09%。


利用训练出来的视差图进行三维重建,输入为左目和右目RGB图像:



StereoNet预测得到左目视差图为:


三维重建效果如下:


五、细节与想法

1、Sceneflow数据集的视差标签,直接读取即可,不需做额外处理;KITTI Stereo数据集的视差标签,数值需要额外除以256。
2、StereoNet训练时使用数据增强,不是直接对图像做resize缩放,这样会导致图像形变,源码采用在原图中先随机选定256、512区域,再裁减,这时不光增加了样本多样性,而且也不会导致图像形变,视差数值也不用等比例缩放了。
3、StereoNet是真的学习到了视差匹配,而不是强行拟合数据。网络训练时输入图像对使用的是256、512尺寸,但测试时直接输入的是368、1232,照样能准确输出视差值。
4、StereoNet推理速度比较快,368、1232图像尺寸,单张RTX2070推理时间0.05s,而且模型保存权重很小,大概占5M的空间。
5、不同pytorch版本保存的权重是有差异的,1.6.0版本后的模型无法加载1.6.0版本前保存的权重。

六、源代码

如果需要源代码,或者想直接使用数据集,可以去我的主页寻找项目链接,以上代码和实验结果都由本人亲自实验得到:
https://blog.csdn.net/Twilight737

双目立体匹配_StereoNet网络相关推荐

  1. 双目立体匹配_DispNet网络

    双目立体匹配_DispNet网络 19世纪,物理学家Wheaston偶然发现,如果两眼同时看到两块金属板上反射的稍有不同的蜡烛火焰图像,融合后就会产生实体感,他将这一深度感知现象称为"立体视 ...

  2. 双目立体匹配修炼之路

    文章目录 前言 一.双目立体匹配是什么? 1.双目视觉: 2. 视差: 3."对极约束"概念: 4. 对极几何(Epipolar Geometry) 5. 如何计算得到深度呢? 二 ...

  3. 精华文稿|用于无监督双目立体匹配学习的视差注意力机制

    本文章整理自国防科技大学王龙光博士在深蓝学院的关于双目视觉公开课演讲. -----全文约3000字----- 作者提出了一个基于双目视觉领域的视差注意力机制,并将此机制应用到双目立体匹配和双目超分辨领 ...

  4. 双目立体匹配入门【一】(理论)

    文章目录 参考文章 1 专有名词 2 双目视觉基础 1 针孔摄像机模型 2 双目交会 3 立体测量的基本原理:三角化 4 极线约束 5 极线校正/立体校正 6 立体匹配难点 7 立体匹配方法分类 8 ...

  5. 多视图立体匹配MVSNet网络解析:保姆级教程

    论文题目:MVSNet: Depth Inference for Unstructured Multi-view Stereo, (ECCV2018 Oral) 开源代码(tensorflow.PyT ...

  6. 三维视觉论文阅读:GANet2019双目立体匹配

    论文 GA-Net: Guided Aggregation Net for End-to-end Stereo Matching 摘要 自从大家开始将SGM的思想引入双目立体匹配网络后,越多越多的学者 ...

  7. 双目立体匹配 等 算法 论文 综述 全局局部算法 CSCA NLCA SegmentTree树 DoubleBP Belief-Propagation AD-Census SGM

    双目立体匹配 等 算法 论文 综述 本文GITHUB 博文末尾支持二维码赞赏哦 _ 双目立体视觉技术实质就是模拟人的双眼视觉处理系统来处理通过摄像机采集所 获取的图像,它利用两台或多台摄像机在一定约束 ...

  8. 双目立体匹配经典算法之Semi-Global Matching(SGM)概述:匹配代价计算之互信息(Mutual Information,MI)...

      半全局立体匹配算法Semi-Global Matching,SGM由学者Hirschmüller在2005年所提出1,提出的背景是一方面高效率的局部算法由于所基于的局部窗口视差相同的假设在很多情况 ...

  9. 双目立体匹配——归一化互相关(NCC)

    归一化相关性,normalization cross-correlation,因此简称NCC,下文中笔者将用NCC来代替这冗长的名称. NCC,顾名思义,就是用于归一化待匹配目标之间的相关程度,注意这 ...

最新文章

  1. pyinstaller 打包成exe
  2. 网站优化两大方面谁都不能忽视!
  3. 全网最详细的大数据集群环境下如何正确安装并配置多个不同版本的Cloudera Hue(图文详解)...
  4. 上拉电阻下拉电阻高阻态
  5. CEDD(Color and Edge Directivity Descriptor)学习篇
  6. 乘积的C语言,c语言矩阵相乘
  7. echarts tab切换_Python 数据可视化实战:使用 PyQt5 和 Echarts 打造股票数据看板
  8. JAVA记录-Servlet介绍
  9. Python入门教学之(转义字符与原字符)
  10. HULK祝大家新年快乐
  11. 【django】数据库初始化写入信息
  12. Officescan 常用的端口
  13. Java String 常量池
  14. 基于@Aspect实现AOP的两种方式
  15. JAVA连接FTP实例
  16. hotmail邮箱设置【2018年10月14日】
  17. 【闪电搜索算法】基于闪电搜索算法求解单目标优化问题matlab代码
  18. 越野越激情——“中国东川泥石流国际汽车越野赛”
  19. QT设置背景图片的三种方式
  20. 已解决:H5移动端网页实现录音功能,js实现录音功能,包括安卓webview接口也可以使用

热门文章

  1. 机器学习到深度学习(pytorch)绝对的入门教程
  2. OPPO A3在哪里打开usb调试模式的详细教程
  3. ERP的实施-商务洽谈篇
  4. c++ 空间向量类(Vector3D)的实现
  5. 《降临》作者特德·姜:ChatGPT 是互联网的有损压缩
  6. 【活动预告】ACDU 中国行 · 深圳站精彩抢先看
  7. 1000BASE-T和1000BASE-TX的区别
  8. JupyterHub on K8S私有化部署
  9. 使用Bert进行文本分类(立场检测)
  10. 美团买菜/叮咚买菜/盒马抢菜脚本(全部原创,盗版必究)