目標定位
目標檢測是計算機視覺中一個熱門的應用領域,實現(xiàn)目標檢測首先需要實現(xiàn)目標的定位問題。通常一張圖片有多個目標,實現(xiàn)目標定位,有助于目標檢測,如下例子所示:
對于目標定位問題,首先約定一組符號:
(0,0)表示的是選中方框左上角的坐標,(1,1)表示的右下角坐標。
表示的是紅框的中心位置。
分別表示的是邊界框的高度和寬度所占的格子的比例。
因此,有監(jiān)督學習的神經(jīng)網(wǎng)絡不僅包含了神經(jīng)萬絡過要預測的對象分類標簽,而且還包含了邊界框的信息。對應的輸出標簽則如下所示:
輸出標簽中的表示的是圖片中有車,對于多目標(假設為3)的定位問題,可以用
表示,若
為1則表示檢測到是的是第二個目標。
對于以上示例,如果采用的是平方誤差,則損失函數(shù)如下所示:
特征點檢測
神經(jīng)網(wǎng)絡可以通過對輸出圖片上的特征點的坐標定位來實現(xiàn)對目標特征的識別,在此情況下,特征點的個數(shù)會更多,可以根據(jù)自己的需要設定特征點的個數(shù),以人臉檢測為例,利用神經(jīng)網(wǎng)絡實現(xiàn)特征點檢測的方法如下所示:
- 利用神經(jīng)網(wǎng)絡和一些特征集,將人臉圖片輸入到卷積網(wǎng)絡,輸出為0表示沒有人臉,否則表示有人臉。
- 假定選定了64個特征點,則通過神經(jīng)網(wǎng)絡輸出特征點
,用
表示一個特征,包含表示是否有人臉的特征,則一共有129個輸出單元。
目標檢測
目標檢測算法中,一種常用的算法是基于滑動窗口的目標檢測算法,以一個汽車檢測的應用為例,算法是實現(xiàn)步驟如下所示:
- 選定一個特定大小的窗口,將紅色小方塊選定的數(shù)據(jù)輸入整個卷積神經(jīng)網(wǎng)絡。
-
紅色方塊按照行列的方式遍歷整個圖像,將選定的數(shù)據(jù)依次送入卷積神經(jīng)網(wǎng)路。
總結以上步驟,即也就是以固定的步幅移動窗口,遍歷圖像的每個區(qū)域,將這些剪切后的圖像輸入卷積神經(jīng)網(wǎng)絡,并對每個位置進行0,1分類,判斷圖片中是否出現(xiàn)汽車,如下圖所示:
滑動窗口的卷積實現(xiàn)
為了構建滑動窗口的卷積應用,首先需要將神經(jīng)網(wǎng)絡的全連接層轉換為卷積層,具體實現(xiàn)如下所示:
以14×14×3的圖像為例,通過卷積和池化操作后得到了一個5×5×16的數(shù)據(jù),圖像分類的操作是接著添加一個連接2個400個單元的全連接層,最后通過softmax函數(shù)輸出每個類別輸出的概率。
將全連接層轉換為卷積層時,經(jīng)過卷積和池化操作后,輸入圖像的大小是5×5×16,繼續(xù)用400個5×5的卷積進行卷積操作,輸出結果為1×1×400,繼續(xù)添加一個1×1×1400的卷積層,最后經(jīng)由1×1的過濾器處理,得到一個softmax激活值。通過卷積網(wǎng)絡得到一個1×1×4的輸出層。
對輸入圖片進行滑動卷積操作時,如果每次選定一塊輸入圖像送入卷積神經(jīng)網(wǎng)絡中時,卷積操作中的很多計算是重復的,如下圖所示,以步幅為2,對16×16×3的圖像,執(zhí)行卷積操作,每次選定的區(qū)域大小是14×14×3,經(jīng)過卷積和池化操作后,會得到一個2×2×4的輸出層,而不是1×1×4,最終,這個2×2×4的輸出層中,每個1×1×4的輸出代表所選定區(qū)域的輸出。
在實際運算中,不需要將整個圖像分割為四個子集,分別執(zhí)行前向傳播,而是將整個圖像輸入卷積網(wǎng)絡進行計算,公共區(qū)域可以共享很多計算。如下所示,對28×28×3的圖片應用滑動窗口卷積,以14×14區(qū)域滑動窗口,接著以大小為2的步幅不斷移動窗口,最終得到一個8×8×4的輸出。對大小為28×28×3的圖像應用卷積操作,一次得到所有預測值,如果足夠幸運,神經(jīng)網(wǎng)絡就可以識別出汽車的位置。
Bounding Box預測
滑動卷積窗口的實現(xiàn)效率很高,但是不能輸出最精準的邊界框,對于邊界框的預測,常用的方法是YOLO算法,即YOU ONLY LOOK ONCE算法,為了方便起見,將一副圖像分割為3×3的網(wǎng)格形式,如下圖所示:
使用圖像分類和定位算法,將這個算法應用到9個網(wǎng)格中,每個格子指定一個標簽y,這個標簽y是8維的,其說粗話如下所示:
對于3×3的網(wǎng)格,最后輸出的是3×3×8,實現(xiàn)邊界預測時,需要做的就是輸入圖像作為,經(jīng)過卷積神經(jīng)網(wǎng)絡的卷積層,池化層,映射得到一個3×3×8的輸出尺寸。即也就是,有一個輸入圖像
,得到3×3×8的目標標簽
.
即使檢測目標覆蓋多個格子的區(qū)域,在訓練中,也只會分配到9個格子中的一個。在算法的實際實現(xiàn)中,輸入圖像的劃分更為精細,如19×19形式的劃分,更為精細的劃分保證了多個檢測目標處于同一個格子的概率會更低。
交并比
交并比函數(shù)是計算兩個邊界框的交集和并集之比,用來評估目標檢測任務,對于如下圖像,交并比函數(shù)的計算可以用如下公式表示,
一般約定,在計算機檢測任務中,如果,說明哦檢測正確,如果預測器和實際邊界完美重疊,則
,即也就是交并比越高,邊界框越精確。
非極大值抑制
目標檢測算法的運行過程可能會對同一目標做出多次檢測,而非極大值抑制可以確保算法對每個目標值檢測一次。
當運行目標分類和檢測算法時,對每個格子都運行一次,目標所覆蓋的區(qū)域的格子都能檢測到目標,每次的檢測結果都能出現(xiàn)一個與結果相關的概率,非極大值抑制算法會依次比較剩下的矩形,所有和這個最大概率的邊框有很高的交并比邊框的輸出會被抑制。算法的實現(xiàn)細節(jié)如下所示:

如上圖所述,就是實現(xiàn)非極大值抑制算法的基本流程圖,如果有多個目標需要檢測或者定位,需要獨立進行多次非極大值抑制算法,也就是對每個輸出類別都做一次該算法。
Anchor boxes
如果希望通過一個格子檢測出多個目標,需要用到anchor boexes的概念。如下圖所示,如果一個3×3的圖像,行人和車的中點幾乎在同一個位置,可能會無法利用向量輸出檢測結果。
而利用anchor boxes的算法可以解決上述問題,算法的基本思路如下所述:
預先定義兩個不同形狀的anchor box,定義的輸出標簽不再是
而是兩個anchor box的輸出拼接到一起的矩陣,如下所示:
其中,該向量的前8個元素代表第一個anchor box的輸出標簽,后8個元素代表第二個anchor box輸出的標簽。整個算法的實現(xiàn)思路就是訓練圖像的每個目標被分配到目標中點所在的格子中,并分配到和目標形狀交并比最高的anchor box中。具體而言就是,在這種情況下,目標不是被分配到了一個格子中,而是一對格子中,此時輸出的標簽是3×3×16(或者是3×3×3×2),包含了兩個目標的信息。
