目標(biāo)跟蹤作為機(jī)器學(xué)習(xí)的一個(gè)重要分支,加之其在日常生活、軍事行動(dòng)中的廣泛應(yīng)用,受到極大的關(guān)注。在AI潮流中,大家對(duì)于深度學(xué)習(xí),目標(biāo)跟蹤肯定都會(huì)有過(guò)接觸了解:在GPU上通過(guò)大量的數(shù)據(jù)集訓(xùn)練出自己想使用的垂直場(chǎng)景后再在實(shí)際場(chǎng)景中使用。但麻煩的是,大數(shù)人擁有的是CPU,有沒(méi)有辦法能在自己的電腦上用CPU就能實(shí)現(xiàn)自己的目標(biāo)跟蹤能力。OpenCV的跟蹤API給出了答案:我行。
在這篇文章中,我們會(huì)介紹在OpenCV上的8種目標(biāo)檢測(cè)算法,優(yōu)勢(shì)和局限性, 然后會(huì)給出代碼示例,如何使用它。我們的目標(biāo)不是對(duì)每一個(gè)跟蹤器都有深入的理論理解,而是從實(shí)際使用的角度來(lái)理解它們。
目標(biāo)跟蹤基本原則
在視頻目標(biāo)跟蹤中的期望是在當(dāng)前幀中正確找到跟蹤的對(duì)象,因?yàn)槲覀円呀?jīng)在所有(或幾乎所有)以前的幀中成功跟蹤了該對(duì)象,所以我們知道對(duì)象是如何移動(dòng)的。換句話說(shuō),我們知道運(yùn)動(dòng)模型的參數(shù)。運(yùn)動(dòng)模型只是一種奇特的表達(dá)方式,它會(huì)知道物體在前一幀中的位置和速度(速度+運(yùn)動(dòng)方向)。而如果對(duì)這個(gè)物體一無(wú)所知,則可以根據(jù)當(dāng)前的運(yùn)動(dòng)模型來(lái)預(yù)測(cè)新的位置,從而非常接近物體的新位置。
我們還可以建立一個(gè)外觀模型來(lái)編碼對(duì)象的外觀。外觀模型可用于在運(yùn)動(dòng)模型預(yù)測(cè)的位置的鄰域內(nèi)搜索,以便更準(zhǔn)確地預(yù)測(cè)物體的位置。
目標(biāo)跟蹤可以描述為:運(yùn)動(dòng)模型預(yù)測(cè)物體的大致位置。外觀模型微調(diào)此估計(jì),以便根據(jù)外觀提供更準(zhǔn)確的估計(jì)。
如果對(duì)象非常簡(jiǎn)單,并且沒(méi)有改變它的外觀,我們可以使用一個(gè)簡(jiǎn)單的模板作為外觀模型并查找該模板。然而,現(xiàn)實(shí)生活并不那么簡(jiǎn)單。對(duì)象的外觀可能會(huì)發(fā)生顯著變化。為了解決這個(gè)問(wèn)題,在許多現(xiàn)代追蹤器中,這個(gè)外觀模型是一個(gè)在線訓(xùn)練的分類器。
分類器的任務(wù)是將圖像的矩形區(qū)域分類為對(duì)象或背景。分類器接受圖像區(qū)域作為輸入,并返回介于0和1之間的分?jǐn)?shù),以指示圖像區(qū)域包含對(duì)象的概率。如果確定圖像區(qū)域是背景,則分?jǐn)?shù)為0;如果確定區(qū)域是對(duì)象,則分?jǐn)?shù)為1。
在機(jī)器學(xué)習(xí)中,我們使用“在線”這個(gè)詞來(lái)指的是在運(yùn)行時(shí)動(dòng)態(tài)訓(xùn)練的算法。離線分類器可能需要數(shù)千個(gè)示例來(lái)訓(xùn)練分類器,但是在線分類器通常在運(yùn)行時(shí)使用很少的示例進(jìn)行訓(xùn)練。
分類器是通過(guò)向其提供正(對(duì)象)和負(fù)(背景)示例來(lái)訓(xùn)練的。如果您想構(gòu)建一個(gè)用于檢測(cè)貓的分類器,您可以使用包含貓的數(shù)千個(gè)圖像和不包含貓的數(shù)千個(gè)圖像對(duì)其進(jìn)行訓(xùn)練。通過(guò)這種方式,分類器學(xué)習(xí)區(qū)分什么是貓,什么不是貓。
OpenCV八種目標(biāo)跟蹤算法
1、GOTURN Tracker
Goturn是一種基于深度學(xué)習(xí)的對(duì)象跟蹤算法。最初的實(shí)現(xiàn)是在Caffe,目前已經(jīng)移植到OpenCV跟蹤API。
Goturn是一種基于深度學(xué)習(xí)的跟蹤算法,是回歸網(wǎng)絡(luò)的一般對(duì)象跟蹤的縮寫(xiě)。大多數(shù)跟蹤算法都是在線訓(xùn)練的。換句話說(shuō),跟蹤算法學(xué)習(xí)運(yùn)行時(shí)跟蹤的對(duì)象的外觀。
因此,許多實(shí)時(shí)追蹤器依賴于在線學(xué)習(xí)算法,這通常比基于深度學(xué)習(xí)的解決方案快得多。
Goturn改變了我們將深度學(xué)習(xí)應(yīng)用于跟蹤問(wèn)題的方式,通過(guò)離線方式學(xué)習(xí)對(duì)象的運(yùn)動(dòng)。Goturn模型接受了數(shù)千個(gè)視頻序列的訓(xùn)練,不需要在運(yùn)行時(shí)執(zhí)行任何學(xué)習(xí)。
Goturn如何工作?
Goturn由David Holded、Sebastian Thrun和Silvio Savarese在題為“用深度回歸網(wǎng)絡(luò)學(xué)習(xí)100 fps跟蹤”的論文中介紹。

圖1 GoTurn示意圖
如圖1所示,Goturn使用一對(duì)來(lái)自數(shù)千個(gè)視頻的裁剪幀進(jìn)行培訓(xùn)。
在第一幀(也稱為前一幀)中,對(duì)象的位置是已知的,幀被裁剪為對(duì)象周?chē)吔缈虼笮〉膬杀丁5谝粋€(gè)裁剪幀中的對(duì)象始終居中。
需要預(yù)測(cè)對(duì)象在第二幀(也稱為當(dāng)前幀)中的位置。用于裁剪第一幀的邊界框也用于裁剪第二幀。因?yàn)閷?duì)象可能已移動(dòng),所以對(duì)象可能未在第二幀中居中是大概率事件。
訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)(CNN)預(yù)測(cè)第二幀邊界框的位置。
Goturn架構(gòu)
在Goturn如何工作,看到的是一個(gè)黑盒,Goturn架構(gòu)則讓我們了解了盒子里面藏著什么。

圖2 Goturn架構(gòu)
圖2顯示了Goturn的體系結(jié)構(gòu)。如前所述,它將兩個(gè)裁剪的幀作為輸入。
注:在圖2中,上一幀顯示在底部,是居中的,我們的目標(biāo)是找到當(dāng)前幀的邊界框,顯示在頂部。
兩幀都通過(guò)一組卷積層。這些層只是caffenet架構(gòu)的前五個(gè)卷積層。這些卷積層(即pool5特性)的輸出被連接成長(zhǎng)度為4096的單個(gè)矢量。這個(gè)向量被輸入到3個(gè)完全連接的層中。最后一個(gè)完全連接的層最終連接到包含4個(gè)節(jié)點(diǎn)的輸出層,這些節(jié)點(diǎn)表示邊界框的頂部和底部點(diǎn)。
( 每當(dāng)我們看到一組卷積層,并對(duì)其含義感到困惑時(shí),可將它們視為改變?cè)紙D像的過(guò)濾器,這樣可以保留重要信息,并丟棄圖像中不重要的信息。
通過(guò)簡(jiǎn)單地展開(kāi)張量,將卷積濾波器末端獲得的多維圖像(張量)轉(zhuǎn)換成一個(gè)長(zhǎng)的數(shù)字矢量。這個(gè)向量作為輸入到幾個(gè)完全連接的層,最后是輸出層。全連通層可以看作是一種學(xué)習(xí)算法,它利用卷積層從圖像中提取的有用信息來(lái)解決現(xiàn)有的分類或回歸問(wèn)題。)
與其他基于深度學(xué)習(xí)的追蹤器相比,Goturn速度更快。它在caffe的gpu上以100fps的速度運(yùn)行,在opencv cpu上以20fps的速度運(yùn)行。盡管跟蹤器是通用的,但理論上,通過(guò)將傳輸集與特定類型的對(duì)象進(jìn)行偏移,可以在特定對(duì)象(例如行人)上獲得更好的結(jié)果。
局限性:神經(jīng)網(wǎng)絡(luò)體現(xiàn)的優(yōu)勢(shì),往往就是它的劣勢(shì)。神經(jīng)網(wǎng)絡(luò)依賴于訓(xùn)練集中樣本所能代表的場(chǎng)景種類,對(duì)于不存在的場(chǎng)景,就會(huì)存在問(wèn)題。如在實(shí)際使用中,希望跟蹤手掌,把手掌移到臉上時(shí),跟蹤器鎖定在臉上,并不會(huì)在手掌上。而跟蹤臉,并用手堵遮住臉,但追蹤器能夠跟蹤通過(guò)遮擋的臉,這說(shuō)明訓(xùn)練集存在大量的手掌遮臉的場(chǎng)景。
2、BOOSTING Tracker助推跟蹤器
該跟蹤器基于ADaboost的在線版本,ADaboost是基于HAAR級(jí)聯(lián)的人臉檢測(cè)器內(nèi)部使用的算法。這個(gè)分類器需要在運(yùn)行時(shí)用對(duì)象的正負(fù)示例進(jìn)行培訓(xùn)。以用戶(或其他對(duì)象檢測(cè)算法)提供的初始邊界框?yàn)閷?duì)象的正例,邊界框外的許多圖像部位作為背景。給定一個(gè)新的幀,分類器在前一個(gè)位置附近的每個(gè)像素上運(yùn)行,并記錄分類器的得分。對(duì)象的新位置是得分最大的位置。
缺點(diǎn):速度較慢,并且表現(xiàn)不好,跟蹤失敗后,不能及時(shí)呈現(xiàn)錯(cuò)誤報(bào)告。
3、MIL Tracker 密爾跟蹤器
這個(gè)跟蹤器的概念與上面描述的BOOSTING Tracker相似。最大的區(qū)別是,它不只是將對(duì)象的當(dāng)前位置視為一個(gè)正示例,還會(huì)在當(dāng)前位置周?chē)囊粋€(gè)小鄰域中查找,以生成幾個(gè)潛在的正示例。你可能認(rèn)為這是一個(gè)壞主意,因?yàn)樵谶@些“積極”的例子中,大多數(shù)的對(duì)象都不是中心。
這就是多實(shí)例學(xué)習(xí)(mil)來(lái)拯救的地方。在mil中,您不指定正負(fù)示例,而是指定正負(fù)“bags”。正面的圖像收集并非都是正面的例子。一個(gè)正面的bag包含了以對(duì)象當(dāng)前位置為中心的區(qū)域,以及它周?chē)囊粋€(gè)小鄰域中的區(qū)域。即使被跟蹤對(duì)象的當(dāng)前位置不準(zhǔn)確,當(dāng)來(lái)自當(dāng)前位置附近的樣本放入正袋中時(shí),很有可能該袋至少包含一個(gè)圖像,并且該對(duì)象很好地居中。
優(yōu)點(diǎn):性能不錯(cuò)。它不會(huì)像助推跟蹤器那樣漂移,并且在部分遮擋下也能正常工作。
缺點(diǎn):失敗率較高。
4、KCF跟蹤器
KCF代表kernelized correlation filters。這個(gè)追蹤器建立在前兩個(gè)追蹤器中提出的想法之上。該跟蹤器利用了這樣一個(gè)事實(shí):在MIL跟蹤器中使用的多個(gè)正樣本具有較大的重疊區(qū)域。這些重疊的數(shù)據(jù)導(dǎo)致了一些很好的數(shù)學(xué)特性,這些特性被跟蹤器利用,從而使跟蹤速度更快、更準(zhǔn)確。
優(yōu)點(diǎn):準(zhǔn)確度和速度都比MIL跟蹤器好,它報(bào)告跟蹤故障比BOOSTING和MIL這兩個(gè)追蹤算法好。
缺點(diǎn):無(wú)法從完全遮擋中恢復(fù)。
5、TLD跟蹤器
TLD代表跟蹤、學(xué)習(xí)和檢測(cè)。顧名思義,這個(gè)跟蹤器將長(zhǎng)期跟蹤任務(wù)分解為三個(gè)組件(短期)跟蹤、學(xué)習(xí)和檢測(cè)。在作者的論文中,“跟蹤器跟蹤對(duì)象從一幀到另一幀。探測(cè)器定位到目前為止觀察到的所有外觀,并在必要時(shí)糾正跟蹤器。學(xué)習(xí)估計(jì)檢測(cè)器的錯(cuò)誤并更新它以避免將來(lái)出現(xiàn)這些錯(cuò)誤?!边@個(gè)跟蹤器的輸出有點(diǎn)跳躍。例如,如果您正在跟蹤一個(gè)行人,并且場(chǎng)景中還有其他行人,則此跟蹤器有時(shí)可以臨時(shí)跟蹤一個(gè)與您要跟蹤的行人不同的行人。在積極的一面,這條軌跡似乎是在更大的比例、運(yùn)動(dòng)和遮擋上跟蹤一個(gè)對(duì)象。如果你有一個(gè)隱藏在另一個(gè)物體后面的視頻序列,這個(gè)跟蹤器可能是個(gè)不錯(cuò)的選擇。
優(yōu)點(diǎn):在多幀遮擋下效果最好。此外,跟蹤最佳的超比例變化。
缺點(diǎn):很多誤報(bào)使它幾乎不可用。
6、MEDIANFLOW跟蹤器
在內(nèi)部,這個(gè)跟蹤器可以實(shí)時(shí)地跟蹤物體的前后方向,并測(cè)量這兩個(gè)軌跡之間的差異。最大限度地減少這種向前向后的誤差,使他們能夠可靠地檢測(cè)跟蹤故障,并在視頻序列中選擇可靠的軌跡。
在測(cè)試中發(fā)現(xiàn)這個(gè)跟蹤器在運(yùn)動(dòng)可預(yù)測(cè)和對(duì)象小的情況下工作得最好。與其他跟蹤者不同的是,即使跟蹤明顯失敗,跟蹤者也知道跟蹤何時(shí)失敗。
優(yōu)點(diǎn):出色的跟蹤故障報(bào)告。當(dāng)運(yùn)動(dòng)是可預(yù)測(cè)的并且沒(méi)有遮擋時(shí),效果非常好。
缺點(diǎn):大幅度運(yùn)動(dòng)跟蹤,模型會(huì)失效。
7、MOSSE 莫斯跟蹤器
最小平方誤差輸出和(mosse)使用自適應(yīng)相關(guān)進(jìn)行對(duì)象跟蹤,當(dāng)使用單幀進(jìn)行初始化時(shí),可產(chǎn)生穩(wěn)定的相關(guān)濾波器。Mosse跟蹤器對(duì)光照、比例、姿勢(shì)和非剛性變形的變化具有魯棒性。對(duì)于遮擋,跟蹤器能夠在對(duì)象重新出現(xiàn)時(shí)暫停并恢復(fù)到停止的位置。
優(yōu)點(diǎn):速度快。
缺點(diǎn):準(zhǔn)確率不如CSRT和KCF高。
8、CSRT跟蹤器
在具有信道和空間可靠性的鑒別相關(guān)濾波器(DCF-CSR)中,我們使用空間可靠性圖從幀中調(diào)整濾波器支持到所選區(qū)域的一部分進(jìn)行跟蹤。這樣可以確保選定區(qū)域的放大和定位,并改進(jìn)對(duì)非矩形區(qū)域或?qū)ο蟮母?。它只使用兩個(gè)標(biāo)準(zhǔn)功能(HoGs and Colornames)。它也在相對(duì)較低的fps(25 fps)下工作,但提供了更高的目標(biāo)跟蹤精度。
優(yōu)點(diǎn):比KCR精度高。
缺點(diǎn):速度較慢。
OpenCV跟蹤算法使用代碼實(shí)現(xiàn)(C)
1、創(chuàng)建跟蹤算法

2、對(duì)跟蹤算法做初始化操作

3、跟蹤監(jiān)測(cè)刷新,獲取到下一幀跟蹤目標(biāo)的坐標(biāo)(x、y、寬、高)

4、利用坐標(biāo)做跟蹤所需要的操作,如畫(huà)框等

實(shí)際檢測(cè)結(jié)果對(duì)比

圖片1起始跟蹤;圖片2運(yùn)動(dòng)后跟蹤
如上跟蹤算法顯示,以CBA比賽作為跟蹤對(duì)象。從跟蹤過(guò)程中兩幀數(shù)據(jù)可以感知不同跟蹤算法在對(duì)動(dòng)態(tài)人物變動(dòng)所體現(xiàn)的差異。
1、MEDIANFLOW、BOOSTING、MIL在針對(duì)人物大小有變化時(shí)跟蹤比較不理想,跟蹤不到目標(biāo)。
2、CSRT、KCF能對(duì)運(yùn)動(dòng)畫(huà)面有較好跟蹤,但是在遮擋場(chǎng)景下,不能支持,效果較差。
審核編輯 :李倩
-
算法
+關(guān)注
關(guān)注
23文章
4784瀏覽量
98074 -
分類器
+關(guān)注
關(guān)注
0文章
153瀏覽量
13787 -
OpenCV
+關(guān)注
關(guān)注
33文章
652瀏覽量
44801
原文標(biāo)題:OpenCV中八種不同的目標(biāo)追蹤算法
文章出處:【微信號(hào):3D視覺(jué)工坊,微信公眾號(hào):3D視覺(jué)工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
仿人足球機(jī)器人目標(biāo)定位技術(shù)與追蹤算法改進(jìn)
【GM-3568JHF開(kāi)發(fā)板免費(fèi)體驗(yàn)】OpenCV 視頻目標(biāo)跟蹤 ( CamShift)
目標(biāo)追蹤的簡(jiǎn)易實(shí)現(xiàn):模板匹配
基于OPENCV的運(yùn)動(dòng)目標(biāo)跟蹤實(shí)現(xiàn)
基于FPGA的實(shí)時(shí)移動(dòng)目標(biāo)的追蹤
基于QT+OpenCv的目標(biāo)跟蹤算法實(shí)現(xiàn)
【方案分享】基于C6678+Zynq-7045 的目標(biāo)追蹤視覺(jué)技術(shù)
一種移動(dòng)信源追蹤活動(dòng)目標(biāo)的方法
QT+Opencv粒子濾波算法實(shí)現(xiàn)視頻目標(biāo)跟蹤——(三)QT環(huán)境安裝及配置
QT+Opencv粒子濾波算法實(shí)現(xiàn)視頻目標(biāo)跟蹤——如何選擇跟蹤算法
OpenCV上八種不同的目標(biāo)追蹤算法
一種基于多智能體協(xié)同強(qiáng)化學(xué)習(xí)的多目標(biāo)追蹤方法
如何使用樹(shù)莓派與OpenCV實(shí)現(xiàn)面部和運(yùn)動(dòng)追蹤的云臺(tái)系統(tǒng)?
【開(kāi)發(fā)實(shí)例】基于GM-3568JHF開(kāi)發(fā)板安裝OpenCV并使用視頻目標(biāo)跟蹤 ( CamShift)
OpenCV中八種不同的目標(biāo)追蹤算法
評(píng)論