
做视频动作识别、行为识别、时空动作检测的研究或工程落地第一道坎往往不是模型而是数据集。我刚入行时光找数据就折腾了两周一会儿链接失效一会儿标注格式看不懂一会儿数据量根本撑不起训练。后来这几年陆续接触和评估了一大堆公开数据集踩了不少坑也慢慢总结出一套判断数据集好坏的经验。这篇整理就是把我用过的、调研过的、以及社区里公认好用的数据集按视频动作识别、行为识别、时空动作检测这几个方向梳理出来标明规模、内容、适合做什么、有什么坑方便后面再入手的同学直接“抄作业”。文章会持续更新我也希望把这个主题维护成一棵活的数据集索引树而不是一篇写死就再也不动的旧文档。相比图像分类里MNIST、CIFAR、ImageNet那种“拿到就能用”的成熟玩法视频方向的数据集要复杂得多。同样是“动作”两个字在不同任务里的含义可能完全不同。有的只要求给整段视频打个标签有的要求在长视频里找出动作发生的时间段还有的要求把每一帧里每个人的动作和位置都标出来。把这些边界搞清楚才知道该选哪个数据集。1. 先从根上分清视频动作识别、行为识别、时空动作检测到底差在哪很多人一开始会把这几个名词混着用实际工程项目里这么混会很吃亏。因为它们的标注成本、模型结构、评估指标完全是三套逻辑。1.1 视频动作识别给整段视频定一个动作类别视频动作识别是最经典的任务。输入是一段已经裁剪好的视频片段输出是一个动作类别标签。比如一段10秒的视频模型判断它是“打篮球”“鼓掌”还是“刷牙”。这里面的前提是视频通常已经被裁剪过或者至少动作占据视频主体不需要关心动作在什么时候开始、在画面哪个位置发生。这类任务的评价指标也最简单基本都是Top-1、Top-5准确率。UCF101、HMDB51、Kinetics系列都是这个方向的代表数据集。它们的核心价值在于帮研究人员验证模型的“识别”能力有没有抓住动作本身的时序特征而不是死记背景。1.2 行为识别更贴近真实世界的长视频理解行为识别在英文里常对应Activity Recognition但这个说法太宽泛。实操中我更喜欢把它拆成两类一类是日常行为理解比如ActivityNet、Charades视频往往没有裁剪时长从几十秒到几分钟一个人可能连续做多个动作标签经常是多个行为同时存在甚至还要做时序定位。这已经不是简单分类而是要对整段未裁剪视频做结构化理解。另一类是群体行为识别比如排球比赛、集体活动这类多个人共同参与的场景。模型输出的可能是整个群体的行为标签也可能是每个人的个体动作标签还要考虑人与人之间的交互关系。行为识别数据集的标注成本比普通动作识别高一个量级因为要定义行为边界、处理多标签、有时还要给行为打时间段。这也导致这类数据集普遍没有UCF101那么大但对落地更有参考价值。1.3 时空动作检测既要认动作还要在每个时刻把人框出来时空动作检测Spatio-Temporal Action Detection是这几个方向里最难、也最接近实际监控和自动驾驶场景的任务。它的输入是未裁剪视频输出要求是每一帧里每个目标的动作类别和空间位置边界框。也就是说模型得同时回答“谁在什么位置做了什么动作”。这个任务对标注的要求非常苛刻每一帧都要画框框还要跟踪同一个人的连续运动轨迹动作类别往往有上百种。AVA是这个方向的标杆数据集也是目前几乎所有时空检测论文都会评测的基准。1.4 三个方向的数据集选型逻辑简单总结一下我自己的判断方式如果要验证模型的基础识别能力先上UCF101或HMDB51数据量适中训练快社区参考很多。如果要做预训练或者刷SOTA选Kinetics系列。如果业务场景是监控、安防、无人零售这类长视频理解重点看AVA和ActivityNet。如果关心的是人机交互、手部动作、物体操作Something-Something系列更对路。如果拿到的输入只有骨骼关键点那NTU RGBD 120基本绕不开。千万不要拿一个打标签的数据集去评估检测模型也不要用检测数据集去硬套分类任务不同任务的评测口径不一样硬来只会得到一堆对不齐的结论。2. 经典视频动作识别数据集先把地基打牢这个方向的数据集最多但真正被反复使用的其实就那么几个。我对它们的定位是UCF101负责快速迭代HMDB51负责检验真实场景泛化能力Kinetics负责喂饱大模型。2.1 UCF101最经典的中等规模动作识别数据集UCF101是动作识别入门必跑的数据集来自中佛罗里达大学视频全部从YouTube收集共101个动作类别13320段视频。每个类别平均130多段视频时长约27小时。动作分为五类人与物体交互、人体运动、人与人的交互、演奏乐器、运动。它的最大优势是“轻”。13320段视频不算多单卡就能跑起来适合用来验证模型代码有没有写对、调参方向对不对。另一个常见用途是跨数据集泛化测试在Kinetics上预训练在UCF101上微调评估很多论文的迁移学习实验都这么做。不过要注意几个坑。第一UCF101的视频来源是YouTube官方提供的是下载脚本而不是打包好的压缩包网络环境不好的情况下经常下载失败。第二部分视频分辨率偏低同一类别的背景差异很大直接用原始视频不做预处理的话模型容易过拟合背景。第三101个类别的样本量并不均衡长尾类别的准确率会明显偏低。我的习惯是首次跑通模型时只用UCF101前20个类训练速度快能提前发现DataLoader、预处理、loss计算里的低级错误等全部流程稳定再切到全量数据。2.2 HMDB51更贴近真实场景的中等规模挑战HMDB51是另一大经典基准来自布朗大学共51个动作类别6766段视频。视频来源包括电影片段和YouTube标注的大类包括一般面部动作、面部操作与物体、身体动作、身体操作与物体、人与人的交互。HMDB51比UCF101难不少。因为很多片段来自电影拍摄视角、光线、遮挡情况更复杂动作的判别性也不如UCF101那么强。很多在UCF101上表现不错的模型在HMDB51上会掉好几个点。所以它经常被用来做“真实场景泛化能力”的检验。在实际使用中我更多把HMDB51当成一个“试金石”。比如在UCF101上调好的预处理方案拿到HMDB51上跑一遍如果掉点幅度异常那多半是模型对场景变化的鲁棒性有问题而不只是数据集差异导致的。2.3 Kinetics系列大规模预训练的标配Kinetics系列是DeepMind出品的YouTube视频动作数据集特点是视频片段统一为10秒以人为中心。Kinetics-400大约有30万段视频、400个类别Kinetics-600约50万段、600类Kinetics-700约65万段、700类。现在主流做法的几乎都是先在Kinetics上预训练再把模型迁移到UCF101、HMDB51或者业务数据集上微调。Kinetics的数据量足够大类别覆盖广预训练出来的特征通用性明显更好。我自己实测用Kinetics-400预训练再微调UCF101比直接在UCF101上从零训练高大约10个点的准确率。Kinetics的坑同样明显。第一标签存在一定的噪声有些视频类别标签并不准确官方论文也承认这一点。第二YouTube链接大量失效官方脚本能下载下来的比例越来越低。好在这几年社区已经有了重新打包好的版本比如Kinetics-400的某些镜像tar包下载后直接解压就能用。2.4 三个数据集的对比选择速查数据集视频数量类别数标注类型主要适用场景UCF10113320101视频级类别快速验证、小规模训练、迁移学习目标集HMDB51676651视频级类别真实场景泛化评估Kinetics-400约30万400视频级类别10秒片段大规模预训练选型时我的优先级很简单项目周期紧、只想跑通模型验证思路直接UCF101要发论文或者需要更高精度先上Kinetics预训练HMDB51更像是“附加题”用来补充泛化性结论。3. 行为识别数据集日常活动、长视频与群体交互纯动作分类场景够用但真实项目里很少给你一段“干净”的视频。更多时候视频是持续录制的里面的人在不同时间做不同的事甚至多个人同时发生交互。这就轮到行为识别数据集登场。3.1 Something-Something系列考验模型对时序关系的理解Something-Something系列是二十几段文字描述对应的视频集视频里有人手和各种日常物品交互比如“把东西从桌子左边移到右边”“把杯子倒过来”。Something-Something V1约10.8万段视频174个类别V2约22万段同样174类。这个数据集最大的特点是类别本身描述的是一段动作的时序变化而不是画面里出现了什么物体。很多在UCF101上效果不错的模型在Something-Something V2上成绩会明显下滑。原因在于这类动作的判别信息主要来自“变化过程”。比如“把东西靠近”和“把东西移远”静态画面几乎无法区分关键信息完全在时间轴上。所以这个数据集特别适合用来验证模型是否真正学到了时序建模能力。如果你的模型在Something-Something上性能不佳那说明时序建模还有提升空间单纯增加空间特征提取模块帮不上什么忙。3.2 ActivityNet长视频和高层活动理解的标杆ActivityNet是目前最常用的未裁剪视频行为理解数据集之一。ActivityNet v1.3包含约2万个YouTube未裁剪视频覆盖200个日常活动类别并提供了每个行为实例的时间段标注。和UCF101、Kinetics那种“视频片段即标注单元”不同ActivityNet的视频不做裁剪一段视频里可能连续出现多个行为。这个设计更接近监控、体育赛事分析等真实业务场景模型要能自己找出“什么时间发生了什么动作”。评估ActivityNet时除了Top-1准确率更常用的是时序动作检测指标mAP在不同tIoU阈值下的均值。如果业务上需要定位行为发生的起止时间ActivityNet基本是绕不开的第一个基准。3.3 群体行为数据集当人不再单独行动单独一个人的行为识别已经很难多人交互的群体行为更复杂。这个方向的数据集相对小众但落地价值很高比如安防领域的人群异常行为检测、体育比赛战术分析。我实际用过的群体行为数据集主要有两个Volleyball Dataset排球比赛视频55个视频4830帧标注8类群体活动同时为每个球员标注个体动作。适合研究“个体动作到群体动作”的推理关系。Collective Activity Dataset44组视频5类群体活动行走、交谈、等待等包含个体和群体两层标注。这类数据集的数据量通常不大直接训练很容易过拟合一般需要先在单人的大规模数据上预训练再用群体数据微调。模型设计上目前主流的做法是结合GCN或Transformer对人物之间的关系建模。3.4 Charades多标签、多模态的室内日常行为Charades是室内场景的日常行为数据集共9848个视频157类动作。视频由众包人员在家里自己录制每人对着同一场景描述要做的一连串行为比如“走进厨房打开冰箱拿出牛奶”。Charades和普通动作识别数据集最大的区别是“多标签”。一段视频里可能同时发生多个行为而且标签存在长尾分布。加上视频来自真实家庭环境视角杂乱、光照不定、遮挡多图像质量也比较差整体难度不低。用它测试模型对长尾分布和多标签分类的适应能力非常合适。4. 时空动作检测数据集精确定位到人、到帧、到动作从工程视角看时空动作检测是视频理解里最有落地潜力的方向。自动驾驶、智慧零售、安防监控本质上都需要在每一帧知道“谁在哪、在做什么”。这类数据集也是所有视频动作数据集里标注成本最高、难度最大的。4.1 AVA时空动作检测的必测基准AVAAtomic Visual Actions数据集是目前时空动作检测领域绕不开的标准。它从电影和电视剧中选取了约430段15分钟左右的视频片段对人类动作进行逐帧标注包含80个原子动作类别标注实例超过150万个。动作类别包括站立、行走、交谈、伸手、拿东西等底层动作。AVA的标注粒度很细不是每帧都重新画框而是每隔一秒逐帧标注一次模型输出要求覆盖所有帧的检测结果。官方评估指标是frame-level mAP也就是在每一帧上计算检测框和动作类别联合评估。实际用AVA有几个特别需要注意的地方类别不均衡非常严重。有的类别出现数万次有的类别只有几百次直接训练容易导致模型偏向高频类别。大量人物框没有任何动作标注这些“负样本”需要好好处理否则训练时模型会学会“见到人就输出最常见类别”这种偷懒行为。视频片段分辨率不统一有的片段是标清有的接近高清目标框大小差异很大对检测器的影响比想象中更大。常见做法是在AVA上用Faster R-CNN生成人体proposal再配合SlowFast、I3D或X3D这类模型做动作分类。近两年也流行用端到端的方式比如UniFormer V2、VideoMAE等在大规模预训练后直接做检测。4.2 JHMDB时空检测入门的小型数据集JHMDB是HMDB51的子集专门为时空动作检测设计包含51个动作类别900多段短视频每段视频都有逐帧人体边界框标注。相比AVAJHMDB规模小得多但好处是标注质量高、动作主体单一用来做时空检测的“代码逻辑验证”非常合适。我在搭新的检测模型时都会先在JHMDB上跑通流程确认数据加载、框回归、动作分类各个环节没问题再上AVA这种大规模数据集。4.3 UCF101-24和THUMOS14各有侧重的检测基准UCF101-24是UCF101的一个子集选取其中24类动作提供逐帧的人体框标注常用于时空动作检测的早期对比。THUMOS14则更侧重时序动作检测包含20类动作、几百段未裁剪视频标注的是动作发生的时间区间但不包含空间框。这两个数据集适合用来说明“检测”的两种形态UCF101-24要求空间时间联合定位THUMOS14只要求时间定位。如果业务只关心“某个动作发生在几秒到几秒”参考THUMOS14就够了如果还要知道动作发生在画面哪个位置那就得上UCF101-24或者AVA。5. 骨骼动作识别数据集绕开视频像素的另一种思路前面提到的数据集大多基于RGB视频。但还有一类动作识别完全不依赖视频像素而是使用人体骨骼关键点序列作为输入。这个方向在计算量、隐私保护、环境鲁棒性上都有独特优势也是近年非常热门的研究方向典型代表是ST-GCN、PoseC3D等模型。5.1 NTU RGBD与NTU RGBD 120骨骼动作识别的事实标准NTU RGBD是新加坡南洋理工大学发布的3D动作识别数据集使用微软Kinect v2采集共56880个视频样本60个动作类别40个受试者80个摄像机视角。数据模态包括RGB视频、深度图、红外图和3D骨骼关键点。NTU RGBD提供了两个标准评测协议Cross-Subject按人划分训练/测试集和Cross-View按摄像机视角划分。Cross-View通常比Cross-Subject更容易因为训练集和测试集虽然视角不同但人物重叠度较高。后来升级的NTU RGBD 120扩展到了120个动作类别、114480个样本、106个受试者、155个视角并新增了不同采集环境的数据。评测协议改为Cross-Subject和Cross-Setup按采集环境和受试者组合划分。现在新论文基本都在120版本上评估。实际使用中要注意Kinect采集的3D骨骼存在部分关节缺失或错位的情况尤其是遮挡场景训练前通常需要做插值补全或丢帧处理。3D骨骼数据是“序列长度×人数×关节数×坐标维度”的结构在DataLoader里做batch padding时要小心序列长度不一致的问题。5.2 Kinetics-Skeleton从视频数据迁移到骨骼领域的大规模预训练集Kinetics-Skeleton不算官方发布的数据集而是社区用OpenPose从Kinetics-400视频中提取出的2D骨骼关键点序列类别与Kinetics-400对齐。它的样本量达到数十万级别是目前骨骼动作识别领域最主要的大规模预训练数据之一。我在骨骼动作识别模型里做预训练时首选就是Kinetics-Skeleton。因为Kinetics本身的动作类别覆盖广2D骨骼数据虽然不如3D骨骼信息丰富但用来学习通用的动作时序特征已经足够了。之后再在NTU RGBD 120上微调效果一般比只用NTU训练好不少。必须提醒一点Kinetics-Skeleton的质量取决于OpenPose的检测结果。如果人物遮挡严重、姿态估计置信度低这部分数据可能带有较多噪声。因此预训练后微调时建议把骨架数据的置信度信息也作为一个输入通道让模型自己学会“哪些关键点是可信的”。5.3 骨骼数据集的优缺点对比数据集模态规模优势主要限制NTU RGBD 120RGB、深度、红外、3D骨骼114480个样本120类多模态对齐、3D骨骼质量高、评测协议清晰采集场景相对受限仅室内Kinetics-Skeleton2D骨骼数十万级规模大、类别广、适合预训练依赖姿态估计质量存在一定噪声如果业务场景对隐私要求高或者部署设备算力有限骨骼动作识别是非常值得考虑的方向。它的输入特征维度低、计算量小在边缘设备上也能跑得动。代价是姿态估计这一步如果做不好后面的动作识别再好也发挥不出来。6. 实战经验下载、预处理、评估与避坑数据集选好了真正的麻烦才刚刚开始。视频数据集的下载、预处理、格式统一、分布差异每一步都能让人崩溃。我在这块踩过的坑比在模型结构上踩过的还多。6.1 下载渠道与版权注意事项视频数据集不像图像数据集那样一个tar包搞定很多都是通过脚本从YouTube、电影片段等渠道下载。这里有几个靠谱的获取渠道官方研究页面UCF101、HMDB51、Kinetics、NTU、AVA等在各自大学或实验室官网上都有专门的下载页面。论文配套的GitHub仓库很多作者会在GitHub上放出已经整理好的数据下载脚本标注格式通常也能在仓库里找到说明。Kaggle和Hugging Face Datasets这两个平台上有社区重新打包好的版本下载速度通常比官方网站更友好。学术镜像和网盘转存国内用户做Kinetics这类从YouTube下载的数据集会非常痛苦社区转存的网盘链接能省不少时间。版权方面必须注意Kinetics、UCF101、HMDB51这些数据集都基于YouTube或电影视频许可证大多只允许学术研究使用。如果要商用务必仔细确认每个数据集的授权条款防止踩坑。6.2 数据预处理抽帧、采样与统一格式视频数据直接喂给模型的很少通常都要先抽帧。我的标准流程是所有视频统一用ffmpeg抽取中间帧或均匀抽帧保存为jpg或png避免训练时反复解码视频的IO开销。统一帧率常见做法是统一到25fps或30fps。帧率不统一会导致时序采样错位。统一分辨率。模型输入一般要求固定尺寸可以先resize到短边256或224再随机裁剪到224×224。稀疏采样。TSN、TSM这类模型通常把视频均匀分为N段每段随机抽1帧而不是逐帧全量输入。我一般设8帧或16帧既能保证时序信息又不会让显存爆炸。抽帧命令是基本功示例ffmpeg -i video.mp4 -q:v 2 -vf fps25,scale256:256 -start_number 0 frame_%05d.jpg这行命令会把视频按25fps抽帧缩放到256×256。实际项目中我通常先用Python的os.system或subprocess循环处理整个文件夹的视频并做log记录避免中途某个视频出错导致不知道处理到哪一步。6.3 评估指标不同任务不能混用我见过不少同学把分类任务的Top-1准确率直接拿去评估检测模型结果对不上其实是指标选错了。这里整理一下视频动作识别Top-1、Top-5准确率。时序动作检测mAP在不同tIoU阈值下的均值如tIoU0.5的mAP通常还会计算0.5:0.95的均值。时空动作检测AVA上使用frame-level mAP部分工作还会报告video-mAPUCF101-24上则常用帧级mAP和视频级mAP两种口径。骨骼动作识别NTU上就是分类准确率按标准协议区分Cross-Subject和Cross-View。指标选错了论文和项目的结论都不可信。评估代码建议直接用官方提供的评测脚本比如AVA官方提供了标准的AP计算代码不要自己重写重写容易引入细节偏差。6.4 常见坑与排查技巧第一个坑是数据加载速度。视频数据量本来就大如果每次训练都在线逐帧解码GPU基本都在等数据。解决办法是训练前预抽帧用lmdb、h5py或者tfrecord打包PyTorch的话num_workers尽量拉高配合prefetch_factor也能明显改善。第二个坑是标注格式不一致。每个数据集的标注格式都不同有的存json有的存csv有的是MATLAB文件。建议统一转成同一种中间格式比如COCO格式的json或者自定义的csv再写统一的Dataset类读取。这个前期工作越早做越好不然每换一个数据集就要重写一遍加载逻辑。第三个坑是类别不均衡。AVA和Charades这类数据集尤其严重。解决方式有类别重采样、类别权重、Focal Loss等但要注意不能过度干预不然模型会忘记低频类别以外的特征。第四个坑是负样本处理。时空检测任务里标注文件只标出了部分人物的动作大量人物没有标签。训练时如果把这些没标签的人物框直接当背景模型会学到错误的映射关系。常见的解决办法是只使用标注帧内有动作标签的人的框作为正样本对无标签的人框做忽略处理而不是直接当成负样本。第五个坑是跨数据集的分布差异。同一个模型在UCF101上精度不错换到HMDB51上掉很多点不一定是模型结构问题更可能是预处理细节不一致。我在切换数据集时会先把官方数据处理的细节全部对齐比如归一化均值、裁剪策略、帧率设置再谈模型对比。最后分享一点个人的整理习惯每次拿到一个新数据集我会先建一个带日期版本的笔记记录数据规模、标注格式、许可证类型、下载方式、预处理脚本、评测指标这六项信息。后续每次训练用的数据配置也都会记录下来方便回溯到底哪个实验用了哪些数据。这个习惯帮我解决了很多问题。比如某次模型效果异常复盘时发现是某次数据预处理改了resize尺寸但没记录白白浪费了两天调参时间。数据集整理这件事表面上是“下载解压”实际上是对整个实验流程的规范管理。我自己做视频动作识别实验时的默认路线是先在UCF101上快速验证模型代码再用Kinetics预训练权重在目标数据上微调最后在HMDB51或AVA上补一组泛化性实验。这样既保证了迭代速度又让结果更有说服力。这篇数据集整理我会持续更新后面还会补上更多细分方向比如视频异常检测、时序动作分割、多模态行为理解等。也欢迎大家把自己踩过的数据集坑分享出来互相省时间。