ARTICLE DETAIL

资讯详情

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

基于 VIA 工具的动作识别视频标注全流程指南:从时间片段标注到训练数据集的构建(computervision-recipes 实战)

基于 VIA 工具的动作识别视频标注全流程指南:从时间片段标注到训练数据集的构建(computervision-recipes 实战) 计算机视觉深度学习【免费下载链接】computervision-recipesBest Practices, code samples, and documentation for Computer Vision.项目地址https://gitcode.com/gh_mirrors/co/computervision-recipes点击查看免费下载动作识别模型的训练与评估离不开精确的“动作开始/结束时间点”标注ground truth temporal segments。本指南以 computervision-recipes 仓库中scenarios/action_recognition/video_annotation目录为核心系统讲解如何使用牛津大学 VGG 团队开发的 VGG Image AnnotatorVIA完成视频时序标注并通过仓库配套的三个脚本video_conversion.py、clip_extraction.py、split_examples.py把标注结果自动转化为可直接用于动作识别模型训练的正负样本片段与标签文件。读完本文你将掌握一套完整、可复制的“原始视频 → 时序标注 → 分类片段 → 训练/评估数据集”构建流水线。为什么选择 VIA 进行时序标注创建动作识别的训练集或评估集关键前提是为视频中的每个动作标出准确的起止时间。在评估了多款工具之后本项目团队的首选是 VGG Image Annotator (VIA)——由牛津大学 VGG 研究组开发的开源标注软件。其核心优势在于轻量级无需安装解压 zip 即可在浏览器中使用支持以毫秒级精度标注视频时间片段temporal segments支持在同一视频中为多个动作建立独立轨道track并行标注支持预览已标注片段并将动作起止时间导出为 CSV。下图是 VIA 工具在动作标注场景下的真实界面可以看到两条动作轨道如 1. break egg、2. pour liquid分别对应不同颜色的时间片段标注块时间轴刻度精确到毫秒VIA 使用七步指南动作识别标注VIA 官方提供了在线演示via_video_annotator本项目文档给出了针对动作识别任务的具体操作步骤完整整理如下Step 1从 VIA 官网下载工具 zip 包via-1.0.6.zip。Step 2解压后打开via_video_annotator.html启动标注工具。注意部分浏览器对该工具的支持不够稳定实测 Chrome 兼容性最好。Step 3导入视频。既可以从本地导入视频文件也可以从 URL 导入。Step 4为动作标注创建新属性。创建属性时Anchor一栏需选择Temporal Segment in Video or Audio视频/音频中的时间片段这一步决定了该属性用于标注时间区间而非空间区域。创建后再次点击该按钮即可查看已创建的属性。Step 5在Timeline List中更新需要跟踪的动作列表。多个动作需分别创建轨道例如要分别标注eat和drink就输入 1. eat, 2. drink然后点击update刷新轨道。Step 6点击某条轨道为对应动作添加片段标注。快捷键按a在当前时间点添加时间片段起点按Shift a将时间片段的边界更新到当前时间点。Step 7导出标注。若只包含时间片段标注选择Only Temporal Segments as CSV导出 CSV 文件。从标注 CSV 到训练数据集三个配套脚本VIA 工具输出的标注结果是 CSV 文件但动作识别训练通常需要把每段标注的动作单独切分成独立的视频片段clip并按类别存放。仓库在scenarios/action_recognition/video_annotation/下提供了三个脚本完成这一构建工作分别对应流水线的三个环节。1. video_conversion.py统一视频格式video_conversion.py负责把不便于 VIA 读取的视频格式脚本中针对asf格式转换为mp4和avi两种格式且转换过程不损失视频质量。用法python video_conversion.py -i input_dir -o output_dir参数说明-i, --input_dir输入视频目录必填-o, --output_dir转换后视频的输出目录默认./outputs。脚本会遍历输入目录下所有.asf文件在输出目录下分别建立mp4与avi两个子目录存放结果。其底层调用位于 video_annotation_utils.py 的video_format_conversion()当h264_formatTrue时使用ffmpeg -i video -vcodec libx264 output重新编码否则使用ffmpeg -i video -c copy -map 0 output做流复制后者因不做重编码而更快、且画质无损。2. clip_extraction.py按标注切分片段并生成标签clip_extraction.py是流水线的核心读取 VIA 导出的标注 CSV将每个标注动作按起止时间从原始视频中切出独立片段按类别放入clip_dir下的对应子目录并生成一份“文件名 → 类别 ID”的标签文件。用法python clip_extraction.py \ --annotation_filepath VIA导出的csv \ --video_dir 原始视频目录 \ --clip_dir 片段输出目录 \ --classes_filepath 类别定义文件 \ --label_filepath 标签文件输出路径各参数含义与默认值依据 clip_extraction.py 命令行解析参数说明默认值--annotation_filepathVIA 标注工具导出的 CSV 路径必填无--video_dir输入视频目录必填无--clip_dir切分片段输出目录必填无--classes_filepath类别名到类别 ID 的映射文件必填格式为每行动作名 ID无--label_filepath标签文件输出路径必填无--clip_format输出片段格式mp4--no_action_class负样本类别名提供该参数才会生成“无目标动作”的负样本无不生成--contiguous为True时提取全部连续、互不重叠的负样本否则按num_negative_samples随机采样False--negative_clip_length负样本片段的时长秒2.0--negative_clip_margin正样本两侧需忽略的时长秒避免负样本边缘紧贴正样本3.0--sample_annotated_only仅从含正样本的视频中采样负样本仅对随机采样方式生效True--num_negative_samples随机采样负样本数量仅对非 contiguous 方式生效0.0关键流程细节对应源码实现CSV 解析用pd.read_csv(annotation_filepath, skiprows1)跳过 VIA 导出的表头注释行并过滤掉metadata为{}的空标注记录文件名解析parse_video_file_name()会解析file_list列VIA 中该列为列表形式提取视频文件名并还原 URL 编码的空格%20→ 空格片段命名create_clip_file_name()按视频名_标注ID.mp4的规则生成片段文件名保证每个标注区间都有唯一标识类别映射read_classes_file()读取类别名 → 类别 ID映射get_clip_action_label()从metadata列解析动作标签只保留在类别文件中出现的动作未在类别表中的标注会被过滤切分命令底层通过_extract_clip_ffmpeg()调用ffmpeg -ss start -i video -t duration clip -codec copy -y使用流复制保证切分速度与质量若目标片段已存在则跳过兼容两种 CSV 时间格式VIA 不同版本导出的时间信息有两种表示——两列temporal_segment_start/temporal_segment_end或单列temporal_coordinates形如[start, end]extract_clip()与负样本逻辑均兼容这两种格式。负样本提取的两种策略源码位于 video_annotation_utils.py连续提取contiguous对每段视频先取全部正样本区间用_merge_temporal_interval()合并相互重叠的动作区间随后在“无动作”时间段内按clip_length等长切分并在每个区间两端各留出negative_clip_margin的缓冲_split_interval中通过left/right_ignore_clip_length实现还可通过skip_clip_length控制负样本间距、减少样本数量随机采样非 contiguous在候选视频中随机挑选文件与起始时间用check_interval_overlaps()校验采样区间与所有正样本区间无重叠重叠则重新采样直到采够num_negative_samples个片段。两种策略生成的负样本均写入clip_dir/no_action_class/子目录并追加到标签文件中类别 ID 取classes映射中负样本类别的 ID。3. split_examples.py划分训练集与评估集split_examples.py把上一步生成的标签文件按比例随机划分为训练集与评估集并可选地为“困难负样本挖掘hard negative mining”预留负样本候选集与负样本测试集。用法python split_examples.py \ --label_filepath clip_extraction生成的标签文件 \ --train_proportion 训练集比例参数说明--label_filepath标签文件路径必填--train_proportion进入训练集的比例必填浮点数例如 0.8--num_negatives_set为困难负样本挖掘预留的负样本候选集数量默认0--num_negatives_test为困难负样本挖掘预留的负样本测试集数量默认0--negative_label_id负样本类别的标签 ID仅当存在负样本时需要。脚本读取标签文件后若指定了negative_label_id会先统计负样本数量当num_negatives_set num_negatives_test超过负样本总数时会抛出异常。随后随机抽取出负样本候选集输出neg_set.txt与负样本测试集输出neg_test.txt其余样本按train_proportion随机打乱后输出train.txt与val.txt。值得注意的是split_examples.py输出的train.txt/val.txt采用类别/文件名 类别ID的格式这与仓库中 HMDB51 官方划分文件如 data/misc/hmdb51/hmdb51_vid_train_split_1.txt 中brush_hair/Aussie_Brunette_... 0的格式一致也就是说该脚本产出的划分文件可以直接对接utils_cv/action_recognition/下的数据加载逻辑参见 utils_cv/action_recognition/data.py 中 HMDB51 与 Kinetics400 数据集的划分约定。标注工具横向对比针对“为动作标注起止时间”这一需求市场上存在两类标注范式项目文档对此做了明确区分固定长度片段标注Fixed-length clip annotation界面先把视频切成固定长度的片段用户逐段标注是否包含目标动作适合动作稀疏的场景但对短动作如 1 秒内的动作不友好。时间片段标注Segmentations annotation用户直接在时间轴上标出每个动作的精确起止位置更耗时但定位精度更高更贴近时序定位temporal localization任务的需求。下表为文档中给出的工具对比按标注类型、优缺点、是否开源三方面整理工具标注类型优点缺点是否开源MuViLab固定长度片段标注同时展示多个片段、加速标注对稀疏动作场景尤其有用动作很短如 1 秒时不适用开源GitHubVIA (VGG Image Annotator)时间片段标注轻量免安装仅需下载 zip活跃维护支持毫秒级高精度、标注片段预览、动作起止时间导出 CSV、同视频多轨道标注多动作上手容易偶有代码不稳定如界面短暂无响应开源GitLabANVIL时间片段标注支持高精度标注并导出起止时间需要 Java 环境依赖较重规范多、上手较难Java 相关问题可能导致难以运行非开源但免费Action Annotation Tool时间片段标注可为视频关键帧添加标签支持毫秒级高精度相比 VIA / ANVIL 便捷性差已停止活跃开发开源GitHub综合来看VIA 在轻量性、标注精度、多轨道支持与导出便利性上取得了最佳平衡这也是本项目将其作为默认标注工具的原因。从标注到训练整条流水线串联将上述工具与脚本串联即可形成完整的动作识别数据准备链路用video_conversion.py把原始视频统一转为 VIA 可稳定读取的格式mp4/avi在浏览器中打开 VIA按七步指南完成动作时间片段标注导出 CSV编写classes_filepath每行动作名 ID如eat 0、drink 1运行clip_extraction.py切分正样本片段按需开启--no_action_class与--contiguous生成负样本得到按类别组织的clip_dir与标签文件运行split_examples.py划分train.txt/val.txt可选neg_set.txt/neg_test.txt用于困难负样本挖掘将划分文件与片段目录交给utils_cv/action_recognition/的数据加载模块即可开始 I3D 等动作识别模型的训练对应训练入口见 contrib/action_recognition/i3d/train.py 与 scenarios/action_recognition/02_training_hmdb.ipynb。其中正负样本比例与负样本采样策略连续 vs 随机、margin 与片段长度会直接影响模型对背景片段的判别能力建议结合具体动作的时长分布调整--negative_clip_length与--negative_clip_margin并通过split_examples.py预留负样本候选集做困难负样本挖掘迭代。相关参考该标注流程涉及的动作识别背景资料包括动作识别综述文章、HACSHuman Action Clips and Segments数据集论文、Kinetics 人类动作视频数据集论文以及 VIA 标注软件的系统论文Dutta Zisserman, ACM MM 19arXiv:1904.10699。标注范式差异固定长度片段 vs 时间片段可参考 HACS 数据集的标注设计。赞分享计算机视觉深度学习【免费下载链接】computervision-recipesBest Practices, code samples, and documentation for Computer Vision.项目地址https://gitcode.com/gh_mirrors/co/computervision-recipes点击查看免费下载相关推荐5大computervision-recipes数据标注工具高效创建训练数据集的完整指南5大computervision recipes数据标注工具高效创建训练数据集的完整指南 在计算机视觉项目中高质量的标注数据是训练精准模型的基础。compu计算机视觉深度学习PaddleLabel 数据标注工具完全指南从标注到 PaddleSeg 训练的全流程实战PaddleLabel 数据标注工具完全指南从标注到 PaddleSeg 训练的全流程实战 导读 本文围绕 PaddleSeg 仓库中收录的 PaddleLa人工智能计算机视觉预训练DeepKE 数据标注指南基于 doccano 与自动标注工具构建实体识别、关系抽取训练数据DeepKE 数据标注指南基于 doccano 与自动标注工具构建实体识别、关系抽取训练数据 本文是 DeepKE开源知识图谱抽取与构建工具支持低资源、长人工智能NLP知识图谱深度学习上一篇openEuler博客安全指南保护技术博客免受攻击的15个最佳实践下一篇如何扩展A-Tune-UI功能开发者自定义模块的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表