论文学习笔记——RAM

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中的非零条目归一化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,关于 jQuery 的事件,我可以和你分享一些学习笔记。 1. 绑定事件 在 jQuery 中,我们可以通过以下方式来绑定事件: ``` $(selector).event(function(){ // 事件处理程序 }) ``` 其中,`selector` 表示要绑定事件的元素,`event` 表示要绑定的事件类型,比如 `click`、`mouseover` 等等。事件处理程序则是在事件触发时要执行的代码块。 2. 多个事件绑定 我们可以通过 `on()` 方法来同时绑定多个事件: ``` $(selector).on({ event1: function(){ // 事件处理程序1 }, event2: function(){ // 事件处理程序2 } }) ``` 这样,当 `event1` 或 `event2` 中任意一个事件触发时,对应的处理程序都会被执行。 3. 解除事件 如果需要解除某个元素的事件处理程序,可以使用 `off()` 方法: ``` $(selector).off(event); ``` 其中,`event` 表示要解除的事件类型。如果不指定事件类型,则会解除该元素上所有的事件处理程序。 4. 事件委托 在 jQuery 中,我们可以使用事件委托来提高性能。事件委托是指将事件绑定到父元素上,而不是绑定到子元素上,然后通过事件冒泡来判断是哪个子元素触发了该事件。这样,当子元素数量较多时,只需要绑定一次事件,就可以监听到所有子元素的事件。 ``` $(selector).on(event, childSelector, function(){ // 事件处理程序 }) ``` 其中,`selector` 表示父元素,`event` 表示要绑定的事件类型,`childSelector` 表示要委托的子元素的选择器,事件处理程序则是在子元素触发事件时要执行的代码块。 以上是 jQuery 中事件的一些基本操作,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值