ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

视频动作识别数据集怎么选?从UCF101到AVA的完整指南

视频动作识别数据集怎么选?从UCF101到AVA的完整指南 1. 先分清三类任务动作识别、行为识别、时空动作检测别选错数据集1.1 任务定义的区别决定了数据集选型很多朋友第一次接触“视频动作识别、行为识别、时空动作检测数据集”这三个关键词时容易把它们当成一回事结果照着某个 benchmark 训出来的模型拿到自己场景里怎么都跑不通。原因很简单——这三个方向的数据集形态差异非常大选错数据集等于一开始就埋雷。动作识别action recognition最经典的定义是给定一段完整或裁剪过的视频片段为整段视频打一个行为类别标签。典型代表就是 UCF101、HMDB51、Kinetics 系列、Something-Something 系列。这类数据集适合做“What is happening”的判断比如判断一个人是在跑步、挥手还是打篮球。模型输出的是视频级类别概率不关心人具体在哪、动作发生在哪一帧。行为识别activity recognition / human behavior recognition在很多论文里和动作识别混用但严格来说它有更偏“长时序复合活动”的意味比如“准备早餐”“组装家具”“驾驶车辆”这种持续几十秒甚至几分钟的完整流程。典型数据集是 Breakfast、COIN、EPIC-KITCHENS。这类任务需要识别的是由多个原子动作组成的高层行为对时序建模能力要求更高光靠“一个片段一个类别”的建模方式远远不够。时空动作检测spatio-temporal action detection则是三兄弟里最硬核的不仅要知道视频里发生了什么还要在每一帧中定位是谁、在哪个空间位置、从哪一帧到哪一帧做了什么动作。典型数据集是 AVA、UCF101-24、JHMDB、MultiSports。输出形式是带时间戳的检测框序列或 tubelet模型要同时解决检测和分类训练成本、标注成本、评估复杂度都成倍上升。1.2 从“选数据集”反推你的真实需求我建议所有入门者在跑任何模型之前先问自己三个问题我的输入是完整视频还是裁剪过的片段我的输出是视频级标签、关键帧标签还是逐帧带框的轨迹我的应用场景是监控安防、体育分析、工业质检还是人机交互这三个问题的答案直接决定了你该去下载哪一类数据集。举个例子如果你做的是监控场景下的“打架检测”那种模型本质上更接近时空动作检测或者视频级分类取决于你最后要报警粒度是“这5秒在打架”还是“这一帧他抬起了拳头”。如果是前者用 UCF 这类视频分类数据集做预训练已经够用如果是后者AVA 这种逐帧框级标注的数据集才是必需品。另外很多人忽略的一点是“预训练数据集”和“目标任务数据集”可以分开。比如你用 Kinetics-400 做预训练再用自己标注的 2000 条监控片段做微调这是工业界最常见的做法。千万别为了省事直接拿公开数据集当生产数据用视频场景的域差异domain gap非常明显监控摄像头视角、遮挡程度、光照条件跟 YouTube 视频完全不是一回事。1.3 标注成本决定了数据集规模的上限我在实际项目里最深刻的体会是视频数据集的标注成本远高于图像数据集。图像标注一张图画个框几秒钟就完成视频标注一段 10 秒的视频如果要做逐帧框级标注哪怕只有 30fps也有 300 帧要处理而且动作过程中的形变、遮挡会让标注员反复回放标注效率极低。这也是为什么时空动作检测数据集如 AVA普遍采用“每秒标一帧关键帧”的稀疏标注策略而不是逐帧全标。AVA 的思路是每个视频每隔一秒取一个关键帧只在这些关键帧上标人体框和动作标签中间帧通过插值或直接忽略来训练。这个设计极大降低了标注成本也让 AVA 成为目前规模最大的时空动作检测 benchmark 之一。你在选型时如果预算有限建议优先考虑带稀疏标注的数据集或工具链不要一上来就追求逐帧精细标注。提示如果你只是想快速验证一个视频分类模型先去 UCF101 或 HMDB51 上跑通再考虑上 Kinetics 和大规模行为识别直接拿 AVA 练手很容易被标注格式和评估脚本劝退。2. 视频动作识别领域的老牌经典数据集每个都有哪些坑2.1 图像级视频分类经典数据集横向对比视频动作识别的入门数据集绕不开下面这几个名字。我按“使用频率”和“踩坑指数”做了个横向对比方便你直接挑适合自己的。数据集视频数量类别数视频特点适合场景我的使用建议UCF10113320段101类YouTube 真实场景每段 4-10 秒入门跑通流程首选。下载快、类别广、社区解析工具多HMDB516766段51类电影和 YouTube 混合分辨率偏低跨域鲁棒性测试配合 UCF101 一起做评估Kinetics-400约30万段400类每段10秒来源 YouTube 的各类日常活动预训练主干模型数据量大适合做 pretrain存储约 300GBSomething-Something v2约22万段174类人与物体的基础交互强调时序因果时序建模能力测试很考验模型对“先/后/同时”的理解Sports-1M约110万段487类体育视频YouTube 来源大规模弱监督预训练标签噪声大需要清洗策略UCF101 是我最推荐新手第一个跑的数据集原因是“恰恰好处”101 个类别覆盖了人体动作、人-物交互、体育动作、乐器演奏等类型每段视频长度都在 10 秒以内不需要处理长时序问题。社区里 Transformers、SlowFast、TSM 等主流模型的配置文件基本都是基于 UCF101 或 Kinetics 预训练权重做微调资料多到随便搜都能找到答案。HMDB51 的分辨率普遍不高很多视频是电影片段截取带有明显的镜头切换和背景干扰。如果你想测试模型在“脏数据”上的表现HMDB51 是不错的试金石但如果你只是想刷精度别把它当成主战场。Kinetics-400 是近年来视频理解领域最重要的预训练数据集几乎所有现代视频骨干模型都在它上面做过预训练。但它也有两个明显的坎一是数据体积巨大原视频压缩包解压后接近 300GB磁盘和带宽成本都不低二是它的类别分布虽然均衡但很多视频是人-环境交互训练出来的模型在某些工业场景里迁移效果并不好。我通常的做法是直接用官方发布的预训练权重而不是自己重新下载训练一遍省时省力。Something-Something v2 是另一个值得单独说的数据集。它的核心特点是所有动作都是“手和物体的基础交互”比如“把某物从桌子左边移到右边”“放下某物”“拿起某物”。这类动作对空间关系和时间顺序极度敏感用普通的单帧静态图像推理根本做不对。实测下来TSN 这类依赖空间外观的模型在 SSv2 上表现远逊于在 UCF101 上的成绩而 TimeSformer、SlowFast 这类带有时序注意力机制的模型会有明显优势。如果公司业务涉及机械臂操作、人机交互、手势控制SSv2 比 UCF101 更有参考价值。2.2 行为识别别拿视频分类数据集硬怼长时序数据集这样选如果你要做的是“行为识别”——厨房操作识别、装配流程质检、驾驶行为分析这类长周期、多步骤的行为理解上面那些几秒钟一个标签的视频分类数据集基本帮不上忙。你需要的是带有“层次化标签结构”的长时序数据集。Breakfast 数据集包含 10 种早餐制作活动比如煮咖啡、炒鸡蛋、切水果一共 1712 个视频每个视频时长普遍在 1 到 10 分钟之间。它最值得关注的是“两级标签体系”既有宏观的活动类别Activity也有细粒度的动作片段Action比如“拿刀”“切面包”“打开冰箱”。这种结构非常适合训练“先识别原子动作再推理复合行为”的模型。COIN 数据集则把范围扩大到了“指导性任务”包含 180 个任务类别覆盖维修、烹饪、手工艺等 12 个大类共 7781 个视频。它的亮点是标注了每个视频中的关键步骤“步骤起点/终点”都用时间戳标注出来了。如果你的产品想做“AI 师傅教你做事”或者“操作规范检测”COIN 是非常贴近真实业务的数据集。EPIC-KITCHENS 是第一人称视角的厨房活动数据集视频来自 GoPro 等头戴设备拍摄包含“抓取物品”“切菜”“洗锅”等原子动作还有“拿哪个物体”的细粒度标签常用于多模态行为识别任务。它也是少有的同时提供手部框和物体框标注的第一人称数据集和“具身智能”方向的结合度很高。近两年很多论文提到的“具身智能数据集质量要求及评价方法”中就大量参考了这类第一视角数据的标注规范。注意长时序行为识别对模型架构的要求和短动作完全不同。常见做法是先做动作片段分割temporal segmentation再在分割结果上做活动分类直接拿视频分类模型端到端硬训很难收敛。2.3 骨骼动作识别与骨架数据集的补充价值骨骼动作识别skeleton-based action recognition在行为识别领域是独立的一支。它不依赖 RGB 图像而是利用人体关键点坐标序列来识别动作。这种做法的好处是对外观差异、光照变化不敏感而且数据量小、推理速度快非常适合边缘部署。NTU RGBD 是目前学术界最常用的骨骼动作数据集包含 60 类单人动作和 40 类双人交互动作总视频数超过 5.6 万段。后来扩展的 NTU RGBD 120 把类别数增加到了 120 类总样本量达到 11.4 万段。这个数据集同时提供 RGB 视频、深度图、3D 骨骼姿态和红外画面四种模态可以说是骨骼行为识别领域的“标准考卷”。PKU-MMD 是另一个值得关注的多模态行为数据集包含 51 个动作类别、约一万个长视频序列每个序列覆盖多个连贯动作因此天然适合做“时序动作检测”。如果你既要识别动作类别、又想知道每段动作的起止时间PKU-MMD 比 NTU 更合适。我在实际项目里的经验是骨骼数据集的“领域适配”难度比 RGB 数据低因为关键点坐标已经很抽象了不同摄像头之间的迁移也相对容易。但它的上限同样受限于姿态估计器的质量如果你用开源姿态模型抽骨骼点建议先做一轮关键点质量筛查把抖动大、缺失严重的序列剔除掉否则会把噪声直接传给动作分类器。3. 时空动作检测数据集这才是硬骨头3.1 AVA时空动作检测绕不开的基准AVAAtomic Visual Actions数据集是当前时空动作检测领域公认的标准 benchmark目前常用版本是 AVA 2.2包含 430 个视频来自 15 个电影片段总时长约 590 分钟。标注对象是所有出现在关键帧中的人体动作类别为 80 类原子动作比如站的、走着、跑步、伸手、触摸某物、与人交谈等。AVA 最核心的标注设计是“每秒标注一帧”。视频按 30fps 打开但标注员只对每秒的第 1 帧、第 31 帧、第 61 帧这类关键帧做人体框和动作标签标注。这意味着训练时模型面对的是一个稀疏时间监督的问题你输入一整段连续视频但只有关键帧有框和标签其他帧全靠模型自己学出来。作者用 Interpolated 策略来补全标注但实际训练中主流模型如 SlowFast、ACAR-Net都会按照关键帧附近的时序窗口采样然后只在关键帧上计算 loss。AVA 的评估指标是 frame-level mAP也就是在关键帧上计算检测框和动作类别两个维度的平均精度。评估时要求预测框和真实框的 IoU 大于 0.5同时动作类别正确才算正例。这个标准不算苛刻但类别之间的长尾分布问题很明显像“站立”“走路”这类高频类别很容易刷高而“摔倒”“下蹲”这类低频动作才是真正拉开模型差距的地方。我在跑 AVA 时踩过一个大坑官方提供的“keyframe”策略天生适合 SlowFast 这种带时间下采样的网络但对单流网络并不友好。如果你用的是纯空间检测器比如先在帧上做人体检测再对每个框做动作分类建议直接把关键帧当成“当前帧”前后各取 1 秒的上下文送进去效果比只取单帧好很多。3.2 除此之外还有这些时空动作检测数据集值得收藏UCF101-24 是从 UCF101 中选出的包含时空动作标注的子集。它保留了 24 个动作类别并为每个视频标注了人体框在整个时间跨度内的轨迹。评估方式采用 video-level mAP即要求预测框在时间维度上至少覆盖整个动作的一半时长空间上 IoU 要超过设定阈值。和 AVA 相比UCF101-24 的标注更“完整”每个动作实例都有一个连续存在的框序列训练起来比较直观但它没有 AVA 那么大类别也少很多。JHMDB 数据集是另一个经典的时空动作检测 姿态估计联合数据集包含 928 个视频、21 个动作类别。它的特色是同时提供人体关节点标注和动作框标注很适合做“姿态引导的动作检测”研究。缺点是数据量小只能用于预训练验证和模型调试不适合做最终评估。MultiSports 是近年来比较新的多人体育动作数据集收集了篮球、足球、排球等 8 类运动场景下的多人同时动作标注精度高、多人交错情况多。它比 AVA 更“拥挤”对模型的多人关联能力要求极高适合做拥挤场景下的动作检测研究但下载和预处理门槛也更高。提示做时空动作检测时千万别把“人体检测器”和“动作分类器”混成一个模型。业界普遍做法是先训练一个高召回的人体检测器YOLO 或 DETR 系把每帧的候选框捞出来再对这些框做动作分类。直接把分类任务塞进检测头里反而会因为两个任务的收敛速度不同而拖垮训练。3.3 视频实例分割与动作检测的交集很多人没意识到时空动作检测和视频实例分割VIS在数据格式上有很多交集。视频实例分割要求对视频中的每个目标实例做像素级分割并保持跨帧的身份一致时空动作检测则只关心人体实例和动作类别。两者的核心差异在于动作检测不需要像素级掩码但需要类别语义更细致。在实际业务中如果你既要“知道人站在哪、做了什么动作”又需要“把人从背景中精细抠出来”做后续分析YTVIS、OVIS 这类视频实例分割数据集是很好的补充。它们的标注格式和 COCO 很接近社区解析工具多转成动作检测任务时也比较顺滑。我的建议是不要把视野局限在“动作识别”一个领域视频理解和视频分割是同一套基础能力的不同出口。你在整理数据集清单时顺手把 YTVIS、DAVIS 的下载地址和标注格式也写进笔记后续做精细化分析时能少走很多弯路。4. 从公开数据集到“训练自己的数据集”这四步最关键4.1 标注格式选型先想清楚要不要兼容开源工具链很多项目的起点是“我有一批视频想训练一个动作识别模型”。这时候最容易犯的错误是拿到公开数据集后把自己的标注格式照着公开数据集硬套结果发现标注工具、训练脚本、评估代码三套体系互相不兼容。我的建议是先想清楚“最终要跑什么模型”再反推标注格式。如果你要跑 mmaction2 或 SlowFast建议直接按照 AVA 或 Kinetics 的标注格式整理数据尤其是时间戳、框坐标、类别 id 的字段命名尽量和开源模型默认的 Dataset class 对齐这样你只需要写一个几十行的 format 转换脚本而不是从零写一套数据加载器。如果你用的是检测底模路线打算先做人检测再对框做分类那标注格式可以走 COCO 风格把每一帧的检测框存成 JSON动作类别存成 category 字段。这种格式的好处是可以用现成的 detectron2、mmdetection 工具链后续换模型不用重标数据。4.2 善用 YOLOv8、YOLO26、DEIM 等检测器做预标注大幅降低人工标注成本这一块我一定要单独拿出来讲因为太多人倒在“标注成本”上。视频数据标注的痛点是一段一分钟的 30fps 视频足足有 1800 帧就算采样到 5fps也要标 300 帧。人工一张张框选人体成本高到劝退。现在的主流做法是“预标注 人工修正”。先用 YOLOv8、YOLO26 这类速度型检测器在关键帧上自动检测出人体框再让标注员只负责“确认框是否正确 打动作类别标签”。实测下来光这一步就能把单人标注效率提升 3 到 5 倍。如果你对检测精度要求更高DEIM 这类 DETR 系检测器也可以纳入考虑。DEIM 相比传统 DETR 在训练收敛速度和精度上都有改进尤其对密集小目标的表现更好适合多人的体育、监控场景。使用流程一般是先在 COCO 或 Visual Genome 预训练权重上用少量目标领域数据微调再把待标注视频批量跑一遍输出带类别的检测框转成半成品标注文件。这个方案里有个细节要注意预标注模型产生的“漏检”比“误检”更麻烦。漏检了标注员要手动新增框工作量大误检只是删框比较快。所以预标注时宁可把检测阈值调低一点把框出得多一点也别让它漏人。4.3 大规模数据集处理的两个核心环节清洗与类别均衡最近很多人讨论“大规模数据集的处理包括两个核心环节”根据我实际动手的经验这两个环节就是“清洗”和“类别均衡”。别看说得容易做起来全是血泪。清洗的第一个层面是去掉“坏样本”。你从网上下载的视频、自己录制的摄像头数据都可能包含重复片段、镜头切换过于频繁的片段、目标过小或严重遮挡的片段。这些坏样本不仅浪费计算资源还会严重干扰模型收敛。我常用的做法是先跑一遍动作分类预训练模型记录每个候选样本的 top-1 置信度然后把置信度极低的样本拎出来人工检查——往往能揪出一大批“标签错误”或者“无动作发生”的无效样本。清洗的第二个层面是“去重”。视频领域的重复样本比图像领域更隐蔽同一段内容可能以不同分辨率、不同帧率、不同裁剪方式出现多次。你可以用感知哈希pHash或者特征向量的余弦相似度做粗筛把相似度过高的片段归为同一组再手动确认是否保留。类别均衡更是视频训练的必修课。动作识别数据集普遍存在长尾分布比如“走路”“站立”这类基础动作数量巨大而“摔倒”“攀爬”这类关键动作数量稀少。硬训的话模型基本会偏向高频类别。我的建议是分三步处理先统计类别频次分布然后对高频类别做下采样对低频类别做增强如时序裁剪、翻转、速度扰动最后如果低频类别实在凑不够考虑用少量人工合成数据或者迁移学习补充。4.4 数据增强、帧采样策略与数据集版本管理视频数据增强操作比图像复杂得多但换来的是更强的泛化能力。最常用也最稳定的几个手段是随机裁剪空间 Jitter、随机水平翻转、随机时序采样比如在每段视频里随机抽取连续 N 帧采样间隔可调、速度扰动把视频加速或减速 0.8 到 1.2 倍、色彩抖动。这几个组合起来基本能满足大多数场景不用一上来就上 Mixup、CutMix 那些复杂玩法。帧采样策略是初学者最容易忽略的细节。UCF101 和 Kinetics 的训练标准做法是“均匀抽 N 帧”把一段视频平均切分成 N 段每段随机抽取一帧组成一个 N 帧的输入片段。这个策略保证了训练时看到的帧覆盖了整个视频的时间范围而不是集中在开头或结尾。实际使用时N 通常在 8 到 32 之间资源充足就选大一点的 N模型对短动作和快速动作的敏感度会更高。最后讲一个很多人吃过亏的点数据集版本管理。做我们自己标注的数据集时一定要在文件夹或者 JSON 里记录“版本号”并把原始视频、标注文件、清洗脚本、增强参数全部存档。我见过太多团队标注文件改了七八版模型训练完发现数据版本对不上整个实验白做。用 Git LFS 或者是简单的按日期归档都可以但必须有这个动作。5. 常见问题与排查技巧实录数据集使用避坑速查表5.1 下载链接失效、许可证不清、标签噪声视频数据集的下载链接失效是常态尤其是学术机构维护的老数据集。遇到这种情况第一选择是去数据集官方 GitHub 看有没有镜像链接第二选择是到 Hugging Face Datasets 搜很多经典数据集已经有第三方上传的完整版。如果这两条路都不通还有一个民间技巧去论文的 Issues 区或问答社区搜“dataset download”往往能找到热心网友分享的网盘链接。许可证是另一个必须提前确认的问题。有些数据集仅限学术使用不允许商业化你如果拿它训练了商业产品后面会有法律风险。我建议在下载时顺手把这个信息填入一个专门的“License 记录表”每用一份数据都留个底。标签噪声则是公开数据集里最常见也最难解决的问题。Kinetics-400 的标签噪声据估算有 3% 到 5%这在预训练规模上可以接受但如果你拿它做小数据集微调噪声会被放大。解决办法有两个一是用置信度筛选人工抽检的方式清洗一遍二是直接用 Clean 版本的 Kinetics比如 Kinetics-700 的清洗子集作为替代。5.2 类别不平衡的应急处理方案类别不平衡是所有视频数据集的通病公开的还相对好一点自己录制的数据通常极度偏斜。举个例子做驾驶行为识别时“正常驾驶”的视频可能占了 90%“急刹车”“变道不打灯”这些关键动作加起来不到 10%模型训练完基本只会输出“正常驾驶”。我的应急处理方案是先统计每个类别的样本数写下采样系数再用加权采样器WeightedSampler对视频片段做重新抽样让每个类别在每一个 epoch 里被抽到的概率大致相等。同时对少数类别做更强的时序增强比如把 2 秒的片段重复拼接成 4 秒把 30fps 的视频降到 15fps 再做一次都能额外创造出一些变化样本。如果少数类别实在太少比如只有几十条视频我的建议是放弃训练自己的模型改用“预训练特征 线性分类头”的方案。具体做法是用开源模型提取视频特征冻结骨干网络只训练一个小的分类头。这样对数据量的要求会低一个数量级在少样本场景下往往比端到端训练效果更稳。5.3 各类问题的快查表为了方便你排查问题我把实际项目里高频出现的坑整理成了表格按“问题现象、原因分析、解决方案”三列列出。问题现象原因分析解决方案训练 loss 降不下去标签噪声过大或样本类别重复清洗标签检查标注质量降低学习率重新训练验证集 mAP 偏低尤其是低频动作类别类别不平衡加权采样、数据增强、修改 Loss 中的类别权重模型对镜头切换敏感切换处频繁误判训练数据里镜头切换过多清洗样本去掉过短的片段增加时序平滑后处理推理时漏检框很多人体检测器的阈值设太高降低检测置信度阈值或者用更密集的锚点/查询机制预测结果总是集中在某一类数据类别分布极端不均检查采样器权重和 Loss 权重确认类别 id 映射是否错位5.4 下载、存储与算力的成本控制经验视频数据集动辄几十 GB 到几百 GB存储和带宽成本很容易被忽略。我自己的经验是不要在下第一时间把所有视频都解压成原始帧而是先用 ffmpeg 抽取关键帧或低分辨率版本跑通流程后再决定要不要保留全量。原始视频按 25fps 抽帧会直接多出几百 GB 的中间文件训练时再用缓存复用能省下大量磁盘空间。训练时的 I/O 瓶颈也要提前处理。视频数据在训练时往往是异步加载如果每步训练都要实时解码视频GPU 会被 CPU 解码速度拖死。建议提前用 ffmpeg 把所有视频抽帧为图片序列或者训练前按固定帧采样存成 numpy 数组用内存映射mmap读取。实测下来这一步能把训练速度提升 2 倍以上尤其是使用多卡训练时效果更明显。算力紧张的朋友建议先用小规模子集做消融实验比如从 UCF101 里每个类别抽 10 个视频把全套训练脚本跑通确认模型的收敛曲线正常再上全量数据。别一上来就挑战 Kinetics 预训练全量微调GPU 账单会教做人。我个人维护这份数据集清单的习惯是每用一个新的数据集都会把“数据集简介、标注格式要点、下载入口、License、踩过的坑”整理成一篇 markdown 笔记放在项目仓库的 docs 目录下。这样半年后再回来翻不用重新踩一遍当年的雷。希望这份持续更新的整理也能成为你收藏夹里一个长期有效的起点。
返回列表