目标检测之one-stage和two-stage网络的区别
One-stage網絡以yolo系列網絡為代表的,two-stage網絡以faster-rcnn為代表的,
它們的主要區別
1.one-stage網絡的準確性要比two-stage網絡要低
2.one-stage網絡速度要快很多
***在自動駕駛領域,準確性要求更高,是否應該在Faster-rcnn基礎上提高速度?
為什么one-stage網絡速度要快很多?
首先來看第一點這個好理解,one-stage網絡生成的ancor框只是一個邏輯結構,或者只是一個數據塊,只需要對這個數據塊進行分類和回歸就可以,不會像two-stage網絡那樣,生成的 ancor框會映射到feature map的區域(rcnn除外),然后將該區域重新輸入到全連接層進行分類和回歸,每個ancor映射的區域都要進行這樣的分類和回歸,所以它非常耗時
為什么one-stage網絡的準確性要比two-stage網絡要低?
我們再來看第二點,為什么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肯定要高
那么什么情況下背景ancor不會拉低這個準確率呢?
那你就要設置閥值,與真實grundTtruth iou閥值設得小一點,只要大于這個閥值,我就認為你是非背景ancor(注意這部分ancor只負責計算目標置信度損失,而位置、類別損失仍然還是那幾個負責預測的ancor來負責)或者假如一個圖片上有非常多的位置都是目標,這樣很多ancor都不是背景ancor;總之保證背景ancor和非背景ancor比例差不多,那樣可能就不會拉低這個準確率,但是只要它們比例相差比較大,那么就會拉低這個準確率,只是不同的比例,拉低的程度不同而已
————————————————
版權聲明:本文為CSDN博主「weixin_33602281」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:
目標檢測之one-stage和two-stage網絡的區別_weixin_33602281的博客-CSDN博客解決one-stage網絡背景ancor過多導致的不均衡問題方案
1.采用focalloss,將目標置信度這部分的損失換成focalloss,具體如下:
pt越大,1-pt越小,在給他加一個大于1的指數,會將整個縮得更小,它能夠有效的降低整個背景ancor的損失,對非背景ancor也有影響,但是影響并不大
2.增大非背景ancor的數量
某個像素點生成的三個ancor,與真實grundtruth重合最大那個負責預測,它負責計算位置損失、目標置信度損失、類別損失,這些不管,它還有另外兩個ancor,雖然另外兩個ancor不是與真實grundtruth重合最大,但是只要重合大于某個閥值比如大于0.7,我就認為它是非背景ancor,但注意它只計算目標置信度損失,位置和類別損失不參與計算,而小于0.3的我直接不讓它參與目標置信度損失的計算,實現也就是將它的權重置0,這個思想就類似two-stage網絡那個篩選機制,從2000多個ancor中篩選300個參與訓練或者計算目標置信度損失,相當于我把小于0.3的ancor我都篩選掉了,讓它不參與損失計算
3.設置權重
在目標置信度損失計算時,將背景ancor的權重設置得很小,非背景ancor的權重設置得很大
總結
以上是生活随笔為你收集整理的目标检测之one-stage和two-stage网络的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高等代数--多项式与线性空间
- 下一篇: C# 获取枚举类型描述Descripti