https://arxiv.org/pdf/1912.04250.pdf
1.Abstract
用自监督模型从视频中估计单独的物体运动和深度,物体运动是6自由度刚体变换,运用实例分割mask引入物体信息。与使用光流对运动建模的方法相比,减少了需要估计的量,本系统通过使用预计算的相机自运动和左右光度一致性(left-right photometric consistency)来消除尺度不确定性。
贡献:
(1)估计出固定场景的6D变换,之前方法使用2D/3D光流对运动建模,我们只对单独物体进行运动估计,大大减少了计算量。(2)解决了尺度模糊问题,使用预计算的相机自运动和左右光度差来进行图像合成。使左右光度差记录立体图像对的尺度信息。
2.相关工作
目标运动可以由光流图生成。Yin[55]利用估计的深度和自运动,从固定流上估计出残差流(residual flow)。残差流可以解决小误差,但无法处理大像素移动,如物体运动过快。Luo[20]同时训练深度、自运动、光流、运动分割,并加强每个估计之间的一致性。[25]采用相似结构,采用竞争合作(competitive collaboration)的方法处理。
光流估计还被处理为端到端的深层回归。PWC-Net[28]更是通过融合金字塔处理和cost volume增加效率。此外,光流和场景流被用来解决物体运动。场景流用来描述一个点的3D运动,[31,32,24]通过分段拟合刚体运动来估计场景流,他们把场景分解成小的刚体运动,并加强约束,如[31]中的外观或速度的一致。DRISF[21]通过最小化能量函数生成场景流
我们则将物体运动看做刚体变换,与Vincent[3]方法近似,预计算的实例分割用作单独物体运动估计,改进如下:(1)我们估计了组合的转换,同时封装了相机自运动和物体运动。Vincentr [3]从PoseNet估计的相机自运动来估计单独物体运动。 因此,其准确性取决于PoseNet。 (2)我们估计的是物体的绝对运动,可直接在3D空间变换物体。 相比之下,Vincent 仅预测 up-to-scale运动,这意味着在他们中缺少物体运动的幅度。
3.方法
3.1 图像合成
对于每个在目标图像的像素,需要已知其在相应原始图像中的位置。两者的光度一致性是监督信号。
合成静态区域:
从视频中截取t,t+1 两时刻图像、,相应像素计算如下:
其中代表像素的齐次坐标,为相应系统的自运动(如图2),为中的的3D投影点,表示在p点的深度估计(与深度成比例),指的是中的静态区域
图2:动态物体的合成,先将投影为相应相机坐标下的3D点,然后通过(物体自运动)以及(相机自运动)进行变换,最终投影到上的
合成动态区域:
动态像素由公式(2)计算,这里3D点,由刚体变换进行额外变换,
其中,指的是中动态区域的像素。假如图中有n个运动物体,则为每个物体估计,然后分别有公式【1,2】对静态和动态区域进行合成(不包含复杂的行人的运动)。
3.2 框架
图3:对于图像合成,每个像素被分为静态、动态。动态像素由估计的深度和单独物体运动合成,静态像素由相机自运动和深度合成。相机自运动由【8】的VO库预计算得到,动静态像素基于分割mask区分,由Mask R-CNN【11】提供。
我们通过分割mask分出动静态像素,使用与训练的Mask R-CNN模型,分割mask会突出那些潜在的但不是动态的物体(如,当车辆停在信号灯时)
分割mask会分辨场景中的不同实例,我们在不同时间上对照实例mask,并利用这个mask分割不同时刻图像的同一实例,如图3所示的分割实例,这将作为网络输入预测特定物体的运动、(将不通时刻同一物体喂入网络,进行位姿估计)。
实际的网络估计结果应该为相机自运动和单独物体运动的乘积:
物体运动网络
ObjMotion-net用来估计单独物体运动,由Pose-Net启发,都是以序列作为输出估计6D pose,如【36】中PoseNet证明了能够推断相机自运动,可以进行特征提取和匹配。
ObjMotion-net使用mask后的图像序列作为输入,排除了无用信息。此外,一个控制信号被送入了网络,这个信号包含物体运动的幅度信息,信号表示时刻t,t+1之间第i个物体:
是到的向量。是做平均,是像素p在中的投影点,是图像中的动态区
3.3 损失函数
四部分组成:光度差(photometric loss);左右光度差(left-right photometric loss);控制一致性(control constraint);视差平滑度(disparity smoothness)
光度差惩罚的是合成图像和对应图像的光度一致性。合成图像是在Depth-net和ObjMotion-net结果基础上合成的,因此在两个网络均提供梯度,另外对采用SSIM相似性检测,估计的深度在不同尺度上进行监督来解决梯度局部性。
当我们计算光度差时,我们对合成图像进行动静态区域的区分,除了对整个图像的光度差取均值,还分别对动、静态分别计算均值,通过加和来得到,分别计算光度损失能够弥补动静态图像区域的不平衡。 左右光度损失能够解决尺度模糊。Depth-net的输出实际上是视差(disparity),用来合成左右图,则惩罚合成图像与真实图像之间的光度差。 实验时发现物体的偏移量估计值很小,通过施加控制约束损失解决,是估计的物体运动偏移量和计算的控制信号(F为利用估计深度图生成的两个3D点之间的向量,t为posenet估计的偏移量)之间的L1标准差
视差平滑损失用来平滑视差图,如公式(6)的edge-aware smoothness,这里视差平滑度由指数梯度加权
最终损失函数:
4. 实验
4.1 细节
将图像变到192 × 640大小,输入为连续3帧图像。
对于ObjMotion-net,使用KITTI flow数据集。相机ego-motion没有使用pose-net而是使用Libviso2的VO库。Segmentation mask使用与训练的Mask R-CNN模型,分割出场景中符合刚体运动的物体,如车,公交,货车,分割mask也找到前后时刻同一实例。
网络结构
ObjMotion-net是基于Geonet【35】中的pose-net,如图4.
图4:ObjMotion-net,A部分是分割后的连续三帧图像,按照颜色通道连接。B部分输入是控制信号,A、B部分特征图被展开并连接在一起,然后通过两个全连接层得到物体运动估计。
B部分的控制信号被整合进网络来解决物体运动的模糊,我们采用批归一化(BN)和ReLUs到所有卷积层,在全卷积层不使用BN。
对于Depth-net,采用【35】的主干部分,使用encoder-decoder结果,encoder采用ResNet50,decoder则对特征图使用卷积和上采样,跳跃连接用来结合局部和整体信息。
4.2 训练细节
使用TensorFlow框架,开始单独训练Depth-net,然后整体训练Depth-net 和ObjMotion-net
训练Depth-net
先训练Depth-net,由于准确的control signal(对于ObjMotion-net必要)需要准确的深度估计。首先,Depth-net在KITTI raw数据集上训练,由左右光度一致性和视差平滑度监督,权重设为,在Cityscapes上训练200K次,KITTI上训练100K次。
训练ObjMotion-net 和 Depth-net
除了和,光度一致性用来约束动态变化图像,物体运动通过的控制信号进行约束。
图5:Bird’s View Box 和3D Bounding Box的可视化. 上面的是我们的结果,下面是GeoNet。红色是估计值,蓝色是真实值。