一、總概
學習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包圍着一個目标,還告訴我們每個目标的置信度(認為該預測目标和真實目标有多接近的數值),置信度分數和預測的目标組成最終的預測結果。
- 由于1313個網格,每個網格有5個預測,是以共有1313*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還沒試過,不敢輕易評論。最後,上面的都是自己的一些簡單總結,難免出錯,望指正,感謝觀看。
歡迎關注我的公衆号【CV之道】,一起學習交流~~