为什么能注意到这篇文章呢,因为它是端到端,同时在loss处可以达到左右一致性检测。就是将post-processing结合到了端到端之中。因此,我很注重它的loss。
一般接触的算法都是supervise的,就是都需要质量比较好的ground truth。
这篇还有个贡献就是不需要ground truth也依旧可以训练。以图像重建loss可以生成disparity。听说结果比supervise的都要好(吹?)
总结一下,该论文的算法结构模仿DispNet。而且非监督,不需要ground truth深度信息,且直接在loss上面包含了left-right consistency(左右一致性矫正)
Depth Estimation as Image Reconstruction
可以将深度预测问题看成回归问题,即将双目相机的左右两图,左图可以回归成右图即可。
我们的loss module output产生左右两个视差图,loss包含了平滑项,重建项,还有左右视差一致性项。每四个输出scale重复这样的module。C:卷积,UC:上采样卷积S:双边采样 US:上采样 SC:Skip 连接。注意哦~我们的每个model包含 上采样的内容,
3.Method
提出基于左右一致性检测的新颖深度训练loss。这样网络不需要监督信息
3.1 Depth Estimation as Image Reconstruction
就是将监督的回归问题,转化成了非监督的重建问题,最小化重建误差。就是左边warp到右边,右边warp到左边。然后求重建误差最小。
3.2 Depth Estimation Network
本文奇特的是只根据一张左图同时产生两个disparity信息(左->右,右->左),使得它们相互一致~
就是一个左图,产生了左视察,然后左视差形成右视差。。
这个就是网络结构,思路来自于DispNet。
代码如下:
def conv(self, x, num_out_layers, kernel_size, stride, activation_fn=tf.nn.elu):
p = np.floor((kernel_size - 1) / 2).astype(np.int32)
p_x = tf.pad(x, [[0, 0], [p, p], [p, p], [0, 0]])
return slim.conv2d(p_x, num_out_layers, kernel_size, stride, 'VALID', activation_fn=activation_fn)
def conv_block(self, x, num_out_layers, kernel_size):
conv1 = self.