perfectism's blog

物来顺应,未来不迎,当时不杂,既往不恋

0%

动作(行为)识别与分类

动作(行为)识别与分类

闵晨阳 2019年12月

视频理解

img

长期动作和短期动作的区别

图像分类的传统方法

传统方法:特征提取与特征分类两个过程进行的。

image-20191211151744336

特征提取概述

视频本身时间维度上的特征:

每一帧图像二维空间上的特征:根据像素梯度变化,如一阶、二阶导数与几何特征来进行角点、边缘、区域的检测,边缘是图像亮度变化不连续或突变的位置,角点是边缘发生不连续或突变的位置,即边缘曲线的曲率极大值的地方。

  • 角点检测:Harris、Kitchen-Rosenfeld角、Shi-Tomasi和FAST角点检测方法
  • 边缘检测:Sobel、Lapacian、Canny边缘检测方法
  • 局部特征:如SIFT、SURF、STAR、BRISK、BRIEF、ORB、SimpleBlob方法
  • 针对图像内人体的特征提取办法:HoG、HoF、MBH等

(1). Harris角点检测是通过设置好的窗口在图像上进行滑动来计算局部信号的自相关函数的矩阵特征值与迹,获得极值后从而确定角点位置,具有旋转不变性、尺度不变性和光照不变性特征,算法介绍详见 Harris角点,算法实现详见corner.cpp的cv::cornerHarris()函数。

img小窗口在图像中的平移(光滑区、边缘区与角点区)

img

自相关二项函数的椭圆曲线扁率及尺寸,由本征值决定

(2). Kitchen-Rosenfeld角点检测是通过计算边缘曲线曲率和梯度幅度的乘积来获得响应极值(人工设置阈值)从而确定角点位置,算法实现详见corner.cpp的cv::preCornerDetect()函数。

(3). Shi-Tomasi角点检测通过设置好的窗口在图像上进行滑动来计算局部信号的自相关函数的矩阵特征值的大小来判断是否是角点,是对Harris角点算法进行了改进,对非极大值进行了抑制,算法介绍详见Shi_Tomasi角点,在OpenCV中又称GFTT(GoodFeatureToTrack)特征点检测算法,算法实现详见featureselect.cpp的cv::goodFeaturesToTrack()函数。

(4). FAST角点检测通过圆周和圆心的像素点亮度情况,来判断圆心是否为角点,算法介绍详见FAST特征点检测,算法实现详见fast.cpp。

img

FAST角点的圆周检测

边缘检测包括Sobel、Lapacian、Canny边缘检测方法。

(1). Sobel边缘检测,通过高斯平滑滤波和一阶微分求导,对图像灰度函数的近似梯度进行计算,从而判断边缘,算法介绍详见Sobel 边缘检测算子,算法实现详见Deriv.cpp的cv::Sobel函数。

(2). Lapacian边缘检测,通过高斯平滑滤波和二阶微分求导,对图像灰度函数的近似梯度进行计算,从而判断边缘,算法介绍详见拉普拉斯算子

(3). Canny边缘检测是通过对图像进行二维高斯平滑滤波、Sobel算子的梯度检测、求取水平方向与垂直方向梯度的L2/L1范数、非极大值抑制和滞后阈值处理五个过程从而确定边缘位置,算法介绍详见Canny边缘检测,算法详见canny.cpp的cv::Canny()函数。

除了角点和边缘,还可以提取图像的某种局部特征,如SIFT、SURF、STAR、BRISK、BRIEF、ORB、SimpleBlob方法

(1). SIFT即尺度不变特征变换,该算法通过不同尺度空间内的极值检测、特征点定位、梯度方向(梯度的幅值和幅角)确定、描述符生成四个过程,实现了局部特征的提取,该特征具有尺度不变性,且对亮度变化、噪声、视角变化下有一定的稳定性和抗干扰性,算法介绍详见SIFT特征详解,算法实现详见sift.cpp。

img

SIFT中的尺度空间金字塔

imgSIFT中16个Keypoint生成的128维向量

(2). SURF即加速鲁棒性特征,该算法通过Hessian矩阵和LoG方法对特征点进行检测、积分图像的尺度空间建立、特征点定位、梯度方向(梯度的幅值和幅角)确定、描述符生成五个过程,实现了局部特征的提取,该算法与SIFT的过程类似也具有尺度不变性,但计算效率和鲁棒性优于SIFT,算法介绍详见Surf算法特征点检测与匹配,算法实现详见surf.cpp。

imgSURF的主方向

(3). STAR算法通过星型滤波器计算图像中每个像素点的响应值,再对响应值进行非极大抑制与直线抑制(提取边缘判断),从而确定特征点位置,算法详见StarDetector.cpp。

(4). BRISK即二进制鲁棒不变尺度关键点,该算法是通过尺度空间建立、特征点检测、非极大值抑制、特征点信息提取四个过程,比较特征点邻域采样像素之间的灰度值形成二进制字符串,进行汉明距离匹配得到特征描述符,算法介绍详见BRISK特征提取算法,算法实现详见Brisk.cpp。

(5). BRIEF即二进制鲁棒独立元素特征,该算法通过patch区域建立、像素点灰度值比较,从而确定特征点位置,算法介绍详见BRIEF特征点描述算法,算法实现详见Brief.cpp。

(6). ORB即面向FAST和旋转BRIEF特征,该算法通过patch区域建立、强度质心搜索,从而确定特征点位置,该特征点有旋转不变性,算法介绍详见ORB特征,算法实现详见Orb.cpp。

(7). SimpleBlob算法通过灰度图像二值化转换(连续阈值一转多),连同区域提取、斑点分类、斑点位置尺寸确定四个过程,检测斑点类的特征点,算法介绍详见SimpleBlobDetector,算法实现详见BlobDetecot.cpp。

(8). MSER即最大稳定极值区域检测,该算法通过改进的分水岭方法,进而判断图像的斑点区域,算法介绍详见MSER,算法实现详见Mser.cpp。

除了通用的上述特征外,还有针对图像内人体的一些特征的提取方法,如HoG、HoF、MBH等方法。

(1). HoG特征用来表达局部目标外观形状的梯度方向分布密度,或称梯度统计信息,通过将图像分成小的连通区域(细胞单元),并将单元内的各项度点梯度或边缘计算其方向与横轴的夹角,根据圆内划分区域内梯度方向的数量分布构建成直方图,最后组合起来形成特征描述,论文见《Histograms of Oriented Gradients for Human Detection》,算法介绍详见HOG特征检测,算法实现详见HoG.cpp。早期的行人检测算法都是HoG+SVM来实现的。

img基本HoG特征

imgHoG的平均梯度(a)、正负SVM(b、c)、测试图像(d)、矩形HoG描述符(e)、带SVM正负权重的HoG描述符(f、g)

(2). HoF特征类似于HoG特征,只是用光流来代替梯度,即计算光流方向与横轴的夹角,根据圆内划分区域内光流方向的数量分布构建成直方图,最后组合起来形成特征描述。HoF算法介绍详见HOF特征,光流算法介绍详见光流法简单介绍

(3). MBH特征也是通过计算光流获得,但它是将x方向和y方向上光流图像看作为两张灰度图像,然后提取灰度图像的梯度直方图,即再图像的x、y方向光流图像上计算HoG特征。

img相邻两帧(a、b)、光流及边界(c、d)、光流场强度(e、f)、MBH描述符(g、h)

在特征分类上,基本方法是使用kNN或SVM分类器对提取的图片特征进行分类,这两种算法的介绍比较多在此不详细展开。

特征分类:KNN,SVM

特征提取

传统方法一般依据人体行为的构成方式,分为整体表示方式和局部表示方式。

整体表示方式

将视频帧看作一个整体,通过人体定位->背景提取追踪->ROI编码一系列过程,自上而下的提取出全局特征。

优点:编码信息比较丰富

缺点:过于依赖准确的定位、精确的背景提取追踪

对摄像机视点、噪声、遮挡极其敏感

ROI提取表示

用到的方法有背景剪除法、差分法和光流法,轮廓边缘特征包括运动能量图像(Motion Energy Image, MEI)、运动历史图像(Motion History Image, MHI)、形状上下文(Shape Context, SC)等

优点:算法相对简单

缺点:背景剪除可能带来很多噪声,导致人体行为特征很难精确描述,即准确率大大受限于人体行为轮廓提取及帧序列中轮廓的跟踪

时空体积(Space-time volume)表示

将给定序列的帧进行堆叠,但是也需要精确的定位、对齐以及背景剪除。

网络切分(Grid-based)表示

将待识别的人体区域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》。

STIP

《On space-time interest points》

  1. 首先对视频进行时间和空间上的尺度变换,即通过不同尺度的高斯滤波函数将视频转为线性尺度空间表示,得到了3D Harris的时空域表达形式
  2. 进行时空尺度自适应调整,通过尺度归一化来去除尺度因子对兴趣点的影响,归一化时空尺度的极大值(拉普拉斯极大值:拉普拉斯方程解处的函数值)就是角点函数的极大值,需要类似于EM的算法一面计算能达到极大值的尺度,一面计算在该尺度下重新计算兴趣点的位置,直到位置与尺度收敛
  3. 要对这些时空兴趣点将噪声去除,进行分类并用分别向量表示,用马氏距离的k-means进行聚类

时空兴趣点本质是通过映射函数把视频这个三维的函数映射到一维空间中,再求此一维空间的局部极大值的点。尺度因子对兴趣点的影响较大,时间尺度因子越大更能检测出动作时间较长的兴趣点,时间尺度因子越小更能检测出动作时间较短的兴趣点,空间尺度越大更能检测出动作幅度较大的兴趣点,作者采用能够表征运动和动作外观信息的局部描述算子,最终组合成34维特征向量。

Cuboid

《Behavior Recognition via Sparse Spatio-Temporal Features》

STIP的缺点:

使用的是Harris角点,但是对于动作幅度很小的情形(如面部的表情变化),或是动作幅度有周期性的情形(如车轮旋转)Harris角点很少,这一时空角点所产生的特征过于稀疏无法去描述反映特征。

作者提出的Cuboid时空特征点检测器基于时域Gabor滤波器的检测器,能够弥补Harris检测器的不足,检测出很多动作幅度小或是周期性运动的特征。

算法过程:

  1. 通过特征点检测器检测出兴趣点,再扩展成一个Cuboid(长和宽是检测尺度的6倍)
  2. 进行简单变换,特征向量统计处理进行相似度比较
  3. 对于Cuboid原型使用k-means进行聚类,对于聚类后的行为描述符可以用卡方距离或SVM来进行分类

由于没有尺度变换过程,所以该特征不是尺度不变的,简单变换方法作者尝试了3种,分别是归一化像素值、亮度梯度、加窗光流,特征向量统计处理方法作者尝试了3种,分别是直接使用、全局直方图、局部直方图,最后得出结果是求亮度梯度+局部直方图分类误差最小。

MEI+MHI

《The recognition of human movement using temporal templates》

作者独特的把行为识别分成了基于人体模型重建的、基于表观模板的和基于运动的三类方法。

人体三维结构重建过于复杂,表观模板有的仅仅是二维的剪影、轮廓或边缘,运动模板主要是光流。

算法过程:

  1. 先在T时间内通过帧差法检查像素点运动
  2. 二值化成MEI,灰度化成MHI
  3. 利用马氏距离进行目标匹配

帧间差分法是背景提取算法的一种:将视频流中相邻两帧或相隔几帧图像的两幅图像像素值相减,并对相减后的图像进行阈值化来提取图像中的运动区域

HoG+HoF

《Learning realistic human actions from movies》

作者结合了Cuboid的思路和HoG、HoF的特征描述,将视频中多尺度Harris角点特征提取后将兴趣点周围的提及划分成若干个Cuboid,并计算每个Cuboid的HoG和HoF特征,最后将归一化后的方向直方图向量串联构成描述符。

局部网格表示

类似于整体网格表示,只不过是将局部的patch放入了网格单元中

特征融合

在特征融合方面,人体的轮廓、边缘、运动特征等方面不具备通用性,只有将其组合起来,才能构建出更好鲁棒性和有效性的特征。在特征提取之后,为了使特征具有较高的区分能力,去掉冗余信息,提高目标识别的计算效率,需要对所提取的特征进行融合,这一过程也称为特征编码,主流的特征编码方式有Bag of Feature和Fisher Vector两种。有些文献中,特征提取后的结果(如纹理、轮廓、角点、边缘、光流)称为低级特征,特征融合后的结果称为中级特征(或中级语义),特征分类后的结果称为高级特征(或高级语义)

Bag of Feature(词袋),Bag of Visual

《Beyond Bags of Features: Spatial Pyramid Matching for Recognizing Natural Scene Categories》

概念起源于文本分类里的词袋模型(Bag of Words)。特征提取由于都是底层特征,或多或少会受到光照、遮挡、背景等干扰,而融合之后的特征能够提炼出局部关键点不变特征,所以需要进行融合表达。

视觉词袋从时空兴趣点生成的特征描述子进行聚类获得,每一个聚类的中心就可以看做是一个视觉单词,由于和文本有所差异,故还需要解决局部特征抽样策略、词典大小、可视化单词的权重计算以及全局词典的构建等问题。

算法过程:

  1. 提取图像视频特征,其次对特征进行聚类得到一部字典(Visual Vocabulary,或Code Book)

  2. 提取图像视频特征,其次对特征进行聚类得到一部字典(Visual Vocabulary,或Code Book),通过区分度高的特征来寻找聚类中心

  3. 最后作为特征分类器的输入对分类器进行训练

    img

Fisher Vector

《Fisher Kernels on Visual Vocabularies for Image Categorization》

概率与似然性的区别:

概率,用于在已知一些参数的情况下,预测接下来在观测上所得到的结果;似然性,则是用于在已知某些观测所得到的结果时,对有关事物之性质的参数进行估值。——摘自维基百科

Bag of Feature的缺点:

融合图像底层特征分布时没有考虑这些特征在图像中的相对或绝对位置,且频率直方图的计算量较大,每加入一个类别需要重新进行训练,所以不具备特征的普遍性和紧凑性

Fisher Vector通过似然函数的梯度向量来表达一幅图像,由于图像的概率密度函数是由图像中所有SIFT描述子的概率密度组成的,且每个描述子本质上是由K个高斯模型加权得到的,故整个图像就是由大量高斯模型生成出来的,对每个高斯模型参数求偏导得到的特征向量可以反映该高斯模型在图像中的分布情况。

Fisher Vector通过模型化信号的产生过程,通过EM算法训练SIFT描述子得到每个视觉单词(视觉单词和前文Visual Word不同,并不是词汇描述而是K组高斯模型参数)的权重、均值和协方差矩阵,图像表示向量维数比Bag of Feature要高,但开销不大

特征分类

直接分类法

直接分类法需要对提取出来或编码后的行为特征进行降维处理(如PCA)来减少计算复杂度、去除噪声,再用KNN、SVM等传统分类器进行分类,不同特征之间距离的计算可以通过欧式距离、马氏距离等进行度量。

时域状态空间融合模型

利用动态时间规划(Dynamic Time Warping, DTW)或动态时空规划(Dynamic Space-Time Warping, DSTW),对不同尺度的时间维度进行对齐,或利用生成模型(如HMM)判别模型(如CRF、MEMM)进行分类判断。

DTW本质上是一个优化问题,用满足一定条件的时间规整函数来描述输入模板和参考模板的时间对应关系,进而求解两模板匹配时累计距离最小所对应的规整函数。

动态时间规划

来源于语音识别的方法。和语音信号的随机性类似,视频中的动作行为对于不同的人不同场景下结果是不同的,不可能具有完全相同的时间长度,故在与已存储模板相匹配时,未知的时间轴要不均匀地扭曲或弯折,以使其特征与模板特征对正。

img

如上图所示,两个相同的动作行为时间序列上表征可能有所差异,需要把时间序列进行延伸和缩短来计算两个时间序列性之间的相关性。方法是用代价矩阵来表示归整路径(Warp Path),用动态规划的算法来对距离最短路径进行求解.

img

以iDT算法为例看传统方法的出理过程

img

《Dense Trajectories and Motion Boundary Descriptors for Action Recognition》和《Action Recognition with Improved Trajectories》

iDT算法再特征提取上采用了上文中的整体表示方法的时空体积方法,特征融合上采用了Fisher Vector方法,特征分类方面采用了RBF-SVM方法,并采用one-versus-rest策略训练多类分类器

(1). 摄像机预处理

这个过程的目的在于对摄像机的抖动进行消除,因为摄像机的运动会对光流的计算以及轨迹分布有较大影响,要消除这种干扰就要对摄像机的运动有所估计,从而消除背景区域的光流。由于前提设定为相邻两帧图像变化较小,故摄像机运动估计算法本质上是求解前后帧图像计算投影变换矩阵来实现的,而计算投影变换矩阵需要使用RANSAC算法来估计,该算法需要对两幅图像进行匹配,iDT中选择了SURF特征与光流特征作为匹配特征。有了投影变换矩阵,从而可以获得假定摄像机不运动的校正后图像,从而计算出优化过的光流。

但是如果视频中人体所占比例较大,可能也会被误认为运动的背景,导致投影矩阵估计不准确,iDT使用了一个human detector并对检测到的人体用矩形框标注出来,框中的匹配点不进行计算。

img图14 未经过人体矩形框处理的摄像机校正和经过人体矩形框处理后的摄像机校正

(2). 帧间特征提取

首先构建出多尺度空间,在空间中进行密集特征点采样,帧间特征体现的是一个运动的过程,所以需要对这种特征进行跟踪。每个图像都能的到坐标,并可以通过密集光流场与中值滤波器的乘积计算出该特征点下一帧图像的位置,进而得到了该特征点的一段轨迹。再将轨迹正则化后转为一种特征描述子,包括水平和垂直两个方向。

此外对于不重要的特征点需要设置阈值去除,是通过计算特征点的自相关矩阵的特征值(eigenvalue,不是feature)来和阈值进行比较,并合理去除。

iDT选择尺度数为8,特征点采样间隔为5,连续采集帧数为15,轨迹特征描述子维度为30。

(3). 帧内特征提取

帧内主要提取HoG特征、HoF特征与MBH特征,具体描述可见上一节课。这里的帧内更准确的说是特征点周围NN这个时空体内进行特征提取,空间每个方向分为a份,时间上分为b份,则HoG特征维度为aab直方图bin数量,HoF特征维度为aab(直方图bin数量+1),MBH特征是Nb*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个高斯分布去拟合,则输出特征有(2d+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/people/wang/dense_trajectories

(6). 结论

img图15 iDT各特征描述子和不同光流运算方式结合的准确率对比

img图16 iDT不同特征融合方式准确率对比

iDT所选的特征描述子以及它们的组合,结合各种不同光流运算方式在四大数据集中的分类准确率表明,将所有特征描述子都用上,并且去除掉背景轨迹的光流结合方式,最终分类准确率最高。在特征融合上Fisher vector+iDT比BoF\FV+DT\iDT的其他组合都要优异。

图像分类的深度学习方法

深度学习网络本质上就是自动编码器、受限玻尔兹曼机、深度置信网络、卷积神经网络、循环神经网络、对抗生成网络这些网络以及它们的组合、变体或演进网络。

ResNet-152已经以3.5%的错误率超越了人类视觉5.1%的错误率.CNN加以利用仅仅是2维空间的特征提取与分类,在时间方面的特征如何提取并与空间特征进行融合,根据这些不同的问题解决思路可以清晰的分成了三个流派分支,分别是two-stream(双流)方法,C3D方法(三维卷积核法)以及CNN-LSTM方法(卷积循环神经网络)

img

深度学习方法具体流程

img

数据载入和数据预处理

数据载入包括将数据集划分为training set、validate set与test set,并将数据打乱次序,设置数据并行方式。

验证集与训练集不必分开,但测试集需要完全分开

并行计算:单核CPU的SIMD、多核CPU的多线程、多GPU、多主机等各种方式

瓶颈:指令集版本、CPU核数于主频、PCIe带宽以及网络开销

数据并行:将一个mini batch的数据放在不同设备上进行计算,实现梯度计算的并行化

模型并行:将一个神经网络的不同部分放在不同设备上进行计算,从而减少每一轮训练迭代的时间,不过对神经网络不同区域间的依赖程度有所要求

数据预处理:归一化、中心化、白化、数据增强(扩张)

归一化:不必进行归一化(像素尺度范围一致)

中心化:改变数据的分布中心

白化:使每一层的输出规范到0~1,改变数据的分布范围

数据增强:

  • 翻转(Flip)

  • 颜色变换(Color Jittering):可以改变HSV色彩空间的对比度,或RGB经过PCA之后主分量进行随机因子调整,或对每个RGB像素进行盐噪声/高斯噪声扰动

  • 随机剪裁/缩放/平移(Random Crops/Scale/Shfit)

    img

img

img

网络构建

网络设计、网络参数初始化及防止过拟合设计

网络设计:考虑因素:

  • 需要几层卷积层、池化层、正规化层和全连接层
  • 每一个卷积层的卷积核尺寸、步长、个数是多少
  • 每一个池化层的尺寸、步长是多少,池化层是平均池化还是最大池化,是否允许有重叠
  • 在哪些层之后做正则化,全连接层维度是多少
  • 全连接层维度是多少,数据在每层之间流转的张量各个维度分别是多少,是否需要网中网,是否需要1x1的卷积核进行降维等等

对于视频识别来说,主要研究精力在于如何添加时间维度并实现于网络之中,故对于基础卷积神经网络的设计一般会沿用经典图像识别网络设计,如VGG、GoogLeNet和ResNet,网络设计中的参数皆为超参数,不随着训练而发生改变

网络参数初始化及与训练:可以小随机数初始化,如果要对方差大小进行规范化可以采用Xavier初始化Kaming初始化,也可以将之前的模型训练结果(pre-trained models,或称为模型载入)进行初始化

防止过拟合设计:增强模型的泛化能力,即需要进行正则化(regularization)和随机失活(dropout)

分类函数与loss定义

分类函数由回归函数定义,常见的回归函数有一维线性回归、多维线性回归、多项式回归、Logistic回归、Softmax回归。行为识别属于多标签分类,对于多标签来说最常用的就是Softmax回归,原理是处理多分类任务时将可以判定为某类的特征进行相加,然后将特征转化为判定。

Loss:MSE、合页损失函数(hinge loss)和交叉熵函数(cross entropy loss)

对于Softmax回归最常用的Loss即是交叉熵函数,它是真实的概率分布One-hot编码后取对数再乘以预测的概率分布求和取反。

优化器定义

SGD(随机梯度下降)、SGD+Momentum(动量)、SGD+Nesterov Momentum(牛顿型动量)、Adagrad(自适应学习率)、Adadelta、RMSProp、Adam。

一般用Adam来作为默认的优化算法。初始的学习率一般为0.01或0.001,在训练过程中学习率的调整可以按照固定次减缓、指数减缓、分数减缓来进行。

训练与验证过程

通过不断迭代,以mini-batch为单位将数据喂给模型,同时计算梯度,更新学习参数,返回本次的accuracy和loss。

在每个epoch每次批处理(mini-batch)训练后在该训练集和验证集上分别作网络前向运算,预测训练集和验证集样本标记(label),返回本次的accuracy和loss,绘制学习曲线来检验模型泛化能力。

每个epoch训练前将数据集随机打乱来确保不同回合喂给模型的数据是不同的;每隔一段时间存储模型参数,以免crash从头训练

模型微调:可将训练好的模型带入网络进行初始化,选择一个较小的学习率,甚至可以不同层设置不同的学习率微调整个网络模型。

测试阶段

只是前向计算没有训练收敛过程,故对于同一个样本输入,输出结果也应该一致。最后,可通过正负样本、Top-1/5或混淆矩阵多种方式表示准确率。

数据集

动作识别与分类

方法:

人体图像分割

人体骨骼关键点检测

人体姿态估计

纯粹的图像(动作)分类

光流法

动作的识别最终就能转变成特征提取、分类两个主要过程

特征提取包含静态帧的特征,动态帧间的特征

动作识别实现

视频逐帧分析,采用连续的动作识别出人物动作,如走路、跑步、蹲下等。在计算机视觉中人机交互中有很大的应用,主要处理模型大概分为两个大类:卷积神经网络(3D-CNN)、基于循环神经网络与其扩展模型(CNN + LSTM)

要识别出人物的动作通常需要连续的视频数据进行分析处理,需要采集的特征通常有单帧图像数据的特征和多帧图像数据之间时间上的特征,简单来说就是静态帧数据+帧间数据。

a、静态帧数据,表示单帧图像空间信息

b、帧间数据,表示时间信息(光流数据)

常用的数据集有:KTH、Weizmaan、HOHA、Keck Gesture、MSR action、YouTube Action、UT-Interaction等等。

从目标分析的角度上看,动作识别也能看作是分类的问题,每个动作就是一类,如果有二十个动作就是二十类。那么动作的识别最终就能转变成特征提取、分类两个主要过程。特征提取包含静态帧的特征,动态帧间的特征。算法在不断的迭代发展,产生了很多经典的处理模型、算法。一般的识别流程为:

img

传统有监督特征提取方法

时空关键点,密集轨迹方法

学习过程

恰巧我也算是没人带在看这方面的事情,如果基于深度学习的话,你不妨先了解神经网络->卷积->循环神经网络。 了解一些通用的众人皆知的卷积神经网络(CNN)之后(如lenet5,alexnet,resnet,googlenet等),再去了解动作识别用神经网络如何去做,通常分为(静态、动态)。静态的话CNN基本可以完成,动态的话,你需要去了解双流结构,Two-Stream Convolutional Networks for Action Recognition in Videos.pdf,去了解3D卷积神经网络(搜索3D convolution for action recognition, C3D network)。 接下来,你可以去了解是否需要加入RNN的模块来帮助构造模型更好的去解析时序类的数据,看一些LSTM+action recognition的论文,在接下来,你可以看看目前火热的Attention机制,

References

  1. https://zhuanlan.zhihu.com/p/44420871
  2. https://zhuanlan.zhihu.com/p/45444790