友情提示:如果隻希望了解如何利用作者釋出的預訓練網絡直接進行tracking(免訓練模式),可以閱讀本人另一篇部落格:CFNet視訊目标跟蹤源碼運作筆記(1)——only tracking
論文資訊
論文題目:End-to-end representation learning for Correlation Filter based tracking
論文出處:CVPR 2017
論文作者:Jack Valmadre,Luca Bertinetto等人
論文首頁:http://www.robots.ox.ac.uk/~luca/cfnet.html
源碼連結:https://github.com/bertinetto/cfnet
運作環境介紹
- Windows 10 x64
- MATLAB 2017b
- Visual Studio 2015
- CUDA 8.0.61 for win10
- cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0
- MatConvNet 1.0-beta25 (http://www.vlfeat.org/matconvnet/download/matconvnet-1.0-beta25.tar.gz)此處感謝“月色真美”同學的無私幫助~
準備
-
安裝CUDA,具體步驟可以參考本人另一篇部落格:
https://blog.csdn.net/discoverer100/article/details/79758499
-
安裝cuDNN,具體步驟可以參考本人另一篇部落格:
https://blog.csdn.net/discoverer100/article/details/79759282
-
檢查MatConvNet是否可用,具體步驟可以參考本人另一篇部落格:
https://blog.csdn.net/discoverer100/article/details/78963233
- 下載下傳CFNet的MATLAB源碼:https://github.com/bertinetto/cfnet
- 下載下傳SiamFC目标跟蹤的MATLAB源碼:https://github.com/bertinetto/siamese-fc,後續進行crop圖像生成時需要借用裡面的部分代碼。
- 下載下傳
cfnet_ILSVRC2015.stats.mat
檔案,連結:
https://drive.google.com/file/d/0B7Awq_aAemXQcndzY3M5dkprVTA/view?usp=sharing
- 下載下傳ILSVRC2015視訊圖像集,位址:http://bvisionweb1.cs.unc.edu/ilsvrc2015/ILSVRC2015_VID.tar.gz,如果不能直接下載下傳,則需要到網頁上進行注冊(http://bvisionweb1.cs.unc.edu/ilsvrc2015/download-videos-3j16.php#vid),在這個頁面中能夠看到一個VID檔案下載下傳連結(如下圖所示)。該檔案的檔案名為
,大約占用86GB磁盤空間,強烈建議用迅雷下載下傳該檔案,有條件的也可以用淘寶的代下載下傳服務。ILSVRC2015_VID.tar.gz
- 下載下傳CFNet的官方Metadata,位址:http://bit.ly/cfnet_imdb_video,其檔案名為
,占用空間大約為6GB,同樣建議用迅雷或者淘寶上的代下載下傳服務。cfnet_imdb_video_2016-10.mat
Crop圖像生成
- 在CFNet源碼檔案夾中的
目錄中建立data
檔案夾(此時,建立後的VID檔案夾為空)VID
- 将準備工作中下載下傳的
檔案(大小約86GB)解壓,可以解壓到任何地方(友情提示:1.最好不要放太深或者有空格的路徑;2.一定不要放到CFNet源碼檔案夾ILSVRC2015_VID.tar.gz
裡面,否則上述空data
檔案夾會受到影響),解壓後會得到一個VID
檔案夾,其中我們關注的目錄有兩個:ILSVRC2015
和Data\VID\train
,如下面兩張圖所示(注意:對于Data\VID\val
目錄我們還關心它裡面的四個子檔案夾):train
- 将上述
目錄移動到上述val
目錄中(注意:是移動整個train
檔案夾),移動後,val
目錄就包含了五個檔案夾:四個自帶的檔案夾,加上新進來的Data\VID\train
檔案夾,按照Windows資料總管預設的名稱增序排序如下:val
ILSVRC2015_VID_train_0000
ILSVRC2015_VID_train_0001
ILSVRC2015_VID_train_0002
ILSVRC2015_VID_train_0003
val
- 對上述五個檔案夾進行重命名,分别命名為
、a
、b
、c
、d
,如下:e
ILSVRC2015_VID_train_0000 -> a
ILSVRC2015_VID_train_0001 -> b
ILSVRC2015_VID_train_0002 -> c
ILSVRC2015_VID_train_0003 -> d
val -> e
- 在CMD視窗中,利用
指令(參考:https://superuser.com/questions/530128/how-to-copy-a-directory-structure-without-copying-files),将剛剛移動了檔案夾、并修改了檔案夾名字的ILSVRC15圖像資料集中的檔案夾結構複制到步驟1中建立的空VID檔案夾中(注意:隻是複制檔案目錄結構,不要複制裡面的檔案),具體指令形如:xcopy
xcopy D:\ILSVRC15\data\VID D:\Dev\MATLAB_2017\cfnet-master\data\VID /t /e
如果采用Linux系統,則需要用形如下面的指令來進行目錄結構複制(感謝yangkang779760348同學進行補充~)find ./VID/ -type d -exec mkdir -p VI/{} \; linux下的xcopy
執行該指令可能需要花費幾分鐘至十幾分鐘的時間,執行完畢後到
目錄下檢查一下是否有一堆空的檔案夾(檔案夾裡面可能還會有檔案夾,但一定沒有任何檔案)。cfnet-master\data\VID
- 将準備工作中下載下傳的
檔案(大小約728KB)複制到cfnet_ILSVRC2015.stats.mat
目錄中,并修改檔案名為cfnet-master\data
;将下載下傳的ILSVRC2015.stats.mat
檔案(大小約6GB)複制到cfnet_imdb_video_2016-10.mat
目錄中,并修改檔案名為cfnet-master\data
,複制後的imdb_video.mat
檔案夾如下所示:data
- 将準備工作中下載下傳的SiamFC源碼包進行解壓,将裡面的
檔案夾拷貝到ILSVRC15-curation
目錄中,這樣,cfnet-master\src
目錄中一共有四個檔案夾:src
ILSVRC15-curation
tracking
training
util
- 在MATLAB中打開
檔案,并在其指令視窗中一行一行地運作:cfnet-master\src\ILSVRC15-curation\save_crops.m
imdb_video = load(‘D:/Dev/MATLAB_2017/cfnet-master/data/imdb_video.mat’);
imdb_video = imdb_video.imdb_video;
save_crops(imdb_video, 1, 4417, ‘D:\ILSVRC15’, ‘D:/Dev/MATLAB_2017/cfnet-master’);
變量,發現其imdb_video.mat
id
屬性有4417個元素。
注意:該crop工作持續的時間可能非常長(配置Intel Core i5标壓CPU的機器可能需要40-50個小時),源碼也沒有斷點恢複機制,為防止機器斷電造成損失,可以通過修改參數1和4417來分段進行crop。
- Crop的圖像和标注資料會寫入到步驟1建立的
空檔案夾中,該過程執行完畢後,其内部應該包含個8,021,672個檔案,占用37.4GB的磁盤空間,如下圖所示:VID
- Crop操作相當于對視訊原始圖像進行了裁剪、縮小和補全等處理,以下是一個crop前(上圖)和crop後(下圖)比較的例子:
訓練
- 進入目錄
,複制cfnet-master\src\training
和env_paths_training.m.example
檔案并去掉其startup.m.example
字尾,如下圖所示:.example
- 打開上述兩個檔案并修改裡面的配置資訊(注意有些地方需要在末尾帶上正斜杠,檔案名一定要與之前的對應起來),如下圖所示:
- 以訓練conv2為例,運作
檔案,代碼中預設疊代100次,完整的訓練過程可能會花費很長的時間,如果隻是希望簡單體驗一下可以調低該源碼檔案中參數run_experiment_cfnet_conv2.m
的值進行訓練,訓練時會産生類似下圖的輸出:opts.train.numEpochs
- 訓練網絡時,代碼會在
中建立一個檔案夾,每進行一次疊代,都會在該檔案夾中儲存一個網絡檔案。這樣,CFNet的網絡訓練是允許中途關機的。cfnet-master\src\training
跟蹤
選擇上述某一輪疊代儲存的網絡檔案,拷貝到
cfnet-master\pretrained\networks
目錄中,運作對應的源碼即可。以conv2層為例,打開檔案
run_cfnet2_evaluation.m
,修改參數
tracker_par.net
的值為剛剛拷貝的網絡檔案名,再運作即可。
關于跟蹤過程的詳細操作,可以閱讀本人另一篇部落格:
https://blog.csdn.net/discoverer100/article/details/79758131
這裡需要注意的是:代碼預設僅僅計算物體坐标,并不會在螢幕上顯示視訊畫面内容和标定。如果需要顯示畫面,可以進入
tracker.m
檔案,将第16行的
p.visualization
指派為
true
,這樣的效果如下圖所示:
更多内容,歡迎掃碼關注“視覺邊疆”微信訂閱号