ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

DeepLabCut 数据后处理实战:自动标记身体部位距离异常的帧

DeepLabCut 数据后处理实战:自动标记身体部位距离异常的帧 人工智能深度学习计算机视觉科研【免费下载链接】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 项目中标注质量与预测质量直接决定下游分析轨迹、速度、角度等的可靠性。本篇指南围绕docs/recipes/post.md中的数据处理配方展开基于身体部位间欧氏距离的阈值检测自动标记距离异常的帧用于在deeplabcut.check_labels人工检查之外以脚本化方式筛查标注错误或预测异常。读完本文你将掌握标注数据 MultiIndex 结构的读写方法、单动物/多动物/3D 项目下的距离计算适配以及如何将该思路与deeplabcut.filterpredictions、deeplabcut.analyzeskeleton等后处理工具串联成完整的数据质检流水线。一、为什么需要距离阈值质检check_labels 的局限DeepLabCut 提供了deeplabcut.check_labels(config)用于在标注阶段可视化每一帧的标签位置其实现位于 deeplabcut/generate_training_dataset/trainingsetmanipulation.py它会为labeled-data下每个视频子目录中的帧生成叠加标注点的图像默认以标记人工标注位置并支持draw_skeleton、scale、dpi等参数。但check_labels是人眼审查工具——当项目包含数千帧时逐帧翻图效率极低且某些错误如头部与尾部被标注得距离过大并不显眼。因此社区配方给出了一条自动化路线直接在标注 DataFrame 上计算两个身体部位之间的欧氏距离凡距离超过物理阈值如头-尾长度 100 像素的帧即为可疑帧可将其索引提取出来进一步复核。这一思路同样适用于推理阶段模型预测输出的 H5 文件结构与标注文件一致因此同一套距离检测代码可以复用于预测异常筛查。二、先读懂数据标注 H5 的 MultiIndex 列结构配方代码的第一步是读取标注文件df pd.read_hdf(path_to_your_labeled_data_file)该 H5 文件即labeled-data/视频名/CollectedData_scorer.h5例如仓库示例项目 examples/openfield-Pranav-2018-10-30/labeled-data/m4s1/ 下的同名文件。从源码可确认其结构行索引为帧图像文件名或序号列是 MultiIndex由scorer、bodyparts、coords等层级组成单动物项目列层级为(scorer, bodyparts, coords)coords 通常为x、y多动物项目额外包含individuals层级即(scorer, individuals, bodyparts, coords)。这一点在 deeplabcut/utils/skeleton.py 的SkeletonBuilder中可印证——它通过df.columns.get_level_values(bodyparts)枚举部位、通过individuals in self.df.columns.names判断是否多动物项目。df.xs(head, levelbodyparts, axis1)正是利用 MultiIndex 的xs方法沿列轴取出全部属于head的子列对多动物项目即取出所有个体的head随后.to_numpy()得到(帧数, 2)或(帧数, n_个体 × 2)的坐标矩阵。三、核心配方标记身体部位距离异常的帧3.1 完整代码以下代码直接取自docs/recipes/post.md并保持原样import numpy as np import pandas as pd max_dist 100 df pd.read_hdf(path_to_your_labeled_data_file) bpt1 df.xs(head, levelbodyparts, axis1).to_numpy() bpt2 df.xs(tail, levelbodyparts, axis1).to_numpy() # We calculate the vectors from a point to the other # and group them per frame and per animal. try: diff (bpt1 - bpt2).reshape((len(df), -1, 2)) except ValueError: diff (bpt1 - bpt2).reshape((len(df), -1, 3)) dist np.linalg.norm(diff, axis2) mask np.any(dist max_dist, axis1) flagged_frames df.iloc[mask].index3.2 逐行解析步骤作用关键点max_dist 100距离阈值像素需要依据视频分辨率与动物体型设定100 像素是头-尾最大长度的示例值pd.read_hdf(...)载入标注/预测 H5key 通常为df_with_missingpd.read_hdf会自动读取df.xs(head, levelbodyparts, axis1)沿列轴按bodyparts层级取head的所有坐标列多动物项目会一次性取出所有个体的该部位bpt1 - bpt2逐帧计算两点间的向量结果形状为(帧数, 2)或(帧数, n_个体 × 2).reshape((len(df), -1, 2))将向量分组为每帧每动物的二维坐标点-1自动推断个体数except ValueError兼容含第三列如 3D 项目z坐标的数据若坐标列数为 3则按(帧数, -1, 3)重排np.linalg.norm(diff, axis2)对最后一个轴求欧氏范数得到(帧数, 动物数)的距离矩阵np.any(dist max_dist, axis1)只要某一帧存在任一动物超距即标记布尔掩码df.iloc[mask].index提取被标记帧的索引可直接用于后续定位、复核或剔除3.3 输出解读与落地用法flagged_frames是一个 Index 对象保存所有至少一对部位距离 ≥ 阈值的帧标识。常见的后续处理打印数量与占比评估整体标注质量print(len(flagged_frames), frames flagged out of, len(df))结合图像复核将索引与labeled-data中的帧文件名对应人工检查与check_labels输出互补先自动缩小可疑范围再对可疑帧集中人工审查。注此处距离为像素单位的平面欧氏距离未考虑相机透视与景深在 3D 项目中可换用包含z的三维范数即走except分支阈值应重新标定。四、从标注数据推广到推理输出数据结构的同源性标注 H5 与analyze_videos产生的预测 H5 具有一致的 MultiIndex 列结构因此上述配方只需替换文件路径即可用于预测结果质检。预测文件在项目中的命名约定为视频名 scorer .h5其定位逻辑位于 deeplabcut/utils/auxiliaryfunctions.py 的find_analyzed_data按视频名、scorer、是否_filtered后缀以及跟踪方法track_method为box/skeleton/ellipse时的bx/sk/el标记筛选候选文件再由load_analyzed_data统一读取auxiliaryfunctions.py。不过预测数据每列的坐标层级是(x, y, likelihood)三元组若直接用原配方try分支的-1, 2会失败并落入except分支按三维点处理——此时范数会把 likelihood 当作第三个坐标轴结果失真。正确的做法是先用df.xs(..., levelcoords, axis1)只取x、y两列再套用距离计算同时可利用 likelihood 过滤低置信度部位例如将 likelihood 0.5 的坐标置为 NaN 后再计算配合np.nanmax处理缺失。五、与骨架Skeleton系统的关联从距离到结构约束两个部位之间的距离本质上是骨架约束的一种表达。DeepLabCut 将骨架定义存放在项目config.yaml的skeleton字段中部位对列表并配套了完整的定义与消费链路交互式定义deeplabcut/utils/skeleton.py中的SkeletonBuilder提供 GUI通过 Lasso 框选把身体部位连成骨头保存时写回config.yaml的skeleton键skeleton.py自动分析骨骼deeplabcut.analyzeskeleton(config, videos, ...)会遍历cfg[skeleton]中的每对部位逐帧输出length骨长、orientation骨方向逆时针角度与likelihood取两点似然最小值三列保存为*_skeleton.h5实现在 deeplabcut/post_processing/analyze_skeleton.py。其中单动物按(bp1, bp2)命名骨头、多动物按(个体, bp1, bp2)命名analyze_skeleton.py距离与角度的底层函数calc_distance_between_points_two_vectors_2d成对欧氏距离与calc_angle_between_vectors_of_points_2d逐点逆时针夹角都位于 analyze_skeleton.py可直接被自定义脚本复用——例如把头-尾距离异常扩展为骨骼长度超过 3 倍中位数的动态阈值判据。因此本文配方的更高级形态是先运行deeplabcut.analyzeskeleton得到逐帧骨长序列再对骨长做异常检测如基于分位数或 z-score从而摆脱固定像素阈值适应不同动物个体与拍摄距离。六、异常帧的修复链路filterpredictions 与样条插值当异常帧来自预测而非标注时除了标记与剔除DeepLabCut 还提供后处理平滑工具deeplabcut.filterpredictionsdeeplabcut/post_processing/filtering.py支持三种 filtertypefiltertype原理关键参数适用场景median默认滑动窗口中值滤波基于scipy.signal.medfiltwindowlength须为奇数默认 5一般轨迹去抖arima对每个坐标序列拟合 SARIMAX 模型按置信区间识别并修正异常值p_bound似然低于此值视为缺失默认 0.001、ARdegree自回归阶数默认 3、MAdegree滑动平均阶数默认 1、alpha显著性水平默认 0.01存在间歇性遮挡/跳点的轨迹spline逐列三次样条插值填充长度不超过windowlength的缺失段并轻度平滑windowlength作为最大填充 gap 长度短时缺失的补全该函数从deeplabcut.utils.auxiliaryfunctions.load_analyzed_data读取已分析数据输出*_filtered.h5可选另存 CSV且会跳过已过滤文件。若把上一节的距离检测定位到的异常帧与filterpredictions结合即可构成完整闭环检测 → 评估 → 平滑/插值 → 复检。七、小结与进一步阅读本文的核心是可复用的 DataFrame 级距离检测配方只需xs 向量差 np.linalg.norm三行核心计算即可在标注与预测两阶段自动标记部位间距异常的帧。在此基础上通过reshape((len(df), -1, 2/3))适配多动物与 3D 项目通过deeplabcut.analyzeskeleton升级为动态骨架长度监测通过deeplabcut.filterpredictions将标记帧对应的轨迹平滑修复。相关代码与文档索引配方原文docs/recipes/post.md即本指南主题文档位于 Cookbook 目录 docs/recipes/index.md标注检查deeplabcut.check_labelstrainingsetmanipulation.pyCLI 入口见 deeplabcut/cli.py骨骼分析 APIdocs/api/deeplabcut.analyzeskeleton.rst预测过滤 APIdocs/api/deeplabcut.filterpredictions.rst数据分析主流程参考docs/main-workflows/user-guide.md赞分享人工智能深度学习计算机视觉科研【免费下载链接】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 聚类异常帧检测指南用 napari-DeepLabCut 插件主动学习精修标注数据DeepLabCut 聚类异常帧检测指南用 napari DeepLabCut 插件主动学习精修标注数据 数据质量决定模型上限。DeepLabCut 提供了一人工智能深度学习计算机视觉科研MCP Apps vs MCP-UI vs OpenAI Apps SDK三大标准对比如何选对不踩坑MCP Apps vs MCP UI vs OpenAI Apps SDK三大标准对比如何选对不踩坑 MCP Apps 是 MCPModel ContexMCP 服务前端AI 技能DeepLabCut异常帧检测自动识别和修正标注错误的完整指南DeepLabCut作为领先的开源姿态估计工具其异常帧检测功能能够自动识别和修正标注错误大大提升训练数据的质量。本文将详细介绍如何利用DeepLabCut的人工智能深度学习计算机视觉科研上一篇3步解锁鸣潮120FPSWaveTools开源工具箱帧率配置指南下一篇终极鸣潮工具箱一键解锁120FPS与抽卡数据分析完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表