如何使用SAMURAI實(shí)例分割和跟蹤器進(jìn)行單對(duì)象跟蹤(SOT)的教程
幾年來(lái),我一直試圖在視頻中追蹤登山者。
我的動(dòng)機(jī)是雙重的:
在我熱衷的主題(運(yùn)動(dòng)攀巖)上探索算法
分析兩名攀巖者之間的攀巖技術(shù)
在探索過(guò)程中,我偶然發(fā)現(xiàn)了一個(gè)名為“SAMURAI”的算法,這對(duì)于我的特定用例來(lái)說(shuō)確實(shí)是一個(gè)突破。
該項(xiàng)目將為SAMURAI提供入門(mén)指南,特別是針對(duì)AMD gpu。
SAMURAI概述
SAMURAI建立在分段任何模型2.1 (SAM2.1)之上,并改進(jìn)了其跟蹤能力。
SAM和SAM2模型是革命性的,因?yàn)樗鼈兛梢詫?duì)“任何東西”進(jìn)行分割,甚至不需要事先進(jìn)行特定于應(yīng)用程序的訓(xùn)練。這些模型已經(jīng)成為非常流行的自動(dòng)標(biāo)記圖像和視頻的模型。
除此之外,它們還可以“跟蹤”視頻內(nèi)容中識(shí)別的對(duì)象。
還有其他的解決方案提供了類似的跟蹤改進(jìn),其中一些聲稱更好的跟蹤,即使是相同的對(duì)象(如:干擾)。其中一個(gè)解決方案是用于SAM 2.1的干擾感知內(nèi)存,或DAM4SAM。
DAM4SAM聲稱比SAMURAI有更好的跟蹤能力,特別是在有干擾的情況下。相同的對(duì)象):
我已經(jīng)評(píng)估了這兩種解決方案,看看哪種解決方案更適合我的特定用例:跟蹤感興趣的攀登者(CoI)。我邀請(qǐng)您對(duì)您的特定用例執(zhí)行類似的比較。
SAMURAI vs DAM4SAM
本實(shí)驗(yàn)的主要結(jié)論如下:
?SAMURAI比DAM4SAM快6倍(使用AMD Radeon Pro W7900 GPU)
?DAM4SAM失去了攀登者(跟蹤任務(wù)失敗),而SAMURAI成功了
設(shè)置硬件
我的設(shè)置包括AMD Radeon Pro W7900 GPU,但這些指令預(yù)計(jì)將與使用AMD ROCm軟件堆棧的任何AMD GPU一起工作。
有關(guān)如何設(shè)置AMD GPU的更多信息,包括升級(jí)電源和添加前機(jī)箱風(fēng)扇,請(qǐng)參考以下項(xiàng)目:
介紹AMD Radeon Pro W7900 GPU
我們應(yīng)該首先驗(yàn)證AMD GPU的驅(qū)動(dòng)程序是否安裝,如下所示:
在撰寫(xiě)本文時(shí),ROCm的最新版本是6.2.4。
為AMD gpu安裝SAMURAI
SAMURAI提供了出色的安裝說(shuō)明,但僅適用于NVIDIA gpu。
為了這個(gè)項(xiàng)目的目的,我將參考下面的repo,它有一個(gè)特定版本的SAMURAI存儲(chǔ)庫(kù)鏈接為gitmodule:
“samurai”子目錄包含原始存儲(chǔ)庫(kù)的特定版本,可以按照以下方式安裝:
在安裝過(guò)程中,我們可以注意到,除其他外,以下軟件包已默認(rèn)安裝支持NVIDIA CUDA:
torch> = 2.3.1
torchvision > = 0.18.1
因此,我們需要安裝與這些包等價(jià)的ROCm,如下所述:
我們也可以通過(guò)PyTorch驗(yàn)證AMD GPU的支持,如下面的python會(huì)話:
我們還可以使用“nvtop”來(lái)監(jiān)控GPU的使用情況:
下面的屏幕截圖顯示了nvtop的輸出。在我的系統(tǒng)中,我有一個(gè)AMD Radeon Pro W7900 GPU (48GB),以及一個(gè)較小的NVIDIA T400 GPU (4GB)。
啟動(dòng)演示
演示腳本可以從samurai目錄啟動(dòng),如下所示:
下面的可選參數(shù)指定了要使用的模型:
?Model_path:要使用的模型(默認(rèn)= sam2/檢查點(diǎn)/sam2.1 .1_hiera_base_plus.pt)
該模型的其他變體有:tiny、small、base_plus(默認(rèn)值)和large。
我只試驗(yàn)了默認(rèn)的base_plus模型。
演示腳本有以下參數(shù)指定輸入:
?Video_path:視頻文件(僅支持mp4)或圖像目錄(僅支持jpg)的路徑
?Txt_path:包含要跟蹤對(duì)象的初始邊界框(x, y, w, h)的文本文件
演示腳本也有以下可選輸出參數(shù):
?Save_to_video: Boolean,表示是否保存輸出的視頻文件
?Video_output_path:視頻文件輸出路徑
我已經(jīng)基于原始的demo.py實(shí)現(xiàn)了自己的腳本,將在下面幾節(jié)中描述。
?samurai_step01.py
?samurai_step02.py
CPU內(nèi)存限制
SAMURAI模型使用<2GB的VRAM(即使是大型模型),因此應(yīng)該與任何GPU一起工作。
然而,主循環(huán)將所有輸入圖像(來(lái)自圖像文件的視頻)加載到內(nèi)存中,這可能需要大量的CPU內(nèi)存。
下面的屏幕截圖說(shuō)明了SAMURAI如何為一個(gè)包含3000張1920x1080大小的圖像的用例分配64GB CPU內(nèi)存的60%。
根據(jù)我的計(jì)算,這個(gè)用例應(yīng)該只需要我64GB內(nèi)存的30%,因?yàn)?000 * (1920*1080*3)= 17.38GB。因此,我們可以得出結(jié)論,SAMURAI執(zhí)行所需的內(nèi)存是輸入圖像的兩倍。
這將限制您可以提供給SAMURAI算法的輸入圖像的數(shù)量。
為了超越這個(gè)限制,可以運(yùn)行幾次,將前一次迭代的最后一個(gè)掩碼的邊界框作為下一次迭代的邊界框。
指定輸入
演示腳本允許將輸入指定為視頻文件或輸入圖像。
使用默認(rèn)的“demo.py”腳本,我沒(méi)有成功地使視頻文件輸入工作,導(dǎo)致分割錯(cuò)誤。
出于這個(gè)原因,我創(chuàng)建了自己的預(yù)處理腳本,將輸入視頻轉(zhuǎn)換為輸出圖像。我還將以下功能集成到我的腳本中:
?跳過(guò)幀:通過(guò)參數(shù)指定,允許減少生成的圖像數(shù)量
?開(kāi)始幀選擇:由用戶用‘s’鍵指定
?結(jié)束幀選擇:由用戶用‘e’鍵指定
?ROI選擇:由用戶用鼠標(biāo)指定
“samurai_step01.py”腳本可用于從輸入視頻中提取圖像。它的用法如下:
該腳本將啟動(dòng)兩個(gè)窗口:
?samurai_step01 -控制
?samurai_step01
“samurai_step01 - Controls”窗口允許你調(diào)整視頻內(nèi)容的大小(scaleFactor),并在視頻中導(dǎo)航(frameNum)。
第一步是導(dǎo)航到一個(gè)幀,它將成為提取圖像的開(kāi)始幀,用‘s’鍵選擇它,然后使用鼠標(biāo)選擇要跟蹤的對(duì)象的ROI。在我的用例中,這是一個(gè)攀爬器,但您可以選擇任何對(duì)象。
腳本將生成詳細(xì)的“[INFO]…”來(lái)確認(rèn)您與GUI的交互。
下一步是導(dǎo)航到結(jié)束幀,用“e”鍵選擇它,然后按“w”鍵提取圖像。
該腳本將在指定的工作目錄下生成以下內(nèi)容:
生成輸出掩碼
使用從視頻中提取的圖像,我們現(xiàn)在可以運(yùn)行SAMURAI算法,使用“samurai_step02.py”腳本:
該腳本將在指定的工作目錄下生成以下內(nèi)容:
三個(gè)輸出視頻(mp4)可用于查看SAMURAI算法的輸出與蒙版和/或邊界框。
請(qǐng)注意,生成這些視頻會(huì)降低SAMURAI的幀率。如果您想加快一些速度,可以隨意注釋掉生成這些視頻的代碼。
我用AMD Radeon Pro W7900 GPU看到了高達(dá)6fps的性能。
總結(jié)和后續(xù)步驟
使用之前的腳本,我能夠在這些具有挑戰(zhàn)性的視頻中成功執(zhí)行單對(duì)象跟蹤(SOT)。
本文編譯自hackster.io