截至目前为至,做立体匹配的文章可以在KIITI排行榜上寻找(http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=stereo),较新的深度学习方法包括Disp-Net,GC-Net,PSM-Net,SCV-Net,Stereo-DRNet,GWC-Net,GA-Net,AA-Net,CSPN。
概要
GC-Net
论文题目《End-to-End Learning of Geometry and Context for Deep Stereo Regression》,被2017ICCV收录。
pytorch链接:链接: https://github.com/gpcv-luochong/gc-net
原文链接: GC-Net阅读笔记
优点
GCNet最大的贡献本人认为就是提供一种构建成本积的方式,通过视差范围,逐步平移左右特征图,实现成本积构建。
此部分与后续PSMNet中成本积构建方式相同,详细成本积构建方式可看如下链接: 原文链接
def cost_volume(self,imgl,imgr):
# B是batch_size
B, C, H, W = imgl.size()
# torch.zeros返回一个形状为为size,类型为torch.dtype,里面的每一个值都是0的tensor
# type_as函数将类型转化为imgl的格式
cost_vol = torch.zeros(B, C * 2, self.maxdisp , H, W).type_as(imgl)
# 利用极线约束搜索视差值
# 视差为i时,左图i之前的部分不可能在右图上找到共同点
for i in range(self.maxdisp):
if i > 0:
cost_vol[:, :C, i, :, i:] = imgl[:, :, :, i:]
cost_vol[:, C:, i, :, i:] = imgr[:, :, :, :-i]
else:
cost_vol[:, :C, i, :, :] = imgl
cost_vol[:, C:, i, :, :] = imgr
return cost_vol
为了更好的利用上下文全局信息,应用3D卷积层处理串联得到的代价体(cost volume)。3D卷积是开山之作,但其缺点也较为明显,B×C×H×W的方式来构建3D卷积带来庞大的计算量,后续GANet和AANet已逐步考虑用其他方式来实现。
后续采用soft argmin的方式进行视差计算,中规中矩吧。
PSMNet
PSMNet
如何跑通代码可参考原文链接PSMNet
PSMNet可以说优化的地方在于:
- 引入了金字塔池化模块(SPP)将全局环境信息结合到图像特征
- 提出一个Hourglass来扩展匹配代价卷中的环境信息支持
此篇文章更多的是如何将SPP模块和Hourglass模块融入到GCNet中。
GWCNet
GWCNet中提出的Group-wise correlation volume(分组相关量)的概念,弃用了correlated or concatenated的用法,采用组相关的方式计算代价体。
首先将1/4H×1/4W×Nc的特征图作为输入,将Nc通道的特征图平均分为Ng个组,然后每组内进行左右图的内积计算,此部分相关问题可见解答GWC问题
相较于PSMNet确实丢失了特征金字塔模块,还缺失了很多通道链接, 能够保证现在的精度只能说对于Hourglass的改进可能比在Backbone中的有用点吧,不过在kitt2015中,看出来结果还是可以的。
相关量的计算算是首创,没找到相关理论依据作为支撑,后续再详细看。
补充一点,关于两种代价体的构建方式,可见代价体
GANet
GANet只是跑了测试代码,虽然算是最强baseline了,基本排名靠前的都是魔改。但是原理涉及到传统的SGBM半全局立体匹配算法实在有点晦涩,需要下点功夫啃啃。
小结
先写这么多,陆陆续续写,都是个人小总结,十一开始看双目开始正式接触深度学习,跨专业过来的学渣励志12月投个C会出来。