C3D GitHub項目地址:https://github.com/facebook/C3D
C3D 官方用戶指南:https://goo.gl/k2SnLY
1. C3D特征提取
1.1 命令參數介紹
官方GitHub項目上同時提供了C3D-v1.0和C3D-v1.1兩個版本,以下方法適用於v1.0
官方提供的特征提取demo路徑為~/C3D-master/C3D-v1.0/examples/c3d_feature_extraction
在這個路徑下,執行c3d_sport1m_feature_extraction_video.sh或c3d_sport1m_feature_extraction_frm.sh可以分別啟動從視頻提取特征和從圖片提取特征的demo
打開c3d_sport1m_feature_extraction_video.sh文件,出去一些用來生成文件夾的指令,可以看到啟動C3D的命令如下:
GLOG_logtosterr=1 ../../build/tools/extract_image_features.bin prototxt/c3d_sport1m_feature_extractor_video.prototxt conv3d_deepnetA_sport1m_iter_1900000 0 50 1 prototxt/output_list_video_prefix.txt fc7-1 fc6-1 prob
其中
a) ../../build/tools/extract_image_features.bin是提取特征的可執行文件,示例命令中使用了相對路徑,如果在其他路徑下調用注意進行對應的修改
b) prototxt/c3d_sport1m_feature_extractor_video.prototxt該文件記錄了提取特征的一系列輸入參數,下面會詳細介紹
c) conv3d_deepnetA_sport1m_iter_1900000 這是預訓練模型文件,根據自己的需求做對應的修改
d) 接下來的三項數字是:0 50 1,分別是gpu_id,mini_batch_size和number_of_mini_batches。gpu_id是在計算機具有多塊GPU時指定使用哪一塊GPU的,默認是0,如果將這一項的值置為-1則啟動CPU模式。需要注意,如果需要調整batch size,在prototxt文檔中也要進行相應的修改
e) prototxt/output_list_video_prefix.txt是輸出前綴文件,下面會詳細介紹
f) fc7-1 fc6-1 prob是特征名稱 要提取哪一層的特征依序寫在這里即可
1.2 prototxt文檔
prototxt/c3d_sport1m_feature_extractor_video.prototxt是這個demo所使用的prototxt文檔
第9行
source: "prototxt/input_list_frm.txt"
這是記錄輸入文件路徑的文檔。在這個demo中,prototxt/input_list_frm.txt對應的是以圖片作為輸入時的文檔,而prototxt/input_list_video.txt對應的是以視頻作為輸入時的文檔。以prototxt/input_list_frm.txt為例,該文檔格式如下:
input/frm/v_ApplyEyeMakeup_g01_c01/ 1 0 input/frm/v_ApplyEyeMakeup_g01_c01/ 17 0 input/frm/v_ApplyEyeMakeup_g01_c01/ 33 0 input/frm/v_ApplyEyeMakeup_g01_c01/ 49 0 input/frm/v_ApplyEyeMakeup_g01_c01/ 65 0 input/frm/v_ApplyEyeMakeup_g01_c01/ 81 0 input/frm/v_ApplyEyeMakeup_g01_c01/ 97 0 input/frm/v_ApplyEyeMakeup_g01_c01/ 113 0 input/frm/v_ApplyEyeMakeup_g01_c01/ 129 0 input/frm/v_ApplyEyeMakeup_g01_c01/ 145 0
其中input/frm/v_ApplyEyeMakeup_g01_c01/是保存圖片的路徑,后面的第一個數字表示從哪一幀開始提取特征,最后的數字表示該行對應的類別。由於這是提取特征而非訓練,類別填寫什么都不要緊,只要有就行
多少幀提取一次特征,是由prototxt/input_list_frm.txt中第17行new_length一項參數決定的。例如上面例子中的視頻一共有165幀,那么最后一行對應的145幀開始提取特征,取16幀,使用145幀-161幀的數據。在這里如果取用的幀的編號超過總幀數165,則會報錯,要注意這一點
如果輸入時視頻,則參考prototxt/input_list_video.txt。需要注意的是,輸入為視頻時幀的序號是從0開始計算的
第9行
use_image: true
如果輸入時圖片,則為true,如果輸入時視頻,則為false
第10行
mean_file: "fb_train16_128_mean.binaryproto"
這里是使用的均值文件的路徑,根據所使用的模型生成或選擇均值文件即可
另外也可根據需求修改其他參數。
1.3 輸出前綴文件
參照prototxt/output_list_video_prefix.txt生成輸出前綴文件,可以根據需求進行自定義,只要注意該文件要和prototxt/input_list_frm.txt輸入文件清單的行數相對應即可
1.4 其他注意事項
輸出的特征文件所保存的路徑必須自己生成,C3D不會創建文件夾
如果提示“out of memory” 可以嘗試減小batch size
提取的特征是二進制文件,需要進行格式轉換才能正常處理
其他的注意事項可以參考官方的用戶指南
2. C3D訓練和fine-tune
訓練和fine-tune的官方demo的路徑分別是
~/C3D-master/C3D-v1.0/examples/c3d_train_ucf101 ~/C3D-master/C3D-v1.0/examples/c3d_finetuning
所使用的prototxt和inputlist等文件參照特征提取和demo修改即可