用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.txt
和val.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