對於物體遮擋、形變、背景雜斑、尺度變換、快速運動等場景,如何又快又準確的預測結果?
實驗論證,透過VOT(Visual Object Tracking, VOT)技術可以精準實現對影片中綠框標示的物體的運動軌跡跟蹤。VOT透過跟蹤影像序列中的特定運動目標,獲得目標的運動引數,如:位置、速度、加速度和運動軌跡等,並進行後續處理與分析,實現對運動目標的行為理解。作為計算機視覺的重要分支之一,VOT技術在影片監控、互動娛樂、機器人視覺導航和醫療診斷等領域發揮著重要的作用,並具有廣泛的發展前景。
飛槳PaddleCV新增“Tracking影片單目標跟蹤模型庫”,基於飛槳核心框架開發,涵蓋四個業界領先的VOT演算法:SiamFC、SiamRPN、SiamMask和ATOM。基於Tracking影片單目標跟蹤模型庫,開發者只需修改相關引數,便可以便捷、高效地在工業實踐中應用VOT技術。
Tracking模型庫路徑:
https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/tracking
VOT相關演算法通常分為生成式(generative model)和判別式(discriminative model)。
生成式:採用特徵模型描述目標的外觀特徵,再最小化跟蹤目標與候選目標之間的重構誤差來確認目標。此方法著重於目標本身的特徵提取,忽略目標的背景資訊,因而在目標外觀發生劇烈變化或者遮擋時,容易出現目標漂移或目標丟失。
判別式:將目標跟蹤看做一個二元分類問題,透過訓練關於目標和背景的分類器來從候選場景中確定目標,可以顯著區分背景和目標,效能魯棒,漸漸成為目標跟蹤領域主流方法,目前大多數基於深度學習的目標跟蹤演算法都屬於判別式方法。飛槳Tracking中的模型應用的都是此方法。
演算法介紹
下面,我們一同解讀一下Tracking模型庫中四個模型(SiamFC、SiamRPN、SiamMask和ATOM)的實現原理。
1. SiamFC
SiamFC論文地址:
https://arxiv.org/pdf/1811.07628.pdf
SiamFC網路主體基於AlexNet,分為上、下兩個權重共享的子網路,輸入分別為模板影像(跟蹤目標)和檢測影像(搜尋範圍)。
- 模板影像:指目標區域的擴充套件紋理,透過padding補充模板周圍背景的上下文資訊。模板影像首先被resize到127×127×3,之後透過上分支子網路得到6×6×128的feature map。
- 檢測影像:指模板影像4倍大小的檢測區域。檢測影像首先被resize到255×255×3,之後透過下分支子網路得到22×22×128的feature map。
使用交叉相關(cross-correlation)作為相似度的度量,計算兩個feature map各個位置(區域)上的相似度,得到一個17×17×1的score map。該score map計算方式類似卷積,即:
- 將模板影像feature map作為卷積核,在檢測影像feature map上進行滑窗,得到score map;
- 然後採用雙線性插值對score map進行上取樣得到解析度放大16倍的score map,以獲得更好的定位精度;
- 根據上取樣後的score map,即可定位到跟蹤目標在新一幀(檢測影像)中的位置。
SiamFC預測時,不線上更新模板影像。這使得其計算速度很快,但同時也要求SiamFC中使用的特徵具有足夠魯棒性,以便在後續幀中能夠應對各種變化。另一方面,不線上更新模板影像的策略,可以確保跟蹤漂移,在long-term跟蹤演算法上具有天然的優勢。
基於Tracking復現的SiamFC模型精度:
使用VOT2018資料集,SiamFC指標與paper公開指標對比如下:
2. SiamRPN
SiamRPN論文地址:
http://openaccess.thecvf.com/content_cvpr_2018/papers/Li_High_Performance_Visual_CVPR_2018_paper.pdf
SiamFC利用影像金字塔得到不同尺度的模板影像進行多尺度測試,從而得到跟蹤目標的位置和尺度,但無法獲得目標的長寬比,使得跟蹤框無法緊密的貼合目標。相比SiamFC,SiamRPN在網路結構中引入Region Proposal Network(RPN)。將模板影像和檢測影像的feature map複製雙份,一份送入RPN的分類分支,另一份送入RPN的迴歸分支。透過RPN 中的anchor機制覆蓋各種尺寸,使得Siamese網路擁有了多尺度檢測的能力,並且可以更準確地迴歸出目標的位置、大小以及長寬比。
- 在RPN分類分支中,模板影像和檢測影像的feature map都先經過一個卷積層,該卷積層主要對模板影像的feature map進行channel升維,使其變為檢測影像feature map通道數的2k倍(k為RPN中設定的anchor數)。此後,將模板影像的feature map在channel上按序等分為2k份,作為2k個卷積核,在檢測影像的feature map完成卷積操作,得到一個維度為2k的score map。該score map同樣在channel上按序等分為k份,得到對應k個anchor的k個維度為2的score map,2個維度分別對應anchor中前景(目標)和後景(背景)的分類分數。
- 在RPN迴歸分支中,模板影像和檢測影像的feature map,都先經過一個卷積層,該卷積層主要對模板影像的feature map進行channel升維,令其維度變為檢測影像的feature map通道數的4k倍(k為RPN中設定的anchor數)。此後,將模板影像的feature map在channel上按序等分為4k份,作為4k個卷積核,在檢測影像的feature map完成卷積操作,得到一個維度為4k的score map。該score map同樣在channel上按序等分為k份,得到對應k個anchor的k個維度為4的score map,4個維度分別對應anchor左上角的橫縱座標值,以及長寬(x,y,w,h)。
基於Tracking復現的SiamRPN模型精度
使用OTB100資料集,SiamRPN指標與paper公開指標對比如下:
3. SiamMask
SiamMask論文地址:
https://arxiv.org/pdf/1812.05050.pdf SiamRPN預測出的包圍框結果更加精確,主要體現在包圍框的尺寸和長寬比上,但是這些包圍框都是軸對齊的包圍框,不能很好地適應目標的旋轉和變化。SiamMask基於SiamRPN,在score分支和bbox分支基礎上增加了mask分支,同時對目標進行位置、大小和分割的預測,利用影像分割獲得mask,得到帶有方向的包圍框,能更好地貼合目標的旋轉和變化,以達到更高的IoU。SiamMask還應用了Depthwise Cross-correlation的方式,解決SiamRPN非對稱的問題,並使用ResNet作為網路主體加深網路深度,以獲得更多層次的特徵。
除此之外,為了提高模型輸出的mask的解析度,SiamMask還應用瞭如下圖所示的Refine模組,透過級聯Refine的形式逐級將低語義資訊高解析度的feature map和上取樣後的mask進行融合,最終得到同時擁有高語義資訊和高解析度的mask。
基於Tracking復現的SiamMask模型精度
使用VOT208資料集,SiamMask指標與paper公開指標對比如下:
4. ATOM(Accurate Tracking by Overlap Maximization)
受2018年ECCV的IoUNet 啟發,提出一種IoU最大化的訓練思路。
ATOM論文地址:
https://arxiv.org/pdf/1811.07628.pdf
ATOM網路結構主要包含兩個模組:目標估計模組(藍色區域)和目標分類模組(綠色區域)。
- 目標估計模組:用於計算測試圖片和參考圖片的物體IoU,論文對該模組進行離線訓練;
- 目標分類模組:僅由兩層卷基層構成,迴歸出測試圖片中各個位置出現目標物體的機率。
實際測試過程中,首先將上一幀物體座標和尺寸作為Reference,利用目標分類模組計算當前幀的confidence map,將最高得分的位置作為目標在當前幀中的位置。這個座標位置和前一幀中計算的目標size一起,就構成了初始的目標框。接下來基於該目標框,論文生成10個推薦區域,並利用目標估計模組計算它們與Reference的IoU數值,取前三個最大值對應的目標框,然後將它們的平均值作為最終的目標框,實現物體的線上跟蹤。
基於Tracking復現的ATOM模型精度
使用VOT208資料集,ATOM指標與paper公開指標對比如下:
實驗證明,使用飛槳Tracking復現的SiamFC、SiamRPN、SiamMask和ATOM模型精度均與原論文持平。更重要的是,Tracking開源了四種模型的網路結構原始碼,開發者只需要在此基礎上進行引數調整,就可以快速實現VOT技術。
手把手實踐
1. 環境準備
工作環境為Linux,python3以及飛槳1.8.0及以上版本。
2. 資料集下載
目標跟蹤的訓練集和測試集是不同的,模型訓練時往往使用多個訓練集。目前主流的訓練資料集有:VID、DET、COCO、Youtube-VOS、LaSOT、GOT-10K;主流的測試資料集有:OTB、VOT。
3. 下載目標跟蹤庫
git clone https://github.com/PaddlePaddle/models.git git checkout develop cd models/PaddleCV/tracking/
4. 安裝第三方庫,推薦使用Anaconda。
pip install -r requirements.txt
(可選)如下兩個外掛可提升檔案讀取效率,建議開發者安裝。
# (可選) 1. 推薦安裝:快速讀取 jpeg 檔案 apt-get install libturbojpeg # (可選) 2. 推薦安裝:程式控制 apt-get install build-essential libcap-dev pip install python-prctl
5. 下載Backbone預訓練模型。
準備SiamFC 、SiamRPN、SiamMask、ATOM模型的Backbone預訓練模型。飛槳提供 ATOM ResNet18 和 ResNet50 的 backbone模型。單擊如下連結可以下載所有預訓練模型的壓縮包,壓縮包解壓後的資料夾為 pretrained_models。
預訓練模型下載連結:
https://paddlemodels.bj.bcebos.com/paddle_track/vot/pretrained_models.tar
6. 設定訓練引數
所有訓練工作都將利用ltr程式碼完成,需要進入models/PaddleCV/tracking/ltr路徑。
在啟動訓練前,需要設定使用的資料集路徑,以及訓練模型儲存的路徑,這些引數在
ltr/admin/local.py中設定。
# 使用編輯器編輯檔案 ltr/admin/local.py # workspace_dir = './checkpoints' # 要儲存訓練模型的位置 # backbone_dir = Your BACKBONE_PATH # 訓練SiamFC時不需要設定 # 並依次設定需要使用的訓練資料集如 VID, LaSOT, COCO 等,比如: # imagenet_dir = '/Datasets/ILSVRC2015/' # 設定訓練集VID的路徑 # 如果 ltr/admin/local.py 不存在,請使用程式碼生成 python -c "from ltr.admin.environment import create_default_local_file; create_default_local_file()"
7. 啟動訓練
透過組合不同的資料處理模組、樣本取樣模組、模型結構、目標函式以及訓練設定,可以輕鬆實現各種VOT演算法。
以ATOM為例,在“
ltr/train_settings/bbreg/atom_res50_vid_lasot_coco.py”檔案中定義訓練集為ImagenetVID、LaSOT和MSCOCOSeq,驗證集為Got10K。採用ATOMProcessing資料處理器對樣本進行處理,ATOMSampler取樣器對訓練樣本進行取樣,並透過AtomActor執行器對模型和目標函式進行封裝。透過如下命令啟動訓練。
# 訓練 ATOM ResNet50 python run_training.py bbreg atom_res50_vid_lasot_coco
飛槳還提供了其他模型的訓練配置檔案,可以按照如下方式啟動訓練。
# 訓練 ATOM ResNet18 python run_training.py bbreg atom_res18_vid_lasot_coco # 訓練 SiamFC python run_training.py siamfc siamfc_alexnet_vid # 訓練 SiamRPN AlexNet python run_training.py siamrpn siamrpn_alexnet # 訓練 SiamMask-Base ResNet50 python run_training.py siammask siammask_res50_base # 訓練 SiamMask-Refine ResNet50,需要配置settings.base_model為最優的SiamMask-Base模型 python run_training.py siammask siammask_res50_sharp
8. 模型評估
模型訓練完成後,進入pytracking路徑,並在“pytracking/admin/local.py”檔案中設定模型評估環境、測試資料和模型。
# 在VOT2018上評測ATOM模型 # -d VOT2018 表示使用VOT2018資料集進行評測 # -tr bbreg.atom_res18_vid_lasot_coco 表示要評測的模型,和訓練保持一致 # -te atom.default_vot 表示載入定義超引數的檔案pytracking/parameter/atom/default_vot.py # -e 40 表示使用第40個epoch的模型進行評測,也可以設定為'range(1, 50, 1)' 表示測試從第1個epoch到第50個epoch模型 # -n 15 表示測試15次取平均結果,預設值是1 python eval_benchmark.py -d VOT2018 -tr bbreg.atom_res18_vid_lasot_coco -te atom.default_vot -e 40 -n 15
9. 結果視覺化
資料集上評測完後,可以透過視覺化跟蹤器的結果定位問題,飛槳提供下面的方法來視覺化跟蹤結果。
# 開啟 jupyter notebook,請留意終端是否輸出 token jupyter notebook --ip 0.0.0.0 --port 8888
在瀏覽器中輸入“伺服器IP地址+埠號”,在“
visualize_results_on_benchmark.ipynb” 檔案檢視視覺化結果。
本文介紹了VOT幾種主流演算法的原理,以及應用Tracking影片單目標跟蹤模型庫進行VOT實踐的操作方法,歡迎開發者們使用,並貢獻您的奇思妙想。
如果您覺得效果還不錯,歡迎“Star”;如果您有意見需要交流,歡迎“Issue”,Tracking影片單目標跟蹤模型庫開原始碼和參考文件Github地址:
https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/tracking
如在使用過程中有問題,可加入飛槳官方QQ群進行交流:1108045677。
如果您想詳細瞭解更多飛槳的相關內容,請參閱以下文件。
飛槳官網地址:
飛槳開源框架專案地址:
GitHub:
https://github.com/PaddlePaddle/Paddle
Gitee: