动作识别一般指从2D序列帧组成的视频中分辨不同动作,并且动作有可能只在一定区间出现.而动作是动态的,因此就需要结合时间域上信息进行识别.但是动作识别存在以下问题:
在深度学习之前使用的传统方法,例如密集轨迹算法[1](improved dense trajectories,简称iDT),深度学习方法网络的发展方向分为时空网络、多流网络、深层生成网络和时间相干网络.深度学习各个方向将在第2节进行分析.
图1 对动作识别的分类分解
使用深度学习方法进行动作识别从2012年AlexNet[2]的出现而流行,在14年时,Karpathy等人[3]实验了多种时间维度上的融合方式,如图2所示,其希望通过预训练的2D卷积从连续帧中获取时序信息.尽管作者做了很多的实验,但发现效果相比之前的手工标注特征的最好效果差很多.这是有多个原因导致的,总结起来主要是作者设计的模型所学习到的时空特征中没有抓取到动作特征;另外数据集缺乏多样性,学习到太多具有干扰因素的细节特征.因此,后面的网络结构倾向于学习时间域上特征.以下分析参考了Herath等人[4]的综述和自身理解.
时空网络的输入时单一流,通过网络结构学习时间域上信息,例如,三维卷积网络(3D convolution ,简称C3D)和循环神经网络(recurrent neural network, 简称RNN).
Tran等人[5],在2015年提出使用3D卷积学习时空域的特征.3D卷积网络的卷积核是多层的 ,因此卷积核可以提取到多帧运动信息.如图3所示,与2D卷积融合成一层特征图不同的是3D卷积的输出仍然为3D的特征图.
图3 2D卷积(左)与3D卷积(右)
通过扩展输入的时间深度以及将网络的决策与输入处不同的时间感知相结合,可以观察到改进.将空间滤波器扩展到三维滤波器虽然是主流,但不可避免地会增加网络参数的数量.Sun等人[6],在2015年提出FstCN网络结构,在改善3D滤波器的下行效应时,建议将3D滤波器分解为2D和1D滤波器的组合,如公式1所示.通过对参数的缩减,他们在训练过程中没有在多个视频数据集之间进行任何知识转移,取得了不错性能.
K = K x , y ⊗ k t , ( 1 ) K=K_{x,y} \otimes k_t ,(1) K=Kx,y⊗kt,(1)
如图4所示,FstCN其核心在2D卷积层后,接着时间卷积(图4中间上层)和有助于丰富特征并行空间卷积(图4中间下行).对于时间卷积层需要对尺寸为 R C × T × H × W R^{C \times T \times H \times W} RC×T×H×W的3D特征图进行转换,利用2D卷积核 K x , y ∈ R n x × n y K_{x,y} \in R^{n_x \times n_y} Kx,y∈Rnx×ny完成对时间维度的卷积,这一过程表示为公式2.变换后的特征图尺寸为 R H W × C ′ × T R^{HW \times C^\prime \times T} RHW×C′×T,再利用1D卷积核 k t ∈ R n t k_t\in R^{n_t} kt∈Rnt完成对空间的卷积,这一过程表示为公式3. 最后时间和空间卷积层通过全连接层连接.而如今的深度学习框架都比较成熟,可以直接实现 3D特征中的时间维度卷积.
F s ( : , : , i t ) = V ( : , ; , i t ) ∗ K x , y , i t = 1 , … , m t , ( 2 ) {F}_{s}\left (:,:,i_t\right )={V}\left (:,;,i_t\right )\ast {K}_{{x},{y}},i_t=1,\ldots,m_t,(2) Fs(:,:,it)=V(:,;,it)∗Kx,y,it=1,…,mt,(2)
F s t ( i x , i y , : ) = F s ( i x , i y , : ) ∗ k t , i x = 1 , … , m x , i y = 1 , … , m y , ( 3 ) {F}_{{st}}\left({i}_{{x}}, {i}_{{y}},:\right)={F}_{{s}}\left({i}_{{x}}, {i}_{{y}},:\right) * {k}_{{t}}, {i}_{{x}}=1, \ldots, {m}_{{x}}, {i}_{{y}}=1, \ldots, {m}_{{y}},(3) Fst(ix,iy,:)=Fs(ix,iy,:)∗kt,ix=1,…,mx,iy=1,…,my,(3)
图4 FstCN 网络结构
Donahue等人[7],在2015年提出利用CNN结合长短时记忆神经网络 (long short term memory,简称LSTM)组成的长期循环卷积网络(Long-term Recurrent Convolutional Network,简称LRCN)网络结构进行动作识别,如图5所示.视频的每一帧输入到CNN网络中,然后CNN网络的输出作为LSTM的输入,LSTM的输出作为最终网络的输出.其结合了卷积层和长时递归,同时端对端可训练.
图5 长期循环卷积网络
使用循环神经网络的目的是希望通过递归模块实现长时学习,即学习时间域上信息.RNN模型一个明显限制是其在时间上严格整合状态信息,也就是“梯度消失/爆炸”效应:在实践中,通过一个长时间间隔去反向传播误差信号的能力变得逐渐困难.LSTM单元有隐状态增强和非线性机制,通过利用一个简单的学习过的门限函数,可以不修改、不更新、不复位地对状态进行传播.因此更适合视频动作识别.如图6所示,RNN的隐藏层 h t h_t ht总是被输入到下一层,因此会导致长期依赖,从而在进行长距离预测时将变得非常困难.LSTM的核心是细胞状态,通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力.LSTM 拥有三个门,分别是输入门(Input Gate)、遗忘门(Forget Gate)和输出门(Output Gate)来保护和控制细胞状态.
图6 RNN单元和LSTM单元
对与不同的视频识别任务,例如动作识别、图片描述、视频描述任务来实例不同网络,如图7所示.
图7 动作识别(左)、图片描述(中)、视频描述(右)任务对应的网络结构
使用多流基于Milner等人提出三维双流假说(Two-stream Hypothesis):人类视觉皮层包含两个通路: 1. 腹流 (central stream),主要参与物体识别:2. 背流 (dorsal stream),主要参与空间位置信息处理动作识别.
Simonyan[8]等人,在2014年提出将基于外观的信息与与运动相关的信息分离,用于动作识别.引入了最早的两个并行网络,如图8所示,用于动作识别的多流深度卷积网络之一.所谓的空间流网络(Spatial stream)接受原始静止视频帧,而时间流网络(Temporal stream)接受光流场作为输入. 其分别以RGB和叠加光流帧作为输入的双流网络.空间流和时间流在softmax分数后融合在一起,最后使用SVM进行分类.
图8 双流网络
空间流网络输一帧图像,其结构可以基于图片分类网络,例如AlexNet[1]等,且可以使用ImageNet数据集进行预训练.而对于时间流网络,需要计算光流堆或轨迹堆作为输入,如图9所示.
图9 光流堆(左)和轨迹堆(右)
光流堆中图片中每个位置p有L*2层,代表分为L层x位移和Ly方向位移.如公式4所示,对于光流堆中每一帧 I τ ∈ R w × h × 2 L I_\tau \in R^{w\times h \times \mathbb {2}L} Iτ∈Rw×h×2L,表示为x方向和y方向的2层.
I τ ( u , v , 2 k − 1 ) = d τ + k − 1 x ( p k ) \mathrm{I}_{\mathrm{\tau}}(\mathrm{u}, \mathrm{v}, 2 \mathrm{k}-1)=\mathrm{d}_{\mathrm{\tau}+\mathrm{k}-1}^{\mathrm{x}}\left(\mathrm{p}_{\mathrm{k}}\right) Iτ(u,v,2k−1)=dτ+k−1x(pk)
I τ ( u , v , 2 k ) = d τ + k − 1 y ( p k ) , u = [ 1 ; w ] , v = [ 1 ; h ] , k = [ 1 ; L ] ) , ( 4 ) \mathrm{I}_{\tau}(\mathrm{u}, \mathrm{v}, 2 \mathrm{k})=\mathrm{d}_{\tau+\mathrm{k}-1}^{\mathrm{y}}\left(\mathrm{p}_{\mathrm{k}}\right), \mathrm{u}=[1 ; \mathrm{w}], \mathrm{v}=[1 ; \mathrm{h}], \mathrm{k}=[1 ; \mathrm{L}]), (4) Iτ(u,v,2k)=dτ+k−1y(pk),u=[1;w],v=[1;h],k=[1;L]),(4)
轨迹堆根据公式5所示的轨迹递推表示.
p 1 = ( u , v ) ; p k = p k − 1 + d τ + k − 2 ( p k − 1 ) , k > 1 , ( 5 ) p_{1}=(u, v) ; p_{k}=p_{k-1}+d_{\tau+k-2}\left(p_{k-1}\right), k>1,(5) p1=(u,v);pk=pk−1+dτ+k−2(pk−1),k>1,(5)
由于Simonyan[8]等人提出的网络只在softmax分数后融合,无法学习到时间特征和空间特征的像素间的对应关系.因此Feichtenhofer[9]等人,在2016年提出了将双流网络在卷积层上进行融合,结果表明,在最后一层卷积层后进行融合可以获得最佳的融合精度,如图10所示.有趣的是,在卷积层之后立即进行融合将消除两个流中代价高的完全连接层的需求.与原始的双流网络相比 融合网络仅使用了一半的参数,表现同样出色.
图 10 第4层融合(左)和第8层融合(右)
其最终网络结构如图11所示,时空流网络通过卷积融合学习时域(绿)和空域(蓝)学习对应关系权重,如公式6表示,同时也能学习局部空间纬度和时间纬度权重.融合后的时空流网络和独立的时间流网络都在经过3D pooling后去学习时空流特征以及独立的时间流特征,用来识别输入的视频.
y c a t = cat ( 3 , x t a , x t b ) , y c a t ∈ R H × W × 2 D y c o n v = y c a t ∗ f + b , f ∈ R 1 × 1 × 2 D × D , b ∈ R D , ( 6 ) \begin{array}{c} y^{\mathrm{cat}}=\operatorname{cat}\left(3, x_{t}^{a}, x_{t}^{b}\right), y^{\mathrm{cat}} \in R^{H \times W \times 2 D} \\ y^{\mathrm{conv}}=y^{\mathrm{cat}} * f+b, f \in R^{1 \times 1 \times 2 D \times D}, b \in R^{D} \end{array}, (6) ycat=cat(3,xta,xtb),ycat∈RH×W×2Dyconv=ycat∗f+b,f∈R1×1×2D×D,b∈RD,(6)
图11 融合双流网络总结构
在动作识别的另一个方向视频预测上,希望通过生成网络来学习视频底层分布,预测未来的序列.并且互联网上存在海量视频,对于利用无监督的生成网络来说提供优势.
Srivastava[10]等人,在2015年提出一种复合生成LSTM模型,如图12所示,用于构建生成网络.在编码层输入连续3帧( v 1 , v 2 , v 3 v_1,v_2,v_3 v1,v2,v3),过LSTM的内部状态捕获输入序列的压缩版本,如图12左所示.然后将状态复制到两个解码器模型中,这两个模型具有重构性和预测性.重构解码器将以相反顺序重构原始帧( v 3 ^ , v 2 ^ , v 1 ^ \widehat{v_3},\widehat{v_2},\widehat{v_1} v3 ,v2 ,v1 ),如图12右上所示.预测解码器对未来帧进行预测( v 4 ^ , v 5 ^ , v 6 ^ \widehat{v_4},\widehat{v_5},\widehat{v_6} v4 ,v5 ,v6 ),如图12右下所示.
图12 基于LSTM的深度自动编码器
为了避免深度生成模型训练中的各种困难,Mathieu等人[11]在2015 引入多尺度生成对抗网络(Generative Adversarial Networks,简称GAN).如图13所示,判别模型学习确定样本是来自生成模型还是来自数据本身.在训练过程中,生成模型学习生成与原始数据有更多相似之处的样本,而判别模型提高了对给定样本是否真实的判断.并且训练多尺度卷积网络进行视频预测.利用对抗性训练建立卷积网络,避免了汇聚层.他们还讨论了生成模型中池化的优点.
图13 多尺度GAN结构
将对尺寸为s_k的输入图片进行的上采样操作记为KaTeX parse error: Expected group after '_' at position 2: u_̲,整个网络可以采用下面的递推公式7进行表示. G k ′ G_k^\prime Gk′ 的预测目标为 Y k ^ − u k Y k − 1 ^ \widehat{Y_k}-u_k\widehat{Y_{k-1}} Yk −ukYk−1 , 即利用输入的两帧图片,以及一张对于 Y k Y_k Yk的粗略预测图片来预测一个关于目标的偏移量.
Y k ^ = G k ( X ) = u k ( Y k − 1 ^ ) + G k ′ ( X k , u k ( Y k − 1 ^ ) ) , ( 7 ) \widehat{Y_{k}}=G_{k}(X)=u_{k}(\widehat{Y_{k-1}})+G_{k}^{\prime}\left(X_{k}, u_{k}(\widehat{Y_{k-1}})\right), (7) Yk =Gk(X)=uk(Yk−1 )+Gk′(Xk,uk(Yk−1 )),(7)
训练判别网络时固定生成网络的权重,采用SGD对判别网络权重进行更新,如公式8所示.
L a d v D ( X , Y ) = ∑ k = 1 N s c a l e s L b c e ( D k ( X k , Y k ) , 1 ) + L b c e ( D k ( X k , G k ( X ) ) , 0 ) , ( 8 ) \mathrm{L}_{\mathrm{adv}}^{\mathrm{D}}(\mathrm{X}, \mathrm{Y})=\sum_{\mathrm{k}=1}^{\mathrm{N}_{\mathrm{scales}}} \mathrm{L}_{\mathrm{bce}}\left(\mathrm{D}_{\mathrm{k}}\left(\mathrm{X}_{\mathrm{k}}, \mathrm{Y}_{\mathrm{k}}\right), 1\right)+\mathrm{L}_{\mathrm{bce}}\left(\mathrm{D}_{\mathrm{k}}\left(\mathrm{X}_{\mathrm{k}}, \mathrm{G}_{\mathrm{k}}(\mathrm{X})\right), 0\right), (8) LadvD(X,Y)=k=1∑NscalesLbce(Dk(Xk,Yk),1)+Lbce(Dk(Xk,Gk(X)),0),(8)
对于每个尺度的输入,判别网络应该将包含生成的帧的视频序列预测为0,将真实的原始视频序列预测为1,其中L_{bce}为二进制交叉熵损失函数,如公式9所示
L b c e ( Y , Y ^ ) = − ∑ i Y 1 log ( Y 1 ) ^ + ( 1 − Y ^ 1 ) log ( 1 − Y i ) , ( 9 ) \mathrm{L}_{\mathrm{bce}}(\mathrm{Y}, \widehat{\mathrm{Y}})=-\sum_{\mathrm{i}} \mathrm{Y}_{1} \widehat{\log \left(\mathrm{Y}_{1}\right)}+\left(1-\widehat{\mathrm{Y}}_{1}\right) \log \left(1-\mathrm{Y}_{\mathrm{i}}\right), (9) Lbce(Y,Y )=−i∑Y1log(Y1) +(1−Y 1)log(1−Yi),(9)
训练生产网络时将判别网络的权重固定住,同样采用SGD算法对生成网络中的权重进行更新,如公式10所示.
L a d v G ( X , Y ) = ∑ k = 1 N scalcs L b c e ( D k ( X k , G k ( X k ) ) , 1 ) , ( 10 ) L_{a d v}^{\mathrm{G}}(\mathrm{X}, \mathrm{Y})=\sum_{\mathrm{k}=1}^{\mathrm{N}_{\text {scalcs }}} \mathrm{L}_{\mathrm{bce}}\left(\mathrm{D}_{\mathrm{k}}\left(\mathrm{X}_{\mathrm{k}}, \mathrm{G}_{\mathrm{k}}\left(\mathrm{X}_{\mathrm{k}}\right)\right), 1\right), (10) LadvG(X,Y)=k=1∑Nscalcs Lbce(Dk(Xk,Gk(Xk)),1),(10)
时间相干性是弱监督的一种形式, 它表明连续的视频帧在语义和动态上都是相关的.对于动作,空间和时间线索之间存在更强的联系.如果序列的帧按正确的时间顺序排成,则称为相干序列.当模型分别以正样本和负样本的顺序和无序序列作为输入时,利用深层卷积网络可以获得时间相干性.本节概要更倾向于预测图片之间的时间相关性,而不是视频识别动作任务,因为视频本身已经是时间相干的顺序序列帧.
Misra1等人[12],在2016年提出三元孪生网络(Triplet Siamese network)结构,如图14所示.使用元组训练(图14中表示为三帧, f b , f a , f d f_b,f_a,f_d fb,fa,fd),元组中每帧都经过ALexNet稍加改造的CaffeNet,然这每帧的fc7层输出连接到一个线性分类层的输入.分类层可以同时推理出元组中所有帧并预测它们的顺序,即二分类问题.
图14 数据采样(左)和三元孪生网络(右)
如图14所示,在对训练数据进行采样时,为了避免出现变换不大的模糊的帧( f a , f e f_a,f_e fa,fe),提出使用光流来测量帧之间的运动.并将平均流量作为该帧的权重,使用它来偏向于高运动窗口的采样( f b , f c , f d f_b,f_c,f_d fb,fc,fd).根据实验证明,对于确定给定序列是否一致任务,使用元组进行训统与基于ImageNet数据集上其他监督方法相比,有以下优势:
Wang等人[13],在2016年提出使用一个线性系统来描述一类行为高层视觉信息的动态变化,为了更好表示这种转换状态,使用2个参数不共享的VGG网络组成的并行卷积网络.如图15所示,上层将先决状态(precondition state)编码为嵌入潜在表示(embedding latent representation),下层将影响状态也编码为嵌入潜在表示.先决状态描述的是行为动作发生之前的状态,影响状态描述的是行为动作发生之后的状态.
图15 用于转态编码的并行卷积网络
更具体的可以表示为对于输入的一段视频帧 X = { x 1 , x 2 , … , x t } X=\left\{x_1,x_2,\ldots,x_t\right\} X={x1,x2,…,xt}, 首先将其分为先决(precondition) 帧序列 X p = { x 1 , … , x z p } X_p=\left\{x_1,\ldots,x_{z_p}\right\} Xp={x1,…,xzp} 和影响(effect) 帧序列 X p = { x z e , … , x t } X_p=\left\{x_{z_e},\ldots,x_t\right\} Xp={xze,…,xt} ,然后对于两种帧序列,我们分别使用编码函数 f p f_p fp 和 f e f_e fe 对其进行编码, 得到先决状态的嵌入潜在表示 f p ( X p ) f_p\left(X_p\right) fp(Xp) 和影响状态嵌入的潜在表示 f e ( X e ) f_e\left(X_e\right) fe(Xe) ,对于一个线性系统, 使用 T i T_i Ti 来表示, 其中 i i i表示第 i i i类的线性变换系统,其希望能够实现 f e ( X e ) = T i f p ( X p ) f_e\left(X_e\right)=T_if_p\left(X_p\right) fe(Xe)=Tifp(Xp)
[1] Wang H, Kläser A, Schmid C, et al. Action recognition by dense trajectories[C]//CVPR 2011. IEEE, 2011: 3169-3176.
[2] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.
[3] Karpathy A, Toderici G, Shetty S, et al. Large-scale video classification with convolutional neural networks[C]//Proceedings of the IEEE conference on Computer Vision and Pattern Recognition. 2014: 1725-1732.
[4] Herath S, Harandi M, Porikli F. Going deeper into action recognition: A survey[J]. Image and vision computing, 2017, 60: 4-21.
[5] Tran D, Bourdev L, Fergus R, et al. Learning spatiotemporal features with 3d convolutional networks[C]//Proceedings of the IEEE international conference on computer vision. 2015: 4489-4497.
[6] Sun L, Jia K, Yeung D Y, et al. Human action recognition using factorized spatio-temporal convolutional networks[C]//Proceedings of the IEEE international conference on computer vision. 2015: 4597-4605.
[7] Donahue J, Anne Hendricks L, Guadarrama S, et al. Long-term recurrent convolutional networks for visual recognition and description[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 2625-2634.
[8] Simonyan K, Zisserman A. Two-stream convolutional networks for action recognition in videos[C]//Advances in neural information processing systems. 2014: 568-576.
[9] Feichtenhofer C, Pinz A, Zisserman A. Convolutional two-stream network fusion for video action recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 1933-1941.
[10] Srivastava N, Mansimov E, Salakhudinov R. Unsupervised learning of video representations using lstms[C]//International conference on machine learning. 2015: 843-852.
[11] Mathieu M, Couprie C, LeCun Y. Deep multi-scale video prediction beyond mean square error[J]. arXiv preprint arXiv:1511.05440, 2015.
[12] Misra I, Zitnick C L, Hebert M. Shuffle and learn: unsupervised learning using temporal order verification[C]//European Conference on Computer Vision. Springer, Cham, 2016: 527-544.
[13] Wang X, Farhadi A, Gupta A. Actions~ transformations[C]//Proceedings of the IEEE conference on Computer Vision and Pattern Recognition. 2016: 2658-2667.
[注] 参考博文:
基于深度学习的动作识别综述:https://blog.csdn.net/mikasa3/article/details/84981035
视频行为识别检测综述: https://github.com/Ewenwan/MVision/blob/master/CNN/Action_Recognition/readme.md
视频动作识别算法发展进程小结:https://zhuanlan.zhihu.com/p/81089256
【论文阅读】Human Action Recognition…:https://blog.csdn.net/zzmshuai/article/details/84880257
【论文阅读】Actions ~ Transformations:https://blog.csdn.net/zzmshuai/article/details/90765803