聯(lián)器(Tracker)與 TraDeS_BYTE 兩階段追蹤方案)
計算機視覺深度學習人工智能【免費下載鏈接】ByteTrack[ECCV 2022] ByteTrack: Multi-Object Tracking by Associating Every Detection Box項目地址https://gitcode.com/GitHub_Trending/by/ByteTrack點擊查看免費下載本篇技術(shù)指南以本倉庫 tutorials/trades/README.md 為核心完整講解如何把 ByteTrack 的多目標追蹤關(guān)聯(lián)器集成進 TraDeS 代碼庫包括直接替換 tracker.py 與 opts.py的原始方案以及用 byte_tracker.py mot_online 模塊替換的 TraDeS_BYTE 方案并給出可直接復制的 MOT17 推理命令與關(guān)鍵閾值參數(shù)詳解。讀完本文你將掌握兩類追蹤器motion reid 與 motion Kalman Filter的關(guān)聯(lián)策略差異以及如何結(jié)合 byte_tracker.py、tracker.py、opts.py 源碼定位和調(diào)優(yōu)每一個追蹤參數(shù)。集成背景為什么要在 TraDeS 中替換追蹤器TraDeSTrack to Detect and Segment是一個基于 CenterTrack 思想、通過成本量cost volume傳播目標嵌入embedding來輔助檢測的在線多目標追蹤框架其默認追蹤器 tracker.py 采用運動 重識別特征motion reid聯(lián)合關(guān)聯(lián)策略。而 ByteTrack本倉庫核心項目的核心思想是關(guān)聯(lián)每一個檢測框——不僅關(guān)聯(lián)高置信度檢測框還利用低置信度檢測框通常是遮擋目標進行二次關(guān)聯(lián)從而顯著降低漏檢導致的軌跡斷裂。因此把 ByteTrack 的關(guān)聯(lián)器嵌入 TraDeS可以讓 TraDeS 的檢測結(jié)果直接受益于 ByteTrack 的兩階段關(guān)聯(lián)策略這是本教程要解決的核心問題。原文檔將集成分為兩條路線TraDeS原始方案替換tracker.py與opts.py仍使用 TraDeS 自己的 motion reid 追蹤器TraDeS_BYTEByteTrack 方案用本倉庫的byte_tracker.py替換tracker.py并新增mot_online模塊包含basetrack.py、kalman_filter.py、matching.py采用運動 卡爾曼濾波的純幾何關(guān)聯(lián)。兩條路線共用同一套 MOT17 半數(shù)據(jù)集half推理命令框架區(qū)別僅在于參數(shù)取值與關(guān)聯(lián)機制下面逐一展開。Step 1獲取 TraDeS 代碼庫兩條路線都以 TraDeS 官方倉庫為基礎。第一步均為克隆 TraDeS 代碼原文檔指向JialianW/TraDeS倉庫git clone https://github.com/JialianW/TraDeS.git克隆完成后后續(xù)所有替換與新增文件操作都在該倉庫的src/lib/utils目錄下進行。本文以下命令均假定已在 TraDeS 倉庫根目錄下執(zhí)行且模型權(quán)重../models/mot_half.pth已按 TraDeS 的說明放置就緒。方案一TraDeS 原始追蹤器motion reidStep 2替換 tracker.py 與 opts.py將 TraDeS 倉庫src/lib/utils/tracker.py替換為本倉庫提供的 tutorials/trades/tracker.py與 TraDeS 默認 tracker 行為等價同時將src/lib/opts.py替換為本倉庫的 tutorials/trades/opts.py。opts.py是 CenterTrack/TraDeS 風格的參數(shù)解析器負責把命令行參數(shù)整理成opt對象替換它的目的是讓追蹤相關(guān)參數(shù)track_thresh、new_thresh、pre_thresh等與 byte_tracker 兼容的默認值和解析邏輯保持一致。需要特別注意的是 opts.py 中的解析邏輯當task包含tracking時opt.tracking被置為True同時opt.pre_img默認為開啟除非指定--no_pre_img并對 MOT 類數(shù)據(jù)集自動設置overlap_thresh 0.05。這意味著追蹤閾值tracking threshold會參與后續(xù)關(guān)聯(lián)距離的判定而非僅由檢測分數(shù)決定。Step 3運行原始 TraDeS 推理在 TraDeS 倉庫根目錄執(zhí)行python3 test.py tracking --exp_id mot17_half --dataset mot --dataset_version 17halfval --pre_hm --ltrb_amodal --inference --load_model ../models/mot_half.pth --gpus 0 --clip_len 3 --trades --track_thresh 0.4 --new_thresh 0.4 --out_thresh 0.2 --pre_thresh 0.5各參數(shù)含義如下括號內(nèi)為 opts.py 中定義的默認值命令中均為顯式覆蓋參數(shù)命令取值默認值作用tracking位置參數(shù)—聲明任務為多目標追蹤觸發(fā)opt.tracking True--exp_idmot17_halfdefault實驗標識決定輸出目錄exp/task/exp_id--dataset/--dataset_versionmot/17halfvalcoco/ 空使用 MOT 數(shù)據(jù)集及 half-val 版本--pre_hm開啟—使用前一幀熱圖pre heatmap作為追蹤線索--ltrb_amodal開啟—使用 ltrb_amodal 輸出頭4 通道見 opts.py 的heads注冊--inference開啟—推理模式--load_model../models/mot_half.pth空加載訓練好的半數(shù)據(jù)集模型權(quán)重--gpus00使用的 GPU 編號--clip_len31TraDeS 使用的幀數(shù)含當前幀成本量聚合的時序窗口長度--trades開啟—啟用 TraDeS 模型結(jié)構(gòu)見 opts.py--track_thresh0.40.3第一輪關(guān)聯(lián)的高分檢測置信度閾值--new_thresh0.40.0新建軌跡的檢測置信度閾值僅高于該分數(shù)的檢測可開新軌跡--out_thresh0.2-1參與關(guān)聯(lián)的最低檢測置信度下限--pre_thresh0.5-1前一幀檢測結(jié)果的置信度閾值在原始 TraDeS 追蹤器中tracker.py 的step()首先只保留score track_thresh的檢測進入第一輪關(guān)聯(lián)第一輪用檢測中心 運動偏移量與已有軌跡的距離疊加 IoU、類別等 invalid 懲罰見 tracker.py做貪心匹配第二輪tracker.py再把score track_thresh的低分檢測與仍未匹配上的軌跡進行二次關(guān)聯(lián)。這正是關(guān)聯(lián)每一個檢測框思想在 TraDeS 代碼庫中的體現(xiàn)——即便使用原始 tracker兩輪關(guān)聯(lián)的骨架也已具備區(qū)別在于關(guān)聯(lián)度量依賴 reid embedding 與運動偏移而非純幾何。方案二TraDeS_BYTEByteTrack 關(guān)聯(lián)器Step 2替換為 byte_tracker.py 并新增 mot_online 模塊在方案一的基礎上TraDeS_BYTE 進一步把追蹤器本體替換為 ByteTrack 的實現(xiàn)用本倉庫的 tutorials/trades/byte_tracker.py 替換 TraDeS 倉庫src/lib/utils/tracker.py用 tutorials/trades/opts.py 替換src/lib/opts.py將 tutorials/trades/mot_online 整個目錄basetrack.py、kalman_filter.py、matching.py復制到 TraDeS 倉庫src/lib/utils下作為mot_online包。mot_online是 ByteTrack 追蹤器的運行時依賴basetrack.py定義TrackStateNew / Tracked / Lost / Removed與BaseTrack基類提供track_id全局自增、mark_lost()、mark_removed()等狀態(tài)管理接口kalman_filter.py8 維狀態(tài)空間x, y, a, h, vx, vy, va, vh的常速度卡爾曼濾波器提供initiate / predict / multi_predict / update / gating_distance其中multi_predict是向量化批量預測版本用于step()中對整池軌跡一次性前向預測matching.py提供iou_distanceIoU 代價矩陣cost 1 - IoU、linear_assignment基于lap.lapjv的匈牙利匹配支持cost_limit門限與fuse_motion運動 外觀融合本方案中未啟用。Step 3運行 TraDeS_BYTE 推理python3 test.py tracking --exp_id mot17_half --dataset mot --dataset_version 17halfval --pre_hm --ltrb_amodal --inference --load_model ../models/mot_half.pth --gpus 0 --clip_len 3 --trades --track_thresh 0.4 --new_thresh 0.5 --out_thresh 0.1 --pre_thresh 0.5與方案一的命令相比閾值配置發(fā)生了變化--new_thresh從0.4提升到0.5--out_thresh從0.2降低到0.1。這兩個值直接決定 byte_tracker.py 中兩階段關(guān)聯(lián)的檢測劃分track_thresh 0.4score 0.4的檢測進入第一輪關(guān)聯(lián)高置信度檢測out_thresh 0.1out_thresh score track_thresh即0.1 ~ 0.4區(qū)間的檢測進入第二輪關(guān)聯(lián)低置信度檢測用于找回遮擋目標new_thresh 0.5新建軌跡的門檻只有第一輪關(guān)聯(lián)結(jié)束后仍未匹配、且score 0.5的檢測才有資格激活新軌跡見 byte_tracker.py。注意當task含tracking時opts.py 會把tracking任務強制opt.pre_img True除非--no_pre_img因此 TraDeS_BYTE 同樣會利用前一幀熱圖ByteTrack 只替換關(guān)聯(lián)器部分檢測頭與熱圖傳播仍由 TraDeS 負責。源碼解析byte_tracker.py 的兩階段關(guān)聯(lián)流程byte_tracker.py 是本方案的核心其BYTETracker.step()第 179 行起按以下五步執(zhí)行檢測分層按track_thresh與out_thresh把檢測分為高分池dets進入detections與低分池dets_second進入detections_second見 byte_tracker.py第一輪關(guān)聯(lián)Kalman IoU把 tracked 與 lost 軌跡合并為strack_pool調(diào)用STrack.multi_predict用卡爾曼濾波批量預測當前位置然后matching.iou_distance計算代價矩陣、linear_assignment閾值為0.9求解匹配見 byte_tracker.py。代碼中fuse_motion一行被注釋掉說明本方案刻意只使用純幾何關(guān)聯(lián)不混入外觀特征第二輪關(guān)聯(lián)低分檢測純 IoU對第一輪未匹配的 tracked 軌跡r_tracked_stracks與低分檢測detections_second再次做 IoU 匹配門限放寬到0.4從而把被遮擋、低置信度的目標續(xù)上軌跡見 byte_tracker.py未確認軌跡處理對只出現(xiàn)一幀的unconfirmed軌跡與剩余高分檢測做閾值為0.7的 IoU 匹配仍未匹配的未確認軌跡直接mark_removed()見 byte_tracker.py狀態(tài)更新與軌跡維護超過max_time_lost由track_buffer換算而來的 lost 軌跡被移除最終輸出所有已激活軌跡含tracking_id、bbox、ct、score等字段見 byte_tracker.py。其中STrack是軌跡的最小單元它把檢測框從tlbr轉(zhuǎn)成tlwh存儲通過tlwh_to_xyah轉(zhuǎn)成卡爾曼濾波所需的(center x, center y, aspect ratio, height)表示activate / re_activate / update分別對應開新軌跡、重新找回與逐幀更新byte_tracker.py。remove_duplicate_stracksbyte_tracker.py還會按軌跡存活時長清理 IoU 小于0.15的重復軌跡對避免同一目標產(chǎn)生雙 ID。值得留意的是BYTETracker.__init__中buffer_size int(frame_rate / 30.0 * args.track_buffer)byte_tracker.py即軌跡丟失后的保留幀數(shù)會按幀率自適應縮放而init_track/reset中的id_count等字段在注釋中明確標注對最終輸出無影響僅為兼容原代碼庫接口byte_tracker.py——這意味著byte_tracker.py被設計成可直接嵌入 TraDeS 的test.py調(diào)用流程而不需要改動檢測結(jié)果的輸出格式。核心對比motion reid 與 motion Kalman Filter原文檔 Notes 部分給出了一行高度凝練的結(jié)論這正是理解兩種方案差異的關(guān)鍵tracker.py: motion reid byte_tracker.py: motion with kalman filter對照兩份源碼可以進一步展開原始 TraDeS 追蹤器motion reidtracker.py 的關(guān)聯(lián)度量同時使用檢測中心 運動偏移ct tracking與軌跡中心的歐氏距離并疊加 IoU、類別一致性懲罰匹配階段使用greedy_assignment默認或linear_assignment--hungarian時并維護 128 維的embedding_bank做 reid 特征相似度查詢get_similarity見 tracker.py與滑動平均更新alpha 0.1。代價是依賴訓練好的 embedding 輸出頭且存在 reid 特征退化風險。TraDeS_BYTEmotion with Kalman filterbyte_tracker.py 完全不使用 embedding軌跡的運動由 8 維常速度卡爾曼濾波mot_online/kalman_filter.py預測匹配只依賴 IoU第一輪0.9、第二輪0.4。由于 TraDeS 的檢測頭本身已具備運動偏移能力替換關(guān)聯(lián)器后整條鏈路不增加 reid 分支的參數(shù)量與計算開銷。簡言之原始方案用外觀 運動做關(guān)聯(lián)魯棒但依賴重識別特征質(zhì)量TraDeS_BYTE 用純運動 幾何做兩階段關(guān)聯(lián)結(jié)構(gòu)更輕、部署更簡單代價是完全放棄外觀信息極端外觀劇變場景下的 ID 保持能力取決于卡爾曼預測與 IoU 的重疊質(zhì)量。參數(shù)調(diào)優(yōu)要點與使用前提兩階段閾值關(guān)系務必保持track_thresh out_thresh否則低分池為空、二次關(guān)聯(lián)失效。原方案取值0.4 / 0.2與 BYTE 方案0.4 / 0.1均可直接復現(xiàn)new_thresh建議不低于track_thresh避免第一輪已匹配的檢測又被重復開新軌跡。--clip_len 3與--trades二者必須同時出現(xiàn)。--clip_len決定成本量聚合的時序窗口--trades才在 opts.py 中決定不注冊tracking輸出頭TraDeS 結(jié)構(gòu)下檢測頭的運動偏移由成本量隱式承擔。--pre_thresh 0.5控制前一幀檢測結(jié)果進入熱圖傳播的門檻值過高會丟失歷史線索、過低會引入噪聲一般保持0.5附近。依賴環(huán)境byte_tracker.py的matching.py依賴lap、cython_bbox、scipymot_online/kalman_filter.py依賴scipy.linalg原始 tracker 依賴scikit-learn的linear_assignment_。運行前請確認 TraDeS 環(huán)境已安裝這些包。適用范圍本文命令面向 MOT17 half-val17halfval評測模型為mot_half.pth。若改用 MOT20 或全量 MOT17需同步調(diào)整數(shù)據(jù)集版本參數(shù)與對應權(quán)重閾值也建議重新掃描。小結(jié)在 TraDeS 中集成 ByteTrack 本質(zhì)上是換關(guān)聯(lián)器而非換模型檢測、熱圖傳播、成本量等 TraDeS 組件原樣保留僅把關(guān)聯(lián)策略從 motion reid 換成 ByteTrack 的 motion Kalman Filter 兩階段關(guān)聯(lián)。對照本倉庫的 byte_tracker.py 與 tracker.py 源碼你可以清晰看到兩種策略在代價矩陣構(gòu)造、匹配門限與軌跡生命周期管理上的全部差異并據(jù)此針對自己的場景如遮擋密集的 MOT20、低幀率視頻重新調(diào)整track_thresh / out_thresh / new_thresh / track_buffer四元組。更多 ByteTrack 本體用法可參考本倉庫 tools/track.py 與 yolox/tracker/byte_tracker.py 的對應實現(xiàn)。贊分享計算機視覺深度學習人工智能【免費下載鏈接】ByteTrack[ECCV 2022] ByteTrack: Multi-Object Tracking by Associating Every Detection Box項目地址https://gitcode.com/GitHub_Trending/by/ByteTrack點擊查看免費下載相關(guān)推薦Ultralytics ByteTrack 跟蹤器源碼級解析STrack 單目標軌跡與 BYTETracker 兩階段關(guān)聯(lián)機制Ultralytics ByteTrack 跟蹤器源碼級解析STrack 單目標軌跡與 BYTETracker 兩階段關(guān)聯(lián)機制 ByteTrack 是 Ult人工智能深度學習計算機視覺預訓練Falcon分布式追蹤集成監(jiān)控與追蹤聯(lián)動分析在大規(guī)模分布式系統(tǒng)中傳統(tǒng)監(jiān)控往往局限于孤立指標告警難以定位跨服務問題根因。Falcon main.go https://link.gitcode.com運維觀測指標監(jiān)控告警kinit追蹤系統(tǒng)分布式追蹤集成方案kinit追蹤系統(tǒng)分布式追蹤集成方案 痛點微服務架構(gòu)下的監(jiān)控盲區(qū) 在現(xiàn)代化微服務架構(gòu)中系統(tǒng)復雜度呈指數(shù)級增長。傳統(tǒng)的單體應用監(jiān)控方式已無法滿足分布式系統(tǒng)的后端前端任務調(diào)度認證鑒權(quán)移動開發(fā)上一篇NumJs安裝與配置指南下一篇開源項目 free-font 使用教程創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考