《NeW CRFs:Neural Window Fully-connected CRFs for Monocular Depth Estimation》论文笔记
参考代码:NeWCRFs
1. 概述
介绍:在这篇文章中对单目有监督深度估计算法提出了新的解码单元,该解码单元设计的灵感源自于CRFs(Conditional Random Fields)和Swin-Transformer。首先,在该解码单元中在local-window(文中也将其称之为N*N个patch的组合)中计算CRFs,这样可以显著减少因全局CRFs带来的计算量巨大问题,这是基于深度本身也存在一定的局部信息依赖性,同时也引入shift-window用于关联不同的local-window。然后,借鉴Swin-Transformer中的多头注意力机制,增强特征图pixel之间的关联性,相当于是在多角度去做信息整合。因而文章从高维度特征开始使用这种window CRFs进行特征优化,极大提升了网络的表达能力,自然也带来深度估计结果的提升。这里使用的是NYU、MatterPort3D和KITTI数据集作为benchmark。
总体来看文章提出的深度估计网络是一个U型的编解码网络,其主要的创新点在于对编码器和解码器中特征优化单元的改进,其结构大体见下图:

比较显著的一些idea归纳为:
- 1)使用local-window内计算CRFs替换全局CRFs,极大减少计算量 ,贴合深度局部相似性假设。同时针对local-window划分带来window之间隔离的问题,通过shift-window实现window间信息传递 ;
- 2)借鉴Transformer中的multi-head attention在特征多角度上优化特征图;
对于刚才说到在local-window上做CRFs,其与传统上的全图CRFs进行比较见下图所示:

从现有的benchmark排行榜来看文章的算法排名靠前,说明堆料还是能带来具体场景下性能的提升的,不过这样的提升幅度越来越小了。
2. 方法设计
2.1 网络结构
文章提出的网络结构见下图所示:

可以看到上述的结构就是一个典型的编解码结构,其具体的组件有:
编码器:
这里对于编码器使用的是Swin-Transformer。对于输入的图像输出的最小stride为4,最大stride为32。对于不同stage上输出的特征会将按照方格大小N*N,N=7划分为一个window,则特征图上得到的window数量计算为\frac{H}{Stride*N}*\frac{W}{Stride*N}。
全局特征提取:
这里使用PPM(pyramid pooling module)其参数scale=[1, 2, 3, 6]。
Local-window CRFs:
这里是在multi-head基础上计算CRFs所需的参数。
上采样操作:
对于上采样操作文章中使用的PixelShuffle的形式在channel维度编码spatial信息,从而实现可学习的上采样。
损失函数:
对于深度回归的损失采用的是尺度无关的Log损失,其描述为:
L=\alpha\sqrt{\frac{1}{K}\sum_i\Delta d_i^2-\frac{\lambda}{K}(\sum_i\Delta d_i)^2},\ \ \Delta d_i=log\hat{d_i}-logd_i^{*}
2.2 Neural Window FC-CRFs
对于原本CRFs操作其在i处的计算输出可以描述为:
E(x)=\sum_i\psi_u(x_i)+\sum_{ij}\psi_p(x_i,x_j)
其中,\psi_p(x_i,x_j)=u(x_i,x_j)\cdot f(x_i,x_j)\cdot g(I_i,I_j)\cdot h(p_i,p_j),且I,p分别代表特征图(图片)和位置信息,u(x_i,x_j)在i\neq j的时候取非0。
在文章的任务中处理的是深度信息,其在x_i处的本身响应为(也就是通过CNN网络预测得到的响应结果,\theta_u为可学习参数):
\psi_u(x_i)=\theta_u(I,x_i)
而对于周围特征图像素对于当前像素的影响,描述为特征图\mathcal{F}和位置p的组合:
\psi_{p_i}=\alpha(\mathcal{F}_i,\mathcal{F}_j,p_i,p_j)+\sum_{j\neq i}\beta(\mathcal{F}_i,\mathcal{F}_j,p_i,p_j)x_j
那么对应到文章的实现部分就是使用的attention与位置编码的形式去实现了。
3. 实验结果
KITTI - Eigen Split:

KITTI - Official Split:

NYU:

