1. 程式人生 > >利用caffe訓練cifar之訓練資料集合生成leveldb

利用caffe訓練cifar之訓練資料集合生成leveldb

1.首先要搭建好VS+Caffe的訓練環境。

2.下載訓練集合Cifar:

獲得訓練集合:cifar-10-binary.tar.gz

解壓縮後獲得cifar-10-batches-bin資料檔案,裡面有6個bin檔案,為訓練資料集合。在windows環境下可以直接使用rar解壓縮。


3.在目錄路徑caffe-master\caffe-master\Build\x64\Debug的Debug檔案下建立資料輸入層資料夾。檔名名input_folder。(ps,檔名是固定的,這是程式碼中已經固定好的,請確認資料夾名是否問input_folder.)然後將上面解壓後得到的6個bin檔案拷貝到這個資料夾中。


4.在Debug目錄級下新建一個bat檔案,命名為training.bat,然後編輯內容:

convert_cifar_data.exe input_folder output_folders leveldb

pause

點選執行bat檔案就行了。


ps:bat檔名稱可以隨意,不一定非要為trainning,裡面的程式碼也很簡單,就是利用convert_cifar_data.exe執行檔案訓練input_folder資料夾中的資料集,然後設定leveldb檔案。訓練結果中自動生成兩個leveldb資料夾為:


cifar10_test_leveldb中的檔案內容為:


cifar10_test_leveldb中的檔案內容為:



這裡我們就生成了cifar的leveldb檔案。

最後附加我第一次學習中遇到的兩個問題:

1.第一個問題

建立input_folder檔案新增訓練資料後,點選bat檔案,出現錯誤:

D:\caffe\caffe-master\caffe-master\Build\x64\Debug>convert_cifar_data.exe input
_folder output_folders leveldb
I0422 21:51:02.593572 20568 db_leveldb.cpp:18] Opened leveldb output_folders/cif
ar10_train_leveldb
I0422 21:51:02.594573 20568 convert_cifar_data.cpp:52] Writing Training data
I0422 21:51:02.594573 20568 convert_cifar_data.cpp:55] Training Batch 1
F0422 21:51:02.594573 20568 convert_cifar_data.cpp:60] Check failed: data_file U
nable to open train file #1


*** Check failure stack trace: ***

解決方法:用VS Debug到錯誤處程式碼:

for (int fileid = 0; fileid < kCIFARTrainBatches; ++fileid) {
    // Open files
    LOG(INFO) << "Training Batch " << fileid + 1;
    string batchFileName = input_folder + "/data_batch_"
      + caffe::format_int(fileid+1) + ".bin";
    std::ifstream data_file(batchFileName.c_str(),
        std::ios::in | std::ios::binary);
    CHECK(data_file) << "Unable to open train file #" << fileid + 1;
    for (int itemid = 0; itemid < kCIFARBatchSize; ++itemid) {
      read_image(&data_file, &label, str_buffer);
      datum.set_label(label);
      datum.set_data(str_buffer, kCIFARImageNBytes);
      string out;
      CHECK(datum.SerializeToString(&out));
      txn->Put(caffe::format_int(fileid * kCIFARBatchSize + itemid, 5), out);
    }

肯定是資料集或者資料集的路徑出現了問題,首先檢查自己的資料集檔案,也就是6個bin檔案是否大小都為30010KB,以保證檔案資料沒有缺失。網上說用rar解壓cifar-10-binary.tar.gz得到的資料不正確,本人覺得純屬於胡扯,本人親自試驗用7-zip和rar解壓獲得資料檔案都是一樣,都可以進行訓練。

資料檔案完好無損的後,檢查資料檔名稱是否問input_folder!!!!!!博主第一次出現Check failed: data_file Unable to open train file 這個問題就是因為建立input_folder檔案多加了個空格,導致執行錯誤。說到心塞。注意路徑!注意路徑!注意路徑!重要的事說三遍。

2.第二個問題

執行bat檔案後出現錯誤資訊:

D:\caffe\caffe-master\caffe-master\Build\x64\Debug>convert_cifar_data.exe input
_folder output_folders leveldb
F0414 09:18:39.685039 4272 db_leveldb.cpp:16] Check failed: status.ok() Failed
to open leveldb output_folders/cifar10_train_leveldb
Invalid argument: output_folders/cifar10_train_leveldb: exists (error_if_exists
is true)

*** Check failure stack trace: ***

解決辦法:刪除output_folders資料夾重新執行bat檔案。問題解決。