友情提示:如果只希望瞭解如何利用作者發佈的預訓練網絡直接進行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文件下載鏈接(如下圖所示)。該文件的文件名爲
ILSVRC2015_VID.tar.gz
,大約佔用86GB磁盤空間,強烈建議用迅雷下載該文件,有條件的也可以用淘寶的代下載服務。
下載CFNet的官方Metadata,地址:http://bit.ly/cfnet_imdb_video,其文件名爲
cfnet_imdb_video_2016-10.mat
,佔用空間大約爲6GB,同樣建議用迅雷或者淘寶上的代下載服務。
Crop圖像生成
在CFNet源碼文件夾中的
data
目錄中創建VID
文件夾(此時,創建後的VID文件夾爲空)將準備工作中下載的
ILSVRC2015_VID.tar.gz
文件(大小約86GB)解壓,可以解壓到任何地方(友情提示:1.最好不要放太深或者有空格的路徑;2.一定不要放到CFNet源碼文件夾data
裏面,否則上述空VID
文件夾會受到影響),解壓後會得到一個ILSVRC2015
文件夾,其中我們關注的目錄有兩個:Data\VID\train
和Data\VID\val
,如下面兩張圖所示(注意:對於train
目錄我們還關心它裏面的四個子文件夾):
將上述
val
目錄移動到上述train
目錄中(注意:是移動整個val
文件夾),移動後,Data\VID\train
目錄就包含了五個文件夾:四個自帶的文件夾,加上新進來的val
文件夾,按照Windows資源管理器默認的名稱增序排序如下: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窗口中,利用
xcopy
命令(參考:https://superuser.com/questions/530128/how-to-copy-a-directory-structure-without-copying-files),將剛剛移動了文件夾、並修改了文件夾名字的ILSVRC15圖像數據集中的文件夾結構複製到步驟1中創建的空VID文件夾中(注意:只是複製文件目錄結構,不要複製裏面的文件),具體命令形如: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
目錄下檢查一下是否有一堆空的文件夾(文件夾裏面可能還會有文件夾,但一定沒有任何文件)。將準備工作中下載的
cfnet_ILSVRC2015.stats.mat
文件(大小約728KB)複製到cfnet-master\data
目錄中,並修改文件名爲ILSVRC2015.stats.mat
;將下載的cfnet_imdb_video_2016-10.mat
文件(大小約6GB)複製到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’);上述三條命令,其具體路徑與自己實際情況保持一致。關於參數4417的來歷,可以在MATLAB中打開load後的
imdb_video.mat
變量,發現其id
屬性有4417個元素。注意:該crop工作持續的時間可能非常長(配置Intel Core i5標壓CPU的機器可能需要40-50個小時),源碼也沒有斷點恢復機制,爲防止機器斷電造成損失,可以通過修改參數1和4417來分段進行crop。
Crop的圖像和標註數據會寫入到步驟1創建的
VID
空文件夾中,該過程執行完畢後,其內部應該包含個8,021,672個文件,佔用37.4GB的磁盤空間,如下圖所示:
Crop操作相當於對視頻原始圖像進行了裁剪、縮小和補全等處理,以下是一個crop前(上圖)和crop後(下圖)比較的例子:
訓練
進入目錄
cfnet-master\src\training
,複製env_paths_training.m.example
和startup.m.example
文件並去掉其.example
後綴,如下圖所示:
打開上述兩個文件並修改裏面的配置信息(注意有些地方需要在末尾帶上正斜槓,文件名一定要與之前的對應起來),如下圖所示:
以訓練conv2爲例,運行
run_experiment_cfnet_conv2.m
文件,代碼中默認迭代100次,完整的訓練過程可能會花費很長的時間,如果只是希望簡單體驗一下可以調低該源碼文件中參數opts.train.numEpochs
的值進行訓練,訓練時會產生類似下圖的輸出:
訓練網絡時,代碼會在
cfnet-master\src\training
中創建一個文件夾,每進行一次迭代,都會在該文件夾中保存一個網絡文件。這樣,CFNet的網絡訓練是允許中途關機的。
跟蹤
選擇上述某一輪迭代保存的網絡文件,拷貝到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
,這樣的效果如下圖所示:
更多內容,歡迎掃碼關注“視覺邊疆”微信訂閱號