论文笔记

it2023-10-10  64

基本情况:

题目:A two-streamed network for estimating fine-scaled depth maps from single rgb images

出处:Li, J., Klein, R., & Yao, A. (2017). A two-streamed network for estimating fine-scaled depth maps from single rgb images. In Proceedings of the IEEE International Conference on Computer Vision (pp. 3372-3380).

摘要

从单个RGB图像估计深度是一个不适且固有的模棱两可的问题。 先进的深度学习方法现在可以估算出准确的2D深度图,但是当将这些图投影到3D时,它们缺乏局部细节,并且通常会高度失真。 我们提出了一种快速训练的双支CNN(two-streamed CN),可预测深度和深度梯度,然后将其融合在一起形成准确而详细的深度图。 我们还在多个图像上定义了一种新颖的集合损失; 与其他竞争方法相比,通过对一组通用图像之间的估计进行正则化,网络不太容易过度拟合,并且可以实现更高的准确性。 在NYU Depth v2数据集上进行的实验表明,我们的深度预测与最新技术具有竞争性,并且可以实现准确可靠的3D投影。

介绍

从单眼RGB图像估计常见室内场景的深度已广泛应用于场景理解,深度感知的图像编辑或重新渲染,3D建模,机器人等方面。给定单个RGB图像作为输入,目标是预测密集的深度图以用于每个像素。推断底层深度是一个不适当地且本质上模棱两可的问题。特别是,室内场景具有较大的纹理和结构变化,重物遮挡和丰富的几何细节,所有这些都导致难以进行准确的深度估计。

卷积神经网络(CNN)的使用大大提高了深度估计技术的准确性[7、8、14、16、17、19、23、29]。先进的网络[7,16]不需要粗略地估计大型结构(例如墙壁和天花板)的深度,而是受益于使用经过预先训练的CNN,并且可以捕获诸如家具和家居装饰品之类的小尺寸物品。

深度估计成功的最高点是能够从估计的深度生成逼真的,准确的3D场景重构。准确可靠的重建应富有局部结构;在从诸如对象识别和深度感知图像的重新渲染和/或编辑之类的重构衍生的应用程序中,细节处理变得尤为重要。尽管最近的工作获得了令人印象深刻的评估评分[7,16],但是估计的深度图仍然遭受较小尺度的伪影,并且表面之间的对齐方式不令人满意。当投影到3D中时,这些变形尤其明显(见图1)。其他基于CNN的端到端应用程序,例如语义分段[4,21]和常规估计[1,7]面临着保存本地细节的类似挑战。

重复的卷积和合并操作对于捕获整个图像范围至关重要,但同时会降低分辨率并降低细节。

虽然已经提出了上卷积和特征图串联策略[6、16、21、22]来提高分辨率,但是输出图边界经常仍然无法与图像边界对齐。这样,诸如双边过滤[2]或CRF [4]之类的优化措施会产生进一步的改进。

出于保留细节的目的,我们开展了深度估计方面的工作。我们想从CNN的准确性中受益,但要避免分辨率和细节的降低。

首先,我们通过引入新颖的集合图像损失来确保网络准确性和泛化能力。这种损失是在多个图像上共同定义的,其中每个图像都是通过标准数据增强技术转换后的原始图像版本。集合损失不仅考虑每个变换图像的输出深度的准确性,还考虑一个正则化项,以最小化集合内的预测差异。添加此正则器可大大提高深度精度,并将RMS误差降低约5%。由于类似的数据增强方法也用在其他端到端框架中,例如对于语义分割和正常估计,我们认为集合损失的好处也将延续到这些应用程序中。我们通过考虑深度梯度中包含的信息来捕获场景细节。我们假设与绝对深度值相比,使用一阶导数项可以更好地编码局部结构。从感觉上说,正是锋利的边缘和角落定义了一个对象并使其可识别,而不是(正确的)深度值(在图4中进行比较)。因此,我们认为最好用深度和深度梯度来表示一个场景,并提出一种快速训练的双流CNN来回归深度和深度梯度(见图2)。此外,我们提出了两种融合深度和深度梯度的方法,一种通过CNN进行端到端训练,另一种通过直接优化。

我们将我们的贡献总结如下:

带有正则化器的新颖集合图像损失,可最大程度地减少相关图像的估计深度差异。这种损失可以更好地利用增强数据并促进更强大的网络泛化,从而提高估计精度。具有深度和深度渐变的2.5D场景的联合表示;这种表示形式捕获了局部结构和精细细节,并通过双支网络进行学习。两种将深度和深度梯度融合为最终深度输出的方法,一种是通过CNN进行端到端训练,另一种是通过直接优化。两种方法都产生深度图,将其投影到3D中时,与竞争的最新技术相比,失真较小,并且在结构和对象细节方面更丰富。

该网络也是注重深度和深度的梯度,将其融合成一个很棒的深度映射。加上一些约束,网络更加不易过拟合,性能更好。

该算法很强调结果细节处理,再注意一下regularizer的实现。

算法框架如下:

3.1网络结构介绍

可见对于梯度并非如常规算法当中仅在loss部分添加一个约束项,而是另开辟一个分支,单独去学习梯度的特征,单独去对它进行上采样,最后梯度与深度信息进行融合。

这两个分支有着同样的形式,一个是图像解析块,接着是特征融合块最后是修正块。

图像解析块是由VGG和两个全连接网络构成。第二个全连接层的输出reshaped成55×75×D的特征块。接着传入特征融合层。

D=1的时候是深度分支,D为2时为梯度分支。其他的预训练网络也可以代替此处的VGG-16,比如说VGG-19和ResNet。(此处的D看似这么方便表示,但是caffe实现的时候必须还得分成两个部分,因为即使是3D卷积也没法满足这样的功能,它需要的是多特征之间乘积相加而做不到完全的独立)

对于特征融合块,是先由一个9×9卷积和池化层,后面接着八个连续的5×5卷积,无池化构成。它的输入有三个:1,图像原图,2,VGG输出,3,图像解析输出。

该层有很多的skip connection,VGG的pool3特征在第二个卷积fused,VGG的pool4的特征在第四个卷积fused,图像解析层的输出在第六个卷积层fused。skip connection 可以共享阶段性的信息,可以发现这个网络训练起来更加容易收敛。(以前总是在反卷积上采样的时候可能想结合着之前特征层的特征,而该文在特征融合块的时候就已经开始结合了之前层的多种特征了。不知道效果如何~网络设计挺有新意~)

修正块,与特征融合块是类似的,由一个9×9卷积池化和五个5×5不带池化的卷积层构成。输入是:1,图像RGB输入。2,特征融合块的双线性上采样输出,3,以及与第三个卷积层的skip connection。这个块的工作映射尺寸大小是111×150.

再后面的深度和梯度混合块将两个不同的分支变成一个单独融合的深度估计。我们提出两种操作可能性,一个是一个端到端网络,还有一个是通过数值优化。

网络结构介绍完毕。

3.2 设置图像损失

就是l2loss,除此之外呢,还有一个约束项,该约束项是

约束的是训练集中的两张整图,因为它认为一张图片会在数据增益的时候进行色彩,对比度等变换,那这些变化之后的理论上跟之前的输出有着对应的关系。这个约束项就是将变化后的输出经过反变化成之前的进行约束。它是整图约束,感觉很慢且代码不好实现。

3.3 深度和深度梯度估计

首先呢,深度梯度的损失函数如上所示,x和y代表着p点的横轴和纵轴的方向

在端到端网络中进行融合

就是loss是深度的loss加上深度梯度的loss。

其次就是基于优化的融合,

直接通过

不知道从代码实现上这个式子与上文的端到端有什么不同

3.4训练策略

除了VGG,其它层都是随机初始化。

两个分支分别独自训练,每个都有两步,首先,图像解析和特征融合块由一个深度和深度梯度的loss来训练。这些层的权重在第二步的优化块训练的时候被固定。

优化的方法训练到此为止,于是就开始根据上文的公式进行求D。而对于端到端网络,则固定前面所有层,混合层进行combine loss的训练。最后几个部分再基于combine loss进行最终的finetune。

网络训练很快,2~3个epoch就收敛了。

4.数据增益

转换和旋转对于训练无益,因此数据增益部分忽视了它们,只用了翻转和色彩变化

最终的训练曲线如下:

可以发现batchsize设置成1比较好,因为它式子中的约束是整张图片的约束,batchsize不设置成1,物理意义都不对了。

而且文中说,该算法用到大量的skipconnection。因此,训练效率挺高。

 

总结:

1.个人感觉它的约束不可取

2.分段训练网络真的挺好,先训练,固定,再训练,再固定,最后finetune。这个挺好~可以尝试~

3.且结构中过多的skipconnection,可以在网络中加更多的skipconnection。

无源码,可惜。

参考:

A Two-Streamed Network for Estimating Fine-Scaled Depth Maps from Single RGB Images

 

最新回复(0)