1. 程式人生 > >用caffe訓練一個spp_net網路

用caffe訓練一個spp_net網路

virtualinlineconstchar*type()const { return"SPP"; }

virtual LayerParameter GetPoolingParam(constint pyramid_level,constint bottom_h, constint bottom_w, const SPPParameter spp_param);

int pyramid_height_;

int bottom_h_, bottom_w_;

int num_;

int channels_;

int kernel_h_, kernel_w_;

int pad_h_, pad_w_;


bool reshaped_first_time_;

構建時需要考慮的引數值

1.準備資料,在examples路徑下新建一個目錄 spp_net,將n03791053摩托車、n03895866客車、n04285008跑車、n04467665大貨車、n04487081無軌電車這5類的圖片放入到該目錄下,每種車型一個目錄。

>>ll /root/deep/gjj/caffe-master/examples/spp_net

drwxr-xr-x 2 root root 73728 Mar 30 15:24 n03791053
drwxr-xr-x 2 root root 77824 Mar 30 15:25 n03895866
drwxr-xr-x 2 root root 73728 Mar 30 15:25 n04285008
drwxr-xr-x 2 root root 73728 Mar 30 15:25 n04467665
drwxr-xr-x 2 root root 73728 Mar 30 15:25 n04487081

2.準備標籤檔案,訓練和測試的輸入是用train.txtval.txt來描述的。裡面的格式都是路徑加檔名 空格 類別號。如下:

train.txt中 n03791053/n03791053_10013.JPEG 670

val.txt中   val/ILSVRC2012_val_00027580.JPEG 705

3.將examples/imagenet/create_imagenet.sh複製到spp_net目錄下,並修改裡面的內容,在spp_net下生成lmdb格式的影象資訊。

EXAMPLE=examples/spp_net
DATA=examples/spp_net/
TOOLS=build/tools

TRAIN_DATA_ROOT=examples/spp_net/
VAL_DATA_ROOT=examples/spp_net/

此外,我把圖片的大小改成了224*224

RESIZE=true
if $RESIZE; then
  RESIZE_HEIGHT=224
  RESIZE_WIDTH=224

4.沒有去做均值,直接構建spp_solver.prototxt和Zeiler_spp_scale224.prototxt

spp_solver.prototxt中設定     solver_mode: CPU

Zeiler_spp_scale224.prototxt將卷積第五層之後的池化改為spp池化,根據caffe.proto中的定義來改

layer {
   name: "pool5_spp"
   type: "SPP"
   bottom: "conv5"
   top: "pool5_spp"
   spp_param{
pyramid_height:3
pool: MAX
   }
}

5.把下面的命令寫到spp_train_caffenet.sh中或直接執行:

/root/deep/gjj/caffe-master/build/tools/caffe train  --solver=spp_solver.prototxt