【论文学习笔记-7】Bi3D:Stereo Depth Estimation via Binary Classification(CVPR2020)
本文提出了Bi3D,通过一系列二元分类来进行深度估计。与已经存在的方法不同,本方法不是直接检测物体是否存在于一个特定的深度D,而是将物体分类为比D近/比D远。这种方法坚固了准确率和延迟,能够在很快速度(as little as a few milliseconds)的条件下检测比一个给定的距离更近的物体,或通过任意粗量化方法(arbitrarily coarse quantization)进行深度估计,同时只消耗与量化等级线性的复杂度。同时Bi3D也能通过给定的量化等级获得连续的深度。在普通的深度任务上,Bi3D能够达到与SOTA相近或同等的水平。
传统的方法不能只关注一个特定的深度范围,必须要将全图中所有的像素的深度都计算出来。这是因为已有的已有的方法的核心大多是检测一些候选时差值,在一些成本函数下选择最可能的点。这导致:
①这些方法需要把场景中所有物体都进行一个范围的搜索。
②视察的分划不能较粗,不然效果很差。
本文提出了一种平衡深度量化程度和计算预算的方法。不进行对真实深度的回归,而是在给予一个参考平面π后,对每个点进行二分类:在π平面的前面或是后面,π平面可以看作立体相机前的一个“地理围栏”(geo-fence),可用于检测物体是不是在一个安全距离之内。在通过多个这样的平面的分类之后,就可以通过估计像素的深度。通过调整这些平面就可以对深度估计的范围进行控制。
通过右图的图像缩放获得平面D,平面D前和后pixel的movement方向相反(在D和相机中间的方向不变,更远的方向相反)
Bi3D
①可以在段时间内判别一个物体比一个给定的距离更近还是更远,称为二元深度估计。
②如果时间的预算更多,Bi3D可以通过更细致的量化分类来提高精度,同时计算时间线性提升。这成为“量化的深度"(比如一个平面可以将像素分成两类,两个平面分成三类,n个分成n+1类等)
③或者,Bi3D也可以在两平面[π1,π2]间预测连续的深度。同时判断在这个范围之外的物体究竟是离π1更近还是π2更远,称为"选择性的深度估计"。
④最后Bi3D可以像普通方法那样预测部的深度同时达到与SOTA相匹配的效果。
Method
考虑一个立体图片对R和S,可以在每个视差d上建立一个Plane sweep volume(PSV),计算公式为:
其中W是在单应性矩阵H上的单应性变换,
π
d
i
\pi d_i
πdi代表深度为di的平面。
在基于了一个计算匹配成本C的算法后,已有的计算视差的函数为:
其中N代表像素(x,y)的一个领域,C可以通过多种方式计算,但是对于任何视差计算方式都有:
显然视差值在 [ d 0 , d N ] [d_0, d_N] [d0,dN]范围之外的像素仍然会被映射到这个范围内,这是这种视差计算法的一个主要局限,本文展示了解决的方案。
Depth via binary classification
与直接预测视差值不同的,本文观察到视差向量的方向承载着有价值的信息。在通过单应性变化后,视差向量的方向会因与 π d i \pi d_i πdi平面的关系而影响其是否发生变化,如图:
R中下方的视差向量在图像经过单应性变化后发生了改变。
因此本文在此启发下训练一个二元分类器,输入R和PSV图,预测像素在平面的前/后。训练过程为标准二分类,使用交叉熵,分类的输出通过sigmoid映射到[0,1]:
其中o是网络的输出,C代表分类的置信度,当C接近0或1时,代表物体在平面前/后的置信度很高,本文设定C的阈值为0.5,二元分类的效果如图:
本文将其程为“二元深度”,虽然只依靠一个视差进行分类,但是仍然可以提供有价值的信息:一个物体离相机的距离大于/小于一个特定的距离。
之后,可以设定一系列深度平面重复这样的二元分类,然后将结果拼接成一个volume,称为Confidence volume
计算准确视差的公式:
这个公式的好处:
-
对一些错误的置信度值拥有容忍度,一个错误的分类只会让输出值偏移很小(不超过1)
-
输出的视差不一定要是参与分类的视差值,而且可以输出连续的值。
粗量化深度预测
实际应用中,二元分类可能不够用,而全深度预测可能没必要,比如自动驾驶时我可能更希望知道一个物体是否离我足够近,而不是计算他的具体视差(这样往往需要计算所有的视差candidates,有延迟),已有的方法通过softargmax等函数计算亚像素视差。本文通过一个累计分布函数可以判断物体的粗略位置:
故:
这个公式可以让本算法进行粗量化级别的视差预测。
现有算法处理视差范围之外的物体会强制映射到视差范围内,一些方法如GA-Net则在计算视差范围外的物体表现挣扎,而本文提出的方法则可以无缝检测这些物体。
和GA-Net对比的效果图:
自适应的算法
本算法可以根据应用进行自适应,比如在自动导航可以在近处使用更细致精确的深度划分,而远处实行粗分类,效果如图:
网络结构
首先经过一个特征网络(简化版的PSMNet),输出32通道,1/3分辨率,然后将左图特征和变化后的右图特征放入SegNet,这是一个标准的2Dencoder-decoder 网络,包含了skip-connection。其中通过stride=2下采样了5次然后再接上采样的deconv,最后再接双线性插值上采样回复原有的分辨率,然后经过一个三层的轻量级卷积模块(SegRefine),这里同时接受左图作为guidance。
要预测特定量化的深度,或是连续的深度,只需要反复运行Bi3D,对于量化深度,叠加每个平面的Cost,然后最大公式:
实验
训练:交叉熵,SmoothL1loss。