吳恩達《深度學習》第四門課(3)目標檢測(Object detection)


3.1目標定位

(1)案例1:在構建自動駕駛時,需要定位出照片中的行人、汽車、摩托車和背景,即四個類別。可以設置這樣的輸出,首先第一個元素pc=1表示有要定位的物體,那么用另外四個輸出元素表示定位框的中心坐標和寬高,再用3個輸出元素one-hot表示是三個類別中的哪一類。當第一個元素pc=0時表示是背景,然后就不需要考慮其他輸出了,如下圖所示(需要注意的是是根據圖片的標簽y來決定使用幾個元素的):

(2)損失函數:上圖中左下角是使用了平方誤差損失函數這是為了方便解釋方便而使用的。實際使用中pc使用邏輯回歸,c1,c2,c3是用softmax激活然后然后用對數損失函數,位置信息是使用平方誤差損失函數,然后將這些損失函數相加起來得到最終的代價函數。當標簽y=0時,只考慮pc即可。

3.2特征點檢測

(1)特征點檢測就是第一個單元輸出1,表示有這個對象(如人臉),然后如果在人臉上定義了64個特征點(如下圖所示),每個特征點用(x,y)表示,那么網絡將會有1+2*68=129個單元輸出。需要注意的一點是在標注樣本時,所有標簽在所有圖片中務必保持一致,比如說,第5個特征點表示左眼的外眼角,那么所有圖片的第五個特征點都應該是這個。

3.3目標檢測

(1)案例是檢測圖片中的汽車,首先是有裁剪合適的照片(裁剪合適是指照片中如果有汽車那么汽車將占滿整張圖),進行訓練一個可以分類汽車的網絡,即輸出是否有汽車。如下圖所示:

(2)滑動窗口目標檢測是用一個滑動窗口從圖片的最左上角從做到右(設定一定步長)從上到下去滑動,分別將窗口內的圖片裁剪下來送入到之間訓練好的網絡中,判斷有無汽車,然后改變窗口大小,以及步長等,重復上面步驟,如下圖所示:

(3)滑動窗口的問題就是計算量非常的大,因為要保證精確度化不能用太大的步長,這樣滑動窗口很多,而且很多地方是屬於重復計算了。

3.4卷積的滑動窗口實現

(1)將全連接層轉換為卷積層,如下圖所示5*5*16與400個單元進行全連接可以轉換為用400個5*5*16的卷積核來卷積5*5*16,這樣每一個卷積核其實就相當與都是全連接的結果,唯一的區別就是之前全連接輸出是400個單元,現在輸出是1*1*400,維度不同,下一層全連接轉卷積同樣操作,最后一層原來是輸出4個單元,現在變成了1*1*4,維度不同,僅此而已。

(2)上一節中一個一個滑動框輸入網絡中,有許多計算是重疊的,即多次計算,所以可以將原圖直接輸入到網絡中,這樣避免了重復計算。之所以將前面的全連接層變成卷積層,是因為只有都是卷積層的時候才可以輸入任意尺寸的圖片,更具體的說是參數不隨圖片尺寸變化,而全連接層參數w時固定的意味着圖片輸入尺寸要固定。

(3)該方法還存在的一個問題就是邊界框位置不夠准確。

3.5Bounding Box預測(YOLO算法)

(1)將一張圖3*3共9個單元(在論文中是分成19*19,論文默認前提是一個單元里只有一個對象),每個單元都有上面提到的1+4+3=8個輸出(還是用上面無人駕駛的例子,3個類別加一個背景)所以整個網絡輸出為3*3*8。換言之就是輸入一張圖片,然后網絡最終輸出的維度為3*3*8,3*3是指有圖片分成這么多格子,然后每個格子需要用到8個參數。如下圖所示:

(2)YOLO中將對象(即識別的物體)的中心點落在哪一個網格中就,它就屬於哪個網格,一個對象只能屬於一個網絡,即使這個目標可能橫跨了好多個網格。

(3)bx,by,bw,bh一種表示方法:將網格(注意不是整張圖)的左上角記做(0,0),網格右下角為(1,1),所以bx,by的值都在0到1之間,反證法如果超過1說明它不應該划分到這個網格中。bw,bh也是相對於網格的比例,所以其值可能大於1.如下圖所示:

3.6交並比

(1)IoU=(A∩B)/(A∪B),一般將交並比的值大於0.5看成是檢測正確的,當然這個值可以根據實際情況來定。

3.7非極大值抑制

(1)需要理解的一點是,我們做的樣本標簽中一個對象只會屬於一個網格(中心點落在該網格上),但是當我們開始對網絡進行預測時,很多網格都會覺得這個對象是屬於自己的,如下圖所示:

(2)用只有一個類別(如汽車)來說明非極大值抑制的過程。首先將預測到有汽車的網格中概率小於閾值的都去掉(比如說0.6),然后將剩下預測到有汽車的都進行排序,去其中可能性最大的,它將成為一個預測結果,然后與它的交並比大於某個閾值的都去掉,然后再在剩下中取最大可能性的,重復以上步驟,直到處理完全部。

如下圖所示(下圖中的pc其實是之前的pc乘上類別概率c1、c2或c3):

(3)當有多個類別時,按類別分開進行非極大值抑制。

3.8Anchor Box

(1)上面都是假設一個網格里面只有一個對象,如果有兩個對象,如下圖所示,人和汽車的中心點幾乎重合,這時可以提出一種新概念,即在一個網格框中設置多個不同形狀的anchor box,比如說兩個,一個瘦高的,一個挨胖的,如下圖所示:

(2)其實實質就是每個網格的第三維度增加輸出,把之前的3*3*8變成3*3*16(如下圖所示),有時候會變成四個維度如3*3*2*8。

(3)有一點需要注意的是,在給樣本打標簽時要做到統一,比如說瘦高型的,那么將對應到前八個輸出,如果是矮胖型的對應到后面的八個輸出。

(4)當超過兩個對象在同一個網格(其實概率特別小),暫時沒有什么好的辦法;如果兩個對象都是與同一種類型(比如說瘦高型的),也沒什么特別好的辦法。

3.9YOLO算法

(1)將上面提到的各個模塊組合在一起其實就是YOLO算法了,每個網格多個anchor box,最后再做非極大值抑制。

3.10候選區域(Region proposals)

(1)RCNN:首先使用傳統圖像分割的方法,對圖像進行分割,然后提取出2000個可能有對象的候選框,這樣相對於最開始提到的滑動框的方式減少了非常多的框其他二者其實是一回事,然后送入網絡,如下圖所示:

(2)Fast RCNN:即先將整個圖像進行卷積,然后再將候選框映射到卷積之后的輸出做分類,其實就是上面提到的卷積整幅圖減少重復計算。

(3)Faster RCNN:由於使用傳統的圖像分割選出候選框需要非常多的時間,所以使用卷積神經網絡來選出候選框。三個算法特點如下圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM