Spatial Pyramid Pooling 詳解

問題拋出:卷積神經(jīng)網(wǎng)絡(luò)中,當(dāng)輸入不是固定size時,如何解決?

方案1:對輸入進(jìn)行resize,統(tǒng)一到同一大小。

方案2:取消全連接層,對最后的卷積層global average polling(GAP。

方案3:在第一個全連接層前,加入SPP layer。本文要介紹的。

p.s.以上方案還要實(shí)測,具體哪種方案比較好,強(qiáng)烈推薦方案2,3。


以VGG16網(wǎng)絡(luò)為例,如下圖

vgg16 模型

現(xiàn)有兩種規(guī)格輸入:224*224*3和180*180*3

準(zhǔn)備在全連接層前加入spp net,也就是上圖7*7*512那一層后。

224*224*3:全連接層前卷積層大小7*7*512

180*224*3:全連接層前卷積層大小5*5*517

由于這樣不同大小卷積層全連接到1*1*4096,權(quán)值W是不一樣的,所以 要統(tǒng)一全連接的輸入大小。

SPP layer方法:

用不同size,stride的pooling layer,對全連接層前的卷積層進(jìn)行pooling,然后做flatten。見下圖

spp layer

輸入7*7*512時:

pooling layer1(輸出4*4*512): size = 7/4(向上取整)=2, stride = 7/4(向下取整)=1

pooling layer2(輸出2*2*512): size = 7/2(向上取整)=4,stride = 7/2(向下取整)=3?

pooling layer3(輸出1*1*512):? size = 7/1(向上取整)=7,stride = 7/1(向下取整)=7

然后做flatten,輸出(4*4+2*2+1)*512 = 21*512

輸入5*5*512時:

pooling layer1(輸出4*4*512): size = 5/4(向上取整)=2, stride = 5/4(向下取整)=1

pooling layer2(輸出2*2*512): size = 5/2(向上取整)=3,stride = 5/2(向下取整)=2

pooling layer3(輸出1*1*512):? size = 5/1(向上取整)=5,stride = 5/1(向下取整)=5

然后做flatten,輸出(4*4+2*2+1)*512=21*512


這樣全連接層輸入都是21*512,是跟網(wǎng)絡(luò)輸入圖像size大小無關(guān)的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容