2016-07-26 23 views

回答

7

根據Crop layer documentation,它需要兩個底部斑點並輸出一個頂部斑點。我們稱底部斑點爲AB,頂部斑點爲T

A -> 32 x 3 x 224 x 224 
B -> 32 x m x n x p 

然後,

T -> 32 x m x n x p 

關於軸參數,從文檔:

注意到一個Blob和裁剪,由第二輸入斑點指定的形狀,在所有尺寸後指定的軸。

這意味着,如果我們設置axis = 1,那麼它會裁剪尺寸1,2,3,如果axis = 2,然後T本來大小32 x 3 x n x p的。您還可以將軸設置爲負值,如-1,這意味着最後一個維度,即在這種情況下爲3。

關於偏移量參數,我檢出了$ CAFFE_ROOT/src/caffe/proto/caffe.proto(在630行),我沒有找到任何偏移量參數的默認值,所以我假設你必須提供該參數否則會導致錯誤。但是,我可能是錯的。

現在,Caffe知道你需要第一個軸上的大小爲m的斑點。我們仍然需要告訴Caffe從哪裏收穫。這是抵消來的地方。如果抵消是10,那麼您的斑點大小m將從10開始裁剪,並在10+m-1(總大小爲m)結束。在所有維度(由axis確定,請記住?在這種情況下爲1, 2, 3)中設置一個偏移量值以裁剪該量。否則,如果要以不同方式裁剪每個尺寸,則必須指定等於正被裁剪的尺寸數量(在此情況下爲3)的偏移量數量。所以總結了所有,

如果你有大小32 x 3 x 224 x 224的BLOB和您要裁剪尺寸32 x 3 x 32 x 64的中心部分,那麼你會寫出如下作物層:

layer { 
    name: "T" 
    type: "Crop" 
    bottom: "A" 
    bottom: "B" 
    top: "T" 
    crop_param { 
     axis: 2 
     offset: 96 
     offset: 80 
    } 
} 
+0

感謝您的回答。似乎裁剪是在https://github.com/BVLC/caffe/blob/master/python/caffe/coord_map.py中實現的。由於我對Python不太熟悉,因此我並不瞭解所有內容。但似乎默認參數在那裏。在我的理解中,完全卷積CNN需要一個固定大小的輸入。如果輸入尺寸不同,則處理裁剪參數時會出現問題。我對麼? – user570593

+1

@ user570593我不確定FCNN是如何工作的。但是,作物層需要兩個底部斑點。如果其中一個大小不一,另一個大小(上面例子中的參考blob,「B」)的大小是固定的,那麼不同大小的blob將被剪裁成與「B」大小一樣。這應該不會造成問題。當然,你在裁剪時會丟失一些信息。所以FCNN必須有一些處理方式。我認爲當他們編寫'params.get('offset',0)'(在[line 46](github.com/BVLC/caffe/blob/master/python/caffe/coord_map.py))時,我認爲他們分配默認值= 0來抵消。 –

+0

我相信默認值確實是'0',即從一開始的角落。但是正確的參考可能是[here](https://github.com/BVLC/caffe/blob/master/src/caffe/layers/crop_layer.cpp#L50),它將該值初始化爲0。 – wlnirvana