one-stage two-stage 的区别
目標檢測可以理解為是物體識別和物體定位的綜合,不僅僅要識別出物體屬于哪個分類,更重要的是得標記處物體在圖片中的具體位置。
目標檢測目前使用兩類方法: one-stage 、 two-stage
one-stage檢測器的大致發展路線:
1.SSD(2015)->RetinaNet(2017)-NAS-FPN(2019.05)->EfficientDet(2019.11)2.Yolo v1->Yolo v2->Yolo v3->Yolo v4
two-stage檢測器的大致發展路線:
1.R-CNN(2013)->Fast R-CNN(2015)->Faster R-CNN(2015)->Mask R-CNN(2017)->DCN v1(2017)->DCN v2(2018)
它們的主要區別
1.one-stage網絡速度要快很多
2.two-stage網絡準確率高
one-stage
one-stage目標檢測算法(也稱one-shot object detectors),其特點是一步到位,速度相對較快。one-stage檢測方法,僅僅需要送入網絡 一次就可以預測出所有的邊界框,因而速度較快,非常適合移動端。最典型的one-stage檢測算法包括YOLO系列,SSD。
two-stage
two-stage檢測算法將檢測問題劃分為兩個階段,首先產生候選區域(region proposals),然后對候選區域分類(一般還需要對位置精修),這一類的典型代表是R-CNN, Fast R-CNN, Faster R-CNN,Mask R-CNN家族。他們識別錯誤率低,漏識別率也較低,但速度較慢,不能滿足實時檢測場景。
速度快慢總結
首先來看第一點這個好理解,one-stage網絡生成的ancor框只是一個邏輯結構,或者只是一個數據塊,只需要對這個數據塊進行分類和回歸就可以,不會像two-stage網絡那樣,生成的 ancor框會映射到feature map的區域(rcnn除外),然后將該區域重新輸入到全連接層進行分類和回歸,每個ancor映射的區域都要進行這樣的分類和回歸,所以它非常耗時。
為什么two-stage網絡更準確----正負樣本不均衡問題
我們來看rcnn,它是首先在原圖上生成若干個候選區域,這個候選區域表示可能會是目標的候選區域,注意,這樣的候選區域肯定不會特別多,假如我一張圖像是100x100的,它可能會生成2000個候選框,然后再把這些候選框送到分類和回歸網絡中進行分類和回歸,fast-rcnn其實差不多,只不過它不是最開始將原圖的這些候選區域送到網絡中,而是在最后一個feature map將這個候選區域提出來,進行分類和回歸,它可能最終進行分類和回歸的候選區域也只有2000多個并不多,再來看faster-rcnn,雖然faster-rcnn它最終一個feature map它是每個像素點產生9個ancor,那么100x100假如到最終的feature map變成了26x26了,那么生成的ancor就是26x26x9 = 6084個,雖然看似很多,但是其實它在rpn網絡結束后,它會不斷的篩選留下2000多個,然后再從2000多個中篩選留下300多個,然后再將這300多個候選區域送到最終的分類和回歸網絡中進行訓練,所以不管是rcnn還是fast-rcnn還是faster-rcnn,它們最終進行訓練的ancor其實并不多,幾百到幾千,不會存在特別嚴重的正負樣本不均衡問題,但是我們再來看yolo系列網絡,就拿yolo3來說吧,它有三種尺度,13x13,26x26,52x52,每種尺度的每個像素點生成三種ancor,那么它最終生成的ancor數目就是(13x13+26x26+52x52)*3 = 10647個ancor,而真正負責預測的可能每種尺度的就那么幾個,假如一張圖片有3個目標,那么每種尺度有三個ancor負責預測,那么10647個ancor中總共也只有9個ancor負責預測,也就是正樣本,其余的10638個ancor都是背景ancor,這存在一個嚴重的正負樣本失衡問題,雖然位置損失,類別損失,這10638個ancor不需要參與,但是目標置信度損失,背景ancor參與了,因為總的損失 = 位置損失 + 目標置信度損失 + 類別損失,所以背景ancor對總的損失有了很大的貢獻,但是我們其實不希望這樣的,我們更希望的是非背景的ancor對總的損失貢獻大一些,這樣不利于正常負責預測ancor的學習,而two-stage網絡就不存在這樣的問題,two-stage網絡最終參與訓練的或者計算損失的也只有2000個或者300個,它不會有多大的樣本不均衡問題,不管是正樣本還是負樣本對損失的貢獻幾乎都差不多,所以網絡會更有利于負責預測ancor的學習,所以它最終的準確性肯定要高些
準確度總結:
one-stage網絡最終學習的ancor有很多,但是只有少數ancor對最終網絡的學習是有利的,而大部分ancor對最終網絡的學習都是不利的,這部分的ancor很大程度上影響了整個網絡的學習,拉低了整體的準確率;而two-stage網絡最終學習的ancor雖然不多,但是背景ancor也就是對網絡學習不利的ancor也不會特別多,它雖然也能影響整體的準確率,但是肯定沒有one-stage影響得那么嚴重,所以它的準確率比one-stage肯定要高。
我實際項目中,發現yolo v4 的速度和準確度都比 faster-rcnn 高,當然 faster-RCNN時間比較久了,算法上后期又有很多的更新,暫時未進行比較。不過這些都是一些基本理論,技術還在發展,是用one好還是two好,不是一句話就能說清楚的,根據自己的實際項目來吧。多測試出奇跡。
那么什么情況下背景ancor不會拉低這個準確率呢?
那你就要設置閥值,與真實grundTtruth iou閥值設得小一點,只要大于這個閥值,我就認為你是非背景ancor(注意這部分ancor只負責計算目標置信度損失,而位置、類別損失仍然還是那幾個負責預測的ancor來負責)或者假如一個圖片上有非常多的位置都是目標,這樣很多ancor都不是背景ancor;總之保證背景ancor和非背景ancor比例差不多,那樣可能就不會拉低這個準確率,但是只要它們比例相差比較大,那么就會拉低這個準確率,只是不同的比例,拉低的程度不同而已
總結
以上是生活随笔為你收集整理的one-stage two-stage 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Single-stage目标检测网络YO
- 下一篇: 高分屏笔记本显示模糊解决方法