让计算机看懂你的行为——视频行为识别算法介绍(二)
目录
1. 计算机视觉综述、图像识别分类的传统方法与深度学习方法
2. 视频行为识别传统方法与深度学习方法
3. C3D系列方法及源码分析
4. CNN+LSTM系列方法及源码分析
5. Two stream系列方法及源码分析
6. 视频行为识别的未来技术演进
2. 视频行为识别传统方法与深度学习方法
2.1 传统方法
2.1.1 一般概念
计算机视觉中人体行为识别从根本上说是个分类问题,传统方法需要特征提取、特征融合与特征分类三个分开的过程来完成。
2.1.1.1 特征提取
在特征提取方面,既要从视频每一帧图像的2维空间上提取特征,又要从视频本身的时间维度上提取特征。传统方法一般依据人体行为的构成方式,分为整体表示方式和局部表示方式。整体表示方式是将视频帧看作一个整体,通过人体定位->背景提取追踪->ROI编码一系列过程,自上而下的提取出全局特征。优点在于编码信息比较丰富,缺点在于过于依赖准确的定位、精确的背景提取追踪,且对摄像机视点、噪声、遮挡极其敏感。局部表示方式是将视频段落作为一个整体,通过时空兴趣点检测->邻域特征点计算->特征整合与表达一系列过程,自下而上的提取特征。优点在于对摄像机视点、噪声、局部遮挡不敏感,不依赖背景提取、追踪算法,缺点在于依赖兴趣点提取的数量和预处理方法,摄像机运动产生的误差也会对兴趣点采集造成影响。
具体来说,整体表示方式包括ROI提取表示、网络切分(Grid-based)表示与时空体积(Space-time volume)表示三种方法。
ROI提取表示用到的方法有背景剪除法、差分法和光流法,轮廓边缘特征包括运动能量图像(Motion Energy Image, MEI)、运动历史图像(Motion History Image, MHI)、形状上下文(Shape Context, SC)等。优点在于算法相对简单,缺点在于背景剪除可能带来很多噪声,导致人体行为特征很难精确描述,即准确率大大受限于人体行为轮廓提取及帧序列中轮廓的跟踪。网络切分表示是指将待识别的人体区域ROI分割成若干时间空间网格,每个网格代表视频帧的一部分特征,网格的组合才代表ROI的整体特征。优点在于减少ROI中存在的噪声,降低了视角变化带来的细微差异,平滑了自身遮挡产生区分度较差的特征空间。时空体积表示是指将给定序列的帧进行堆叠,但是也需要精确的定位、对齐以及背景剪除。
局部表示方式包括时空兴趣点检测、局部网格表示两种方法。
时空兴趣点检测是在时空域内提取出兴趣点,该兴趣点是空域时域均变化显著的邻域点,如3D Harris。有时候多个时空兴趣点的组合也称为局部描述符,描述符已经不再仅仅关注于某些点,而是更上层的关注并描述视频中人体特征的局部,比如3D-HOG(Histogram of Gradien) 《A spatio-temporal descriptor based on 3D-gradients》、3D-SIFT(Scale Invariangt Feature Transform)《A 3-dimensional SIFT descriptor and its application to action recognition》、3D SURF(Speeded-Up Robust Features)《An Efficient Dense and Scale-Invariant Spatio-Temporal Interest Point Detector》。局部网格表示类似于整体网格表示,只不过是将局部的patch放入了网格单元中。
由于所有表示方式中时空兴趣点是传统行为识别中最常用的,下面将列举介绍几种时空兴趣点。
(1). STIP
该特征来源于论文《On space-time interest points》,该特征是时空兴趣点的经典特征。算法如下:首先对视频进行时间和空间上的尺度变换,即通过不同尺度的高斯滤波函数将视频转为线性尺度空间表示,得到了3D Harris的时空域表达形式;其次进行时空尺度自适应调整,通过尺度归一化来去除尺度因子对兴趣点的影响,归一化时空尺度的极大值(拉普拉斯极大值)就是角点函数的极大值,需要类似于EM的算法一面计算能达到极大值的尺度,一面计算在该尺度下重新计算兴趣点的位置,直到位置与尺度收敛;最后,要对这些时空兴趣点将噪声去除,进行分类并用分别向量表示,用马氏距离的k-means进行聚类。
由此可见时空兴趣点本质是通过映射函数把视频这个三维的函数映射到一维空间中,再求此一维空间的局部极大值的点。尺度因子对兴趣点的影响较大,时间尺度因子越大更能检测出动作时间较长的兴趣点,时间尺度因子越小更能检测出动作时间较短的兴趣点,空间尺度越大更能检测出动作幅度较大的兴趣点.作者采用能够表征运动和动作外观信息的局部描述算子,最终组合成34维特征向量。
(2). Cuboid
该特征来源于论文《Behavior Recognition via Sparse Spatio-Temporal Features》,STIP使用的是Harris角点,但是对于动作幅度很小的情形(如面部的表情变化),或是动作幅度有周期性的情形(如车轮旋转)Harris角点很少,这一时空角点所产生的特征过于稀疏无法去描述反映特征。作者提出的Cuboid时空特征点检测器基于时域Gabor滤波器的检测器,能够弥补Harris检测器的不足,检测出很多动作幅度小或是周期性运动的特征。具体算法如下:首先通过特征点检测器检测出兴趣点,再扩展成一个Cuboid(长和宽是检测尺度的6倍),再进行简单变换,特征向量统计处理进行相似度比较。对于Cuboid原型使用k-means进行聚类,对于聚类后的行为描述符可以用卡方距离或SVM来进行分类。
由于没有尺度变换过程,所以该特征不是尺度不变的,简单变换方法作者尝试了3种,分别是归一化像素值、亮度梯度、加窗光流,特征向量统计处理方法作者尝试了3种,分别是直接使用、全局直方图、局部直方图,最后得出结果是求亮度梯度+局部直方图分类误差最小。
(3). MEI+MHI
该特征来源于论文《The recognition of human movement using temporal templates》,作者独特的把行为识别分成了基于人体模型重建的、基于表观模板的和基于运动的三类方法。人体三维结构重建过于复杂,表观模板有的仅仅是二维的剪影、轮廓或边缘,运动模板主要是光流。本文算法是先在T时间内通过帧差法检查像素点运动并二值化成MEI,灰度化成MHI,而后利用马氏距离进行目标匹配过程。
(4). HoG+HoF
该特征来源于论文《Learning realistic human actions from movies》,作者结合了Cuboid的思路和HoG、HoF的特征描述,将视频中多尺度Harris角点特征提取后将兴趣点周围的提及划分成若干个Cuboid,并计算每个Cuboid的HoG和HoF特征,最后将归一化后的方向直方图向量串联构成描述符。
2.1.1.2 特征融合
在特征融合方面,人体的轮廓、边缘、运动特征等方面不具备通用性,只有将其组合起来,才能构建出更好鲁棒性和有效性的特征。在特征提取之后,为了使特征具有较高的区分能力,去掉冗余信息,提高目标识别的计算效率,需要对所提取的特征进行融合,这一过程也称为特征编码,主流的特征编码方式有Bag of Feature和Fisher Vector两种。有些文献中,特征提取后的结果(如纹理、轮廓、角点、边缘、光流)称为低级特征,特征融合后的结果称为中级特征(或中级语义),特征分类后的结果称为高级特征(或高级语义)。
(1). Bag of Feature
Bag of Feature又称为视觉词袋(Bag of Visual, BoV),来源于论文《Beyond Bags of Features: Spatial Pyramid Matching for Recognizing Natural Scene Categories》,概念本身来源于文本分类领域中的词袋模型(Bag of Words),将其中一些研究成果融入图像视频识别当中,之前介绍的特征提取由于都是底层特征,或多或少会受到光照、遮挡、背景等干扰,而融合之后的特征能够提炼出局部关键点不变特征,所以需要进行融合表达。视觉词袋从时空兴趣点生成的特征描述子进行聚类获得,每一个聚类的中心就可以看做是一个视觉单词,由于和文本有所差异,故还需要解决局部特征抽样策略、词典大小、可视化单词的权重计算以及全局词典的构建等问题。
Bag of Feature算法过程如下:首先提取图像视频特征,其次对特征进行聚类得到一部字典(Visual Vocabulary,或Code Book);再次根据字典将图片或视频表示成直方图向量(Visual Word,或Code Vector);最后作为特征分类器的输入对分类器进行训练。最为关键的是第二步,即通过区分度高的特征来寻找聚类中心。
(2). Fisher Vector
Fisher Vector来源于论文《Fisher Kernels on Visual Vocabularies for Image Categorization》,它通过似然函数的梯度向量来表达一幅图像,由于图像的概率密度函数是由图像中所有SIFT描述子的概率密度组成的,且每个描述子本质上是由K个高斯模型加权得到的,故整个图像就是由大量高斯模型生成出来的,对每个高斯模型参数求偏导得到的特征向量可以反映该高斯模型在图像中的分布情况。由于Bag of Feature在融合图像底层特征分布时没有考虑这些特征在图像中的相对或绝对位置,且频率直方图的计算量较大,每加入一个类别需要重新进行训练,所以不具备特征的普遍性和紧凑性。Fisher Vector通过模型化信号的产生过程,通过EM算法训练SIFT描述子得到每个视觉单词(视觉单词和前文Visual Word不同,并不是词汇描述而是K组高斯模型参数)的权重、均值和协方差矩阵,图像表示向量维数比Bag of Feature要高,但开销不大。
2.1.1.3 特征分类
在特征分类方面,有直接分类法、时域状态空间融合模型两种方法。
直接分类法需要对提取出来或编码后的行为特征进行降维处理(如PCA)来减少计算复杂度、去除噪声,再用KNN、SVM等传统分类器进行分类,不同特征之间距离的计算可以通过欧式距离、马氏距离等进行度量。时域状态空间模型主要是利用动态时间规划(Dynamic Time Warping, DTW)或动态时空规划(Dynamic Space-Time Warping, DSTW),对不同尺度的时间维度进行对齐,或利用生成模型(如HMM)判别模型(如CRF、MEMM)进行分类判断。
(1). DTW
动态时间规整(Dynamic Time Warpping,简称DTW)来源于语音识别的方法。和语音信号的随机性类似,视频中的动作行为对于不同的人不同场景下结果是不同的,不可能具有完全相同的时间长度,故在与已存储模板相匹配时,未知的时间轴要不均匀地扭曲或弯折,以使其特征与模板特征对正。DTW本质上是一个优化问题,用满足一定条件的时间规整函数来描述输入模板和参考模板的时间对应关系,进而求解两模板匹配时累计距离最小所对应的规整函数。
如上图所示,两个相同的动作行为时间序列上表征可能有所差异,需要把时间序列进行延伸和缩短来计算两个时间序列性之间的相关性。方法是用代价矩阵来表示归整路径(Warp Path),用动态规划的算法来对距离最短路径进行求解.
2.1.2 传统方法的具体流程
传统方法的具体流程由如下5个过程组成,摄像机预处理->帧间特征提取->帧内特征提取->特征编码->特征分类。
目前,行为识别领域中传统方法效果最好的方法是iDT算法(UCF50数据集上 91.2%,HMDB51数据集上 57.2%),即便当下深度学习的行为识别算法已经超越了iDT,但也会以其作为benchmark与之做比较,并且有些深度学习方法本身也借鉴了iDT算法,通过算法融合实现更优的准确率推断。iDT算法再特征提取上采用了上文中的整体表示方法的时空体积方法,特征融合上采用了Fisher Vector方法,特征分类方面采用了 RBF-SVM 方法,并采用one-versus-rest策略训练多类分类器。下面以iDT算法为例,介绍一下传统方法的处理过程。论文参见《Dense Trajectories and Motion Boundary Descriptors for Action Recognition》和《Action Recognition with Improved Trajectories》。
(1). 摄像机预处理
这个过程的目的在于对摄像机的抖动进行消除,因为摄像机的运动会对光流的计算以及轨迹分布有较大影响,要消除这种干扰就要对摄像机的运动有所估计,从而消除背景区域的光流。由于前提设定为相邻两帧图像变化较小,故摄像机运动估计算法本质上是求解前后帧图像计算投影变换矩阵来实现的,而计算投影变换矩阵需要使用 RANSAC算法 来估计,该算法需要对两幅图像进行匹配,iDT中选择了SURF特征与光流特征作为匹配特征。有了投影变换矩阵,从而可以获得假定摄像机不运动的校正后图像,从而计算出优化过的光流。
但是如果视频中人体所占比例较大,可能也会被误认为运动的背景,导致投影矩阵估计不准确,iDT使用了一个human detector并对检测到的人体用矩形框标注出来,框中的匹配点不进行计算。
(2). 帧间特征提取
首先构建出多尺度空间,在空间中进行密集特征点采样,帧间特征体现的是一个运动的过程,所以需要对这种特征进行跟踪。每个图像都能的到坐标,并可以通过密集光流场与中值滤波器的乘积计算出该特征点下一帧图像的位置,进而得到了该特征点的一段轨迹。再将轨迹正则化后转为一种特征描述子,包括水平和垂直两个方向。
此外对于不重要的特征点需要设置阈值去除,是通过计算特征点的自相关矩阵的特征值(eigenvalue,不是feature)来和阈值进行比较,并合理去除。
iDT选择尺度数为8,特征点采样间隔为5,连续采集帧数为15,轨迹特征描述子维度为30。
(3). 帧内特征提取
帧内主要提取HoG特征、HoF特征与MBH特征,具体描述可见上一节课。这里的帧内更准确的说是特征点周围N*N这个时空体内进行特征提取,空间每个方向分为a份,时间上分为b份,则HoG特征维度为a*a*b*直方图bin数量,HoF特征维度为a*a*b*(直方图bin数量+1),MBH特征是N*b*2。计算后再对三种特征进行L1正则化后再对特征的每个维度开平方。
i一般N为23,a为2,b为3,直方图bin数量为8,故HoG特征、HoF特征与MBH特征维度分别 96、108、192。
(4). 特征编码
iDT中,先进行了一次PCA降维,再进行Fisher Vector编码。PCA的介绍比较多在此不详细展开。Fisher特征即用似然函数的梯度向量来表达。首先各个维度的分布看成独立同分布高斯分布,则图像上的概率分布就是各个特征维度概率分布的乘积,其次对这个乘积(或是取对数后的和)对权重、均值、方差求偏导,再次,用Fisher matrix进行归一化,最后得出融合后的特征数。如果输入特征有d维,用k个高斯分布去拟合,则输出特征有(2*d+1)*k-1维。通常使用机器学习中的EM来求解GMM的各项参数。论文参见《Image Classification with the Fisher Vector: Theory and Practice》。
iDT中,原始维度d=426(30+96+108+192),PCA后降为1/2,输入维度d=213,k=256,输出维度为109311.
(5). 特征分类
使用RBF-SVM进行分类。
one-versus-all即训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,k个类别的样本就构造出了k个SVM。
该算法代码为 http:// lear.inrialpes.fr/peopl e/wang/dense_trajectories
(6). 结论
iDT所选的特征描述子以及它们的组合,结合各种不同光流运算方式在四大数据集中的分类准确率表明,将所有特征描述子都用上,并且去除掉背景轨迹的光流结合方式,最终分类准确率最高。在特征融合上Fisher vector+iDT比BoF\FV+DT\iDT的其他组合都要优异。
2.2 深度学习方法
2.2.1 一般概念
随着图像识别领域深度学习架构模型的不断演进,卷积神经网络(CNN)立刻成了计算机视觉领域分类任务的主流方法,不断提升的层数、不断演进的网络架构以及不断提升的计算性能飞快刷新着准确率记录,ResNet-152已经以3.5%的错误率超越了人类视觉5.1%的错误率。与此同时计算机视觉的应用方向也不断向不同领域内特定场景的分类任务进行延展,在各项视频识别任务中,准确率也逐渐提升。但对于视频识别算法对CNN加以利用仅仅是2维空间的特征提取与分类,在时间方面的特征如何提取并与空间特征进行融合,研究者们提出了不同的思路,根据这些不同的问题解决思路可以清晰的分成了三个流派分支,分别是two-stream(双流)方法,C3D方法(三维卷积核法)以及CNN-LSTM方法(卷积循环神经网络)。
2.2.2 深度学习方法具体流程
深度学习方法的流程由如下6个过程组成,数据载入与数据预处理->网络构建->分类函数与loss定义->优化器定义->训练与验证过程->测试过程。
(1). 数据载入与数据预处理
数据载入包括将数据集划分为training set、validate set与test set,并将数据打乱次序,设置数据并行方式。
由于深度学习是计算资源消耗型的任务,通常需要并行计算,例如单核CPU的SIMD、多核CPU的多线程、多GPU、多主机等各种方式,它们的瓶颈分别是指令集版本、CPU核数于主频、PCIe带宽以及网络开销。并行计算包括数据并行和模型并行,数据并行是指将一个mini batch的数据放在不同设备上进行计算,实现梯度计算的并行化;模型并行是指将一个神经网络的不同部分放在不同设备上进行计算,从而减少每一轮训练迭代的时间,不过对神经网络不同区域间的依赖程度有所要求。其中Caffe/tensorflow/pytorch都支持数据并行,模型并行仅有tensorflow支持。
常规数据预处理目的是归一化、中心化和白化。而视频数据不必进行归一化(像素尺度范围一致),但是中心化比较重要,白化过程的缺陷在于会引入某一维度的噪声。除了常规预处理,还需要对数据集进行扩张。主要方法有翻转(Flip)、颜色变换(Color Jittering)、随机剪裁/缩放/平移(Random Crops/Scale/Shfit)三种手段。其中颜色变换可以改变HSV色彩空间的对比度,或RGB经过PCA之后主分量进行随机因子调整,或对每个RGB像素进行盐噪声/高斯噪声扰动。
(2). 网络构建
网络构建包括网络设计、网络参数初始化及防止过拟合设计
网络设计需要考虑如下几个方面,需要几层卷积层、池化层、正规化层和全连接层,每一个卷积层的卷积核尺寸、步长、个数是多少,每一个池化层的尺寸、步长是多少,池化层是平均池化还是最大池化,是否允许有重叠,在哪些层之后做正则化,全连接层维度是多少,数据在每层之间流转的张量各个维度分别是多少,是否需要网中网,是否需要1x1的卷积核进行降维等等。但对于视频识别来说,主要研究精力在于如何添加时间维度并实现于网络之中,故对于基础卷积神经网络的设计一般会沿用经典图像识别网络设计,如VGG、GoogLeNet和ResNet,网络设计中的参数皆为超参数,不随着训练而发生改变。
网络参数初始化及预训练,可以小随机数初始化,如果要对方差大小进行规范化可以采用 Xavier初始化 或 Kaming初始化 ,也可以将之前的模型训练结果(pre-trained models,或称为模型载入)进行初始化。
防止过拟合设计目的在于增强模型的泛化能力,即需要进行正则化(regularization)和随机失活(dropout)。
(3). 分类函数与loss定义
作为监督学习的主要问题,分类问题与回归问题本质上是统一的,只是前者的结果是离散的类别,后者的结果是连续的拟合曲线,所以分类函数由回归函数来定义,常见的回归函数有一维线性回归、多维线性回归、多项式回归、Logistic回归、Softmax回归。行为识别属于多标签分类,对于多标签来说最常用的就是Softmax回归,原理是处理多分类任务时将可以判定为某类的特征进行相加,然后将特征转化为判定。
Loss是描述模型对问题的分类精度,即分类结果与真实值的偏差,通过不断减小它达到全局最优或局部最优,也是训练过程的目标。常见的loss函数有最小均方误差(MSE)、合页损失函数(hinge loss)和交叉熵函数(cross entropy loss)。对于Softmax回归最常用的Loss即是交叉熵函数,它是真实的概率分布One-hot编码后取对数再乘以预测的概率分布求和取反。
(5).优化器定义
目前主流有7种优化器,SGD(随机梯度下降)、SGD+Momentum(动量)、SGD+Nesterov Momentum(牛顿型动量)、Adagrad(自适应学习率)、Adadelta、RMSProp、Adam。各种优化器的原理及特点不再赘述。一般用Adam来作为默认的优化算法。初始的学习率一般为0.01或0.001,在训练过程中学习率的调整可以按照固定次减缓、指数减缓、分数减缓来进行。
(6). 训练与验证过程
该过程就是通过不断迭代,以mini-batch为单位将数据喂给模型,同时计算梯度,更新学习参数,返回本次的accuracy和loss。每隔一段时间在验证集上进行验证用以在训练阶段评测模型预测性能,通常情况下用k-fold方法划分数据,在每一回合(epoch)或每次批处理(mini-batch)训练后在该训练集和验证集上分别作网络前向运算,预测训练集和验证集样本标记(label),绘制学习曲线来检验模型泛化能力。验证集与训练集不必分开,但测试集需要完全分开。
在每个回合训练前可以将数据集随机打乱来确保不同回合喂给模型的数据是不同的。此外每个一段时间存储一下模型参数,避免程序crash掉后从头开始训练。
在这一过程中还可以对模型进行微调(fine-tune),如将以训练好的模型带入网络进行初始化,选择一个较小的学习率,甚至可以不同层设置不同的学习率微调整个网络模型。
(7). 测试过程
该过程就是计算并记录结果,检验最终的模型泛化能力,由于只是前向计算没有训练收敛过程,故对于同一个样本输入,输出结果也应该一致。最后,可通过正负样本、Top-1/5或混淆矩阵多种方式表示准确率。
下一节课将按照这7个过程,对主流的视频行为识别方法做代码级详细讲解。
本节内容归纳如下图所示。