Caffe中的crop_layer層

Crop_layer是在Fully Convolutional Networks for Semantic Segmentation這篇論文中接觸到的。我發現網絡配置文件中使用到了Crop層。

而Crop_layer層到底有什麼作用呢?其實它主要是針對全卷積時,在原始圖像上加了pad,致使圖像比原始圖像要大一些,最後我們利用這個crop層將pad裁剪掉。


crop層主要作用是爲了裁剪,那麼它又是怎麼進行裁剪的呢?

Caffe中發數據是以blobs形式存在的,blob是一個四維結構(Batch size, number of Channels, Height, width)是數據(在我以前的博客中有介紹).Crop_layer的輸入(bottom)有兩個,假設輸入爲A和B,輸出(top)爲C。

(1)A——要進行裁剪的bottom,A的size爲(20,50,512,512)

(2)B——裁剪的參考輸入,size爲(20,10,256,256)

(3)C——輸出top,它是在A的基礎上按照B的size裁剪而來,所以size和B是一樣的。

Crop_layer裏有兩個重要的參數:axis(決定從哪個軸開始裁剪)和offsets(給出三個維度,決定裁剪位置的偏移),裁剪的長度和B中對應的軸的長度是對應的。例如:

(1)給出axis=1,offset=(25,128,128)

(2)裁剪操作:C = A[:,25:25+B.shape[1],128:128+B.shape[2],128:128+B.shape[3]]

也就是說,對於A的軸1來說,裁剪範圍是25~35.

另外在offsets的三個維度都一樣的時候,可以設置offsets爲一個數,表示賽格維度上的偏移是一樣的。以下是一個實例:

layer {
  name: "crop_layer"
  type: "Crop"
  bottom: "A"
  bottom: "B"
  top: "C"
  crop_param {
    axis: 1
    offset: 25
    offset: 128
    offset: 128
  }
}
大多數時候,我們是依據具體情況獲取這個偏移值的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章