據(jù)后處理實(shí)戰(zhàn):自動(dòng)標(biāo)記身體部位距離異常的幀)
人工智能深度學(xué)習(xí)計(jì)算機(jī)視覺科研【免費(fèi)下載鏈接】DeepLabCutOfficial implementation of DeepLabCut: Markerless pose estimation of user-defined features with deep learning for all animals incl. humans項(xiàng)目地址https://gitcode.com/gh_mirrors/de/DeepLabCut點(diǎn)擊查看免費(fèi)下載導(dǎo)讀在 DeepLabCut 項(xiàng)目中標(biāo)注質(zhì)量與預(yù)測(cè)質(zhì)量直接決定下游分析軌跡、速度、角度等的可靠性。本篇指南圍繞docs/recipes/post.md中的數(shù)據(jù)處理配方展開基于身體部位間歐氏距離的閾值檢測(cè)自動(dòng)標(biāo)記距離異常的幀用于在deeplabcut.check_labels人工檢查之外以腳本化方式篩查標(biāo)注錯(cuò)誤或預(yù)測(cè)異常。讀完本文你將掌握標(biāo)注數(shù)據(jù) MultiIndex 結(jié)構(gòu)的讀寫方法、單動(dòng)物/多動(dòng)物/3D 項(xiàng)目下的距離計(jì)算適配以及如何將該思路與deeplabcut.filterpredictions、deeplabcut.analyzeskeleton等后處理工具串聯(lián)成完整的數(shù)據(jù)質(zhì)檢流水線。一、為什么需要距離閾值質(zhì)檢check_labels 的局限D(zhuǎn)eepLabCut 提供了deeplabcut.check_labels(config)用于在標(biāo)注階段可視化每一幀的標(biāo)簽位置其實(shí)現(xiàn)位于 deeplabcut/generate_training_dataset/trainingsetmanipulation.py它會(huì)為labeled-data下每個(gè)視頻子目錄中的幀生成疊加標(biāo)注點(diǎn)的圖像默認(rèn)以標(biāo)記人工標(biāo)注位置并支持draw_skeleton、scale、dpi等參數(shù)。但check_labels是人眼審查工具——當(dāng)項(xiàng)目包含數(shù)千幀時(shí)逐幀翻圖效率極低且某些錯(cuò)誤如頭部與尾部被標(biāo)注得距離過大并不顯眼。因此社區(qū)配方給出了一條自動(dòng)化路線直接在標(biāo)注 DataFrame 上計(jì)算兩個(gè)身體部位之間的歐氏距離凡距離超過物理閾值如頭-尾長(zhǎng)度 100 像素的幀即為可疑幀可將其索引提取出來進(jìn)一步復(fù)核。這一思路同樣適用于推理階段模型預(yù)測(cè)輸出的 H5 文件結(jié)構(gòu)與標(biāo)注文件一致因此同一套距離檢測(cè)代碼可以復(fù)用于預(yù)測(cè)異常篩查。二、先讀懂?dāng)?shù)據(jù)標(biāo)注 H5 的 MultiIndex 列結(jié)構(gòu)配方代碼的第一步是讀取標(biāo)注文件df pd.read_hdf(path_to_your_labeled_data_file)該 H5 文件即labeled-data/視頻名/CollectedData_scorer.h5例如倉(cāng)庫(kù)示例項(xiàng)目 examples/openfield-Pranav-2018-10-30/labeled-data/m4s1/ 下的同名文件。從源碼可確認(rèn)其結(jié)構(gòu)行索引為幀圖像文件名或序號(hào)列是 MultiIndex由scorer、bodyparts、coords等層級(jí)組成單動(dòng)物項(xiàng)目列層級(jí)為(scorer, bodyparts, coords)coords 通常為x、y多動(dòng)物項(xiàng)目額外包含individuals層級(jí)即(scorer, individuals, bodyparts, coords)。這一點(diǎn)在 deeplabcut/utils/skeleton.py 的SkeletonBuilder中可印證——它通過df.columns.get_level_values(bodyparts)枚舉部位、通過individuals in self.df.columns.names判斷是否多動(dòng)物項(xiàng)目。df.xs(head, levelbodyparts, axis1)正是利用 MultiIndex 的xs方法沿列軸取出全部屬于head的子列對(duì)多動(dòng)物項(xiàng)目即取出所有個(gè)體的head隨后.to_numpy()得到(幀數(shù), 2)或(幀數(shù), n_個(gè)體 × 2)的坐標(biāo)矩陣。三、核心配方標(biāo)記身體部位距離異常的幀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 逐行解析步驟作用關(guān)鍵點(diǎn)max_dist 100距離閾值像素需要依據(jù)視頻分辨率與動(dòng)物體型設(shè)定100 像素是頭-尾最大長(zhǎng)度的示例值pd.read_hdf(...)載入標(biāo)注/預(yù)測(cè) H5key 通常為df_with_missingpd.read_hdf會(huì)自動(dòng)讀取df.xs(head, levelbodyparts, axis1)沿列軸按bodyparts層級(jí)取head的所有坐標(biāo)列多動(dòng)物項(xiàng)目會(huì)一次性取出所有個(gè)體的該部位bpt1 - bpt2逐幀計(jì)算兩點(diǎn)間的向量結(jié)果形狀為(幀數(shù), 2)或(幀數(shù), n_個(gè)體 × 2).reshape((len(df), -1, 2))將向量分組為每幀每動(dòng)物的二維坐標(biāo)點(diǎn)-1自動(dòng)推斷個(gè)體數(shù)except ValueError兼容含第三列如 3D 項(xiàng)目z坐標(biāo)的數(shù)據(jù)若坐標(biāo)列數(shù)為 3則按(幀數(shù), -1, 3)重排np.linalg.norm(diff, axis2)對(duì)最后一個(gè)軸求歐氏范數(shù)得到(幀數(shù), 動(dòng)物數(shù))的距離矩陣np.any(dist max_dist, axis1)只要某一幀存在任一動(dòng)物超距即標(biāo)記布爾掩碼df.iloc[mask].index提取被標(biāo)記幀的索引可直接用于后續(xù)定位、復(fù)核或剔除3.3 輸出解讀與落地用法flagged_frames是一個(gè) Index 對(duì)象保存所有至少一對(duì)部位距離 ≥ 閾值的幀標(biāo)識(shí)。常見的后續(xù)處理打印數(shù)量與占比評(píng)估整體標(biāo)注質(zhì)量print(len(flagged_frames), frames flagged out of, len(df))結(jié)合圖像復(fù)核將索引與labeled-data中的幀文件名對(duì)應(yīng)人工檢查與check_labels輸出互補(bǔ)先自動(dòng)縮小可疑范圍再對(duì)可疑幀集中人工審查。注此處距離為像素單位的平面歐氏距離未考慮相機(jī)透視與景深在 3D 項(xiàng)目中可換用包含z的三維范數(shù)即走except分支閾值應(yīng)重新標(biāo)定。四、從標(biāo)注數(shù)據(jù)推廣到推理輸出數(shù)據(jù)結(jié)構(gòu)的同源性標(biāo)注 H5 與analyze_videos產(chǎn)生的預(yù)測(cè) H5 具有一致的 MultiIndex 列結(jié)構(gòu)因此上述配方只需替換文件路徑即可用于預(yù)測(cè)結(jié)果質(zhì)檢。預(yù)測(cè)文件在項(xiàng)目中的命名約定為視頻名 scorer .h5其定位邏輯位于 deeplabcut/utils/auxiliaryfunctions.py 的find_analyzed_data按視頻名、scorer、是否_filtered后綴以及跟蹤方法track_method為box/skeleton/ellipse時(shí)的bx/sk/el標(biāo)記篩選候選文件再由load_analyzed_data統(tǒng)一讀取auxiliaryfunctions.py。不過預(yù)測(cè)數(shù)據(jù)每列的坐標(biāo)層級(jí)是(x, y, likelihood)三元組若直接用原配方try分支的-1, 2會(huì)失敗并落入except分支按三維點(diǎn)處理——此時(shí)范數(shù)會(huì)把 likelihood 當(dāng)作第三個(gè)坐標(biāo)軸結(jié)果失真。正確的做法是先用df.xs(..., levelcoords, axis1)只取x、y兩列再套用距離計(jì)算同時(shí)可利用 likelihood 過濾低置信度部位例如將 likelihood 0.5 的坐標(biāo)置為 NaN 后再計(jì)算配合np.nanmax處理缺失。五、與骨架Skeleton系統(tǒng)的關(guān)聯(lián)從距離到結(jié)構(gòu)約束兩個(gè)部位之間的距離本質(zhì)上是骨架約束的一種表達(dá)。DeepLabCut 將骨架定義存放在項(xiàng)目config.yaml的skeleton字段中部位對(duì)列表并配套了完整的定義與消費(fèi)鏈路交互式定義deeplabcut/utils/skeleton.py中的SkeletonBuilder提供 GUI通過 Lasso 框選把身體部位連成骨頭保存時(shí)寫回config.yaml的skeleton鍵skeleton.py自動(dòng)分析骨骼deeplabcut.analyzeskeleton(config, videos, ...)會(huì)遍歷cfg[skeleton]中的每對(duì)部位逐幀輸出length骨長(zhǎng)、orientation骨方向逆時(shí)針角度與likelihood取兩點(diǎn)似然最小值三列保存為*_skeleton.h5實(shí)現(xiàn)在 deeplabcut/post_processing/analyze_skeleton.py。其中單動(dòng)物按(bp1, bp2)命名骨頭、多動(dòng)物按(個(gè)體, bp1, bp2)命名analyze_skeleton.py距離與角度的底層函數(shù)calc_distance_between_points_two_vectors_2d成對(duì)歐氏距離與calc_angle_between_vectors_of_points_2d逐點(diǎn)逆時(shí)針夾角都位于 analyze_skeleton.py可直接被自定義腳本復(fù)用——例如把頭-尾距離異常擴(kuò)展為骨骼長(zhǎng)度超過 3 倍中位數(shù)的動(dòng)態(tài)閾值判據(jù)。因此本文配方的更高級(jí)形態(tài)是先運(yùn)行deeplabcut.analyzeskeleton得到逐幀骨長(zhǎng)序列再對(duì)骨長(zhǎng)做異常檢測(cè)如基于分位數(shù)或 z-score從而擺脫固定像素閾值適應(yīng)不同動(dòng)物個(gè)體與拍攝距離。六、異常幀的修復(fù)鏈路filterpredictions 與樣條插值當(dāng)異常幀來自預(yù)測(cè)而非標(biāo)注時(shí)除了標(biāo)記與剔除DeepLabCut 還提供后處理平滑工具deeplabcut.filterpredictionsdeeplabcut/post_processing/filtering.py支持三種 filtertypefiltertype原理關(guān)鍵參數(shù)適用場(chǎng)景median默認(rèn)滑動(dòng)窗口中值濾波基于scipy.signal.medfiltwindowlength須為奇數(shù)默認(rèn) 5一般軌跡去抖arima對(duì)每個(gè)坐標(biāo)序列擬合 SARIMAX 模型按置信區(qū)間識(shí)別并修正異常值p_bound似然低于此值視為缺失默認(rèn) 0.001、ARdegree自回歸階數(shù)默認(rèn) 3、MAdegree滑動(dòng)平均階數(shù)默認(rèn) 1、alpha顯著性水平默認(rèn) 0.01存在間歇性遮擋/跳點(diǎn)的軌跡spline逐列三次樣條插值填充長(zhǎng)度不超過windowlength的缺失段并輕度平滑windowlength作為最大填充 gap 長(zhǎng)度短時(shí)缺失的補(bǔ)全該函數(shù)從deeplabcut.utils.auxiliaryfunctions.load_analyzed_data讀取已分析數(shù)據(jù)輸出*_filtered.h5可選另存 CSV且會(huì)跳過已過濾文件。若把上一節(jié)的距離檢測(cè)定位到的異常幀與filterpredictions結(jié)合即可構(gòu)成完整閉環(huán)檢測(cè) → 評(píng)估 → 平滑/插值 → 復(fù)檢。七、小結(jié)與進(jìn)一步閱讀本文的核心是可復(fù)用的 DataFrame 級(jí)距離檢測(cè)配方只需xs 向量差 np.linalg.norm三行核心計(jì)算即可在標(biāo)注與預(yù)測(cè)兩階段自動(dòng)標(biāo)記部位間距異常的幀。在此基礎(chǔ)上通過reshape((len(df), -1, 2/3))適配多動(dòng)物與 3D 項(xiàng)目通過deeplabcut.analyzeskeleton升級(jí)為動(dòng)態(tài)骨架長(zhǎng)度監(jiān)測(cè)通過deeplabcut.filterpredictions將標(biāo)記幀對(duì)應(yīng)的軌跡平滑修復(fù)。相關(guān)代碼與文檔索引配方原文docs/recipes/post.md即本指南主題文檔位于 Cookbook 目錄 docs/recipes/index.md標(biāo)注檢查deeplabcut.check_labelstrainingsetmanipulation.pyCLI 入口見 deeplabcut/cli.py骨骼分析 APIdocs/api/deeplabcut.analyzeskeleton.rst預(yù)測(cè)過濾 APIdocs/api/deeplabcut.filterpredictions.rst數(shù)據(jù)分析主流程參考docs/main-workflows/user-guide.md贊分享人工智能深度學(xué)習(xí)計(jì)算機(jī)視覺科研【免費(fèi)下載鏈接】DeepLabCutOfficial implementation of DeepLabCut: Markerless pose estimation of user-defined features with deep learning for all animals incl. humans項(xiàng)目地址https://gitcode.com/gh_mirrors/de/DeepLabCut點(diǎn)擊查看免費(fèi)下載相關(guān)推薦DeepLabCut 聚類異常幀檢測(cè)指南用 napari-DeepLabCut 插件主動(dòng)學(xué)習(xí)精修標(biāo)注數(shù)據(jù)DeepLabCut 聚類異常幀檢測(cè)指南用 napari DeepLabCut 插件主動(dòng)學(xué)習(xí)精修標(biāo)注數(shù)據(jù) 數(shù)據(jù)質(zhì)量決定模型上限。DeepLabCut 提供了一人工智能深度學(xué)習(xí)計(jì)算機(jī)視覺科研MCP Apps vs MCP-UI vs OpenAI Apps SDK三大標(biāo)準(zhǔn)對(duì)比如何選對(duì)不踩坑MCP Apps vs MCP UI vs OpenAI Apps SDK三大標(biāo)準(zhǔn)對(duì)比如何選對(duì)不踩坑 MCP Apps 是 MCPModel ContexMCP 服務(wù)前端AI 技能DeepLabCut異常幀檢測(cè)自動(dòng)識(shí)別和修正標(biāo)注錯(cuò)誤的完整指南DeepLabCut作為領(lǐng)先的開源姿態(tài)估計(jì)工具其異常幀檢測(cè)功能能夠自動(dòng)識(shí)別和修正標(biāo)注錯(cuò)誤大大提升訓(xùn)練數(shù)據(jù)的質(zhì)量。本文將詳細(xì)介紹如何利用DeepLabCut的人工智能深度學(xué)習(xí)計(jì)算機(jī)視覺科研上一篇3步解鎖鳴潮120FPSWaveTools開源工具箱幀率配置指南下一篇終極鳴潮工具箱一鍵解鎖120FPS與抽卡數(shù)據(jù)分析完整指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考