商湯開源的mmdetection技術報告


前言:讓我驚艷的幾個庫:

  1. ultralytics的yolov3,在一眾yolov3的pytorch版本實現算法中脫穎而出,收到開發人員的歡迎,比別的庫明顯好的點在於,與darknet相似度達到極高的水平,支持自定義cfg文件的加載,簡直完美。
  2. michuanhaohao的reid-strong-baseline, 這個庫很嚴謹的將代碼划分為幾個部分,每個部分只做一小部分的工作,其中使用到了ignite, pytorch的一個高階抽象庫,感覺在遇到問題的時候比較難去debug。
  3. open-mmlab的mmdetection, 這個庫不僅開源,還有一個技術報告,感覺寫的實在太好了。現在一搜索mmdetection全都是配置,運行相關的,這用你講解么,人家readme上寫的很詳細,感覺關鍵還是在於他設計以及整合所有目標檢測,分割的框架,這個才是關鍵。

這篇博客記錄一下讀mmdetection技術報告的關鍵內容以及翻譯。

來源:MMDetection: Open MMLab Detection Toolbox and Benchmark

1. 簡介

mmdetection是一個目標檢測工具箱,包含了很多單階段,多階段檢測和目標分割的算法。該開源庫內容上包括訓練,測試,模型權重下載等。mmdetection包含了使用不同方法實現的基線,可以用來作為已有算法的復現。

mmdetection主要特征有:

  • 模塊化設計,將檢測或者分割任務分解成幾個模塊,通過模塊的組合即可完成相應的任務。
  • 開箱即用,實現了多種目標檢測和分割算法,易於配置和使用。
  • 效率很高,相比其他幾個benchmark(Detectron, markrcnn-benchmark, SimpleDet), mmdetection對GPU的占用要低一點。
  • SOTA, 達到了目前最先進的水平。

mmdetection中還涉及了分享他們對訓練目標檢測器的一些體驗和實踐(感謝open-mmlab)

2. 支持的算法

  • Single-stage Methods:

    • SSD, RetinaNet, GHM, FCOS, FSAF

    • 沒有YOLO官方解釋是說YOLOv3源碼不是主流的backbone,也沒有基於主流的深度學習框架,pipline與其他方法不太相同。

      Maybe some historical reasons. YOLO is firstly implemented with neither mainstream backbones or mainstream DL frameworks, and the pipeline is different from other methods, so it is not as popular as SSD or Faster R-CNN and their variants.

  • Two-stage Methods:

    • Fast R-CNN, Faster R-CNN, R-FCN, Mask R-CNN, Grid R-CNN
    • Mask Scoring R-CNN, Double Head R-CNN
  • Multi-stage Methods:

    • Cascade R-CNN, Hybird Task Cascade
  • 通用的模塊和方法:

    • Mixed Precision Trainning, fp16的意思就是floating point
    • Soft NMS, OHEM, DCN, DCNv2, Train from Scratch
    • StratchDet, M2Det, GCNet, Generalized Attention
    • SyncBN, Group Normalization, Weight Standardization
    • HRNet, Guided Anchoring, Libra R-CNN

以上的算法以及涉及到的文章原論文中都有鏈接,大部分的文章都有必要讀一下,理解一下其中的精髓,即便不實現,也要看看。

3. 框架與架構

這部分主要講的是整個庫設計的框架,進行模塊化,抽象程度比較高。如果不知道這個框架,感覺直接讀源碼還是有點吃力的。

在mmdetection中,將所有的檢測器進行抽象成以下幾個類(class):

  1. backbone: 骨干網絡,用於從圖片中提取特征
  2. Nect: (脖子很形象)用於連接backbone和head, 主要是對backbone提取得到的feature map進行修正或者組合,常見的就是FPN(FPN中核心就是多維度特征組合的方法, 將三個尺度得到的feature map進行組合)
  3. DenseHead(AnchorHead/AnchorFreeHead): 對特征圖的密集位置進行操作(dense location),包括:AnchorHead, AnchorFreeHead。
  4. ROIExtractor: 從單個或者多個feature map中提取ROI, 最經典的是RoIPooling
  5. RoIHead (BBoxHead/MaskHead): 將ROI提取得到的feature作為輸入, 進行基於任務的預測,如:預測坐標和類別,bbox預測與回歸,mask預測。

示意圖如下:

  • 單階段檢測器

    主要看SSD, RetinaNet, YOLO等思想,端到端的解決方案。

    以YOLOv3為例:(mmdetection沒有實現yolo,具體實現可以看一下ultralytics的yolov3)

    • Backbone是darknet53。
    • Nect是YOLOv3進行的特征融合操作,將當前層與淺層特征進行融合。
    • DenseHead就是YOLO層,輸入為Nect融合特征后得到的特征,輸入就是回歸的bbox以及類別
  • 兩階段檢測器

    經典例子是Faster R-CNN, 這里附上一個cascade R-CNN論文中的圖示。(最左側就是Faster R-CNN)

    R-CNN細節講解博客:http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/

    • conv : 代表backbone, 進行特征提取操作。
    • H0, C0, B0 組成的整體: 代表DenseHead,對特征圖的密集位置進行操作
    • H1, C1, B1組成的整體就是ROIHead
    • pool: 功能上就是ROIExtractor, 從單個或者多個feature map中提取ROI
  • 總結一下,每個部分大概做啥:

    模塊 功能/作用
    Backbone 提取圖片特征
    Neck 將提取得到的特征進行融合或者直接用提取的特征
    DenseHead 類似RPN,也類似yololayer, 從特征圖中得到框的信息,類的信息
    ROIExtractor 結合DenseHead提出的框以及Neck得到的特征進行特征提取
    RoIHead 將從ROIExtractor中提取得到的內容進行任務的預測

    4. 訓練pipline

技術報告中提出了一個可供目標檢測,圖像分類,語義分割使用的訓練pipline。為了讓這個pipline更加靈活和簡單,首先定義了一個最小的訓練流程,然后提供了掛鈎機制(hooking mechanism),可以將上圖右側的一些功能加載到基礎訓練流程中。掛載到幾個時間點上:

  • before run

  • before train epoch

  • before train iter

  • after train iter

  • after train epoch

  • before val epoch

  • after val epoch

  • before val iter

  • after val iter

這就是基礎架構


還有一系列實驗結果在論文中,在model zoo中也可以找到:https://github.com/open-mmlab/mmdetection/blob/master/docs/MODEL_ZOO.md

6. 相關鏈接

model zoo: https://github.com/open-mmlab/mmdetection/blob/master/docs/MODEL_ZOO.md

github庫地址:https://github.com/open-mmlab/mmdetection

安裝:https://github.com/open-mmlab/mmdetection/blob/master/docs/INSTALL.md

常用命令:https://github.com/open-mmlab/mmdetection/blob/master/docs/GETTING_STARTED.md

目標檢測框架mmdetection入門:https://zhuanlan.zhihu.com/c_1159526395804725248


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM