博主簡介:努力學習的22級本科生一枚 🌟?;探索AI算法,C++,go語言的世界;在迷茫中尋找光芒?🌸?
博客主頁:羊小豬~~-CSDN博客
內容簡介:常見目標檢測算法簡介?😕??😕??😕??😕??😕??😕??😕??😕??😕?
往期內容:深度學習基礎–目標檢測入門簡介-CSDN博客
文章目錄
- 1、tow-stage
- R-CNN
- Fast R-CNN
- Faster R-CNN
- Mask R-CNN
- 2、one-stage
- 單發多寬檢測(SSD)
- YOLO
- 3、參考資料
1、tow-stage
R-CNN
最早的目標檢測模型。
📖 簡介:
傳統目標檢測的思路,采用提取框,對每個提取框進行特征提取、圖像分類、非極大值抑制四個步驟進行檢測。
對于一張圖片來說,R-CNN首先會基于啟發式搜索算法生成大約2000個候選區域,然后每個區域固定大小,并且傳入一個CNN模型中,最后得到一個特征向量,這個向量會傳到一個SVM模型中,進行類別計算,進行分類,并且,最后運用 了一個邊界框回歸模型,通過邊框回歸模型對框的準確位置進行修正。
📚 解釋一些名詞:
- 啟發式搜索,這個算很難,也包含很多算法,簡單理解他的作用是在圖片上選取物體可能出現的區域框(錨框);
- 非極大值抑制:是一種在目標檢測中去除冗余邊界框的后處理算法,通過保留局部得分最高的檢測框并抑制與其重疊度(IoU)超過閾值的低得分框,實現檢測結果的唯一性與精確性;這個在上一篇博客中已經簡單介紹了(深度學習基礎–目標檢測入門簡介-CSDN博客),就是去除多余的錨框;
🐾 算法步驟:
- 使用啟發式搜索來選擇錨框;
- 使用預訓練模型來對每個錨框抽取特征;
- 訓練一個SVM來對類別進行分類;
- 訓練一個線性回歸模型來預測邊緣框的偏移,這一步就是將錨框來預測他真實的位置(邊緣框)偏移;
上面簡介中提到每個區域固定大小,但是實際上用啟發式算法進行搜索的時候,每次選擇的錨框大小是不同的,將不同大小的錨框變成一個統一形狀的算法就是Rol pooling;
💁?♂ Rol pooling,也稱感興趣域池化層,作用是將大小不一的錨框統一形狀。
📘 原理:
給定一個錨框,先將其均勻地分割成 n * m 塊,然后輸出每塊里的最大值,這樣的話,不管錨框有多大,只要給定了 n 和 m 的值,總是輸出 nm 個值,達到統一形狀的作用。
缺點:雖然有效提取了特征,但是速度非常慢,因為在第二個步驟用訓練好的模型對每個錨框進行特征提取的時候,計算非常大(因為啟發式算法大約生成2000個框)。
Fast R-CNN
🐤R-CNN:
- 對每個錨框分別進行特征提取;
- R-CNN是前向傳播的,而且比如說對一張圖片劃分了2000張錨框,那么在進行特征提取的時候通常會有重疊部分,故導致了從重復計算。Fast R-CNN就是解決這個問題的;
🥅 Fast R-CNN網絡圖:
🚂 原理簡介,與R-CNN對比著看:
-
首先由兩進行兩部計算,分別是錨框生成、圖片特征提取,對應著上圖中兩條分支:
-
錨框生成:和R-CNN一樣;
-
特征提取(CNN):對于一張圖片,首先使用CNN對整張圖片進行特征提取;
-
-
Rol pooling這里有兩步:
- 1??映射:錨框(selective search)按照一定比例映射到特征提取(CNN)的輸出上;
- 2?? Rol pooing:這一步和R-CNN一樣,統一錨框大小。
-
之后采用一個全連接層進行分類(R-CNN用的是SVM),輸出類別。
🚅比R-CNN快的原因:最核心的原因就是只需要對整體圖片進行一次特征提取就行了,不需要分別對每個錨框進行特征提取。
Faster R-CNN
這個算法的改進是提出來RPN(區域建議網絡)來代替selective search;
🔖 RPN簡介:
這個網絡學習的時候理解起來還是有難度的😢
🎡 作用:生成大量很差的錨框,然后進行預測,最終輸出比較好的錨框供后面網絡使用(預測效果好的會進入Rol Pooing);
😿 原理簡介:
-
CNN特征提取后,再次運用一次卷積操作,然后用啟發式算法搜索來初始化錨框;
-
然后判斷錨框是否包含物體,這里分為兩步:
- 1?? 分類:RPN對每個錨框進行分類,判斷他是否包含目標物體,這里輸出的是一個概率值;
- 2?? 回歸:調整錨框位置和大小;
-
最后采用NMS對錨框進行篩選。
🉐 特點:精度高,但是計算量巨大,慢。
Mask R-CNN
這個算法是對Faster R-CNN基礎上修改而來,他的作用是:解決傳統目標檢測,即只輸出邊界框無法提供像素級分割信息的問題。
像素級分割:生成每個物體的精確輪廓掩碼.
從圖像看的話,對比Fast R-CNN,有兩個不同:
- 用Rol align代替Rol pooling;
- 在Rol align上新增一個分支;
這個難度我學的時候也很蒙,感覺好難😢
在學這個網絡前,先學一下什么叫做二值掩碼:
- 二值掩碼是一種由0和1(或255)組成的二值圖像,用于標記原始圖像中需要關注或操作的區域。上圖的右下部分圖。
🔬 難度大,梳理一下網絡:
- 特征提取
- 輸入圖像通過卷積神經網絡生成特征圖。
- 區域建議網絡(RPN)
- 在特征圖上生成錨框,通過分類和回歸生成候選區域,這部分和Fast R-CNN一樣。
- RoI Align
- 將候選區域映射到特征圖上,使用雙線性插值提取固定大小的特征(如 7×77×7 或 14×1414×14),與Rol pooling不同的是映射算法不同。
- 分類與回歸分支
- 對每個 RoI 進行分類和邊界框修正,這部分和Fast R-CNN一樣。
- 掩碼分支
- 對每個 RoI 生成二值掩碼,最終通過閾值化得到像素級分割結果,先理解為對不同物體分別進行不同顏色可視化即可😭,由于是像素級別的,故大概輪廓也能顯示出來。
- 全連接層
- 進行圖片分類。
2、one-stage
單發多寬檢測(SSD)
👀 先看網絡結構:
初看網絡結構,可以觀察到他也是前向傳播的,而且在傳播的時候一直進行預測。
👀再看
👓 特點:
-
對給定的錨框直接進行預測,不需要進行兩個階段,這也是為什么比Faster R-CNN快的原因;
-
SSD 通過做不同分辨率下的預測來提升最終的效果,越到底層的 feature map,就越大,越往上,feature map 越少,因此底層更加有利于小物體的檢測,而上層更有利于大物體的檢測)
😢 缺點:
- 速度快,但是精度不好。
YOLO
? 用最多的模型。
📚 解釋:
-
盡量讓錨框不重疊—–》將圖片均勻分成S X S個錨框。
-
每個錨框預測B個邊緣框,這個意思是一個錨框可能有多個物體,故在他身邊預測多個錨框進行特征提取、分類,如上圖中的藍色圓圈。
YOLO有很多版本,也非常值得學習的。
3、參考資料
- 【44 物體檢測算法:R-CNN,SSD,YOLO【動手學深度學習v2】】https://www.bilibili.com/video/BV1Db4y1C71g?vd_source=1fd424333dd77a7d3e2e741f7d6fd4ee
- R-CNN_百度百科
- 李沐動手學深度學習V2-目標檢測SSD_深度學習與目標檢測 第2版第二版-CSDN博客