追蹤教程:5 分鐘跑通,10 種追蹤器按場(chǎng)景選型)
BoxMOT 多目標(biāo)追蹤教程5 分鐘跑通10 種追蹤器按場(chǎng)景選型【免費(fèi)下載鏈接】boxmotBoxMOT: Pluggable Python and C SOTA multi-object tracking modules with support for axis-aligned and oriented bounding boxes項(xiàng)目地址: https://gitcode.com/GitHub_Trending/bo/boxmotBoxMOT 是一個(gè)插件式多目標(biāo)追蹤框架任意能輸出邊界框的分割、目標(biāo)檢測(cè)或姿態(tài)估計(jì)模型接上它就能給畫面里的每個(gè)目標(biāo)分配穩(wěn)定 ID。本文帶你從安裝、首次追蹤到追蹤器選型、評(píng)估與調(diào)參一次走通。兩個(gè)繞不開的多目標(biāo)追蹤痛點(diǎn)多目標(biāo)追蹤落地時(shí)有兩件事最耗時(shí)間。第一追蹤算法和檢測(cè)模型是兩攤代碼換一個(gè)檢測(cè)器關(guān)聯(lián)、卡爾曼、外觀特征那套邏輯要么重寫要么重調(diào)。第二想對(duì)比 ByteTrack 和 BoT-SORT 誰更合適就得把兩套倉(cāng)庫各自克隆、各自配環(huán)境。BoxMOT 的解法是把檢測(cè)器、ReID 編碼器、追蹤器拆成互不綁定的組件追蹤器統(tǒng)一接收同一份檢測(cè)輸入換算法只需改一個(gè)類名或一個(gè)命令行參數(shù)。十種追蹤器實(shí)現(xiàn)都在 boxmot/trackers/一次接入、任意切換。 BoxMOT 安裝與首次追蹤環(huán)境要求 Python 3.10 至 3.13。pip install boxmot # 安裝 BoxMOT 及依賴裝完先跑這條命令幾秒后就能看到帶 ID 的追蹤畫面# 用攝像頭實(shí)時(shí)追蹤yolo26n 檢測(cè) lmbn_n_duke 外觀 occluboost 追蹤 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 --save --show--source接受四種寫法分別對(duì)應(yīng)網(wǎng)絡(luò)攝像頭、圖片、視頻、目錄boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 # 攝像頭 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source img.jpg # 單張圖片 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source vid.mp4 # 視頻文件 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source path/ # 圖片目錄--show實(shí)時(shí)預(yù)覽--save把結(jié)果視頻寫到 runs 目錄--device可在cpu、mps、cuda:0之間切換。下面是 MOT17 測(cè)試幀上多目標(biāo)追蹤的畫面效果 按場(chǎng)景挑選追蹤器MOT17 基準(zhǔn)測(cè)試對(duì)照這張表回答一個(gè)問題十種追蹤器我該怎么選。以下數(shù)據(jù)來自 README.md 的 MOT17 消融基準(zhǔn)官方消融檢測(cè)器分?jǐn)?shù)越高越好追蹤器狀態(tài)HOTA↑MOTA↑IDF1↑occluboost?71.1078.5085.28botsort?69.6878.2382.33boosttrack?69.2575.9183.20strongsort?68.0576.1980.76deepocsort?67.9575.8380.54bytetrack?67.6878.0479.16hybridsort?67.3174.0978.87ocsort?66.4474.5577.90sfsort?62.6576.8769.18選型先分清兩種性能模式。純運(yùn)動(dòng)類bytetrack、ocsort只靠位置和速度關(guān)聯(lián)CPU 上幀率最高適合目標(biāo)很少交叉遮擋的實(shí)時(shí)場(chǎng)景。運(yùn)動(dòng)外觀類botsort、occluboost、strongsort、deepocsort、boosttrack、hybridsort、sfsort會(huì)額外給每個(gè)目標(biāo)拍一張身份照——外觀嵌入描述目標(biāo)長(zhǎng)什么樣目標(biāo)被擋住或短暫丟失后仍能靠長(zhǎng)相找回正確 ID代價(jià)是每幀多一次 ReID 推理。追求極限幀率選 bytetrack精度優(yōu)先尤其 IDF1 身份一致性選 occluboost平衡項(xiàng)看 botsort它的 IDF1 達(dá) 82.33也是評(píng)估命令的默認(rèn)示例。 五個(gè)子命令逐個(gè)拆解boxmot --help列出的能力很多日常最常用的五個(gè)如下。# track對(duì)任意源攝像頭/圖片/視頻/目錄跑檢測(cè)追蹤 boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 --save --show輸出帶 ID 框的實(shí)時(shí)畫面或視頻。# eval在 MOT17 消融集上評(píng)估檢測(cè)器ReID追蹤器組合的 HOTA/MOTA/IDF1 boxmot eval --dataset mot17 --split ablation --detector yolox-x-mot17 --reid lmbn-n-duke --tracker botsort首次運(yùn)行會(huì)自動(dòng)物化檢測(cè)結(jié)果與外觀嵌入之后換追蹤器直接復(fù)用詳見進(jìn)階部分。# materialize一次性生成不可變的檢測(cè)嵌入構(gòu)建供 eval/tune 反復(fù)復(fù)用 boxmot materialize --experiment mot17/ablation-yolox-lmbn.yaml --data-root datasets/mot --device mps檢測(cè)只算一次后續(xù)對(duì)比任意追蹤器都不用重跑檢測(cè)器。# tune用進(jìn)化式搜索在 MOT17 上自動(dòng)調(diào)追蹤器超參數(shù) boxmot tune --dataset mot17 --split ablation --detector yolox-x-mot17 --reid lmbn-n-duke --tracker botsort --n-trials 9最優(yōu)超參數(shù)集寫回 boxmot/configs/trackers/ 對(duì)應(yīng)的配置。# export把 ReID 模型導(dǎo)出為部署格式 boxmot export --weights osnet_x0_25_msmt17.pt --include onnx --include engine --device cuda:0 --dynamic支持 TorchScript、ONNX、OpenVINO、TensorRT、Core ML、TFLite 等格式。兩個(gè)高頻參數(shù)ReID 模型選擇--reid決定外觀特征來源osnet_x0_25_msmt17輕量、適合實(shí)時(shí)lmbn_n_duke精度更高是 MOT17 基準(zhǔn)的默認(rèn)搭配??蛇x模型見 boxmot/configs/reid/。類別過濾默認(rèn)追蹤全部 COCO 類別--classes只保留你要的索引# 只追蹤 COCO 第 16貓、17狗兩類 boxmot track --detector yolov8s --tracker botsort --source 0 --classes 16,17 Python 集成檢測(cè)器接追蹤器的最小閉環(huán)在代碼里BoxMOT 的追蹤器直接吃標(biāo)準(zhǔn)檢測(cè)數(shù)組x1, y1, x2, y2, 置信度, 類別 ID無需中間適配層import numpy as np from boxmot import OccluBoost # OccluBoost 為開箱即用的默認(rèn)追蹤器含外觀 tracker OccluBoost() dets np.array([[100, 200, 300, 400, 0.9, 0]]) # x1,y1,x2,y2,score,class frame np.zeros((480, 640, 3), dtypenp.uint8) # BGR 圖像 tracks tracker.update(dets, frame) print(tracks[:, 4].astype(int)) # 每個(gè)目標(biāo)的軌跡 ID想換其他算法只需換掉導(dǎo)入的類BoxMOT 包根導(dǎo)出了BoostTrack、BotSort、ByteTrack、DeepOcSort、HybridSort、MafHda、OccluBoost、OcSort、SFSORT、StrongSort、EagerMot接口保持一致。?? 進(jìn)階玩法評(píng)估管線、調(diào)參、導(dǎo)出本地評(píng)估管線。評(píng)估的核心是檢測(cè)只算一次。boxmot eval首次運(yùn)行會(huì)把檢測(cè)結(jié)果和 ReID 嵌入物化下來之后換追蹤器、甚至換 ReID 模型檢測(cè)推理都會(huì)跳過、直接復(fù)用已有構(gòu)建跨 CPU/MPS/CUDA 同樣可復(fù)用。跑完想再打磨軌跡加后處理參數(shù)# 評(píng)估后先做 tracklet 關(guān)聯(lián)再做高斯平滑插值補(bǔ)洞 boxmot eval --dataset mot17 --split ablation --detector yolox-x-mot17 --reid lmbn-n-duke --tracker botsort \ --postprocessing gta --postprocessing gsi--postprocessing gsi用高斯平滑插值把軌跡斷點(diǎn)補(bǔ)成平滑軌跡--postprocessing gta先把碎片軌跡重新關(guān)聯(lián)再接 GSI處理后指標(biāo)取新結(jié)果原始結(jié)果保留在輸出目錄的raw/下。一條命令完成調(diào)參。boxmot tune用進(jìn)化式搜索自動(dòng)試追蹤器超參數(shù)每個(gè)試驗(yàn)重放同一份不可變構(gòu)建結(jié)果按指標(biāo)排序最優(yōu)參數(shù)組合寫回追蹤器配置下一輪直接用默認(rèn)配置就是調(diào)過的版本。ReID 模型多格式導(dǎo)出。同一份外觀權(quán)重部署到哪就導(dǎo)到哪ONNX 給跨框架推理OpenVINO 給 Intel 硬件TensorRT 給 GPU 極致吞吐TorchScript/Core ML/TFLite 各有對(duì)應(yīng)場(chǎng)景。--dynamic允許動(dòng)態(tài)輸入批量導(dǎo)出時(shí)可用--batch-size指定批大小。 上手資源示例筆記本與文檔三個(gè)官方 notebook 演示現(xiàn)成 torchvision 模型 BoxMOT的完整寫法examples/det/torchvision_boxmot.ipynb邊界框檢測(cè)接追蹤examples/pose/torchvision_boxmot.ipynb姿態(tài)估計(jì)接追蹤examples/seg/torchvision_boxmot.ipynb分割接追蹤更多入口官方文檔完整指南與 API 參考、安裝指南、追蹤器總覽、評(píng)估與后處理指南以及項(xiàng)目 README。寫在最后BoxMOT 把多目標(biāo)追蹤從每個(gè)算法一套環(huán)境變成了一個(gè)接口換參數(shù)檢測(cè)、ReID、追蹤器各自可插拔評(píng)估與調(diào)參共享同一份檢測(cè)結(jié)果。先跑通一條boxmot track再用 MOT17 基準(zhǔn)對(duì)照表做選型剩下的交給tune和eval。核心鏈接README.md · docs/【免費(fèi)下載鏈接】boxmotBoxMOT: Pluggable Python and C SOTA multi-object tracking modules with support for axis-aligned and oriented bounding boxes項(xiàng)目地址: https://gitcode.com/GitHub_Trending/bo/boxmot創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考