空间金字塔池化(Spatial Pyramid Pooling)
簡介
空間金字塔池化,使得任意大小的特征圖都能夠轉換成固定大小的特征向量,這就是空間金字塔池化的意義(多尺度特征提取出固定大小的特征向量),送入全連接層。整體框架大致為:輸入圖像,卷積層提取特征,空間金字塔池化提取固定大小特征,全連接層。
具體的流程圖如下:
具體算法的大體流程
首先通過選擇性搜索(selective search)
對待檢測的圖片進行搜索出2000個候選窗口。這一步和R-CNN一樣。
特征提取階段
這一步就是和R-CNN最大的區別了,同樣是用卷積神經網絡進行特征提取,但是SPP-Net用的是金字塔池化。這一步驟的具體操作如下:把整張待檢測的圖片,輸入CNN中,進行一次性特征提取,得到feature maps,然后在feature maps中找到各個候選框的區域,再對各個候選框采用金字塔空間池化,提取出固定長度的特征向量。而R-CNN輸入的是每個候選框,然后在進入CNN,因為SPP-Net只需要一次對整張圖片進行特征提取,速度是大大地快啊。江湖傳說可一個提高100倍的速度,因為R-CNN就相當于遍歷一個CNN兩千次,而SPP-Net只需要遍歷1次。
最后采用SVM算法進行特征向量分類識別,和R-CNN一樣
關鍵步驟解釋:
如何在feature maps中找到原始圖片中候選框的對應區域:
候選框是通過一整張原圖片進行檢測得到的,而feature maps的大小和原始圖片的大小是不同的,feature maps是經過原始圖片卷積、下采樣等一系列操作后得到的。
直接利用計算的公式:假設(x’,y’)表示特征圖上的坐標點,坐標點(x,y)表示原輸入圖片上的點,那么它們之間有如下轉換關系:
(x,y)=(Sx’,Sy’)
其中S的就是CNN中所有的步長(strides)的乘積,反過來,通過(x,y)坐標求解(x’,y’),那么計算公式如下:
x’=x/S+1
輸入原圖片檢測到的windows,可以得到每個矩形候選框的四個角點,然后再根據公式:
Left、Top: x’=x/S+1
Right、Bottom: x’=x/S-1
空間金字塔池化如何提取特征,得到固定大小的特征向量:
我們假設一個很簡單兩層網絡:輸入一張任意大小的圖片,假設其大小為(w,h),輸出21個神經元。也就是我們輸入一張任意大小的特征圖的時候,我們希望提取出21個特征。空間金字塔特征提取的過程如下:
如上圖所示,當我們輸入一張圖片的時候,我們利用不同大小的刻度,對一張圖片進行了劃分。上面示意圖中,利用了三種不同大小的刻度(4*4,2*2,1*1),對一張輸入的圖片進行了劃分,最后總共可以得到16+4+1=21個塊,我們即將從這21個塊中,每個塊提取出一個特征,這樣剛好就是我們要提取的21維特征向量。第一張圖片,我們把一張完整的圖片,分成了16個塊,也就是每個塊的大小就是(w/4,h/4);第二張圖片,劃分了4個塊,每個塊的大小就是(w/2,h/2);第三張圖片,把一整張圖片作為了一個塊,也就是塊的大小為(w,h)。空間金字塔最大池化的過程,其實就是從這21個圖片塊中,分別計算每個塊的最大值,從而得到一個輸出神經元。最后把一張任意大小的圖片轉換成了一個固定大小的21維特征(當然你可以設計其它維數的輸出,增加金字塔的層數,或者改變劃分網格的大小)。上面的三種不同刻度的劃分,每一種刻度我們稱之為:金字塔的一層,每一個圖片塊大小我們稱之為:windows size了。如果你希望,金字塔的某一層輸出n*n個特征,那么你就要用windows size大小為:(w/n,h/n)進行池化了。轉自 : https://blog.csdn.net/xzzppp/article/details/51377731
總結
以上是生活随笔為你收集整理的空间金字塔池化(Spatial Pyramid Pooling)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac和windows共享键盘鼠标方案
- 下一篇: Amoeba配置读写分离