機器學習13:Caffe訓練自定義數據集

機器學習13:Caffe訓練自定義數據集

       這裏簡要的介紹了下如何使用自己準備的圖片數據來訓練和測試網絡。主要的幾個步驟有:

       a.圖片數據轉換爲lmdb格式;    

       b.計算訓練數據的均值;

       c.sovler文件和網絡的簡單修改;

       d.最後caffe訓練。

1.數據集準備

        這裏我照搬denny402準備的數據。其中共有5個類,每個類100張圖片,每個類中用於測試的是20張圖片(編號0-19),用於訓練的是80張圖片(編號20-99)。
       首先在caffe的根目錄下的data目錄新建文件夾my,將test和train兩個目錄拷貝到其中。
       然後爲train和test中的數據建立了兩個txt的列表,分別是文件路徑名和對應的label號,需要注意的是label號是從0開始,至4。


       之後是使用convert_imageset.exe將圖片轉換爲lmdb形式。如果你並沒有生成這個exe,可以打開caffe的convert_imageset這個工程,右擊生成,exe會保存在.\bin文件夾中。
       然後調用下面的命令行生成兩個數據集的lmdb。

//轉換訓練數據
.\bin\convert_imageset.exe
 --shuffle\                       //表示打亂數據的順序
 --resize_height=256\
 --resize_width=256 \
 .\data\my\                       //存放train和test文件夾的路徑
 .\data\trainlist.txt             //根據trainlist.txt讀取圖片
 .\data\img_train_lmdb

//轉換測試數據
.\bin\convert_imageset.exe
 --shuffle\                       //表示打亂數據的順序
 --resize_height=256\
 --resize_width=256 \
 .\data\my\                   
 .\data\testlist.txt         
 .\data\img_test_lmdb

       這樣在data文件夾中會生成img_train_lmdb和img_test_lmdb兩個文件夾分別保存了lmdb格式的數據。

2.計算圖片均值

       計算圖片均值使用的是前一步生成的訓練數據的lmdb。
       同樣如果需要使用的compute_image_mean.exe並沒有生成,可以打開該工程,右擊生成即可,生成後,使用下面的命令行得到均值文件。

.\bin\compute_image_mean.exe .\data\img_train_lmdb .\data\mean.binaryproto

       這樣就得到了訓練數據的均值文件mean.binaryproto。

3.sovle.prototxt配置文件和train_val.prototxt模型修改

       這裏拷貝了models\bvlc_reference_caffenet\solver.prototxt和train_val.prototxt,並在其中簡單修改。

//solver.prototxt
net: "data/train_val.prototxt"
test_iter: 2
test_interval: 50
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 20
max_iter: 500
momentum: 0.9
weight_decay: 0.005
solver_mode: GPU

 

//train_val.prototxt
name: "CaffeNet"
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    crop_size: 227
    mean_file: "data/mean.binaryproto"
  }
  data_param {
    source: "data/img_train_lmdb"
    batch_size: 256
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "data/mean.binaryproto"
  }
  data_param {
    source: "data/img_test_lmdb"
    batch_size: 50
    backend: LMDB
  }
}

       主要的修改就是test iter和test batchsize,以及數據源的修改。

       前者是因爲我們的數據量發生了改變,另外,在FC這個layer處也要修改下,將1000改爲5,因爲我們這裏只有5個類別。

4.訓練和測試

       以上最終完成了程序caffe.exe運行的準備,最後在命令行中輸入:

.\bin\caffe.exe train -solver=.\data\solver.prototxt

      等待程序運行結束後可以查看結果。我這裏的accuracy大致爲93%。


作者:geaus
鏈接:https://www.jianshu.com/p/607f1e51e3ab

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章