继上篇对Valeo(法雷奥)公司在深度估计方面的文章的总结,本篇继续对丰田研究院TRI(Toyota Research Institute)的相关成果在做一个综述。对于两家类似的方法本篇不再重复介绍,Valeo相关文章请参见链接:
苹果姐:从鱼眼到环视到多任务王炸——盘点Valeo视觉深度估计经典文章(从FisheyeDistanceNet到OmniDet)(上)
苹果姐:从鱼眼到环视到多任务王炸——盘点Valeo视觉深度估计经典文章(从FisheyeDistanceNet到OmniDet)(下)
一、对分辨率损失问题的早期探索:SuperDepth(2018)
[1] SuperDepth: Self-Supervised, Super-Resolved Monocular Depth Estimation (ICRA 2019)
早在2018,TRI就在研究中指出分辨率是影响深度估计准确率的重要因素,而目前的大多数深度估计网络由于内存和参数量限制等原因,都是在低分辨率图像上运行的,最后再通过最近邻/双线性插值、转置卷积等上采样才做恢复原始分辨率,这势必损失了很多高分辨率的信息。因此作者提出了一种深度超分辨率的亚像素卷积层,从模型的低分辨率输出结果上恢复出高分辨率信息,大大降低了特征损失,提升了最后的深度估计准确率。
在博主Valeo(上)这篇博客中介绍了亚像素卷积的原理,主要通过对特征图多通道像素重新排列的方式(代替上采样和转置卷积)得到高分辨率的结果:
另外,由于这篇文章是利用双目立体图像重构作为自监督信号,左右视图的边界区域会有遮挡和无法匹配的情况,作者采用原图和水平、垂直翻转图像预测结果进行融合的方式,并设计了可微的增强层(Differentiable Flip Augmentation),用pixel-wise的平均操作进行融合,有效减少了由于遮挡而在视差图中生成的左右阴影区域的影响。
二、从网络架构源头上降低分辨率损失:Packnet(2020)
[3] 3D Packing for Self-Supervised Monocular Depth Estimation (CVPR2020)
Superdepth虽然在分辨率恢复的过程中起到了比依赖于差值、转置卷积的上采样更好的效果,但主体网络仍然通过池化下采样运行在较低分辨率上,造成了分辨率的损失。在2020这篇工作中,作者指出下采样造成的信息损失是不必要的。由于处理对象是视频连续帧,所以作者依赖于3D卷积,设计了一种新的Packing-Unpacking结构,代替了传统的encoder-decoder结构,实现了最小化的分辨率损失。
单个Packing-Unpacking 结构示意图如下:
从图中可以看出,Packing结构包括以下操作:原始的H W分辨率连续帧图像通过Space2Depth操作(出自[2])可以无损地转变成H/2 W/2分辨率,且这一步是可逆的,然后经过kernel size为K,数量为D的3D卷积,可以认为得到D帧图像(3D卷积在时间维操作,参照2D卷积核的个数决定输出的channel数量),然后经过reshape,合并到channel维,再经过2D卷积得到Co * H/2 * W/2的维度(忽略batch size),整个过程实现无损2倍下采样。而Unpacking结构可以看做packing的逆过程,同样是使用3D卷积,最后实现无损地2倍上采样。
完整的PackNet结构如下:
作者训练了一个简单的单层Packing-Unpacking结构,发现图像重构的L1损失只有0.0079,而对比的池化-双线性插值基线的损失为0.063,说明Packing-Unpacking很好地保留了输入图像信息。可视化效果如下:
整个训练网络结构如下:
由图可见,PackNet替代了monodepth2[4]的depthnet,损失函数在monodepth2的基础上加入了自车瞬时速度监督的尺度恢复项,类似于Valeo(上)提到的FisheyeDistanceNet[5]:
[4] Digging Into Self-Supervised Monocular Depth Estimation (ICCV 2019)
由于最后可以直接输出原始分辨率的图像,不需要插值操作,本文在发表时期是SOTA地位。作者还证明了packnet在高分辨率可以持续保持较高准确率,而resnet在高分辨率只有有限的提升。
三、新的语义引导方式:PackNet-SG(2020)
[6] Semantically-Guided Representation Learning for Self-Supervised Monocular Depth(ICLR 2020)
与Valeo一样,丰田研究院深度估计的研究路线也是从纯自监督到语义引导,用的方法也和Valeo的SynDistNet[7]相似,使用Pixel-Adaptive Convolutions[8]:
[8] Pixel-Adaptive Convolutional Neural Networks (CVPR 2019)
Pixel-Adaptive Convolutions也在Valeo(上)文章中介绍过,即将普通空间域卷积加入值域信息,让卷积不仅可以学习到空间域信息,也能学到值域信息(f):
这里的值域信息f即语义信息,K代表核函数,在此同样使用高斯核:
与SynDistNet[7]不同的是,这里使用的语义分割网络不是有监督的多任务网络,而是一个固定的预训练网络,文中用的是resnet50,分别在 Imagenet和CityScapes做了预训练,在真正网络训练中只负责提供语义信息,不再进行训练。这样可以省掉语义分割标签的开销。
PackNet-SG还有一个创新点是进行了两阶段的训练。这个的动机是因为KITTI等开源数据集的原始数据中有较多的动态目标,以及照相机静止图像,这些数据都可能在图像重投影中学习到深度空洞(无穷大)的结果,会对语义信息引导的深度估计网络的训练产生不利影响。
所以作者的第一次训练使用全量数据,在推理结果中先计算出地平面的高度,再计算其他像素点的投影高度,找出投影高度显著低于地平面的像素数量(实验给出的阈值是10),然后把这些数据剔除,这样可以剔除约5%的数据量。然后用剩下的数据重新训练(剔除第一次训练的影响)。结果显示两阶段训练的结果对动态目标的深度估计效果更好。损失函数和automask等机制沿用了monodepth2[4]。
四、探索半监督机制:Packnet-SS (2019)
[9] Robust Semi-Supervised Monocular Depth Estimation with Reprojected Distances(CoRL 2019)
由于在大多数公司的自动驾驶研究中,都会配置激光雷达(Lidar),从16、32、64、128线不等,由于激光雷达测距相对准确,只是数据较稀疏,所以可以认为稀疏的groud truth还是可以获取的,于是我们可以利用起来,提高深度估计的精度。而全监督学习需要的真值是比较严格的,一般会加入标注,代价还是比较昂贵。所以作者探索了一种半监督方式,融合了自监督pipeline和稀疏真值的监督方法,使较容易获取的稀疏真值发挥了较强的作用。
本文的自监督pipeline仍然来源于Packnet[3],并在其基础上加入了Supervised Loss,同时去掉了瞬时速度的约束(监督信号已经包含了尺度信息)。现在问题是设计什么样的监督损失。在monodepth2[4]中,作者使用了真值与估计值的L1损失,但TRI设计了更加鲁棒的损失函数:
这个损失函数同时考虑了depth和pose信息,将target图像的深度损失用source图像的投影来表征,而不是直接使用target图像的深度损失。这个损失函数的好处是可以同时监督depthnet和posenet,而且与自监督的loss空间分布保持一致。作者对比了该投影损失函数与L1、BerHu Loss,结果显示随着雷达数据逐渐稀疏,投影损失函数使结果始终保持较好水平,而其他损失函数下降严重。
作者通过进一步的实验证明,本文采取的半监督方法即使在只有4线雷达,每张图片不足100个有效真值点的情况下,仍然可以媲美当时的SOTA水平。
请继续阅读下篇: