MMAction2 中的 OmniSource 数据集准备:从申请、解压到长视频切分的完整实践指南

发布时间:2026/10/14 17:20:26
MMAction2 中的 OmniSource 数据集准备:从申请、解压到长视频切分的完整实践指南 人工智能计算机视觉深度学习【免费下载链接】mmaction2OpenMMLabs Next Generation Video Understanding Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmaction2点击查看免费下载本篇指南聚焦 MMAction2 仓库中tools/data/omnisource/目录下的 OmniSource 数据集准备文档系统讲解 OmniSource 子集的组成与规模、标注文件体系、数据目录结构以及使用仓库自带脚本将 Kinetics 原始长视频切分为 10 秒片段的具体实现细节。读完本文后你将能够独立完成该约 2TB 规模混合数据源的下载与落盘准备并理解这些数据如何支撑 MMAction2 中图像-视频联合训练Joint Training的模型配置与训练循环。一、OmniSource 数据集简介OmniSource 源自论文《Omni-sourced Webly-supervised Learning for Video Recognition》Duan et al., 2020arXiv:2003.13042。MMAction2 发布了该论文所用 OmniSource 网络数据集的一个子集其核心特点是所有类别均来自 Kinetics-400 体系但实际覆盖的是 Mini-Kinetics 子集的 200 类动作Mini-Kinetics 由论文《Rethinking Spatiotemporal Feature Learning: Speed-Accuracy Trade-offs in Video Classification》提出。该子集提供了全部与这 200 类动作相关的数据源包括Kinetics 裁剪片段数据集k200Kinetics 原始未裁剪长视频k200_raw来自 Google 的网络图片googleimage_200来自 Instagram 的网络图片insimage_200来自 Instagram 的网络视频insvideo_200。获取方式上由于数据均为爬取所得的原始数据且体量巨大用户需要先填写仓库文档中给出的数据申请表申请通过后会通过邮箱收到下载链接下载过程需要预留较长时间。各分量的规模统计如下引自 中文文档 与 英文文档数据集名称样本个数所占空间过滤使用的 Teacher 模型过滤后的样本个数与 k200_val 中样本相似疑似重复的样本个数k200_train7603045.6GN/AN/AN/Ak200_val48382.9GN/AN/AN/Agoogleimage_2003050880265.5GTSN-R50-8seg1188695967insimage_2003654650224.4GTSN-R50-8seg879726116insvideo_2007328551487.6GSlowOnly-8x8-R50330680956k200_raw_train76027963.5GSlowOnly-8x8-R50N/AN/A从表格可以看出两点值得注意的信息其一网络数据均未经过滤直接发布文档同时附带了用 Teacher 模型图片用 TSN-R50-8seg视频用 SlowOnly-8x8-R50预过滤后的正样本清单训练时可直接使用过滤结果以省去自行过滤的成本其二标注文件还额外提供了与k200_val验证集疑似重复的样本清单方便用户在训练中做去重de-duplication。二、下载后的 OmniSource 目录结构申请并下载完成后OmniSource/目录的初始结构如下标注文件均位于annotations/下OmniSource/ ├── annotations │ ├── googleimage_200 │ │ ├── googleimage_200.txt 从 Google 爬取到的所有图片列表 │ │ ├── tsn_8seg_googleimage_200_duplicate.txt 从 Google 爬取到的疑似与 k200-val 中样本重复的正样本列表 │ │ ├── tsn_8seg_googleimage_200.txt 从 Google 爬取到的经过 teacher 模型过滤的正样本列表 │ │ └── tsn_8seg_googleimage_200_wodup.txt 从 Google 爬取到的经过 teacher 模型过滤及去重的正样本列表 │ ├── insimage_200 │ │ ├── insimage_200.txt │ │ ├── tsn_8seg_insimage_200_duplicate.txt │ │ ├── tsn_8seg_insimage_200.txt │ │ └── tsn_8seg_insimage_200_wodup.txt │ ├── insvideo_200 │ │ ├── insvideo_200.txt │ │ ├── slowonly_8x8_insvideo_200_duplicate.txt │ │ ├── slowonly_8x8_insvideo_200.txt │ │ └── slowonly_8x8_insvideo_200_wodup.txt │ ├── k200_actions.txt MiniKinetics 中 200 类动作的名称 │ ├── K400_to_MiniKinetics_classidx_mapping.json Kinetics 中的类索引至 MiniKinetics 中的类索引的映射 │ ├── kinetics_200 │ │ ├── k200_train.txt │ │ └── k200_val.txt │ └── kinetics_raw_200 │ └── slowonly_8x8_kinetics_raw_200.json 经 teacher 模型过滤后的 Kinetics 原始视频片段 ├── googleimage_200 共 10 卷 │ ├── vol_0.tar │ ├── ... │ └── vol_9.tar ├── insimage_200 共 10 卷 │ ├── vol_0.tar │ ├── ... │ └── vol_9.tar ├── insvideo_200 共 20 卷 │ ├── vol_00.tar │ ├── ... │ └── vol_19.tar ├── kinetics_200_train │ └── kinetics_200_train.tar ├── kinetics_200_val │ └── kinetics_200_val.tar └── kinetics_raw_200_train 共 16 卷 ├── vol_0.tar ├── ... └── vol_15.tar标注文件体系可以归纳为三个层次全量列表如googleimage_200.txt爬取到的所有有效文件清单过滤列表如tsn_8seg_googleimage_200.txt经 Teacher 模型判定为正样本的文件清单去重列表*_wodup.txt在过滤基础上剔除了与k200_val疑似重复样本后的清单训练时通常直接采用这一层。此外k200_actions.txt提供 200 类动作名称K400_to_MiniKinetics_classidx_mapping.json提供 Kinetics-400 到 MiniKinetics 的类索引映射slowonly_8x8_kinetics_raw_200.json则是长视频中被 Teacher 模型判定为有效片段的记录。三、数据准备解压合并与长视频切分文档给出的准备流程分为两步最终数据统一放置在data/OmniSource/目录下解压合并对于kinetics_200train/val以及三个网络数据集googleimage_200、insimage_200、insvideo_200只需将各压缩卷tar volumes解压并把内容合并到同一目录即可。长视频切分对于 Kinetics 原始视频kinetics_raw_200_train直接读取长视频非常耗时必须先切分为小段。MMAction2 在 tools/data/omnisource/ 目录下提供了trim_raw_video.py脚本用于把长视频切分为 10 秒的小段并在切分完成后删除原始长视频以节省磁盘空间。准备完成后的data/OmniSource/目录结构如下为简洁起见省略了训练与测试未使用的文件data/OmniSource/ ├── annotations │ ├── googleimage_200 │ │ └── tsn_8seg_googleimage_200_wodup.txt Positive file list of images crawled from Google, filtered by the teacher model, after de-duplication. │ ├── insimage_200 │ │ └── tsn_8seg_insimage_200_wodup.txt │ ├── insvideo_200 │ │ └── slowonly_8x8_insvideo_200_wodup.txt │ ├── kinetics_200 │ │ ├── k200_train.txt │ │ └── k200_val.txt │ ├── kinetics_raw_200 │ │ └── slowonly_8x8_kinetics_raw_200.json Kinetics Raw Clips filtered by the teacher model. │ └── webimage_200 │ └── tsn_8seg_webimage_200_wodup.txt The union of tsn_8seg_googleimage_200_wodup.txt and tsn_8seg_insimage_200_wodup.txt ├── googleimage_200 │ ├── 000 │ │ ├── 00 │ │ │ ├── 000001.jpg │ │ │ ├── ... │ │ │ └── 000901.jpg │ │ ├── ... │ │ ├── 19 │ ├── ... │ └── 199 ├── insimage_200 │ ├── 000 │ │ ├── abseil │ │ │ ├── 1J9tKWCNgV_0.jpg │ │ │ ├── ... │ │ │ └── 1J9tKWCNgV_0.jpg │ │ ├── abseiling │ ├── ... │ └── 199 ├── insvideo_200 │ ├── 000 │ │ ├── abseil │ │ │ ├── B00arxogubl.mp4 │ │ │ ├── ... │ │ │ └── BzYsP0HIvbt.mp4 │ │ ├── abseiling │ ├── ... │ └── 199 ├── kinetics_200_train │ ├── 0074cdXclLU.mp4 │ ├── ... │ ├── zzzlyL61Fyo.mp4 ├── kinetics_200_val │ ├── 01fAWEHzudA.mp4 │ ├── ... │ ├── zymA_6jZIz4.mp4 └── kinetics_raw_200_train ├── pref_ │ ├── ___dTOdxzXY │ │ ├── part_0.mp4 │ │ ├── ... │ │ ├── part_6.mp4 │ ├── ... │ └── _zygwGDE2EM ├── ... └── prefZ从目录结构可以观察到三类媒体数据的组织差异图片按类索引/分桶/文件名两级目录组织网络视频按类索引/动作名/视频文件组织而切分后的 Kinetics 原始视频则按视频 ID 前缀/视频 ID/part_N.mp4三级目录组织。准备阶段还需要注意的一点是annotations/webimage_200/下的tsn_8seg_webimage_200_wodup.txt是 Google 与 Instagram 两份去重图片清单的并集用于将两个图片来源合并为一个训练数据源。四、源码级解读trim_raw_video.py 的切分逻辑trim_raw_video.py位于 tools/data/omnisource/trim_raw_video.py接收单个视频路径作为命令行参数sys.argv[1]内部由两个函数组成实际调用 ffmpeg/ffprobe 完成全部工作get_duration(vid_name)通过ffprobe -i video 21 | grep Duration解析出Duration: hh:mm:ss,xxx字段换算为总秒数int(h)*3600 int(m)*60 float(s)。trim(vid_name)先获取时长若获取失败则打印告警并直接返回不删除文件。否则以去掉扩展名的视频路径作为输出目录mmengine.mkdir_or_exist随后在while i * 10 lt循环中按 10 秒步长生成片段切分命令模板为ffmpeg -y loglevel error -i 输入视频 -ss 起始秒 -t 10 -crf 18 -c:v libx264 输出目录/part_i.mp4其中-crf 18控制重编码质量-c:v libx264指定 H.264 编码-t 10保证每段最长 10 秒最后一段可能不足 10 秒。切分完成后脚本会执行os.remove(vid_name)删除原始长视频——这与目录结构中原始 mp4 不再出现、取而代之的是part_0.mp4 ... part_N.mp4的现象一致也是为了控制约 1TB 原始视频的空间占用。由于脚本对单个文件工作批量处理时需要在外层用xargs/find等工具对全部原始视频逐文件调用。五、数据用途OmniSource 如何支撑图像-视频联合训练数据准备完毕后这些目录即服务于 MMAction2 中 OmniSource 相关的识别配置。仓库在 configs/recognition/omnisource/ 下提供了示例配置 slowonly_r50_8xb16-8x8x1-256e_imagenet-kinetics400-rgb.py其 README 给出的核心结论是在 ImageNet 图像与 Kinetics 视频上联合训练一个识别器相比仅在相同图像集上预训练可显著提升视频识别性能该配置在 Kinetics-400 上 Top-1 77.30% / Top-5 93.23%8 卡 ResNet50见 metafile.yml。从源码结构看这套联合训练由三处关键实现支撑均与 OmniSource 数据源一一对应RecognizerOmnimmaction/models/recognizers/recognizer_omni.py其loss()方法遍历传入的多个SampleList每个对应一个数据源如视频批次与图像批次对每一路分别过 backbone 与 head 并计算损失再以loss_cls_0、loss_cls_1的编号形式合并返回——这与单元测试 tests/models/recognizers/recognizer_omni.py 中同时构造 5D 视频张量(1, 3, 8, 224, 224)与 4D 图像张量(1, 3, 224, 224)并断言loss_cls_0/loss_cls_1存在的验证逻辑完全吻合。OmniResNet/OmniHeadmmaction/models/backbones/resnet_omni.py、mmaction/models/heads/omni_head.pybackbone 用Conv3d 时间卷积核实现 SlowOnly 风格特征提取可接受图像与视频输入OmniHead则同时挂fc2d图像分支image_classes1000与fc3d视频分支video_classes400两套分类头forward时按输入张量是 4D 还是 5D 自动路由。MultiLoaderEpochBasedTrainLoopmmaction/engine/runner/multi_loop.py配置中train_cfg使用typeMultiLoaderEpochBasedTrainLoop把image_dataloaderImageNet 图像流作为other_loaders与主train_dataloaderKinetics 视频流配对。其内部的EpochMultiLoader对两个 loader 做next()成对取样并以较短的 loader 长度作为 epoch 长度示例配置据此动态推导图像 batch sizenum_iter num_videos // (batchsize_video * num_gpus)batchsize_image num_images // (num_iter * num_gpus)保证每个 epoch 恰好遍历一遍视频集并近似遍历一遍图像集。MIX2d3d预处理格式示例配置的data_preprocessor指定format_shapeMIX2d3d。从 mmaction/models/data_preprocessors/data_preprocessor.py 的实现看该模式下 4D 批次会被 view 成(-1, 1, 1)的 NCTHW 形式并做逐样本归一化5D 批次则保持 NCTHW 直接归一化从而让同一张网络同时处理图像流与视频流。训练与测试入口沿用仓库通用工具# 训练确定性模式 python tools/train.py configs/recognition/omnisource/slowonly_r50_8xb16-8x8x1-256e_imagenet-kinetics400-rgb.py \ --seed0 --deterministic # 测试并导出结果 python tools/test.py configs/recognition/omnisource/slowonly_r50_8xb16-8x8x1-256e_imagenet-kinetics400-rgb.py \ checkpoints/SOME_CHECKPOINT.pth --dump result.pkl配置文档还给出两条实用提示若使用与 8x16 不同的 GPU 数或单卡 batch size建议加--auto-scale-lr按线性缩放规则调整学习率由于该联合训练过程可能出现未知原因的崩溃可通过--cfg-options resumeTrue断点续训。六、引用如使用 OmniSource 数据集或相关模型建议按文档要求引用原论文article{duan2020omni, title{Omni-sourced Webly-supervised Learning for Video Recognition}, author{Duan, Haodong and Zhao, Yue and Xiong, Yuanjun and Liu, Wentao and Lin, Dahua}, journal{arXiv preprint arXiv:2003.13042}, year{2020} }七、小结OmniSource 子集覆盖 Mini-Kinetics 200 类下的 5 类数据源Kinetics 裁剪片段、Kinetics 原始长视频、Google/Instagram 图片与 Instagram 视频总量约 2TB需通过申请表获取下载链接标注文件按“全量 → Teacher 过滤 → 去重”三层组织训练时优先使用*_wodup.txt与webimage_200并集清单除kinetics_raw_200_train外其余数据解压合并即可长视频需通过 tools/data/omnisource/trim_raw_video.py 按 10 秒/段切分脚本会在完成后删除原文件所有数据统一放置于data/OmniSource/随后即可配合configs/recognition/omnisource/下的配置借助RecognizerOmniMultiLoaderEpochBasedTrainLoopMIX2d3d预处理完成图像-视频联合训练。赞分享人工智能计算机视觉深度学习【免费下载链接】mmaction2OpenMMLabs Next Generation Video Understanding Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmaction2点击查看免费下载相关推荐MMAction2 中 OmniSource 数据集的获取、准备与 Omni-sourced 联合训练实战指南MMAction2 中 OmniSource 数据集的获取、准备与 Omni sourced 联合训练实战指南 本篇技术指南基于 MMAction2 仓库中 O人工智能计算机视觉深度学习MMAction2 中 Multi-Moments in TimeMMIT多动作视频数据集的完整准备流程MMAction2 中 Multi Moments in TimeMMIT多动作视频数据集的完整准备流程 本文围绕 MMAction2 仓库提供的 MMIT人工智能计算机视觉深度学习10 分钟释放上百 GBCzkawka 用重复文件清理把硬盘盘一遍10 分钟释放上百 GBCzkawka 用重复文件清理把硬盘盘一遍 打开磁盘管理C 盘又红了想删点东西却不知道从哪下手。Czkawka 是一个用 Rust桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询