Caffe學習系列(四)之--訓練自己的模型


前言:

    本文章記錄了我將自己的數據集處理並訓練的流程,幫助一些剛入門的學習者,也記錄自己的成長,萬事起於忽微,量變引起質變。

正文:

一、流程

    1)准備數據集

    2)數據轉換為lmdb格式

    3)計算均值並保存(非必需)

    4)創建模型並編寫配置文件

    5)訓練和測試

二、實施

(一)准備數據集

       在深度學習中,數據集准備往往是最難的事情,因為數據涉及隱私、商業等各方面,獲取難度很大,不過有很多科研機構公布了供學習使用的數據集,我們可以在網上下載。還有一種獲取的途徑是論文,查閱國內外相關的論文,看他們是如何獲取到數據集的,我們也可以使用他 們所采用的數據集。

我要訓練的模型是人臉識別,訓練的數據集是在網上下載的,經過整理,在我的網盤可以下載:http://pan.baidu.com/s/1jIxCcKI

 

(二)數據轉換為lmdb格式

    生成lmdb格式的文件通過腳本來實現,這就需要我們自己編寫腳本文件,這里遇到了一些坑,首先使用vim創建腳本文件create1.sh

#!/usr/bin/env sh
DATA=AR1
MY=newfile
echo "Create train.txt..."
rm -rf $MY/train.txt
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
do
find $DATA/train/$i -name *.pgm|cut -d '/' -f2-4 | sed "s/$/ $i/">>$MY/train.txt
done
echo "Create test.txt..."
rm -rf $MY/test.txt
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
do
find $DATA/test/$i -name *.pgm|cut -d '/' -f2-4 | sed "s/$/ $i/">>$MY/test.txt
done
echo "All done"

這個腳本文件中,用到了rm,find, cut, sed,cat等linux命令。

rm: 刪除文件

find: 尋找文件

cut: 截取路徑

sed: 在每行的最后面加上標注。本例中將找到的*cat.jpg文件加入標注為1,找到的*bike.jpg文件加入標注為2

cat: 將兩個類別合並在一個文件里。

執行這個腳本:

sh data/face/create1.sh

   成功的話就會在newfile文件夾里生成train.txt和test.txt文件,比如

    

f2-4的含義是選取以“/”而分隔開的第2至第4部分

接着再編寫一個腳本文件,調用convert_imageset命令來轉換數據格式。

vim lmdb.sh
#!/usr/bin/env sh
MY=data/face/newfile
echo "Create train lmdb.."
rm -rf $MY/img_train_lmdb
build/tools/convert_imageset --shuffle \
--resize_height=256 \
--resize_width=256 \
/home/zyf/ygh/project/caffe/data/face/AR1/ $MY/train.txt $MY/img_train_lmdb
echo "Create test lmdb.."
rm -rf $MY/img_test_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_width=256 \
--resize_height=256 \
/home/zyf/ygh/project/caffe/data/face/AR1/ \
$MY/test.txt \
$MY/img_test_lmdb
echo "All Done.."

我統一轉換成256*256大小。

sh lmdb.sh

運行成功后,會在 newfile下面生成兩個文件夾img_train_lmdb和img_test_lmdb,分別用於保存圖片轉換后的lmdb文件。

 

(三)計算均值並保存(非必需)

圖片減去均值再訓練,會提高訓練速度和精度。因此,一般都會有這個操作。

caffe程序提供了一個計算均值的文件compute_image_mean.cpp,我們直接使用就可以了

build/tools/compute_image_mean data/face/newfile/img_train_lmdb data/face/newfile/mean.binaryproto 
 
        
compute_image_mean帶兩個參數,第一個參數是lmdb訓練數據位置,第二個參數設定均值文件的名字及保存路徑。運行成功后,會在 newfile/ 下面生成一個mean.binaryproto的均值文件。

(四)創建模型並編寫配置文件

模型里面的數據

data_param {
    source: "data/face/newfile/img_train_lmdb"
    backend:LMDB
    batch_size: 128
  }


transform_param {
     mean_file: "data/face/newfile/mean.binaryproto"
     mirror: true
  }

這其中的source和mean_file的路徑要改成前面你自己生成的文件目錄,其余的不需要修改,我這里采用的是網上訓練精度不錯的一個網絡,具體下載可以轉到百度雲:  鏈接

 其中的train_val.prototxt是訓練網絡

然后修改其中的solver.prototxt

net: "data/face/train_val.prototxt"
test_iter: 10
test_interval: 100

base_lr: 0.001
lr_policy: "step"
gamma: 0.95
stepsize:  100
momentum: 0.9
weight_decay: 0.0005

display: 100
max_iter:  5000
snapshot:  5000
snapshot_prefix: "data/face"
solver_mode: GPU
device_id:0
#debug_info: true
其中test_iter: 10,test_interval: 100,一千張圖片每次測試100張,10次就都可以覆蓋了。。在訓練過程中,調整學習率,逐步變小。

(五)訓練和測試

 如果前面都沒有問題,數據准備好了,配置文件也配置好了,這一步就比較簡單了。

build/tools/caffe train -solver data/face/solver.prototxt

直接訓練即可,可以實時在命令行下查看其精度與loss。

 

待續。。。

                                                                     by  still

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM