深度学习与人脸识别系列(4)__利用caffe训练深度学习模型

一:下载训练集和测试集
训练集的下载地址:http://www.cbsr.ia.ac.cn/english/CASIA-WebFace-Database.html
深度学习与人脸识别系列(4)__利用caffe训练深度学习模型_第1张图片
测试集的下载地址: http://vis-www.cs.umass.edu/lfw/
深度学习与人脸识别系列(4)__利用caffe训练深度学习模型_第2张图片

二:利用linux脚本生成训练集

[plain]  view plain  copy
 
  1. #!/bin/bash  
  2.   
  3.   
  4. #-----------------------------------------------------------------------------------------  
  5.   
  6.   
  7. #生成训练集和验证集  
  8. #made by 郭开  
  9.   
  10.   
  11. #-----------------------------------------------------------------------------------------  
  12.   
  13.   
  14. #保存图片的路径    
  15. PATH=/media/gk/9ec75485-26b1-471f-9b7b-d18554ca3fdd/aa  
  16. echo "start..."  
  17. #遍历文件夹  
  18. for name in $PATH/webface_img/*;do  
  19.         var=0  
  20. #遍历文件夹中的图片  
  21.         for file_name in $name/*;do    
  22.             var=$(($var+1));    
  23.             str=$file_name    
  24.             #保存图片路径  
  25.             str=${str#*img}    
  26.             #保存图片lable    
  27.             lable=${str#*/}    
  28.             lable=${lable%%/*}    
  29.             if [ "$var" = "1" ] || [ "$var" = "3" ] || [ "$var" = "5" ]; then    
  30.             #验证集    
  31.             echo $str" "$lable>>/home/gk/val.txt    
  32.             else    
  33.             #测试集    
  34.             echo $str" "$lable>>/home/gk/train.txt    
  35.             fi    
  36. done    
  37. done    
  38. echo "Done."  

生成的文件如下图:

深度学习与人脸识别系列(4)__利用caffe训练深度学习模型_第3张图片


深度学习与人脸识别系列(4)__利用caffe训练深度学习模型_第4张图片

三:将图片转换成LMDB格式

[plain]  view plain  copy
 
  1. #!/usr/bin/env sh    
  2.   
  3.   
  4. #-----------------------------------------------------------------------------------------    
  5.     
  6.     
  7. # 将图片批量生成lmbd格式的数据存储  
  8. #made by 郭开    
  9.     
  10.     
  11. #-----------------------------------------------------------------------------------------    
  12.     
  13. #保存生成的lmdb的目录    
  14. EXAMPLE=/media/gk/9ec75485-26b1-471f-9b7b-d18554ca3fdd/aa/lmdb_webface  
  15.     
  16. #train.txt和val.txt所在的目录  
  17. DATA=/home/gk  
  18.     
  19. #转换图片的工具所在的目录    
  20. TOOLS=/home/gk/caffe-master/build/tools    
  21.     
  22. #图片所在的目录  
  23. TRAIN_DATA_ROOT=/media/gk/9ec75485-26b1-471f-9b7b-d18554ca3fdd/aa/webface_img  
  24.   
  25. VAL_DATA_ROOT=/media/gk/9ec75485-26b1-471f-9b7b-d18554ca3fdd/aa/webface_img  
  26.     
  27. # 设置 RESIZE=true 可以把图片resize成想要的尺寸。  
  28. RESIZE=true  
  29. if $RESIZE; then  
  30.   RESIZE_HEIGHT=227  
  31.   RESIZE_WIDTH=227  
  32. else  
  33.   RESIZE_HEIGHT=0  
  34.   RESIZE_WIDTH=0  
  35. fi  
  36.   
  37.   
  38. if [ ! -d "$TRAIN_DATA_ROOT" ]; then  
  39.   echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"  
  40.   echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \  
  41.        "where the ImageNet training data is stored."  
  42.   exit 1  
  43. fi  
  44.   
  45.   
  46. if [ ! -d "$VAL_DATA_ROOT" ]; then  
  47.   echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"  
  48.   echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \  
  49.        "where the ImageNet validation data is stored."  
  50.   exit 1  
  51. fi  
  52.   
  53.   
  54. echo "Creating train lmdb..."  
  55.   
  56.   
  57. GLOG_logtostderr=1 $TOOLS/convert_imageset \  
  58.     --resize_height=$RESIZE_HEIGHT \  
  59.     --resize_width=$RESIZE_WIDTH \  
  60.     --shuffle \  
  61.     $TRAIN_DATA_ROOT \  
  62.     $DATA/train.txt \  
  63.     $EXAMPLE/train_lmdb  
  64.   
  65.   
  66. echo "Creating val lmdb..."  
  67.   
  68.   
  69. GLOG_logtostderr=1 $TOOLS/convert_imageset \  
  70.     --resize_height=$RESIZE_HEIGHT \  
  71.     --resize_width=$RESIZE_WIDTH \  
  72.     --shuffle \  
  73.     $VAL_DATA_ROOT \  
  74.     $DATA/val.txt \  
  75.     $EXAMPLE/val_lmdb  
  76.   
  77.   
  78. echo "Done."  



四:计算图片的mean或者设置scale:0.00390625

[plain]  view plain  copy
 
  1. #!/usr/bin/env sh    
  2.   
  3.   
  4. #-----------------------------------------------------------------------------------------      
  5.       
  6.       
  7. # 计算图像均值  
  8. #made by 郭开      
  9.       
  10.       
  11. #-----------------------------------------------------------------------------------------      
  12. #lmdb格式的文件所在的路径  
  13. EXAMPLE=/media/gk/9ec75485-26b1-471f-9b7b-d18554ca3fdd/aa/lmdb_webface  
  14. #均值文件保存的路径  
  15. DATA=/media/gk/44CA719BCA718A46    
  16. #转换图片的工具所在的目录   
  17. TOOLS=/home/gk/caffe-master/build/tools    
  18.     
  19. $TOOLS/compute_image_mean $EXAMPLE/train_lmdb \    
  20.   $DATA/mean.binaryproto    
  21.     
  22. echo "Done."    



五:训练模型
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt

slover.prototxt
[plain]  view plain  copy
 
  1. net: "/home/gk/caffe-master/examples/vgg/train.prototxt"  
  2. test_iter: 100  
  3. test_interval: 1000  
  4.   
  5.   
  6. base_lr: 0.001  
  7. lr_policy: "step"  
  8. gamma: 0.95  
  9. stepsize:  100000  
  10. momentum: 0.9  
  11. weight_decay: 0.0005  
  12. display: 100  
  13. max_iter:  5000000  
  14. snapshot:  50000  
  15. snapshot_prefix: "/home/gk/caffe-master/examples/DeepID/snapshot"  
  16. solver_mode: GPU  
  17. device_id:0  
  18. #debug_info: true  

tarin.prototxt

[plain]  view plain  copy
 
  1. name: "VGG_FACE_16_layers"  
  2. layer {  
  3.   top: "data_1"  
  4.   top: "label_1"  
  5.   name: "data_1"  
  6.   type: "Data"  
  7.   data_param {  
  8.     source: "/media/gk/9ec75485-26b1-471f-9b7b-d18554ca3fdd/aa/webface_lmdb/train"  
  9.     backend:LMDB  
  10.     batch_size: 128  
  11.   }  
  12.   transform_param {  
  13.      mean_file: "/media/gk/9ec75485-26b1-471f-9b7b-d18554ca3fdd/aa/webface_lmdb/mean.binaryproto"  
  14.      mirror: true  
  15.   }  
  16.   include: { phase: TRAIN }  
  17. }  
  18.   
  19.   
  20. layer {  
  21.   top: "data_1"  
  22.   top: "label_1"  
  23.   name: "data_1"  
  24.   type: "Data"  
  25.   data_param {  
  26.     source: "/media/gk/9ec75485-26b1-471f-9b7b-d18554ca3fdd/aa/webface_lmdb/val"  
  27.     backend:LMDB  
  28.     batch_size: 128  
  29.   }  
  30.   transform_param {  
  31.     mean_file: "/media/gk/9ec75485-26b1-471f-9b7b-d18554ca3fdd/aa/webface_lmdb/mean.binaryproto"  
  32.     mirror: true  
  33.   }  
  34.   include: {   
  35.     phase: TEST   
  36.   }  
  37. }  
  38.   
  39.   
  40. layers {  
  41.   bottom: "data"  
  42.   top: "conv1_1"  
  43.   name: "conv1_1"  
  44.   type: CONVOLUTION  
  45.   convolution_param {  
  46.     num_output: 64  
  47.     pad: 1  
  48.     kernel_size: 3  
  49.   }  
  50. }  
  51. layers {  
  52.   bottom: "conv1_1"  
  53.   top: "conv1_1"  
  54.   name: "relu1_1"  
  55.   type: RELU  
  56. }  
  57. layers {  
  58.   bottom: "conv1_1"  
  59.   top: "conv1_2"  
  60.   name: "conv1_2"  
  61.   type: CONVOLUTION  
  62.   convolution_param {  
  63.     num_output: 64  
  64.     pad: 1  
  65.     kernel_size: 3  
  66.   }  
  67. }  
  68. layers {  
  69.   bottom: "conv1_2"  
  70.   top: "conv1_2"  
  71.   name: "relu1_2"  
  72.   type: RELU  
  73. }  
  74. layers {  
  75.   bottom: "conv1_2"  
  76.   top: "pool1"  
  77.   name: "pool1"  
  78.   type: POOLING  
  79.   pooling_param {  
  80.     pool: MAX  
  81.     kernel_size: 2  
  82.     stride: 2  
  83.   }  
  84. }  
  85. layers {  
  86.   bottom: "pool1"  
  87.   top: "conv2_1"  
  88.   name: "conv2_1"  
  89.   type: CONVOLUTION  
  90.   convolution_param {  
  91.     num_output: 128  
  92.     pad: 1  
  93.     kernel_size: 3  
  94.   }  
  95. }  
  96. layers {  
  97.   bottom: "conv2_1"  
  98.   top: "conv2_1"  
  99.   name: "relu2_1"  
  100.   type: RELU  
  101. }  
  102. layers {  
  103.   bottom: "conv2_1"  
  104.   top: "conv2_2"  
  105.   name: "conv2_2"  
  106.   type: CONVOLUTION  
  107.   convolution_param {  
  108.     num_output: 128  
  109.     pad: 1  
  110.     kernel_size: 3  
  111.   }  
  112. }  
  113. layers {  
  114.   bottom: "conv2_2"  
  115.   top: "conv2_2"  
  116.   name: "relu2_2"  
  117.   type: RELU  
  118. }  
  119. layers {  
  120.   bottom: "conv2_2"  
  121.   top: "pool2"  
  122.   name: "pool2"  
  123.   type: POOLING  
  124.   pooling_param {  
  125.     pool: MAX  
  126.     kernel_size: 2  
  127.     stride: 2  
  128.   }  
  129. }  
  130. layers {  
  131.   bottom: "pool2"  
  132.   top: "conv3_1"  
  133.   name: "conv3_1"  
  134.   type: CONVOLUTION  
  135.   convolution_param {  
  136.     num_output: 256  
  137.     pad: 1  
  138.     kernel_size: 3  
  139.   }  
  140. }  
  141. layers {  
  142.   bottom: "conv3_1"  
  143.   top: "conv3_1"  
  144.   name: "relu3_1"  
  145.   type: RELU  
  146. }  
  147. layers {  
  148.   bottom: "conv3_1"  
  149.   top: "conv3_2"  
  150.   name: "conv3_2"  
  151.   type: CONVOLUTION  
  152.   convolution_param {  
  153.     num_output: 256  
  154.     pad: 1  
  155.     kernel_size: 3  
  156.   }  
  157. }  
  158. layers {  
  159.   bottom: "conv3_2"  
  160.   top: "conv3_2"  
  161.   name: "relu3_2"  
  162.   type: RELU  
  163. }  
  164. layers {  
  165.   bottom: "conv3_2"  
  166.   top: "conv3_3"  
  167.   name: "conv3_3"  
  168.   type: CONVOLUTION  
  169.   convolution_param {  
  170.     num_output: 256  
  171.     pad: 1  
  172.     kernel_size: 3  
  173.   }  
  174. }  
  175. layers {  
  176.   bottom: "conv3_3"  
  177.   top: "conv3_3"  
  178.   name: "relu3_3"  
  179.   type: RELU  
  180. }  
  181. layers {  
  182.   bottom: "conv3_3"  
  183.   top: "pool3"  
  184.   name: "pool3"  
  185.   type: POOLING  
  186.   pooling_param {  
  187.     pool: MAX  
  188.     kernel_size: 2  
  189.     stride: 2  
  190.   }  
  191. }  
  192. layers {  
  193.   bottom: "pool3"  
  194.   top: "conv4_1"  
  195.   name: "conv4_1"  
  196.   type: CONVOLUTION  
  197.   convolution_param {  
  198.     num_output: 512  
  199.     pad: 1  
  200.     kernel_size: 3  
  201.   }  
  202. }  
  203. layers {  
  204.   bottom: "conv4_1"  
  205.   top: "conv4_1"  
  206.   name: "relu4_1"  
  207.   type: RELU  
  208. }  
  209. layers {  
  210.   bottom: "conv4_1"  
  211.   top: "conv4_2"  
  212.   name: "conv4_2"  
  213.   type: CONVOLUTION  
  214.   convolution_param {  
  215.     num_output: 512  
  216.     pad: 1  
  217.     kernel_size: 3  
  218.   }  
  219. }  
  220. layers {  
  221.   bottom: "conv4_2"  
  222.   top: "conv4_2"  
  223.   name: "relu4_2"  
  224.   type: RELU  
  225. }  
  226. layers {  
  227.   bottom: "conv4_2"  
  228.   top: "conv4_3"  
  229.   name: "conv4_3"  
  230.   type: CONVOLUTION  
  231.   convolution_param {  
  232.     num_output: 512  
  233.     pad: 1  
  234.     kernel_size: 3  
  235.   }  
  236. }  
  237. layers {  
  238.   bottom: "conv4_3"  
  239.   top: "conv4_3"  
  240.   name: "relu4_3"  
  241.   type: RELU  
  242. }  
  243. layers {  
  244.   bottom: "conv4_3"  
  245.   top: "pool4"  
  246.   name: "pool4"  
  247.   type: POOLING  
  248.   pooling_param {  
  249.     pool: MAX  
  250.     kernel_size: 2  
  251.     stride: 2  
  252.   }  
  253. }  
  254. layers {  
  255.   bottom: "pool4"  
  256.   top: "conv5_1"  
  257.   name: "conv5_1"  
  258.   type: CONVOLUTION  
  259.   convolution_param {  
  260.     num_output: 512  
  261.     pad: 1  
  262.     kernel_size: 3  
  263.   }  
  264. }  
  265. layers {  
  266.   bottom: "conv5_1"  
  267.   top: "conv5_1"  
  268.   name: "relu5_1"  
  269.   type: RELU  
  270. }  
  271. layers {  
  272.   bottom: "conv5_1"  
  273.   top: "conv5_2"  
  274.   name: "conv5_2"  
  275.   type: CONVOLUTION  
  276.   convolution_param {  
  277.     num_output: 512  
  278.     pad: 1  
  279.     kernel_size: 3  
  280.   }  
  281. }  
  282. layers {  
  283.   bottom: "conv5_2"  
  284.   top: "conv5_2"  
  285.   name: "relu5_2"  
  286.   type: RELU  
  287. }  
  288. layers {  
  289.   bottom: "conv5_2"  
  290.   top: "conv5_3"  
  291.   name: "conv5_3"  
  292.   type: CONVOLUTION  
  293.   convolution_param {  
  294.     num_output: 512  
  295.     pad: 1  
  296.     kernel_size: 3  
  297.   }  
  298. }  

你可能感兴趣的:(深度学习)