ARTICLE DETAIL

资讯详情

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

DeepLabCut merge_datasets 详解:训练数据精炼迭代中的关键一步

DeepLabCut merge_datasets 详解:训练数据精炼迭代中的关键一步 人工智能深度学习计算机视觉科研【免费下载链接】DeepLabCutOfficial implementation of DeepLabCut: Markerless pose estimation of user-defined features with deep learning for all animals incl. humans项目地址https://gitcode.com/gh_mirrors/de/DeepLabCut点击查看免费下载导读deeplabcut.merge_datasets是 DeepLabCut 标记数据精炼refinement流程中承上启下的核心 API。它负责将用户手动精炼后的异常帧标注合并回训练集并把项目config.yaml中的iteration迭代号自动 1为重新生成训练集、重新训练网络做好准备。阅读本文后你将掌握该函数在精炼工作流中的位置、其校验逻辑与参数语义以及从extract_outlier_frames→refine_labels→merge_datasets→create_training_dataset的完整实战闭环。一、函数定位精炼迭代中的“合并”节点DeepLabCut 的模型训练遵循“标注—训练—评估—精炼”的迭代循环。当网络在某段视频上预测不佳时用户会先提取异常帧、在 GUI 中手动修正标签最后调用merge_datasets把修正结果并入训练数据。官方用户指南将该步骤描述为“在修正了所有子目录中所有帧的标签之后用户应合并数据集以创建新的数据集。在此步骤中config.yaml文件中的iteration参数会被自动更新。”——见 docs/maDLC_UserGuide.md 与 docs/main-workflows/user-guide.md 中的 “Merge datasets” 章节。该函数位于 deeplabcut/refine_training_dataset/outlier_frames.py并通过 deeplabcut/init.py 以deeplabcut.merge_datasets的形式暴露为公开 API同时被收录进 docs/HelperFunctions.md 的辅助函数清单。二、函数签名与参数语义merge_datasets的完整签名与 docstring 定义于 deeplabcut/refine_training_dataset/outlier_frames.py#L1027-L1045def merge_datasets(config: str | Path, forceiterateNone): Merge the original training dataset with the newly refined data. Checks if the original training dataset can be merged with the newly refined training dataset. To do so it will check if the frames in all extracted video sets were relabeled. If this is the case then the iteration variable is advanced by 1. 参数类型说明configstr \| Path项目config.yaml的完整路径必填forceiterateint \| None可选。若传入整数当所有数据集都已标注/精炼完成时iteration将被直接设置为该值而非自增 1默认None官方示例用法deeplabcut.merge_datasets(/analysis/project/reaching-task/config.yaml)从源码看该函数具有副作用成功时会把iteration值写回config.yaml。配置的读取与回写分别经由 deeplabcut/core/config/utils.py 中的read_config/write_config完成iteration字段本身则被定义在 deeplabcut/core/config/project_config.py 的ProjectConfig中iteration: NonNegativeInt。三、合并前的校验逻辑逐文件夹检查是否已精炼merge_datasets的核心工作不是“搬文件”而是校验。源码outlier_frames.py#L1047-L1078中的逻辑如下读取config定位项目根目录遍历labeled-data/下的所有子文件夹跳过名称含_labeled的文件夹以及以.开头的临时目录对每个视频文件夹检查是否存在以下任一标记文件MachineLabelsRefine.h5—— 该文件夹已被手动精炼过CollectedData_scorer.h5—— 该文件夹包含人工标注数据scorer即config.yaml中的scorer字段若存在任何文件夹两种标记文件都没有则打印 “The following folder was not manually refined, ...”并将内部标志flagged置为True仅当所有文件夹都通过校验flagged False时才推进iterationforceiterate为真值时cfg[iteration] forceiterate否则cfg[iteration] int(iter_prev 1)写回配置并打印提示现在可以调用create_training_dataset为扩充后的标注图像创建新训练集。若校验失败函数会打印提示并要求用户补齐标注或删除未修正的文件夹iteration不会被修改。也就是说只要有一个视频文件夹的异常帧没有精炼合并就不会发生这保证了训练集不会混入未经人工确认的机器预测标签。四、完整工作流从异常帧提取到数据集合并merge_datasets位于精炼链路末端理解其上下文才能正确使用。推荐流程如下1. 提取异常帧当网络预测在某视频上表现不佳时先运行 extract_outlier_frames实现位于 outlier_frames.py#L183-L209deeplabcut.extract_outlier_frames(config_path, [videofile_path])主用户指南docs/main-workflows/user-guide.md列出了可选的outlieralgorithmuncertain某关键点或全部关键点的似然低于p_bound时选中该帧jump某关键点或全部相较上一帧跳变超过epsilon像素时选中fitting对每个关键点的时间序列拟合 ARIMA 状态空间模型预测点与拟合值平均偏差超过epsilon时选中manual人工目视挑选。此外还可通过extractionalgorithmuniform随机抽样或kmeans对候选帧做 k-means 聚类从候选集中进一步挑选实际提取数量受config.yaml中numframes2extract等参数约束。2. 在 GUI 中精炼标签对提取出的疑似异常帧调用refine_labelsAPI 文档见 docs/api/deeplabcut.refine_labels.rst启动标注 GUIdeeplabcut.refine_labels(config_path)根据 docs/maDLC_UserGuide.md用户在 GUI 中会遇到四类情况(A)可见关键点且预测准确 —— 无需修改(B)可见关键点但预测错误 —— 将标签移动到实际位置(C)不可见/被遮挡的关键点 —— 用中键删除预测标签低似然预测以空心圆显示便于识别(D)无效图像 —— 移除该图像及其预测。3. 合并数据集当所有提取视频文件夹的标签都精炼完成后执行deeplabcut.merge_datasets(config_path)成功合并后iteration自动 1。后续训练数据集会存放在新的iteration-#子目录下#即更新后的iteration值与旧迭代的数据完全隔离。五、GUI 中的一键合并GUI 项目页集成除了脚本调用merge_datasets也深度集成在 DeepLabCut 的 GUI 中。在 deeplabcut/gui/tabs/extract_outlier_frames.py 中GUI 提供 “Merge data” 按钮self.merge_data_button点击后弹出警告对话框文案为“请确保在合并数据集前已精炼所有标签。若合并数据集需要在开始训练前重新创建训练数据集。准备好合并数据集了吗”用户确认后执行deeplabcut.merge_datasets(self.root.config_path, forceiterateNone)。这验证了官方对merge_datasets的预期用法它不是一个可以随意重复调用的工具而是精炼阶段结束后的一次性提交动作。GUI 集成还出现在 deeplabcut/gui/tabs/refine_tracklets.py 中用于追踪片段精炼后的数据合并。六、合并之后验证与新一轮训练docs/maDLC_UserGuide.md 明确给出了合并后的标准后续动作验证合并结果通过“Plot Labels”步骤绘制全部标签确认合并成功对应check_labels相关 API见 deeplabcut/generate_training_dataset 模块重新创建训练集调用create_training_dataset扩充后的标注图像会生成新的训练/测试划分并存放于新的iteration-#目录重新训练网络调用train_network。指南特别建议若原始标签有任何调整应从全新权重开始训练一般推荐否则可考虑沿用已训练好的网络权重继续训练评估泛化若新模型在数据上泛化良好即可分析新视频否则考虑继续标注更多数据进入下一轮精炼迭代。七、实践要点与常见问题路径必须是项目config.yaml的完整路径函数内部依赖Path(config).parents[0]定位labeled-data/目录传错路径将导致校验失败或FileNotFoundError。迭代号自增是幂等性风险点正常流程下每次精炼只应调用一次若需要把迭代号直接跳到指定值例如从第 0 次直接跳到第 2 次使用forceiterate2但该参数仅在所有数据集都已精炼时才生效。_labeled与隐藏目录会被跳过以.开头的临时文件如.DS_Store以及含_labeled后缀的文件夹不会参与校验避免误报“未精炼”。合并≠拷贝文件从源码可见merge_datasets本身不做帧图像的物理搬运它的职责是“确认所有视频的标签都经过人工确认”然后通过更新iteration让后续create_training_dataset在新的迭代目录下重新组织数据集。多动物maDLC项目同样适用merge_datasets与单动物流程共用同一实现精炼后的MachineLabelsRefine.h5机制对单/多动物项目一致maDLC 专属的迭代目录与 shuffle 结构说明可参见 docs/maDLC_UserGuide.md。八、小结deeplabcut.merge_datasets(config, forceiterateNone)是 DeepLabCut 数据精炼循环的“提交点”它通过逐文件夹校验MachineLabelsRefine.h5或CollectedData_scorer.h5的存在性确保所有提取的异常帧都经过人工精炼然后将config.yaml的iteration自增并写回从而触发下一轮训练数据集与模型的版本隔离。无论通过 Python API 调用还是点击 GUI 中的 “Merge data” 按钮其语义完全一致。掌握它你就能在“训练效果不佳 → 提取异常帧 → 精炼 → 合并 → 重训”的闭环中顺畅迭代持续提升模型在目标实验场景下的姿态估计精度。赞分享人工智能深度学习计算机视觉科研【免费下载链接】DeepLabCutOfficial implementation of DeepLabCut: Markerless pose estimation of user-defined features with deep learning for all animals incl. humans项目地址https://gitcode.com/gh_mirrors/de/DeepLabCut点击查看免费下载相关推荐医疗AI开发者必看biobert_genetic_ner源码结构与核心组件解析医疗AI开发者必看biobert_genetic_ner源码结构与核心组件解析 在当今医疗AI快速发展的时代 BioBERT遗传命名实体识别模型 成为了生物解锁PS5硬件修复NOR闪存编程与UART调试实战指南解锁PS5硬件修复NOR闪存编程与UART调试实战指南 PS5 NOR Modifier是一款专业级的Windows GUI工具专为PlayStationVosk-Browser浏览器语音识别的WebAssembly终极指南Vosk Browser浏览器语音识别的WebAssembly终极指南 在当今数字化转型浪潮中语音交互已成为提升用户体验的关键技术。Vosk Browser文档/教程深度学习上一篇remix 仓库 tar-parser 包全解析从 0.1.0 到 0.7.1 的演进与流式解包实现下一篇SD-PPP终极Photoshop AI插件完整指南 - 让AI绘图与Photoshop无缝协作创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表