我想爲我的問題訓練完全卷積網絡。我正在使用執行https://github.com/shelhamer/fcn.berkeleyvision.org。 我有不同的圖像大小。咖啡完全卷積cnn - 如何使用作物參數
- 我不知道如何在'Crop'圖層中設置'Offset'參數。
- 'Offset'參數的默認值是多少?
- 如何使用此參數來裁剪中心周圍的圖像?
我想爲我的問題訓練完全卷積網絡。我正在使用執行https://github.com/shelhamer/fcn.berkeleyvision.org。 我有不同的圖像大小。咖啡完全卷積cnn - 如何使用作物參數
根據Crop layer documentation,它需要兩個底部斑點並輸出一個頂部斑點。我們稱底部斑點爲A
和B
,頂部斑點爲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
}
}
感謝您的回答。似乎裁剪是在https://github.com/BVLC/caffe/blob/master/python/caffe/coord_map.py中實現的。由於我對Python不太熟悉,因此我並不瞭解所有內容。但似乎默認參數在那裏。在我的理解中,完全卷積CNN需要一個固定大小的輸入。如果輸入尺寸不同,則處理裁剪參數時會出現問題。我對麼? – user570593
@ 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',即從一開始的角落。但是正確的參考可能是[here](https://github.com/BVLC/caffe/blob/master/src/caffe/layers/crop_layer.cpp#L50),它將該值初始化爲0。 – wlnirvana