Advertisement

自动驾驶TPM技术杂谈 ———— 场景流

阅读量:

文章目录

  • 概述
    • 深度估计算法

    • 基于激光雷达的深度估计算法

      • 激光雷达辅助下的深度估计算法
      • 基于光学图像的方法进行深度估计算法
      • 双目估计算法
        • 单眼估计算法及其应用研究
        • 基于视频序列的单眼估计算法研究
      • 给定左图重建右图的具体方法及其实现细节
    • 光流估计

      • LK算法
      • FlowNet

介绍

场景流(Scene Flow)是一种表征空间中场景三维运动状态的方式。即每个空间点相对于摄像头的位置信息及其移动轨迹。这种三维运动场可以通过光流估计与深度估计相结合的方法进行建模与分析。其中光流定义为空间中每个点在摄像头平面内的二维运动状态而深度信息则表示各点到摄像头的距离及其变化情况。光流与深度变化对应于三维运动场的空间分解特性。通过准确估计光流动态及深度变化特征我们可以全面掌握空间任一点处的三维运动参数及其演变规律。同时这种多维感知技术不仅具有广泛的应用潜力还能够补充和完善视觉测距与SLAM算法的传统方法通常基于刚性或准刚性假设这一限制条件。值得注意的是在这种模型下仅关注_depth的变化量而非其绝对值

深度估计

深度估计旨在通过分析图像中的每一个像素来推导出其相对于测量平面的位置信息。在无人驾驶场景中应用此技术能实现障碍物识别和精确定位。基于这种技术能够提供障碍物与测量点之间的距离数据。该技术不仅支持三维空间重构...还对实时定位...具有重要意义

基于激光雷达的深度估计

一种主要途径是利用激光雷达获取点云数据集

基于光学图像的深度估计

双目深度估计

此方法属于类人感知环境深度的一种实现方式。利用两个固定位置的摄像头获取光学图像后,并通过这两张光学图像计算出深度信息。这可被视为一种立体匹配问题;即寻找左图与右图中的对应点,并利用对应点的视差(即空间中同一点在左图和右图中成像位置的变化量)来确定该点的深度。

在这里插入图片描述

如图所示,在空间中确定一点p到两摄像头主点连线的距离Z。根据图中的几何关系可知,在左摄像头与右摄像头的位置不同情况下(由于左主相机与右主相机位置不同),点p分别在左主相机光轴平面与右主相机光轴平面形成像,在ul与ur点处出现图像差异现象;其中镜头焦距为f(即镜头中心到图像传感器平面的距离),两主相机之间的距离为T=Ol−Or;在图像中存在相似三角形关系△pu_lu_r与△pO_lO_r之间满足比例关系:\frac{Z-f}{Z}=\frac{T-d}{T};由此得到方程:\frac{f}{Z}=\frac{d}{T};解得结果为:Z=\frac{f*T}{d};由此可见,在固定镜头焦距f及两主相机间距T的情况下(即固定镜头参数下),空间某点成像产生的视差d与其至各主相机平面间的距离Z之间呈反比关系;由此可知,在已知左右图像对应的特征点后(即已知对应特征点对后),可以通过计算视差值d进而求得该空间点的深度信息

单目深度估计

单目深度估计装置结构简单便于安装且具有较大的安装灵活性其应用潜力也较大。基于图像内容理解的深度估计方法基于聚焦原理的深度估计方法基于散焦原理的深度估计方法以及基于明暗变化原理的深度估计方法涵盖了目前主流的单目深度估计技术路线。理论上而言单目深度估计的信息量是有限的这是因为图像上一点像素对应于空间中的一条射线仅凭一张图片无法直接确定空间中该点的位置从而限制了其在复杂环境中的定位精度。

在这里插入图片描述

除了直接估算外,在单目深度估计中还经常采用基于重建的方法。这种方法通常会引入与源图像的空间相关性或时间序列的相关性相结合的方式引入另一张图像来进行深度估计。由于这类模型结构较为复杂,在实际应用中往往需要利用空间关系进行重新采样以提高精度。尽管如此但相比于直接估算的效果显著提升而且由于无需真实深度信息这一特点使得数据采集成本大幅降低。目前基于重建的深度估计方法主要包括两种类型:

  1. 基于视频的重建方法能够有效重建视频中前后帧之间的空间关系;
  2. 给定左视图后可实现对右视图的快速重建(在训练阶段通常需要成对的视图数据但在实际应用中只需单张图像即可完成推断过程)。
基于视频的单目深度估计方法

此方法可以分解为两个子问题 —— 预测每一帧的深度图和车辆自身的运动姿态。由此可以推断出,实现的模型可以分为两个子网络。空间坐标系中一点到摄像头坐标系的映射关系为:
Z\begin{bmatrix}x \\ y \\ 1 \end{bmatrix} = KM\begin{bmatrix}X \\ Y \\ Z \\ 1\end{bmatrix}
其中,(X,Y,Z)是空间坐标系中的一点,(x,y)是该店在摄像头坐标系中的坐标,M是摄像头外参,K是摄像头内参。假设t时刻某张图的深度信息,即已知该图上某点坐标(x,y),以及该点对应的深度值Z,则有
M\begin{bmatrix}X \\ Y \\ Z \\ 1\end{bmatrix} = ZK^{-1}\begin{bmatrix}x \\ y \\ z\end{bmatrix}
若已知 t 时刻到 t+1 时刻摄像头的运动状态,则此运动可表示为一转移矩阵T^t = \begin{bmatrix} R^t & T^t \\ 0 & 1 \end{bmatrix},则 t+1 时刻的摄像头外参可表示为M^{t+1} = MT^t,则 t+1 时刻的映射关系可表示为
Z^{t+1}\begin{bmatrix}x^{t+1} \\ y^{t+1} \\ 1\end{bmatrix} = KM^{t+1}\begin{bmatrix}X \\ Y \\ Z \\ 1\end{bmatrix}
= KT^tM\begin{bmatrix}X \\ Y \\ Z \\ 1\end{bmatrix}
= KT^tZK^{-1}\begin{bmatrix}x \\ y \\ 1 \end{bmatrix}
整理可得:
\begin{bmatrix}x^{t+1} \\ y^{t+1} \\ 1\end{bmatrix} = \frac{1}{Z^{t+1}} KT^tZK^{-1}\begin{bmatrix}x \\ y \\ 1 \end{bmatrix}
从上式可知,当知道了 t 帧、t+1帧的深度信息,以及从t 帧到 t+1帧的摄像头自身运动状态,那么就可以找到 t+1帧中的某一点(xt+1, yt+1)在 t帧中的位置(x,y)(需要保证环境相对于世界坐标系静止),进而可以从t 帧的图像中采样得到 t+1帧图像的重构图。
完整过程如图所示。I_t表示t 时刻的输入图像,有深度CNN网络生成深度信息。I_{t-1}I_{t+1} 分别为t-1 和 t+1时刻的图像,分别与I_t经过姿态CNN网络预测出t-1 到 t、t 到 t+1的外参转移矩阵T_{t-1 \rightarrow t }T_{t \rightarrow t+1 }。然后根据上文的公式可以得到I_{t-1}I_{t+1}与、I_t的采样关系,从而得到重构的两张图I_{t-1}^{'}I_{t+1}^{'}

在这里插入图片描述

具体实现流程如图所示,在映射关系下

在这里插入图片描述
给定左图重构右图

此方法训练所使用的数据不再是连续的视频序列而是采用成对的静止图像作为输入。尽管此方法在训练阶段利用了成对图像的数据但在测试阶段仅需提供单幅图像即可完成处理过程当然该方法仍涉及关键的技术环节即重构过程其与前一方案不同之处在于此次重构是基于同一时间不同摄像头拍摄的独立图像无需依赖深度信息的标定参数。具体而言该方法的工作流程如下:

  1. 输入左图(L)右图(R)两幅独立图像;
  2. 通过预设网络结构分别对左图右图进行深度估计得到左视差预测结果L_d(表示左图相对于右图的位置偏移)以及右视差预测结果R_d(表示右图相对于左图的位置偏移);
  3. 基于L图和预测的右视差图R_d进行插值重构得到右图像片的一个重合成像体R^{'}
  4. 同理通过同样的插值方法利用R图以及左视差预测结果L_d生成一个重合成像体L^{'}
  5. 最后分别将原始L R图像与生成的L^{'} R^{'}图像结合以计算最终的深度估计结果。
    值得注意的是由于深度信息与视差之间的固定数学关系在测试阶段我们只需根据获得的视差结果即可推导出深度信息具体而言对于给定的左幅图像L通过预训练网络直接输出一张Left disparity map L_d. 然后根据深度计算公式Z = f*B/d其中Z代表深度信息f为相机焦距d为计算得到的视差距离B为两摄像头之间的基线长度即可求解出待测物体的空间位置信息。

光流估计

光流是指图像中每个像素点所体现的局部运动特性,在成像平面上对三维运动信息进行二维化描述的具体方式则为物体空间中三维速度向量在成像平面上的投影结果。这则表明了图像中各个像素点在其运动过程中的动态变化特征。光流信息可应用于动作识别、目标行为分析以及动目标追踪预测等多个领域相关研究方面

LK算法

LK(Lucas-Kanade)算法是一种稀疏的光流算法。在此之前,需要先说明LK算法的几条假设:
1. 运动物体的灰度值在短时间内保持不变,这是寻找两帧之间对应点的关键所在;
2. 图像随时间变化较慢,也就是可以使用相邻像素点的灰度差异来表征某一点的梯度。这个假设也是光流法中及其重要的假设。
3. 图像的每一个小邻域中光流近似一致。
现在介绍LK算法的流程。首先,假设图像上的一个像素点(x,y),在某时刻的灰度为I(x,y,t),用u和v分别表示该点的光流在水平和垂直方向上的分量。那么
u=\frac{dx}{dt} \quad \quad \quad v=\frac{dy}{dt}
经过一段时间Δt 后,该点在t+Δt 时的对应位置的灰度为I(x+Δx, y+Δy, t+Δt),利用泰勒展开式可得:
I(x+\Delta x, y+\Delta y, t+\Delta t) = I(x, y, z) + \frac{\partial I}{\partial x}\Delta x + \frac{\partial I}{\partial y}\Delta y + \frac{\partial I}{\partial t}\Delta t + H.O.T
其中,H.O.T是指更高阶的量,可忽略。在基于之前的假设,运动物体的灰度值在短时间内保持不变,也就是 I(x+\Delta x, y+\Delta y, t+\Delta t) \approx I(x, y, z),即
\frac{\partial I}{\partial x}\Delta x + \frac{\partial I}{\partial y}\Delta y + \frac{\partial I}{\partial t}\Delta t = 0
当Δt趋近于0时,可得到
-\frac{\partial I}{\partial t}\Delta t =\frac{\partial I}{\partial x}\frac{dx}{dt} + \frac{\partial I}{\partial y}\frac{dy}{dt} = \frac{\partial I}{\partial x}u + \frac{\partial I}{\partial y}v
-I_t = \begin{bmatrix}I_x & I_y\end{bmatrix}\begin{bmatrix}u \\ v\end{bmatrix}
其中,I_t、I_x、I_y分别时灰度相对于时间、横坐标、纵坐标的导数。基于前面的假设,可以用一点在两帧之间的灰度变化来代表I_t,用相对于其临近点的灰度差异代表I_x、I_y。再加上第三个假设,我们可以联立n(为一个邻域内的总点数)个方程如下:
\left\{ \begin{array}{c} I_{1x}u + I_{1y}v = -I_{1t} \\ I_{2x}u + I_{2y}v = -I_{2t} \\ \vdots \\ I_{nx}u + I_{ny}v = -I_{nt} \end{array} \right.
 对于上面的方程组,可用最小二乘法求得最优解:
\begin{bmatrix}-I_{it}\end{bmatrix} = \begin{bmatrix}I_{ix} I_{iy}\end{bmatrix} \begin{bmatrix}u \\ v \end{bmatrix}
\begin{bmatrix}u \\ v \end{bmatrix} = ( {\begin{bmatrix}I_{ix} \quad I_{iy}\end{bmatrix}}^T \begin{bmatrix}I_{ix} \quad I_{iy}\end{bmatrix})^{-1}\begin{bmatrix}I_{ix} \quad I_{iy}\end{bmatrix}\begin{bmatrix}-I_{it}\end{bmatrix}
={\begin{bmatrix} \sum\limits_{i=1}^n I_{ix}^2 & \sum\limits_{i=1}^n I_{ix}I_{iy} \\ \sum\limits_{i=1}^n I_{ix}I_{iy} & \sum\limits_{i=1}^n I_{iy}^2 \end{bmatrix}}^{-1} {\begin{bmatrix} -\sum\limits_{i=1}^n I_{ix}I_t \\ -\sum\limits_{i=1}^n I_{iy}I_t \end{bmatrix}}
此算法只能解决运动较小的情况。对于运动较大的情况,可采用金字塔分层的方式,缩小原图,使得LK算法继续适用。

FlowNet

FlowNet是一种基于深度学习的光流计算方法,如图所示。

在这里插入图片描述

给定两幅具有时空关联性的图像,在卷积神经网络中进行融合处理后能够计算出其间的光流信息。值得注意的是,在研究领域中光流问题与深度估计问题存在相似之处,在它们的核心都在于进行立体匹配任务。无论是哪种方法,在完成基本的立体匹配之后都能够相对容易地推导出相应的深度信息和光流数据。FlowNet算法主要包含两种实现方案:其一是在输入通道数量上进行优化处理,在保证计算效率的同时提升算法性能;其二是通过构建特征图并结合相关性矩阵来实现对光流信息的精确预测。

在这里插入图片描述

细化网络如图所示。其功能是对输出结果执行上采样处理,并生成高分辨率的结果图像。在实现深度监督的过程中,在每一次上采样步骤中(即每一次特征重建过程中),都会由一个卷积层输出该尺寸的结果并完成相应的监督训练工作。在此基础上将处理后的特征映射拼接至更高分辨率的特征图中,并用于较大尺寸的目标预测任务。

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~