ARTICLE DETAIL

资讯详情

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

DeepLabCut 多动物追踪完整指南:从姿态估计到 Tracklet 细化的视频分析工作流

DeepLabCut 多动物追踪完整指南:从姿态估计到 Tracklet 细化的视频分析工作流 人工智能深度学习计算机视觉科研【免费下载链接】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点击查看免费下载多动物项目maDLC的常规工作流与单动物项目完全一致但视频分析阶段更复杂除了关键点估计系统还必须把关键点分配到不同个体并在帧间保持身份一致地进行跟踪。本文以 DeepLabCut 官方多动物追踪指南为骨架结合仓库源码deeplabcut/pose_estimation_pytorch/apis/videos.py、deeplabcut/pose_estimation_pytorch/apis/tracklets.py、deeplabcut/refine_training_dataset/stitch.py 等深度展开帮助你掌握从 v3.0 自动追踪流水线、追踪前可视化诊断、手工装配与跟踪、tracklet 拼接到基于 GUI 的 tracklet 细化的完整实战能力。从 v3.0 起analyze_videos默认执行「姿态估计 追踪」完整流水线自 DeepLabCut v3.0 起deeplabcut.analyze_videos默认以auto_trackTrue运行完整的姿态估计 追踪流水线直接产出可直接用于下游分析的.h5文件行为与单动物项目完全对齐。deeplabcut.analyze_videos(config_path, videos_to_analyze)在旧版本中姿态估计与追踪是两个分离的过程。如需保留这一行为可显式设置auto_trackFalsedeeplabcut.analyze_videos(config_path, videos_to_analyze, auto_trackFalse)此时不会生成.h5文件只产生包含原始检测结果的*_full.pickle文件。随后必须手工运行convert_detections2tracklets与stitch_tracklets下文详述这为高级用户提供了对流水线最后几步的最大控制权。从源码实现看PyTorch 引擎的analyze_videos定义于 deeplabcut/pose_estimation_pytorch/apis/videos.py#L245在auto_trackTrue时会在姿态推理完成后依次调用convert_detections2tracklets与stitch_tracklets见 deeplabcut/pose_estimation_pytorch/apis/videos.py#L669-L689这印证了文档所述「一条命令完成全部流程」。该函数还支持n_tracks、animal_names、identity_only、save_as_csv等参数其中save_as_csv会沿传给stitch_tracklets将轨迹保存为 CSV。追踪前的可视化检查在投入追踪结果之前建议先验证原始姿态估计的可靠性。可视化原始关键点检测不含追踪videos_to_analyze [/fullpath/project/videos/testVideo.mp4] deeplabcut.analyze_videos( config_path, videos_to_analyze, auto_trackFalse ) deeplabcut.create_video_with_all_detections( config_path, videos_to_analyze )create_video_with_all_detections实现在 deeplabcut/utils/make_labeled_video.py#L1072会读取*_full.pickle文件把所有检测结果叠加绘制到视频上并支持plot_bboxes、confidence_to_alpha、displayedbodyparts等显示控制参数。可视化 Part-Affinity FieldsPAF边代价分布对于预测 part-affinity fields 的模型另一个 sanity check 是检查边亲和代价的分布deeplabcut.utils.plot_edge_affinity_distributions(eval_pickle_file)该函数deeplabcut/utils/plotting.py#L407读取评估结果目录下的*_full.pickle与*_meta.pickle基于crossvalutils._calc_within_between_pafs计算动物内部与动物之间边的代价分布并绘制costdist.png。分布明显可分说明模型已学会把关键点归组成不同个体的强连接——这是装配阶段所必需的注意重叠程度也取决于数据集中动物间的互动强度。判定你的 PyTorch 模型是否使用 PAF 的方法查看pytorch_config.yaml中是否出现DLCRNetHead。所有 TensorFlow 多动物模型都使用 part-affinity fields仅指定 backbone 名称如resnet_50、resnet_101的 PyTorch 模型同样使用 PAF。仓库中的头配置模板 deeplabcut/pose_estimation_pytorch/config/base/head_bodyparts_with_paf.yaml 展示了DLCRNetHead的完整定义其 predictor 类型为PartAffinityFieldPredictor通过graph: paf_graph与edges_to_keep: paf_edges_to_keep引用模型骨架图。检查结果不佳时的应对建议提取并标注更多帧可来自更多视频尤其要标注动物近距离互动的帧以获得最佳性能。标注更多数据后可重新创建训练集并训练。两条路径任选手动从现有或新视频中提取更多帧并像初次构建训练集一样标注让 DeepLabCut 自动找出关键点检测较差的帧并提取给你只需运行deeplabcut.find_outliers_in_raw_data(config_path, pickle_file, video_file)其中pickle_file是视频分析后得到的_full.pickle。被标记的帧会被加入对应labeled-data文件夹的图像集合中供你标注。find_outliers_in_raw_data实现在 deeplabcut/refine_training_dataset/outlier_frames.py#L37支持pcutoff检测置信度阈值低于此值标记为异常帧、percentiles装配面积超出第 5 与第 95 百分位视为异常、extraction_algokmeans或uniform等参数并会校验视频与 pickle 文件名是否匹配。手工运行追踪步骤动物装配Assembly与跨帧追踪姿态估计完成后即可进行装配与追踪。你可以迭代地调整参数、运行convert_detections2tracklets再在 GUIrefine_tracklets中加载查看效果以此验证追踪参数。要修改参数需打开inference_cfg.yaml或在 GUI 中点击按钮。仓库根部的模板 deeplabcut/inference_cfg.yaml 定义了完整参数集合# Tracking: # p/m pixels in width and height for increasing bounding boxes. boundingboxslack : 0 # Intersection over Union (IoU) threshold for linking two bounding boxes iou_threshold: .2 # maximum duration of a lost tracklet before its considered a new animal (in frames) max_age: 100 # minimum number of consecutive frames before a detection is tracked min_hits: 3各参数含义如下参数默认值模板含义影响boundingboxslack0扩大边界框的宽/高像素数影响框重叠度计算值过小会导致 tracklet 无法衔接iou_threshold0.6模板/ 0.2文档示例连接两个边界框的 IoU 阈值决定检测是否属于同一目标越大越严格max_age1模板/ 100文档示例丢失的 tracklet 在被视为「新动物」前的最长持续帧数越大越能容忍短暂遮挡造成的丢失min_hits1模板/ 3文档示例一个检测被纳入追踪前所需的最少连续帧数越大越能抑制噪声检测但会延迟跟踪建立注意这些追踪参数为交叉验证项模板中标注 should be crossvalidated不同项目的最佳取值差异很大文档示例max_age100、min_hits3与模板默认max_age1、min_hits1、iou_threshold0.6的差异正体现了这一点。实际运行convert_detections2tracklets时若未显式传入inferencecfg将自动读取模型目录下test/inference_cfg.yaml该文件不存在时会调用form_default_inferencecfg自动生成见 deeplabcut/utils/auxfun_multianimal.py#L534。基于身份identity的装配与追踪如果网络在训练时启用了身份监督即训练前在config.yaml中设置identityTrue该信息可被利用于① 动物装配阶段身体部位按预测身份而非关键点亲和度分组② 追踪阶段可单独用身份替代运动追踪器来形成 tracklet。启用方式很简单deeplabcut.convert_detections2tracklets(..., identity_onlyTrue)在analyze_videos中同样可以传入identity_onlyTrue见 deeplabcut/pose_estimation_pytorch/apis/videos.py#L398 的参数说明作为auto_track的子调用参数。注意如果只需装配和追踪单个个体装配与追踪会被跳过检测按单动物项目处理——即保留置信度最高的关键点并跨帧累积形成一条长 tracklet。此过程全自动用户无需任何操作。装配与追踪质量评估可通过deeplabcut.utils.make_labeled_video.create_video_from_pickled_tracks进行评估实现在 deeplabcut/utils/make_labeled_video.py#L1320该函数读取 tracklet pickle 文件绘制追踪结果视频作为细化 tracklet 之前的额外诊断工具支持pcutoff0.6等参数。如果动物装配效果不佳除上述异常帧搜索外也可把_assemblies.pickle传给find_outliers_in_raw_data代替_full.pickle。这会聚焦于异常装配即重构异常的动物骨架的搜索。该方法在拥挤场景或动物密切互动的帧上可能更敏感。不过到该阶段通常更建议继续完成剩余步骤并像单动物项目惯例那样从最终的 h5 文件提取异常帧。拼接 Tracklet 以形成完整轨迹接下来用stitch_tracklets拼接 trackletdeeplabcut.stitch_tracklets( config_path, [videofile_path], video_extensionsmp4, shuffle1, trainingsetindex0, )注意该函数的基础签名与analyze_videos、convert_detections2tracklets完全一致。如果待重建的轨迹数与config.yaml中最初定义的个体数不同可直接指定n_tracks即视频中的动物数量deeplabcut.stitch_tracklets(..., n_tracksn)此时文件列会默认使用虚拟动物名ind1、ind2、……直到 indn。此外stitch_tracklets还支持animal_names自定义个体名且与n_tracks长度必须一致、min_length短于该帧数的 tracklet 视为残差不参与图优化默认 10、split_tracklets把时间不连续的 tracklet 拆分成连续子段默认 True、save_as_csv等参数。从源码看stitch_tracklets定义于 deeplabcut/refine_training_dataset/stitch.py#L976将稀疏 tracklet 拼接为完整轨迹的问题建模为基于图的最小代价流minimum-cost flow优化问题短于min_length帧的 tracklet 被视为残差最后追加较长且可靠的 tracklet 则优先参与构图求解。关于追踪方法track_method装配与追踪支持多种方法由default_track_method决定合法值定义在 deeplabcut/core/trackingutils.py#L29-L35track_method输出后缀说明box_bx边界框追踪器skeleton_sk骨架追踪器ellipse_el椭圆追踪器config 中未定义时默认值transformer_tr基于 transformer 的 reID 追踪ctd_ctd条件 top-down 追踪直接在视频分析中完成从get_track_methoddeeplabcut/utils/auxfun_multianimal.py#L63的实现可看到默认逻辑若config.yaml未定义default_track_method会自动回退到ellipse并写回配置文件。CTD 追踪比较特殊——它发生在视频分析过程中因此convert_detections2tracklets对track_methodctd会直接抛出ValueError提示无需调用见 deeplabcut/pose_estimation_pytorch/apis/tracklets.py#L92-L96。使用无监督身份追踪Unsupervised Identity Tracking在 Lauer et al. 2022 中引入的无监督动物 reID 方法可以利用 tracklet 学习动物身份以提升追踪性能deeplabcut.transformer_reID(config, videos_to_analyze, n_tracksNone, video_extensionsmp4)务必传入期望在视频中出现的动物数量n_tracks。该函数实现在 deeplabcut/pose_tracking_pytorch/apis.py#L18依赖 deeplabcut/pose_tracking_pytorch 子模块基于 transformer 的 ReID 训练与推理训练脚本为deeplabcut/pose_tracking_pytorch/train_dlctransreid.py。细化 TrackletRefine Tracklets可选地你可以细化 tracklet既能修复「大的」身份互换如动物交叉时也能微调个体身体点。加载上面生成的...trackertype.pickle或.h5文件后可启动 GUI 交互式细化数据。GUI 还提供多种选项请查看 docstring。保存细化后的轨迹会得到一个.h5文件与标准 DLC 的使用习惯一致。你还可以 ① 对该 h5 进行滤波以处理轻微抖动② 再次加载该 h5 进行二次细化以处理新发现的问题。deeplabcut.refine_tracklets(config_path, pickle_or_h5_file, videofile_path, max_gap0, min_swap_len2, min_tracklet_len2, trail_len50)refine_tracklets实现在 deeplabcut/gui/tracklet_toolbox.py#L923其核心流程分两阶段首先由TrackletManager读取刚转换的检测结果自动优化 tracklet 连续性优先保留长轨迹、同时最大化关键点似然然后TrackletVisualizer显示轨迹供手动编辑——单个标签可像标注工具一样拖拽也可用 Lasso 工具多选轨迹一次性重新分配身份。GUI 中的关键设置min_swap_len默认 2最小互换长度。被保留的互换会显示在右侧面板的阴影区域中。min_tracklet_len默认 2最小 tracklet 长度。默认丢弃短于 2 帧的 tracklet留空设为 0 则保留全部。max_gap默认 2要填充的缺失数据最大间隔帧数。该过程对所有个体轨迹拟合三次样条填充所有小于等于该值的间隔。注意文档建议的max_gap0可用于填充整个视频的所有帧否则 1-n 即想填充的帧数例如你可能只想填充 5 帧的短间隔而 15 帧的间隔通常意味着另一个问题。你可以在 GUI 中编辑该值然后重新打开弹窗 GUI 快速测试。trail_len显示的拖尾点数。填充帧的置信度说明若填充了间隔这些帧会被关联一个极低的概率 0.01提醒你这并非网络的最佳估计而是人工覆盖因此如果你想在生成视频时看到这些填充帧必须把pcutoff设为 0。完整工作流小结多动物视频分析流水线可概括为可选追踪前验证analyze_videos(auto_trackFalse)create_video_with_all_detections检查原始检测对 PAF 模型可用plot_edge_affinity_distributions检查边代价分布自动流水线v3.0 默认analyze_videos(auto_trackTrue)一次完成姿态估计 →convert_detections2tracklets装配 跨帧追踪→stitch_tracklets拼接完整轨迹产出.h5手工流水线高级用户analyze_videos(auto_trackFalse)得到*_full.pickle再分别调用convert_detections2tracklets与stitch_tracklets通过inference_cfg.yaml精细调参质量诊断与迭代create_video_from_pickled_tracks查看装配效果find_outliers_in_raw_data提取异常帧补充标注身份增强与细化transformer_reID无监督学习身份refine_tracklets在 GUI 中修复身份互换、填充间隔并微调身体点最终保存.h5。每一步的详细 API 文档均可参考仓库的docs/api/目录如 docs/api/deeplabcut.analyze_videos.rst、docs/api/deeplabcut.convert_detections2tracklets.rst、docs/api/deeplabcut.stitch_tracklets.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 多动物姿态估计完整指南从项目创建到轨迹追踪的 maDLC 工作流实战DeepLabCut 多动物姿态估计完整指南从项目创建到轨迹追踪的 maDLC 工作流实战 导读 多动物模式multi animal DeepLabCut人工智能深度学习计算机视觉科研DeepLabCut多动物姿态追踪完整指南从入门到精通DeepLabCut多动物姿态追踪完整指南从入门到精通 DeepLabCut是一个革命性的开源工具包专门用于动物姿态估计与行为分析。其多动物模式能够同时追踪人工智能深度学习计算机视觉科研DeepLabCut多动物姿态追踪完整教程从入门到精通DeepLabCut多动物姿态追踪完整教程从入门到精通 DeepLabCut多动物姿态追踪技术正在革新生物医学研究领域为群体行为分析提供了前所未有的精准工具人工智能深度学习计算机视觉科研上一篇google-api-python-client 完全指南Google Discovery 式 API 的官方 Python 客户端库下一篇深入解析 Roc 快照测试从 Tag 应用看编译管道的每一层变换创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表