[caffe]網絡各層參數設置


數據層

數據層是模型最底層,提供提供數據輸入和數據從Blobs轉換成別的格式進行保存輸出,通常數據預處理(減去均值,放大縮小,裁剪和鏡像等)也在這一層設置參數實現.

參數設置:

  • name: 名稱
  • type: 類型
    • Data: 從LMDB/LEVELDB讀取數據和標簽, 轉換(http://deepdish.io/2015/04/28/creating-lmdb-in-python/) 可以使用convert_imageset轉換
    • ImageData: 直接讀取圖片數據
    • ....
  • top: 輸出數據(和下一層的bottom一樣)
  • bottom: 輸入數據()
  • include: 一般訓練和測試的時候,模型層不一樣,由include指定在哪一層出現, TRIAN/TEST
  • transform_params: 數據預處理
  • data_params: 數據參數
    • source: 數據位置
    • backend
    • batchsize: 設置batch的大小

例如,caffe中自帶的mnist example

layer {
  name: "mnist" #名稱
  type: "Data" #輸入的是LMDB數據,前面的create_mnist.sh做了轉換
  include: TRIAN  #只在訓練的時候才包括(測試沒有label)
  transform_param {
    scale: 0.00390625 #縮放參數
  }
  data_param {
    source: "examples/mnist/mnist_train_lmdb" #數據來源是在當前文件夾中的 mnist_train_lmdb中
    backend: LMDB
    batch_size: 64 #batch的大小
  }
  top: "data" #第一層輸出data和label, 無bottom
  top: "label" #
}

--------------------------------------------------------------------------------------------------------------------------------------------------

convert_imageset [FLAGS] ROOTFOLDER/  LISTFILE DB_NAME

前面我們提到數據層中Data類型輸入是LMDB/LEVELDB數據,而我們有的經常是原始圖片數據,而且有可能原始圖片的大小還不一致,我們需要將其轉換為格式一致的可輸入數據,caffe中的convert_imageset 為我們提供了這樣的工具。

FLAGS:圖片組參數

  • -gray: 是否以灰度圖的方式打開圖片,程序調用opencv庫中的imread()函數來打開圖片,默認為false
  • -shuffle: 是否隨機打亂圖片順序,默認為false
  • -backend: 需要轉換成db文件格式,可選為leveldb或lmdb默認為lmdb
  • -resize_width/resize_height: 改變圖片大小,需要的時候可以使得圖片大小一致,程序調用opencv的resize()函數來對圖片進行縮放,默認為0,不變
  • -check_size: 檢查所有的數據是否有相同的尺寸,默認為false, 不檢查
  • -encoded: 是否將原圖片的編碼放入最終的數據,默認為false
  • -encoded_type: 與前一個參數對應,將圖片編碼為一個格式

ROOTFOLDER: 圖片存放的絕對路徑,從linux系統根目錄開始

LISTFILE: 圖片文件列表清單,一般為一個txt文件,一行一張圖片及其類別標簽

DB_NAME: 最終生成的db文件存放目錄

例如:

#!/usr/bin/env sh
DATA=examples/images/cropimage/  #路徑變量
rm -rf $DATA/img_train_lmdb #如果文件存在,先刪除再重新創建
build/tools/convert_imageset --shuffle --gray --check_size=true  /home/vicent/caffe/examples/images/cropimage/ $DATA/batchfile.txt $DATA/img_train_lmdb

#亂序,轉換為灰度,檢查大小是否一致                                                   

  

--------------------------------------------------------------------------------------------------------------------------------------------------

視覺層

卷積層

卷積的目的是提取feature

  • name: 名稱
  • type: 層類型
  • bottom: 輸入
  • top: 輸出
  • lr_mt: 學習率速率, 最終學習率是這個數乘以solver.prototxt 配置文件中的base_lr; 如果有兩個lr_mt一個表示偏置學習率,一個表示權值學習率
  • num_outputs: filter的個數
  • kernel_size: 卷積核大小
  • stride: 步長
  • pad: 邊緣擴充
  • weight_filler: 權值初始化, 默認為constant, 值全為0,經常用xavier, 也可設置為gaussian
  • bias_filler: 偏置初始化方法, 一般偏置初始化方法可以不設置

例如:

layer {
  name: "conv1" #名稱
  type: "Convolution" #層類型
  bottom: "data" #上一層輸入數據
  top: "conv1" #這一層輸出數據
  param {
    lr_mult: 1  #權重學習率速率
  }
  param {
    lr_mult: 2  #偏置學習率速率
  }
  convolution_param {
    num_output: 20  #filter的個數
    kernel_size: 5    #卷積核的大小
    stride: 1  
    weight_filler {
      type: "xavier"  #權重初始化方法
    }
    bias_filler {
      type: "constant"  #偏置初始化方法
    }
  }
}

 

池化層

減少數據量和數據維度

  • kernel_size:池化核大小
  • pool: 池化方法, max, ave, stochastic
  • pad:
  • stride

 

Normalization

 

 

 

 

 

 

 


免責聲明!

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



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