来自 CVPR2021 的论文《HITNet: Hierarchical Iterative Tile Refinement Network for Real-time Stereo Matching》。基于 3D 卷积的立体匹配网络的主要局限就是运算速度慢,此前已有较多工作利用多尺度思想来解决,如 19 年的 H3D、AnyNet 等。本文最核心的地方在于将视差表示为小的平面(tile),一方面实现了对真实世界中倾斜视差平面的建模,一方面给 tile 配备了特征使其能够在多尺度的网络中逐级调优。
方法:
首先给出 tile 的描述方式,类似于图片中每个点的特征,每个 tile 也有一个特征描述。这个描述由两部分组成,分别为表达几何信息的平面描述和通过网络学习到的特征描述。如下,
为 tile 的视差,
和
分别为视差的水平梯度和竖直梯度,这三个量可以定义一个视差平面。
所以整个方法的流程就是对 tile 的视差逐级调优,最终获得视差结果。这里根据我的理解,一个 tile 代表的是原图像 4 * 4 的一个窗口。
既然要逐级调优,首先要有一个初始化。每个 tile 初始的视差来自暴力匹配。假设我们现在有了来自于 U-Net 提取的左右图特征,分辨率为 H W。为了保证视差有较高的分辨率(注意区别空间分辨率,视差高分辨意味着有着更多的视差等级),在暴力匹配时采用水平方向重叠的 tile。具体地,对于左图特征,采用步长 4 4 的卷积得到 (H/4) (W/4) 的用于匹配的特征;右图特征则采用 4 1 的卷积得到 (H/4) W 的特征。这样,以左图为参考进行匹配时,在右图中搜寻的待匹配点就更多了,也即所谓的视差有较高分辨率。我们将直接找到 L1 距离最近的两个点作为匹配点,计算水平坐标之差得到视差。_(这也是为什么我认为一个 tile 代表 4 4 的窗口,因为从网络特征到获得初始视差这里采用了步长 4 * 4 的卷积。)_视差梯度的初始化为 0。描述向量的初始化会通过额外的感知机学习得到,这部分的输入包括用于匹配的左图特征和匹配的代价。
接下来就是如何调优更新 tile 的表示,文中的标题起做 “Propagation“。在初始化时,我们知道每个 tile 代表原特征图的一个 4 4 的窗口,根据视差和梯度,我们能够利用 tile 算出这个窗口内每个点的视差,即得到与 U-Net 对应级特征同分辨率的视差。利用这个视差,我们对特征图进行 warp,可以计算 warp 的误差。也就是说,每个 tile 的点会有 16 个 warp 误差,对应 4 4 窗口的每个点。这个误差向量会用于更新 tile 的表示。特别的,这里构建了一个 cost volume,不仅用 tile 的 d 视差 warp,也用 d-1 和 d+1 的视差进行 warp。所以用于更新 tile 表示的全部特征为:
更新就是用网络学习,将输出 h 的残差Δh,和一个额外的置信度 w。如下图。 U 为更新模块网络。这里的
表示尺度(请参照上网络图,即每个空间分辨率)
我们看到有个
。他代表可能的 tile 假设个数。在最低分辨率,只有一个初始化的 tile 假设,在更高分辨率,我们拥有初始化的 tile 和来自前一分辨率上采样的 tile 两个 tile。(这里不清楚来自低分辨的 tile 是否是通过插值的上采样得到的。)两个 tile 将利用预测的置信度进行选择。得到最高分辨率的 tile 之后,我们知道这里每个 tile 表示的是原特征 4 4 的窗口,随后将再次进行 3 次更新,从代表 4 4 的窗口到 2 2 的窗口到 1 1 的窗口,tile 逐渐从对应一个视差平面到对应一个原图像素点,也逐渐实现了视差的细化。
损失函数: 涉及到一个约束初始视差估计的对比损失和一个约束 tile 视差参数的损失(既约束 tile 中的视差,又约束 tile 中的视差梯度,还涉及置信度的约束)。
实验结果:
主要是这个预测的倾斜平面,还是能反映一些信息的。这个图感觉和法线估计的结果图很像,说明预测的 tile 还是很好地拟合了真实的视差平面。
https://zhuanlan.zhihu.com/p/387477049