当前位置:   article > 正文

论文学习笔记——RAM_combining events and frames using recurrent asynch

combining events and frames using recurrent asynchronous multimodal networks

Combining Events and Frames Using Recurrent Asynchronous Multimodal Networks for Monocular Depth Prediction

event camera:

  • 将每像素的亮度变化作为一系列异步“事件”进行报告
  • 高时间分辨率、高动态范围和缺乏运动模糊

本文提出RAM网络实现传统相机和事件相机的单目深度估计。传统相机对静止场景捕捉更加完全(低频完整)、事件相机只编码视觉信号的变化部分(高频稀疏),所以作者设计的Recurrent Asynchronous Multimodal (RAM) network兼顾了两者特性,最终功能得到了连续的、稠密的单目深度图。

RAM:

  • 考虑异步性、事件和帧的无规律性
  • 将多个传感器的时间信息结合起来

在这里插入图片描述

Recurrent Asynchronous Multimodal Networks

在这里插入图片描述
我们希望融合来自N个传感器的数据,这些传感器以稳定增加的时间戳 t j t_j tj提供测量。在每个时间戳 t j t_j tj时,传感器 k j k_j kj ∈ \in {1,2,…,N}提供的测量为 x k j ( t j ) x_{kj}(t_j) xkj(tj),我们因此要将一系列的测量 { x k j ( t j ) } j = 1 T \{x_{kj}(t_j)\}_{j=1}^T {xkj(tj)}j=1T融合起来。

  • 每个时刻每个传感器的测量进行编码:
    s k j s_{k_j} skj= E k j ( x k j , θ k j ) E_{k_j}(x_{k_j},\theta_{k_j}) Ekj(xkj,θkj)
    因为不同传感器提供的测量有不同的形式,因此首先通过对传感器的编码器 E k j E_{k_j} Ekj,将这一系列的测量映射到一系列中间特征 s k j s_{k_j} skj(green)。

其中 θ \theta θ是RAM网络的参数。
本文在编码器的不同scale中提取中间特征。
提取到的中间特征 s k j s_{k_j} skj有以下性质:①从不同传感器提取到的特征可能以任何顺序出现在序列中(异步);②特征之间的时间间隔随时间会发生变化(data rates会变化)。

  • 将j时刻得到的测量与j-1时刻的变量进行融合:
    Σ j = h k j ( Σ j − 1 , s k j , θ ) \Sigma_j=h_{k_j}(\Sigma_{j-1},s_{k_j},\theta) Σj=hkj(Σj1,skj,θ)
    为保证正确融合特征,将传感器 k j k_j kj得到的特征 s k j s_{k_j} skj通过传感器特定状态组合器 h k j h_{k_j} hkj,更新 t j − 1 t_{j-1} tj1时刻的潜在的变量 Σ j − 1 \Sigma_{j-1} Σj1

使用convGRU来将状态结合起来。
在每个传感器的每个scale都有。
更新方程:在这里插入图片描述
f、g : 单个卷积+sigmoid ; ϕ \phi ϕ : 卷积+tanh
从不同传感器中首先映射到合适的空间以便于和 ∑ j \sum_j j进行融合,之后状态组合器被顺序地应用,当某个传感器的测量可得的时候进行改变。
因此可以产生一系列 { Σ j } j = 1 T \{\Sigma_j\}_{j=1}^T {Σj}j=1T

  • 在每个时间点 t j t_j tj时将 Σ j Σ_j Σj通过解码器 Γ \Gamma Γ解码,得到 y j y_j yj
    y j = Γ ( Σ j , θ ) y_j = \Gamma (Σ_j, θ) yj=Γ(Σj,θ)

Network Architecture for Monocular Depth Estimation

  • 在每个scale上,使用skip connection作为中间特征 s k j s_{k_j} skj
  • 通过ConvGRU层将 s k j s_{k_j} skj Σ j − 1 \Sigma_{j-1} Σj1结合得到 Σ j \Sigma_{j} Σj
  • lowest scale的 Σ j \Sigma_{j} Σj直接通过残差块(grey),之后通过3个decoder
  • 注意decoder层的input,因为skip connection
  • 每个encoder包括一个下采样的卷积:kernel size=5, stride=2
  • 残差块由2个卷积层组成:kernel size=3
  • decoder使用双线性插值(bilinear)上采样,之后通过kernel size=5的卷积层
  • 所有层后都跟随ReLU激活函数

Event Generation Model

Event相机包括独立的像素u,这个像素对log brightness signal L(u, t)作出反应。如果和上一个event相比,log brightness的变化超过阈值C,在像素点 u = ( x k , y k ) T u=(x_k, y_k)^T u=(xk,yk)T一个新的event e k = ( x k , y k , t k , p k ) e_k = (x_k, y_k, t_k, p_k) ek=(xk,yk,tk,pk)会被触发。其中 p k ∈ { − 1 , + 1 } p_k \in \{−1, +1\} pk{1,+1}, 具体取值决定于亮度变化的方向。故一个polarity为 p k p_k pk的事件在像素点 u k u_k uk,时间 t k t_k tk被触发    ⟺    \iff Δ L ( u k , t k ) = p k ( L ( u k , t k ) − L ( u k , t k − Δ t k ) ) ≥ C ΔL(u_k, t_k) = p_k (L(u_k, t_k) − L(u_k, t_k − Δt_k)) ≥ C ΔL(uk,tk)=pk(L(uk,tk)L(uk,tkΔtk))C

Event Representation

events被转换为固定大小的tenser。
在时间 Δ T = t N − 1 − t 0 ΔT =t_{N−1} − t_0 ΔT=tN1t0中的输入events ε = { e i } i = 0 N − 1 \varepsilon =\{e_i\}_{i=0}^{N-1} ε={ei}i=0N1 被转换为voxel grid: dimensions:H × W,以及B个temporal bins(给定固定数量的 bin B,原始事件序列被分成 B 个连续的窗口

在这里插入图片描述

实验中设置B=5

Depth Representation

  • 将深度矩阵 D ^ m , k \hat{D}_{m,k} D^m,k转换到归一化的log depth map D ^ k \hat{D}_{k} D^k
  • log depth计算:在这里插入图片描述
    EventScape: α \alpha α=5.7, D m a x D_{max} Dmax=1000 m
    MVSEC: α \alpha α=3.7, D m a x D_{max} Dmax=80 m

Training

  • 全监督
  • 损失函数:结合scale-invariant loss和multi-scale scale-invariant
    gradient matching loss
    (1)scale-invariant loss:
    在这里插入图片描述
    其中n是有有效ground truth的像素点的个数
    (2)multi-scale scale-invariant gradient matching loss:
    在这里插入图片描述
    s表示scale
    (3)对序列长度为L的总损失:
    在这里插入图片描述
    λ \lambda λ=0.25。
  • 输入数据归一化,并随机裁剪为224*224,并进行随机水平翻转
  • voxel grid中的非零条目归一化
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号