专栏首页贾志刚-OpenCV学堂SGM-Nets:第一个将SGM与深度学习结合的网络

SGM-Nets:第一个将SGM与深度学习结合的网络

1. 简介

本文将对2017年的CVPR会议文章《SGM-Nets: Semi-global matching with neural networks》进行简介,该论文作者为Akihito Seki(东芝公司)、Marc Pollefeys(苏黎世联邦工业大学以及微软公司)。研究针对SGM需要根据影像人工调整惩罚参数的问题,利用深度学习网络自动学习惩罚参数,最后利用Kitti标准数据集进行测试,获得了较好的匹配效果。

2. SGM-Nets

SGM是一种著名的密集匹配方法,SGM简要介绍见(链接至之前写的SGM的文章)。整体研究框架见图1。

图一:整体研究架构。SGM利用SGM-Net所估计的惩罚参数P1和P2进行视差估计。SGM-Net在每一个代价聚集方向上利用图像块与对应位置进行迭代训练。

如图1所示,整体分为两个阶段,即训练阶段与测试阶段,在训练阶段中SGM-Net通过最小化“路径代价”与“邻域代价”迭代训练,以期为每一个像素提供和。在测试阶段中,SGM利用SGM-Net估计的与进行视差估计。网络输入为小影像块以及其位置,输出为3D物体结构的惩罚参数。

2.1 路径代价

图二:代价聚集示意图。

假设像素的真实视差为,那么某一经过该像素的路径代价应当小于任何的其他路径,即, 为便于反向传播,该研究利用hinge损失对其进行表示:

其中,m代表边界。如图2所示,为某一路径下相邻的4个像素,以及每个像素对应的5个候选视差,橙色与紫色的实线分别代表经由像素正确视差与错误视差,聚集代价分别为:

通用表示则为:

其中表示每个像素的累计代价以及减去的最小代价。将该式代入hinge损失,并对路径r和进行偏微分,得:

据上式可进行正向与反向的传播,该损失函数被该研究定义为“路径损失”。

路径代价的计算无需地面真值,故而可较为容易地使用真实环境下获取的数据集,如KITTI。但路径代价没有考虑到中间路径,如图二中红色虚线路径为真实的路径,但其代价与橙色路径的代价一致。仅以路径代价为损失函数进行网络训练与SGM的结果对比图如图3(c)所示,整体而言,以路径代价为损失进行训练后所得到的视差图效果较SGM更优,但在A处存在信息丢失情况。

图三:不同损失函数所得到的结果与SGM的对比图。

2.2 邻域代价

为去除路径代价中中间路径的模糊性,引入“邻域代价”,基本思想为在所有的路径中,穿过连续像素正确视差的路径的代价值必须最小,如图4所示,,以及理应小于其他代价。

图四:连续像素之间的视差关系,(a)为边界关系,(b)为倾斜关系,(c)为平滑关系,红线代表正确视差关系,蓝线表示错误视差关系。

邻域代价的公式表示为:

其中表示:

则表示为一个依赖相邻像素关系的函数,如边界,倾斜以及平坦关系,分别为:

至此,邻域代价可利用类似于路径代价的方式进行微分。应用邻域代价的一个重要前提条件是在像素的视差必须要估计正确,正因如此,邻域代价无法应用至所有像素,当仅仅使用邻域代价进行训练时,A处细节部分可被保留住,但在B处存在错误匹配,如图三(d)所示。

2.3 综合损失函数

为中和路径代价与邻域代价的优势与弊端,该研究提出最终的综合损失函数为:

其中表示混合比例。该研究在每个方向r上随机抽取相同数量的边界像素、倾斜像素和平坦。所有均有真实视差的标签。惩罚参数和的大小与累积成本有关,反之,累积成本也取决于惩罚参数大小。因此,网络将迭代地进行惩罚参数估计,如图一所示。用该综合损失函数的训练结果如图三(e)所示。

2.4 有向参数化

以上2.1,2.2,2.3中所述内容为SGM的标准参数化,该节将介绍对应的有向参数化。图五为有向参数化的基本思想示意图,所谓的有向参数化指和随着视差变化的正向和负向有着不同的数值。

图五:有向参数化示意图。

在有向参数化中,变为:

变为:

邻域代价中的则变为:

边界像素变为:

倾斜像素则变为:

平坦区域的不变。

2.5 SGM-Net 网络架构

如图六所示,网络的输入为5*5大小的灰度图像块以及其归一化的位置,网络含有两个卷积层,每个卷积层分别含有16个3 * 3大小的滤波器,且每个卷积层后带着一个ReLU层,再往后跟着一个级联层,用来进行信息结合,第四层为size为128的全连接层以及ReLU层,第五层为size为128的全连接层以及的ELU层(Exponential Linear Unit),为使SGM的惩罚恒为正数,最后再加上一个常量1。

图六:SGM-Net网络框架。

3. 实验

SGM-Net的训练在 NVIDIA(R) Titan X上利用Torch7进行。在测试SGD和Adam后,发现Adam所达到的误差较小,故而选取了Adam进行优化。网络的初始化是随机的。

在实验过程中,该研究使用SceneFlow中的“Driving”数据集作为合成影像,KITTI 2012和KITTI 2015作为真实影像。SceneFlow数据提供像素级的真实视差,因此,邻域代价可被利用。表一为以不同数据为训练数据时的测试精度比较表,可以看到,对真实影像进行训练有助于提高SGM-Net的精度。

表一:以不同数据为训练数据时的SGM-Net测试精度比较表。

图七为手动调整惩罚参数,标准SGM-Net以及有向SGM-Net的实验结果图,其中黄色箭头代表明显的错误,右上角的数字表示 Out-Noc 误差。

图七:KITTI 2012训练影像,手动调参、标准SGM-Net与有向SGM-Net的实验结果对比图。

表二为在K12训练,K12训练以及在K15训练,K12测试的总体准确率表。

表二:K12训练,K12训练以及在K15训练,K12测试的总体准确率表。

截至2016年的10月18日,该方法名列K12和K15的榜首,如今随着深度学习在立体匹配领域的深入,该方法虽然已经在榜上占不住一席之地,但文章思想仍值得借鉴与学习。

本文分享自微信公众号 - OpenCV学堂(CVSCHOOL)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 教程 | 看完即可搞定各种OpenCV环境搭建与源码编译问题

    我经常被问各种OpenCV开发环境文件,从OpenCV3到OpenCV4,从OpenCV源码编译到扩展模块编译,从SIFT支持到CUDA支持,从OpenCV C...

    OpenCV学堂
  • 我为什么要写《OpenCV Android 开发实战》这本书

    2015年我出版了个人第一本关于图像处理方面的书籍《Java图像处理-编程技巧与应用实践》,这本书主要是从理论与编码上面详细阐述了图像处理基础算法以...

    OpenCV学堂
  • tensorflow object detection API使用之GPU训练实现宠物识别

    之前写过几篇关于tensorflow object detection API使用的相关文章分享,收到不少关注与鼓励,所以决定再写一篇感谢大家肯定与支持。在具体...

    OpenCV学堂
  • RSA2020全球信息安全大会PPT下载

    前言PPT列表人的因素(Human Element):DevSecOps 和应用安全(DevSecOps & Application Security):密码学...

    Ramos
  • canvas中普通动效与粒子动效的实现普通时钟粒子动效粒子时钟总结

    canvas用于在网页上绘制图像、动画,可以将其理解为画布,在这个画布上构建想要的效果。

    用户2356368
  • face++人脸识别与人脸库匹配python实现笔记二

    本文测试了person管理部分,具体的api手册请去官网学习。目标是实现刷脸签到系统。测试功能的源码可以在github上看到https://github.com...

    十四君
  • 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980

    armfly
  • hg 使用命令

    hg ci -m "close branch" -- close-branch //关闭某个分支

    solate
  • 【STM32H7教程】第65章 STM32H7的低功耗串口LPUART基础知识和HAL库API

    本章节为大家讲解LPUART(Low power universal asynchronous receiver transmitter,低功耗通用异步收发器)...

    armfly
  • 宇宙是一个图网络?「全球最聪明的人」刚刚为物理基础理论指出了全新道路

    著名计算机科学、数学、理论物理学家斯蒂芬·沃尔夫勒姆(Stephen Wolfram)可能是世界上最聪明的人,他的研究经常被人们视为「神作」。但当昨天沃尔夫勒姆...

    机器之心

扫码关注云+社区

领取腾讯云代金券