本文共 2548 字,大约阅读时间需要 8 分钟。
参考代码:
导读:这篇文章提出一个可以实现多目标视频分割的方法RVOS(Recurrent network for multiple object Video Object Segmentation),这篇文章主要有两点比较有意思的点:1)可以实现没有第一帧标注与finetune过程实现视频分割(也可以使用标注的第一帧结果来进行初始化RNN初始状态);2)有效利用了帧内的空间(spatial)连续相关性与时序(temporal)上的连续性(使用ConvLSTM与类别相关性),去编码对应的分割结果;文章的方法在DAVIS-2017等数据集上表现出了较为不错的成绩,并且速度也是比较快的,在P100 GPU上速度无44ms/F。
在一些VOS的方法中将不同视频帧单独处理,并没有使用视频帧之间的相关性提升性能,一些会使用诸如前一帧预测结果或是预估光流信息来提供一些时序上的信息。而在这篇文章里面是借鉴了RNN(ConvLSTM)的时序特性去编解码视频分割信息,因而就构建了一个多目标的端到端的分割网络(网络RNN部分的计算量会随着目标数目的增加线性增加)。文章提出的方法其总体流程结构见下图1所示:
文章提出的视频分割网络有点类似于UNet的分割模型,是一个编解码结构的网络,根据输入配置的不同划分为zero-shot和one-shot VOS,网络的结构在某一帧单步下的计算结构如图2所示:
文章使用了ResNet-101作为其编码器部分,在编码器中取出每个阶段的特征 f t = { f t , 1 , f t , 2 , … , f t , k } f_t=\{f_{t,1},f_{t,2},\dots,f_{t,k}\} ft={ ft,1,ft,2,…,ft,k},然后根据是否为oneshot添加是否在输入RGB通道的数据上添加额外的分割结果输入。
文章中使用ConvLSTM去充当解码器,整合 t t t时刻帧编码器部分的输出 f t = { f t , 1 , f t , 2 , … , f t , k } f_t=\{f_{t,1},f_{t,2},\dots,f_{t,k}\} ft={ ft,1,ft,2,…,ft,k},得到关于当前帧中不同目标的分割结果 { S t , 1 , S t , 2 , … , S t , N } \{S_{t,1},S_{t,2},\dots,S_{t,N}\} { St,1,St,2,…,St,N}, S t , i S_{t,i} St,i代表的是当前帧分割出来的第 i i i个物体,这部分可以理解为空间上的相互关联性,而时序上的关联性是在同类目标在不同帧之间处理得到的,可以参考图3中的右图。在上面说到目标的类别数 N N N,它是一个固定的数,要是一个物体在视频的某一帧中消失了,那么其在这一帧与后序帧中也将消失。这里对于分割目标的顺序是没有任何强制性要求的,使用的损失函数是软性IoU损失(soft Intersection over Union score)。
因而ConvLSTM的运算过程可以描述为:
h i n p u t = [ B 2 ( h t , i , k − 1 ) ∣ f t , k ′ ∣ S t − 1 , i ] h_{input}=[B_2(h_{t,i,k-1})|f_{t,k}^{'}|S_{t-1,i}] hinput=[B2(ht,i,k−1)∣ft,k′∣St−1,i] h s t a t e = [ h t , i − 1 , k ∣ h t − 1 , i , k ] h_{state}=[h_{t,i-1,k}|h_{t-1,i,k}] hstate=[ht,i−1,k∣ht−1,i,k] h t , i , k = C o n v L S T M k ( h i n p u t , h s t a t e ) h_{t,i,k}=ConvLSTM_k(h_{input},h_{state}) ht,i,k=ConvLSTMk(hinput,hstate) 其中, B 2 B_2 B2代表双线性才上采样, f t , k ′ f_{t,k}^{'} ft,k′是 f t , k f_{t,k} ft,k经过卷积层维度降维之后的特征图。在使用编码器中的特征进行优化的时候,由于初始没有上一个阶段的特征输入(没有了上采样环节),则对应的 h i n p u t h_{input} hinput输入为:
h i n p u t = [ f t , 0 ′ ∣ S t − 1 , i ] h_{input}=[f_{t,0}^{'}|S_{t-1,i}] hinput=[ft,0′∣St−1,i]在上面的式子中由于会使用到 i − 1 i-1 i−1的目标解雇,则第一个目标的 h s t a t e h_{state} hstate被定义为:
h i n p u t = [ Z ∣ h t − 1 , i , k ] h_{input}=[Z|h_{t-1,i,k}] hinput=[Z∣ht−1,i,k] 其中, Z Z Z是零矩阵代表前一个空间中没有目标。是否使用空间与时序信息对性能的影响:
转载地址:http://ugzhj.baihongyu.com/