1、目標定位:(以定位汽車為例)
將圖像分類:行人、汽車、摩托車、純背景圖,使用softmax函數輸出結果. 輸出的結果不僅僅是分類,還有四個標記:bx、by、bh、bw. 這四個數據為被檢測對象的邊界框的參數.
左上角坐標(0,0),右下角坐標(1,1).
輸出結果的表示形式:
2、特征點檢測:
(1)以人臉特征提取為例:
對於人臉的多個特征點,比如4個眼角、鼻子周圍關鍵點等,假設選取64個特征點,設置為 (l1x,l1y)、(l2x,l2y)、....、(l64x,l64y).
准備一個卷積網絡,將人臉圖片輸入卷積網絡,輸入0/1判斷是否含有人臉,然后再輸出128個特征參數,最終輸出129個參數.
(2)以姿態檢測為例:
定義一些關鍵特征點,如胸部的中點、左右肩、左右肘等,來識別人物的姿態動作.
3、目標檢測:(以汽車識別為例)
(1)問題描述:
由於訓練集都是整張照片為汽車,且待識別照片可能含有多輛汽車,因此需要對待識別的照片應用滑動窗口,使得汽車所占圖片區域較大.
使用滑動窗口,並逐漸擴大窗口的大小:
但使用滑動窗口的缺陷是:窗口截取的圖片數量太多,計算成本太高.
(2)卷積的滑動窗口實現:為了解決上述計算成本的問題.
① 將全連接層轉換成卷積層:假設訓練集是14*14*3.
② 應用至測試集:
若測試集是16*16*3.
結果集的四個小塊,每一小塊都可以看成是一個窗口得出的結果.
若測試集是28*28*3.
(3)邊界框預測:
可能出現所有邊界框都無法完整框處汽車的情況,如下圖.
使用YOLO算法:
① 將圖像分為若干格,比如3*3;
② 結合目標定位算法,找到對象的中心點,對象分配給中心點所在格子,找出汽車所在的邊界,每一格輸出的結果:y = [pc, bx, by, bh, bw, c1, c2, c3]T.(其中bh,bw可以超過邊界)
③ 輸出的結果:3*3*8(3*3是格子划分,8是每一個格子的結果都是8維).
(4)交並比(IoU):
用於判斷對象檢測算法運作是否良好,計算方法為:
(下圖紅色為正確的邊界框,紫色為識別的邊界框)
IoU = size of Intersection / size of Union
"correct" if IoU ≥ 0.5 (或者其它閾值)
(5)Non-max suppression(非極大值抑制):
解決的問題:在對象檢測時,可能會對同一個對象檢測多次,非極大值抑制可以確保算法對同一個對象檢測一次.
當使用19*19的划分方式時,可能有多個格子包含了同一輛車,可能的識別結果如下圖:
首先分析概率pc最大的邊界框,即最可靠的檢測,即下圖黃色框,對於與其有較高交並比的邊界框就會被抑制.
(6)Anchor boxes:
解決的問題:在同一個格子中識別多個對象.
當同一個格子中出現了多個對象的中點,如下圖,第同一個格子中出現了人和車的中點:
選擇Anchor box:一般通過手動設置5-10個anchor box形狀,覆蓋所需要檢測的對象形狀.
每一個對象都被指定到一個格子和一個與對象形狀IoU最高的anchor box.
輸出的結果格式:
(7) YOLO算法:
在以下用例中,使用了2個Anchor box:
其中第1格的y:;其中第8格的y:
分別對不同對象使用極大值抑制,挑選出pc較大的邊界框.
4、R-CNN(Regions with convolutional network 帶區域的卷積網絡):
當采用滑動窗口時,由於圖片中有些區域是空的,窗口中並沒有行人、汽車、摩托車等所需識別的對象,如下圖:
RPN只選用少數的窗口上運行卷積網絡分類器,采用的方法是圖像分割方法,分割結果如下圖. 對不同的色塊運行分類器.
改進:
Fast R-CNN:圖像分割后,再使用滑動窗口和卷積進行分類.
Faster R-CNN: 使用卷積神經網絡獲得候選塊.
(但這些方法通常比YOLO算法慢)