本問創建於2017年1月。由於caffe版本更新, 可能部分操作已經過時不能使用,希望大家多看源碼,增強自主學習能力。
資料下載地址:https://github.com/EmmaW8/caffe.git
branch選擇201701,code文件夾裏面是需要用到的執行文件,models裏面是我自己設計的5層CNN模型配置文件,以及訓練結果。
1. 準備數據
2. 數據分類
get-filename-label.py文件
我的文件路徑比較複雜,此處很麻煩,如果你不用我的數據,可以不用我這個執行文件,自己寫一個就好,很easy~
注意修改內部數據文件路徑
$ python get-filename-label.py
會生成3個文件,分別爲train.txt,val.txt,test.txt.
train和val裏面有label,訓練用,test無label,分類時用。
train:val=9:1,你也可以嘗試4:1.
這裏其實很簡單,就是獲取數據路徑名稱,以及其label,我的文件僅供參考,可以根據這個寫出你自己的Python提取文件。
3. 生成lmdb文件,生成均值文件(mean.binaryproto)
creat_atypia.sh文件
修改DATA路徑。
運行:
$ sh creat_atypia.sh
生成3個lmdb文件和一個mean文件,這裏用到caffe自己提供的工具來生成。
示例;
echo "Creating train lmdb..."
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$TRAIN_DATA_ROOT \
$DATA/train.txt \
$DATA/atypia_train_initialsize_$DBTYPE
利用convert_imageset來生成lmdb文件
echo "Computing image mean..."
$TOOLS/compute_image_mean -backend=$DBTYPE \
$DATA/atypia_train_initialsize_$DBTYPE $DATA/initialsize_mean.binaryproto
利用compute_image_mean和剛生成的train_lmdb文件生成mean文件。
4. 自己設計網絡結構
我設計的網絡結構在models文件夾裏,-solver.prototxt是solver文件,-train_val.prototxt是描述網絡框架文件,*.caffemodel是我訓練完畢後生成的模型文件。deploy.prototxt是用於test分類時的文件。
在訓練之前,需要把solver 和 train_val.prototxt文件配置好。
具體如何配置,請參考我的文件進行修改。注意修改路徑。
此處一定要注意是layer {},還是layers{},如果定義的layer不同,那麼內部的參數會不同,上次就栽在這個坑裏了。layers裏面的type都是大寫的,並且param的設置不同。一個prototxt文檔裏,只能出現一種,不能layer和layers混用。
5. 訓練
執行code裏面的可執行文件train-atypia.sh
$ sh train-atypia.sh
開始訓練。
文件說明
#!/usr/bin/env sh
# begin train
set -e
# 指定log文件路徑和名稱
LOG=/home/emma/software/caffe/models/atypia/log/train-`date +%Y-%M-%d-%H-%M-%S`.log
#指定一些變量名,便於後續開發
TOOLS=/home/emma/software/caffe/build/tools
MODEL=/home/emma/software/caffe/models/atypia
NAME=atypia
# fine-tune 別人的模型,此處不需要
#$TOOLS/caffe train -solver $MODEL/$NAME-solver.prototxt -weights $MODEL/VGG_16_layers.caffemodel -gpu 0 > VGG2.log
# 訓練自己的模型,並將控制檯輸出導入到log文件
$TOOLS/caffe train -solver $MODEL/$NAME-solver.prototxt -gpu 0 2>&1 | tee $LOG
6. 可視化,畫出訓練loss,以及test accuracy
訓練完畢後,可以得到log文件,我的log文件位於models/log/
對log文件進行處理,提取出accuracy和loss的數值,然後畫圖。
可執行文件:plot.sh
./plot_training_log.py.example 0 /home/emma/software/caffe/models/atypia/log/curve/test_accuracy.png /home/emma/software/caffe/models/atypia/log/train-2017-52-07-19-52-39.log
0:代表畫出test_accuracy 和iters的曲線
2:代表畫出test_loss和iters的曲線
6:代表畫出train_loss 和iters的曲線
第二個參數是,圖片保存位置,第三個參數log文件所在的位置
我生成的曲線存儲在models/log/curve裏面,例如
注意事項:
如果loss未收斂,記得及時調整學習率。
第一次使用自己設計的網絡時,選擇10個訓練數據,並且訓練數據=val數據集,看一下訓練幾次後準確率是否會達到100%,如果會,就說明模型可用!!!
EMMA
SIAT