人体动作识别
提取视频中的光流特征,并进行人体动作识别。
实验问题
给定若干不同类别动作的视频,训练一个模型,预测未知动作类别的视频包含的动作。
实验环境
操作系统:Ubuntu 14.04.3 LTS
开发环境:Python 2.7.6 + OpenCV 2.4.11
Python Library: Scikit-learn 0.17, numpy 1.10.2
实验过程
实验解决过程按以下步骤进行:
提取视频特征
训练分类模型
测试并计算准确率
提取视频特征
这里使用HOF(Histograms of optical flow)特征,参考文献1,调用OpenCV中的cv2.calcOpticalFlowFarneback()
方法2——即使用Farneback方法获取每相邻两帧的光流信息;之后再计算直方图、方差等数据,而这里为了方便,直接对每两帧获得的光流信息取平均并合并成特征向量。
训练分类模型
下载数据集,并根据网站信息把数据集分为训练集、验证集(可选)、测试集。
对训练集中每个视频提取特征向量,构成一个\(m \times p\)的矩阵,其中\(m\)表示视频的数量,\(p\)表示特征的长度。
调用Scikit-learn中的sklearn.multiclass.OneVsRestClassifier——即使用训练集的特征和标签训练一个一对多的分类器。其中的估计器(estimator)分别使用以下Scikit-learn提供的估计器
sklearn.svm.LinearSVC
sklearn.neighbors.KNeighborsClassifier
sklearn.ensemble.AdaBoostClassifier
sklearn.tree.DecisionTreeClassifier
测试并计算准确率
对测试集中每个视频提取特征向量,构成一个\(n \times p\)的矩阵,其中\(n\)表示视频的数量,\(p\)表示特征的长度。
使用训练时得到的分类器进行预测,并调用Scikit-learn中的sklearn.metrics.accuracy_score()
方法3计算准确率。
实验数据集
KTH数据集
KTH数据集下载地址:http://www.nada.kth.se/cvap/actions/
KTH数据集有599段视频,包括6类动作:走(walking),慢跑(jogging),跑步(running),拳击(boxing),摇手(hand waving),鼓掌(hand clapping)。每类动作由25个不同的人分别在4个不同的场景(室外、室外放大、室外且穿不同颜色的衣服、室内)下完成。视频中背景相对静止,运动变化较小。
实验把数据集分为3个部分:训练集(8个人)、验证集(8个人)、测试集(9个人)。故训练集应有\(8 \times 4 \times 6 = 192\)个视频,验证集也有\(192\)个视频,测试集有\(9 \times 4 \times 6 = 216\)个视频,但其中训练集有一个视频(person13_handclapping_d3)缺失。
Youtube数据集
Youtube数据集下载地址:http://crcv.ucf.edu/data/UCF_YouTube_Action.php
Youtube数据集包括11类动作:篮球射球(basketball shooting),自行车(biking/cycling),划水(diving),挥高尔夫杆(golf swinging),马术表演(horse back riding),足球跑(soccer juggling),挥舞(swinging),挥网球拍(tennis swinging),跳蹦蹦床(trampoline jumping),排球扣球(volleyball spiking),遛狗行走(walking with a dog)。每类动作分为具有公共特征的25个组,每组。视频中背景较杂乱,运动变化较大。
Hollywood2数据集
Hollywood2数据集下载地址:http://www.di.ens.fr/~laptev/actions/hollywood2/
Hollywood2数据集包括12类动作:打电话(AnswerPhone),开车(DriveCar),吃饭(Eat),打架(FightPerson),下车(GetOutCar),握手(HandShake),拥抱(HugPerson),接吻(Kiss),跑步(Run),坐下(SitDown),仰卧起坐(SitUp),起立(StandUp)。视频由69个不同的好莱坞电影中截取而成。
实验结果
KTH数据集
对测试集,表1列出了不同分类器预测的结果,表2列出了使用LinearSVC预测不同类别的结果。
可见,对部分类别(boxing, handwaving)准确率较高,而部分类别(running, jogging)则准确率较低。从视频内容分析,可知running与jogging等部分类别较易混淆,故不容易预测。从方法上来考虑,在计算HOF特征时直接使用整段视频来处理,存在背景混淆、无用帧等问题。
与当前许多方法相比,准确率较低,仍需改进。如考虑先提取人的bounding box再进行提取HOF特征等,参考文献4,可提取trajectory, HOG, HOF, MBH等特征,并使用k-means等方法合并这些特征。
- KTH数据集不同类别预测结果
分类器 | LinearSVC | KNeighborsClassifier | AdaBoostClassifier | DecisionTreeClassifier |
---|---|---|---|---|
准确率 | 58.8% | 54.6% | 54.2% | 37.5% |
- KTH数据集使用LinearSVC预测不同类别的结果
类别 | 测试集中视频数量 | 预测正确数量 | 准确率 |
---|---|---|---|
boxing | 36 | 33 | 91.7% |
handclapping | 36 | 20 | 55.6% |
handwaving | 36 | 22 | 61.1% |
jogging | 36 | 16 | 44.4% |
running | 36 | 15 | 41.7% |
walking | 36 | 21 | 58.3% |
all | 216 | 127 | 58.8% |
参考
Chaudhry R, Ravichandran A, Hager G, et al. Histograms of oriented optical flow and binet-cauchy kernels on nonlinear dynamical systems for the recognition of human actions[C]//Computer Vision and Pattern Recognition, 2009. CVPR 2009. IEEE Conference on. IEEE, 2009: 1932-1939.↩︎
Optical Flow. opencv dev team. 最后修订于2014年11月10日. http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_video/py_lucas_kanade/py_lucas_kanade.html↩︎
Model evaluation: quantifying the quality of predictions. scikit-learn developers. http://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics↩︎
Wang H, Schmid C. Action recognition with improved trajectories[C]//Proceedings of the IEEE International Conference on Computer Vision. 2013: 3551-3558.↩︎