SPP pooling layer
參考:Spatial Pyramid Pooling in Deep Convolutional
Networks for Visual Recognition
SPP_net的提出
因為傳統的CNNs網絡只能接受固定size的images。實際上,卷積層可以輸入任意尺度的, 但這樣就會導致輸出的feature map 大小不同;而InnerProduct layer 的輸入必須是固定的。因此在CNNs后,InnerProduct 前加入SPP pooling layer ,使得無論輸入多大的images, 經過該層后輸出的feature vecture 大小都一樣。雖然提出來的動機是為了解決多尺度圖像的訓練問題,但是,設計的SPP pooling layer 設計了幾個不同的level,從而這個multi-level pooling 實際上進行了幾個多個尺度的抽象。
作者在應用到分類問題上時:
進行了兩種訓練,一種是用單尺度圖像訓練,一種是多尺度圖像進行訓練。雖然理論上,網絡可以輸入任意尺度的圖像,但是作者,為不同尺度的圖像設定了完全相同的網絡結構,并讓它們共享權重,每一個epoch僅使用一個尺度的圖像進行訓練,然后下一次epoch 再訓練另一個尺度的圖像。(但是,我怎么感覺實際上就是一個網絡呢,理解的還不透。。。)
作者就分類進行了如下四個方面的工作:
multi-view Testing:
在測試的時候,從原始圖像(256*xxx)的中間及四個corner 提取的圖像以及它們的水平flipping,進行10-view Testing,該結果能提高accuracy.
multi-size Training:
訓練網絡時,采用multi-size 圖像進行訓練,相對于single-size 的,能提高accuracy.
multi-level pooling:
訓練網絡時,仍采用single-size的圖像進行訓練,相比傳統網絡僅僅替換了Inner Product layer前得普通pooling layer 為SPP pooling layer, 發現multi-level pooling 能提高accuracy.
full-image representation:
采用full-image進行測試雖然沒有10-view的結果好,但是比crop sample上的測試結果好,而且,把full-image及其horizontal flipping 添加到multi-view testing 中,還能進一步提高效率。
簡單的進行了測試,把lenet網絡中的最后一個pooling替換成spp pooling layer(spp3表示3個level的pooling),看到效果還是有一點點提升的。
SPP層:
message SPPParameter {
enum PoolMethod {
MAX = 0;
AVE = 1;
STOCHASTIC = 2;
}
optional uint32 pyramid_height = 1;
optional PoolMethod pool = 2 [default = MAX]; // The pooling method
enum Engine {
DEFAULT = 0;
CAFFE = 1;
CUDNN = 2;
}
optional Engine engine = 6 [default = DEFAULT];
}
總結
以上是生活随笔為你收集整理的SPP pooling layer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bit-Scalable Deep Ha
- 下一篇: OpenMPI 安装