caffe筆記之例程學習(三)


原文鏈接:caffe.berkeleyvision.org/tutorial/layers.html

創建caffe模型,首先要在protocol buffer 定義文件(prototxt)中定義結構。

在caffe環境中,圖像的明顯特征是其空間結構。


主要layers

主要功能

主要類型

其他

卷積層

提取特征

CONVOLUTION

學習率、數據維度

池化層

特征池化

POOLING

池化方法,數據維度

局部響應歸一化層

臨近抑制

LRN


損失計算層

loss計算

SOFTMAX_LOSS

EUCLIDEAN_LOSS

HINGE_LOSS

ACCURACY正確率

選擇合適的loss

范數可選

激勵層

非線性函數

ReLU

SIGMOID

TANH

ABSVAL

POWER

BNLL

ReLU收斂更快

數據層

數據源

Level-DB

LMDB

HDF5_DATA

HDF5_OUTPUT

IMAGE_DATA

Level-DBLMDB更加高效


一般層


INNER_PRODUCT 全連接層

SPLIT

FLATTEN 類似shape方法

CONCAT

ARGMAX

MVN



 

一、卷積層 Convolution:

卷積特征提取

Documents:注意維度變化與參數選擇

 1 Parameters (ConvolutionParameter convolution_param)
 2  
 3 Required
 4     num_output (c_o): 輸出數(filter數)
 5     kernel_size (or kernel_h and kernel_w): 指定卷積核   
 6    
 7 Strongly Recommended
 8     weight_filler [default type: 'constant' value: 0]
 9 
10 Optional
11     bias_term [default true]: 指定是否提供偏置10         
12     pad (or pad_h and pad_w) [default 0]: 指定輸入圖片的兩側像素填充量
13     stride (or stride_h and stride_w) [default 1]: 過濾器步長
14     group (g) [default 1]: 如果 g > 1, 我們限制每一個filter之間的連通性 對於輸入的子集. 指定輸入和輸出被分為 g 組,第i輸出組只會和第i輸入組相連接.
15 
16 Input
17 
18 n * c_i * h_i * w_i
19 
20 Output
21 
22 n * c_o * h_o * w_o, where h_o = (h_i + 2 * pad_h - kernel_h) / stride_h + 1 and w_o likewise.

 example:

 1 layers {
 2   name: "conv1"
 3   type: CONVOLUTION
 4   bottom: "data"
 5   top: "conv1"
 6   blobs_lr: 1          # learning rate multiplier for the filters
 7   blobs_lr: 2          # learning rate multiplier for the biases
 8   weight_decay: 1      # weight decay multiplier for the filters
 9   weight_decay: 0      # weight decay multiplier for the biases
10   convolution_param {
11     num_output: 96     # learn 96 filters
12     kernel_size: 11    # each filter is 11x11
13     stride: 4          # step 4 pixels between each filter application
14     weight_filler {
15       type: "gaussian" # initialize the filters from a Gaussian
16       std: 0.01        # distribution with stdev 0.01 (default mean: 0)
17     }
18     bias_filler {
19       type: "constant" # initialize the biases to zero (0)
20       value: 0
21     }
22   }
23 }

 

二、池化層 Pooling:

參考鏈接 deeplearning.stanford.edu/wiki/index.php/池化

 池化: 概述

在通過卷積獲得了特征 (features) 之后,下一步我們希望利用這些特征去做分類。理論上講,人們可以用所有提取得到的特征去訓練分類器,例如 softmax 分類器,但這樣做面臨計算量的挑戰。例如:對於一個 96X96 像素的圖像,假設我們已經學習得到了400個定義在8X8輸入上的特征,每一個特征和圖像卷積都會得到一個 (96 − 8 + 1) * (96 − 8 + 1) = 7921 維的卷積特征,由於有 400 個特征,所以每個樣例 (example) 都會得到一個 892 * 400 = 3,168,400 維的卷積特征向量。學習一個擁有超過 3 百萬特征輸入的分類器十分不便,並且容易出現過擬合 (over-fitting)。


為了解決這個問題,首先回憶一下,我們之所以決定使用卷積后的特征是因為圖像具有一種“靜態性”的屬性,這也就意味着在一個圖像區域有用的特征極有可能在 另一個區域同樣適用。因此,為了描述大的圖像,一個很自然的想法就是對不同位置的特征進行聚合統計,例如,人們可以計算圖像一個區域上的某個特定特征的平 均值 (或最大值)。這些概要統計特征不僅具有低得多的維度 (相比使用所有提取得到的特征),同時還會改善結果(不容易過擬合)。這種聚合的操作就叫做池化 (pooling),有時也稱為平均池化或者最大池化 (取決於計算池化的方法)。

 

參數解釋:

 1 Required
 2     kernel_size (or kernel_h and kernel_w):池化核
 3 Optional
 4     pool [default MAX]:指定池化方法. MAX, AVE, or STOCHASTIC(按照概率值大小隨機選擇,數值大的被選中的概率大)
 5     pad (or pad_h and pad_w) [default 0]: 指定輸入圖片的兩側像素填充量
 6     stride (or stride_h and stride_w) [default 1]:過濾器步長
 7 Input
 8     n * c * h_i * w_i
 9 Output
10     n * c * h_o * w_o,where h_o = (h_i + 2 * pad_h - kernel_h) / stride_h + 1 and w_o likewise..

示例:

 1 layers {
 2   name: "pool1"
 3   type: POOLING
 4   bottom: "conv1"
 5   top: "pool1"
 6   pooling_param {
 7     pool: MAX
 8     kernel_size: 3 # 3*3 區域池化
 9     stride: 2      #  (in the bottom blob) between pooling regions
10   }
11 }

 


免責聲明!

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



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