<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          目標檢測中的特征沖突與不對齊問題

          共 8446字,需瀏覽 17分鐘

           ·

          2021-06-09 00:01

          點擊上方小白學視覺”,選擇加"星標"或“置頂

          重磅干貨,第一時間送達

          本文轉自|深度學習這件小事

             前言

          昨天看到一篇商湯的刷榜文《1st Place Solutions for OpenImage2019 - Object Detection and Instance Segmentation》,里面的每個技巧我們都見過,還有很多依靠大量計算資源的參數(shù)搜索和模型集成。不過其中關于回歸和分類的沖突勾起了我的回憶,去年整理了一些相關的文章。我準備在簡要介紹這片文章的同時,談談目標檢測(two-stage和one-stage)中特征的沖突和不對齊問題,以及現(xiàn)有的改進方案。

             Two-stage目標檢測中的特征/任務沖突問題

          1.1 Two-stage目標檢測的流程與原理

          說起兩階段目標檢測算法,大家耳熟能詳?shù)木褪荈aster RCNN系列了,目前的大多數(shù)兩階段算法也都是在其基礎上進行的改進。不過現(xiàn)在新出的很多“N-階段”的算法把大家搞混了。所以我這里申明一下兩階段的意義,我們通常說的兩階段是以Faster RCNN算法為基準的,第一階段是特征提取和候選框提取,主要是RPN網絡,第二階段是對候選框進行進一步篩選、精修和細分類,主要是ROI Pooling/Align等網絡。
          在我的上一篇博文中提到過兩階段目標檢測的關于平移不變性和相等性的矛盾問題,這里我們詳細探討一下。兩階段目標檢測中,第一階段做的事前/背景分類和候選框回歸,第二階段做的是候選框精修回歸和細分類。正如之前所討論的,分類任務希望無論目標的位置和形狀怎么變化,什么類別的目標就是什么類別,即需要保證平移和尺度的不變性。而回歸任務,我在上一篇博文中提到了,對于物體位置的回歸很大程度可能依賴padding信息,當然這不是這次的討論重點,回歸需要保證目標的位置和形狀變化反映在特征上,進而回歸得到位置,即平移和尺度的相等性。這一問題在行人檢索中更加嚴重,因為行人檢索問題中的識別任務要求同類目標的不同身份要區(qū)分開,這一點就與目標檢測中的分類任務相違背,因為檢測中的分類不論什么身份,只要屬于同一類別即可。

          1.2 現(xiàn)有的相關解決方案

          在正式介紹相關改進策略之前,我們先提提Cascade RCNN算法[3],其原理如下:
          要注意的是Iterative bbox方式和Cascade RCNN方式的形式雖然一樣,但是不同之處在于前者僅僅是用于測試階段,可以觀察到都是head network都是一樣的,而后者各個head network都是訓練來的。從形式來看,很明顯就是將最后的分類和回歸分支級聯(lián)做了3次。這樣做的依據(jù)就是:
          第一幅圖中橫坐標是回歸前候選框與gt的iou,縱坐標是回歸后的iou,可以看到不同的候選框質量對于回歸效果也有影響。第二幅圖中基于不同iou閾值訓練得到的網絡對于AP也有影響。再考慮到訓練集和測試集內樣本分布的不同,作者采用分而治之的策略,分別用{0.5,0.6,0.7}三種IOU閾值級聯(lián)訓練。這里提到了各階段的具體訓練方式:
          分類和回歸都是一個模式,不僅用gt的標簽,還用到了上一階段的結果作為標簽,來保證結果的穩(wěn)定性。最后我們來看看各種方案的對比實驗結果:
          可以看到的是iterative bbox(以不同iou閾值做多次nms)和integral loss(以不同iou閾值并聯(lián)多個回歸和分類過程)都能提升一點點AP,但是Cascade RCNN(以不同iou閾值級聯(lián)多個回歸和分類過程)效果提升最大。
          好了,我們回歸正題,Cascade RCNN從樣本質量分布mismatch和iou等角度進行了級聯(lián)的refine操作。那么在IOU-Net[4]則是顯式地說明了分類的分數(shù)不適合用于NMS的過濾,因為分類置信度高的樣本不一定真的好。因此作者增加了一個樣本與gt的iou預測階段,以此作為NMS的排序依據(jù)。這里實際上就說明了分類和回歸的沖突問題。
          至于為了提高預測精度的PrROI-pooling,我就不仔細分析其原理了,不是這里的討論重點:
          那么真正意義上把分類和回歸問題放在明面上的我覺得是Double-Head RCNN[2],來自于18年COCO檢測冠軍曠視團隊。
          我們可以看到,不同于傳統(tǒng)的將回歸和分類放在最后階段,利用兩個全連接分支來預測,Double-Head直接從ROI Align之后就將兩個人任務分開了,盡可能減少二者共享的特征部分。而Double-Head-Ext方案則是讓兩個分支都能預測類別和位置。
          可以看到,四種方案下平衡兩個分支損失函數(shù)權重后,后兩種的效果明顯更好。最后我們來看看CVPR2019的Guided Anchoring算法。
          這個算法解決的是anchor的設計問題,而anchor的設計需要解決形狀對齊和特征一致性的問題。其中形狀對齊指的是以往anchor的尺寸和長寬比都是預設的固定幾個,首先這也是超參數(shù),其次無法適應多樣的樣本形狀,因此該算法以特征圖每個點作為中心,先預測anchor的長寬,再用于預測。而特征一致性問題則是一個很巧妙的問題,原因在于,同一層的特征圖上每個點的感受野一致,但是預測到的anchor尺寸卻不同,那么基于不同大小的anchor來做的分類任務卻基于相同的特征感受野,這顯然是存在問題的。所以作者基于預測得到的anchor長寬,利用deform-conv為每個anchor分配了新的特征區(qū)域,其中deform-conv中的offset直接采用預測得到的anchor長寬。


             One-stage目標檢測中的特征不對齊問題

          2.1 One-stage目標檢測中的問題

          One-stage目標檢測算法,以YOLO系列、SSD系列、RetinaNet等為經典,下面是YOLOv3的網絡流程:
          我們可以看到的是單階段的目標檢測算法相當于取消了RPN階段,所以兩階段目標檢測中遇到的問題(分類與回歸特征沖突,anchor與特征不對齊),在單階段目標檢測中只會更加嚴重。不過單階段目標檢測的目標就是提升速度,所以我目前并沒有看到對第一個問題的解決方案,而去年對于anchor與特征不對齊的問題有好多解決策略。原因在于兩階段目標檢測中ROI Pooling本身有一個利用候選框裁剪特征區(qū)域的過程,緩解了這一問題,而單階段目標檢測卻沒有這一過程。

          2.2 “1.5-stage"解決策略

          CVPR2018有一篇RefineDet算法[9],這個算法是針對SSD算法的改進,融合了單階段和兩階段的設計思路,但又不是我們之前所說的RPN+ROIPooling這類框架,所以就叫它“1.5stage"檢測框架吧。RefineDet有兩個模塊,其中上面是ARM,用于調整anchors的位置和大小,下面是ODM,用于目標檢測。這個跟Guided Anchoring的設計思路很像,不過比較簡陋。除此之外,RefineDet還采用了級聯(lián)預測的模式,利用中間的TCB模塊,其通過Deconv和特征Concat反向級聯(lián),類似于FPN的模式。
          同樣地,相同的團隊在AAAI2019的一篇人臉檢測算法SRN[6]也用了RefineDet的框架:
          可以看到整體框架很像,但是卻有所不同,SRN框架包含有STC+STR+RFE三個模塊。其中STC模塊作用于淺層網絡,用于過濾掉大部分的負樣本,STR作用于高層特征,用于粗略調整anchor,類似于RefineDet。而RFE則是在接受各個尺度特征的同時,利用非正方形的卷積核對感受野進行增強(考慮到人臉不一定是正的)。
          在ICCV2019中有一篇比較特別的檢測算法Reppoints[7],其出來的時機正好是anchor-free算法大火的時候,其框架比較特別,可以看作是DCN+Refine操作的集成,有人也稱其為DCNv3:
          這個框架的特別之處在于沒有預測框,沒有預測中心或者角點,而是預測的目標邊緣的九個點。不過我覺得這幾個特征點更像是一種解釋,而不是出發(fā)點。其原理是以特征圖上每個點為中心,預測包含該位置的目標的九個邊緣點。其方式是通過卷積的方式預測各個點的相對位置(x,y)偏移,以此作為Deform Conv的偏移量對原特征圖進行卷積,由此使得特征與目標區(qū)域更加重合,從而進行第二階段的預測??梢园l(fā)現(xiàn),Reppoints很像anchor free版的Guided Anchoring,而之前提到的RefineDet和SRN雖然提到了anchor預更新,但是特征并沒有校正。
          WACV2020的一片P&A算法[5]算是對上面的不足做了完善,但是我感覺像是把Guided Anchoring中的Feature Adaption直接搬過來了,為什么這么說呢。因為P&A也是先預測anchor偏移和前景背景分類,然后以此作為deform conv的offsets對特征重提取,再進行目標位置回歸和細分類。
          同時間出來的AlignDet[8]則是提出了ROIConv:
          上圖中(a)指的就是RefineDet類的對齊,(b)就是Reppoints一類的對齊,(c)就是Guided Anchoring類的對齊,(d)就是AlignDet類的對齊。AlignDet把基于anchor偏移量的特征對齊稱作ROIConv,還分析了具體的偏移校正過程:


          可以看到有兩次預測過程,作者采用了Cascade的 方式,兩次的IOU閾值不同。其實仔細看的話P&A和AlignDet的結構幾乎一模一樣,看評審怎么看吧,估計也是考慮到這方面因素給掛了。


             《1st Place Solutions for OpenImage2019 - Object Detection and Instance Segmentation》介紹

          現(xiàn)在我們來看看商湯在OpenImage2019上的文章,可以當作技術報告來看。我們直接按照論文提到的創(chuàng)新點或者工作來一一說明。
          • Decoupling Head

          作者出發(fā)點是目標檢測框架中分類的回歸任務對于特征的要求不同,而這一點在我上面提到的Double Head RCNN已經提過了。Decoupling Head則是考慮到我們前文提到的anchor和特征不對齊問題,利用傳統(tǒng)的ROI Pooling主干預測anchor的粗略位置,然后用deform conv的方式校正分類分支。再在主干上保留原始的回歸和分類任務。總而言之可以將其概括為:Double Head RCNN + AlignDet + Faster RCNN
          • Adj-NMS
            這部分作者的描述方案很“有意思”,作者考慮到NMS和soft-NMS的不足,先利用0.5的IOU閾值做了一次NMS,將靠得比較近的候選框過濾掉了,然后再用基于高斯核的soft-NMS做二次過濾。

          我們可以根據(jù)這個公式來看看,假設分類置信度閾值為0.5,候選框分類置信度為1,那么Soft-NMS階段要想留下,IOU必須小于0.59,而第一次的NMS已經將IOU>0.5的候選框過濾掉了,所以這個理論上可行。因此我們可以認為作者幾乎不怎么考慮特別密集擁擠的場景了。

          其效果也有0.174個點的提升。其實如果注意的話,有點像前文介紹Cascade RCNN是所提到了Iterative bbox策略,即做多次NMS。SoftNMS只能通過重新打分撈回原本得分比較低的樣本,但是NMS已經將大部分的候選框給過濾掉了,所以我很好奇這是怎么生效的。
          • Model Ensemble
            很多大型比賽的固定策略“Ensemble",已經不奇怪了。naive ensemble的策略是借鑒的2018年的OpenImage第二名,給定bounding boxes(P),以及topk個與之IOU較高的候選框,依據(jù)驗證集的分數(shù)來分配各個模型在集成時的權重,這里還分各個目標類別,然后進行加權:

          這里作者訓練了28個目標檢測網絡....,利用二叉樹的方式進行模型空間搜索。
          • Data Re-sampling
            確保500個類別的目標中各個類別被選取的概率相等。
          • Decoupling Backbone
            對于第25~28個模型,采取Decouple Head的策略,其中回歸分支的權重較小。
          • Elaborate Augmentation
            隨機選擇一個類別,利用旋轉放縮裁剪等方式進行數(shù)據(jù)增強,這樣可以使得一幅圖中的類別數(shù)變少,緩解數(shù)據(jù)不平衡問題。
          • Expert Model
            利用專門的網絡訓練專門的子類別數(shù)據(jù)集,這里面考慮了正負樣本均衡的問題,容易混淆(標注標準不同,表觀相似)的樣本。
          • AnchorSelecting
            跟YOLO系列一樣,利用k-means方法得到18組anchors(6種長寬比,3種尺寸)。
          • Cascade RCNN
            設置了0.5,0.5,0.6,0.7四個階段的級聯(lián)檢測,這我就搞不懂Adj-NMS干嘛用的了。
          • Weakly Supervised Training
            由于OpenImage數(shù)據(jù)集中各類別的“長尾分布”很明顯,嚴重不均衡,所以作者增加了一些圖像級的標注,結合有監(jiān)督和WSDDN算法中的弱監(jiān)督算法聯(lián)合訓練。
          • Relationships Between Categories
            作者通過分析數(shù)據(jù)集中部分類別目標之間的聯(lián)系,比如person和guitar等等,類似于條件概率,來修正分類置信度,比如一個有person在旁邊的guitar要比沒有person的guitar置信度要高。
          • Data Understanding
            作者發(fā)現(xiàn)OpenImage數(shù)據(jù)集中對于特定類別的目標標注有歧義,比如火炬和手電筒,劍和匕首等,所以作者將有歧義的類別細分成了上面說的多類。同時作者也發(fā)現(xiàn)有些目標,比如葡萄缺乏個體檢測框等,作者就利用葡萄串的實例標注,擴展了很多葡萄框。
          最后的分割部分我就不細講了,就是基于HRNet和Ensemble的方式進行的實驗。


             說在后面的話

          實際上目標檢測任務與多目標跟蹤(MOT)也有很多聯(lián)系,比如MOT數(shù)據(jù)集中的MOT17Det,又比如新出的基于類檢測框架的Tracktor++算法,檢測跟蹤結合的框架JDE算法等。多目標跟蹤領域絕不是一個局限于數(shù)據(jù)關聯(lián)的獨立領域,應該是個多領域融合的方向。之前基于COCO的預訓練模型在MOT17數(shù)據(jù)集上試了下,在MOT17Det上居然還有0.88AP,然后我基于這個又復現(xiàn)了下Tracktor++,居然也達到了58+MOTA,后面有機會我放github吧。對了,還有個Crowdhuman人體檢測的算法分享。
          https://zhuanlan.zhihu.com/p/68677880
          唉,公司又推遲入職時間了,先申請看能不能提前入職吧,不然只能在家減肥看論文做實驗了...

          參考資料

          [1] 1st Place Solutions for OpenImage2019 - Object Detection and Instance Segmentation.
          [2] Rethinking Classification and Localization for Object Detection
          [3] Cascade r-cnn_ Delving into high quality object detection
          [4] Acquisition of Localization Confidence for Accurate Object Detection
          [5] Propose-and-Attend Single Shot Detector
          [6] Selective Refinement Network for Face Detection
          [7] Reppoints_ Point set representation for object detection
          [8] Revisiting feature alignment for one-stage object detection
          [9] Single-Shot Refinement Neural Network for Object Detection
          [10] https://zhuanlan.zhihu.com/p/63273342


          下載1:OpenCV-Contrib擴展模塊中文版教程
          在「小白學視覺」公眾號后臺回復:擴展模塊中文教程,即可下載全網第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學視覺公眾號后臺回復:Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學視覺公眾號后臺回復:OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产麻豆精品成人毛片 | 78摸亚洲 | 日本视频在线观看中文字幕亚洲 | 豆花AV一区二区无码免费看 | 性爱免费视频 |