1. 程式人生 > >opencv_deeplearning學習總結1:幾種目標檢測方法的區別

opencv_deeplearning學習總結1:幾種目標檢測方法的區別

一、總概

學習opencv和深度學習也有一段時間了,也做了不少筆記,亂七八糟的,很多已經忘了,趁有空,趕緊寫寫部落格,分享給更多的喜歡計算機視覺的同學入門。最主要的是自己回顧一下所學。以下的都是自己的一些理解筆記,未免會出錯,有不對的地方,望幫忙指正,一起學習討論。

二、幾種目標檢測方法的總結

(1)傳統的基於滑動視窗的目標檢測:
使用滑動視窗,對圖片進行多次掃描,找出置信度高的區域。也稱級別檢測,逐步找出置信度最高的區域。如下圖(圖片來自此部落格):
這裡寫圖片描述

顯然,這種做法需要極大的計算消耗。

(2)早期的深度學習R-CNN家族:
有些專業名稱,不知道怎麼翻譯。上點筆記圖片,字寫得不好,看不清楚的請往下看,或留言評論。
這裡寫圖片描述


R-CNN也是使用bounding boxes,只是不同於傳統的方法,他是先進行了Selective Search , 使用不同大小的滑動視窗,先試圖把鄰近的畫素組合起來,形成最有可能的框,這樣就比傳統的方法減少bounding boxes的數量,從而提高速度和準確度。

檢測的步驟是:
這裡寫圖片描述
1)通過Selective Search,提取一些認為是目標的區域。
(目前最快最好的Faster R-CNN使用一個網路Region Proposal Network (RPN)來提取區域。)
2)將區域輸入一個已經訓練好的AlexNet模型,使用SVM來判斷這個區域是什麼類。
3)一旦分好了類,只需要用線性迴歸就可得到區域座標。
這裡寫圖片描述

理解不是很透徹,強烈建議去讀原作者的論文,目前RCNN家族,最好最快的是Faster R-CNN

(3)目前效果很好的YOLO家族
先上我的英文筆記,看圖
這裡寫圖片描述
YOLO完全和上面的方法不同,是個極大的創新。YOLO actually looks at the image just once but in a clever way.

  • YOLO將整張圖片劃分為13*13個單元網格,每一個單元網格預測5個bounding box,每個bounding box包圍著一個目標,還告訴我們每個目標的置信度(認為該預測目標和真實目標有多接近的數值),置信度分數和預測的目標組成最終的預測結果。
  • 由於13*13個網格,每個網格有5個預測,所以共有13*13*5 = 845個 boxes.
  • 但並不是每個目標都有很高的預測值,我們會設定一個閾值,把低置信度的預測去掉,這個技術叫 non-maximum suppression.
  • 最後每個網格以125個channels結束,為什麼是125?因為每個單元格預測5個類,每個類包含:x , y , width , height ,confidence score , 20個 probability distribution(20個類,每個類的可能概率) ,所以5*25=125.

總結:儘管有845個離散的預測,但他們都是同時預測,網路模型僅僅跑一次。況且,隨著yolo家族的不斷壯大發展,現在速度已經超過SSD(另一個目標檢測模型,速度快聞名) ,而且準確度更高。所以YOLO家族應該是目前最好的目標檢測演算法。

強烈建議去讀論文

三、總結

本文就簡單總結一下幾種常見的目標檢測模型。就效果來看,YOLO應該是最好用的,YOLO已經推出YOLO9000 , 檢測型別已經達到9000種,如果配上好一點的GPU,達到實時流暢並且準確應該沒問題。YOLO模型也是我實戰最多的,可以留意我其他部落格,會相繼寫YOLOv3的使用和自己訓練,其他的Faster R-CNN還沒試過,不敢輕易評論。最後,上面的都是自己的一些簡單總結,難免出錯,望指正,感謝觀看。