當前位置:
首頁 > 新聞 > OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

雷鋒網 AI 科技評論按:去年 10 月,香港中文大學-商湯聯合實驗室在 OpenMMLab 的首期計劃中,開放了 MMCV 和 MMDetection(初期版本)。其初衷是為了在計算機視覺的一些重要方向建立統一而開放的代碼庫,並不斷把新的演算法沉澱其中。在過去的半年多時間,這些代碼庫已經產生了重要影響,越來越多的 MMLab 以外的研究團隊開始把 MMDetection 作為實現新的目標檢測演算法的基礎,並不斷將其新演算法回饋到 MMDetection 中。

最近,OpenMMLab 第二期正式發布,由多個大學和機構的研究人員聯合提出了新一代 Open MMLab Detection,這將有效促進目標檢測領域的應用和新方法的研究與發展。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

概述

本文中,我們介紹了一個目標檢測工具箱 MMDetection,它包含了豐富的目標檢測和實例分割方法以及相關的組件和模塊。這個工具箱由 MMDet 團隊主導開發,該團隊曾打破了 2018 年 COCO 挑戰賽的檢測記錄並獲得冠軍。此後,MMDetection 逐漸發展成為一個統一的平台,涵蓋了許多主流檢測方法和現代模塊。它不僅包括訓練和推理代碼,而且還為 200 多個網路模型提供了權重參數。我們相信這個工具箱是迄今為止最完整的檢測工具箱。

本文介紹了該工具箱的各種特點。此外,我們還對不同的方法、組件及其超參數進行了基準研究。我們希望工具箱和基準能夠提供完善、靈活的工具包來複現現有方法並開發自定義的新探測器,從而為日益壯大的研究社區服務。

MMDetection 新功能

目標檢測和實例分割都是基本的計算機視覺任務。檢測流程通常比分類任務更複雜,並且不同的實現環境可能導致截然不同的結果。為了提供高質量的代碼庫和統一的基準測試,我們使用 PyTorch 構建了一個目標檢測和實例分段代碼庫 MMDetection。

MMDetection 有幾個主要的特點:

  • 模塊化設計。我們將目標檢測的網路架構分解為不同的組件,並且可以通過多樣化的模塊組合來輕鬆地構建自定義的目標檢測架構。

  • 支持多樣化的模型架構。該工具箱支持各類主流檢測架構,包括單階段、雙階段和多階段的檢測架構。

  • 計算效率高。所有基礎元件和模塊都進行了 GPU 實現,訓練速度比其他代碼庫(包括 Detectron [ https://github.com/facebookresearch/detectron],maskrcnn-benchmark [https://github.com/facebookresearch/maskrcnn-benchmark] 和 SimpleDet 等)更快。

  • 最先進的檢測性能。工具箱由 2018 年 COCO 目標檢測冠軍 MMDet 團隊主導開發,並且模型性能還在持續不斷地提升。

除了介紹代碼庫和基準測試結果外,我們還報告了訓練目標檢測器的過程和最佳方法。並討論了關於超參數、體系結構、訓練策略的燒蝕實驗。我們希望該研究能夠有助於未來的研究,並促進不同方法之間的比較。

支持架構

MMDetection 包含主流目標檢測和實例分割方法的高質量實現。下圖中提供了與其他代碼庫相比支持的架構和功能的摘要。MMDetection 支持比其他代碼庫更多的方法和功能,特別是相比最新的代碼庫。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 1 MMDetection 工具箱支持的檢測模型數量上遠遠超過了其他現有目標檢測代碼庫

網路架構

一、模型表示

雖然不同探測器的模型架構不同,但它們具有共同的組件,可以粗略地概括為以下類:

  • 主幹網路(Backbone):其作用是從圖像中抽取特徵,將圖像從像素空間轉換到高維的特徵空間,例如 VGG 和 ResNet-50 等都是常用的主幹網路;

  • 銜接部分(Neck):連接主幹網路和頭部的結構。它對主幹網路生成的原初始特徵圖執行一些優化或重新配置,例如特徵金字塔網路(FPN)就是一種典型的 Neck。

  • 密集連接頭(DenseHead):用於在特徵圖所映射的密集位置上進行操作,包括 AnchorHead 和 AnchorFreeHead,代表性操作有 RPN、Retina、FCOS 等。

  • RoI 抽取器:從一個或多個特徵映射中提取 RoIPooling 類運算元特徵。從相應級別的特徵金字塔中提取 RoI 特徵的示例是 SingleRoIExtractor。

  • RoI 連接頭(BBoxHead / MaskHead):將 RoI 特徵作為輸入並計算出對於的任務結果,包括 bbox 的位置、分類或者分割的預測結果。

通過這些通用模塊,我們可以通過簡單地創建一些新組件並組裝現有組件來進行開發與探索。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 2 單階段和兩階段檢測器的架構分解圖

二、訓練流程

我們設計了一個帶鉤子觸發的標準訓練流程。該方法不僅可以用於目標檢測,還可以用於其他計算機視覺任務,例如圖像分類和語義分割。許多任務的訓練過程可通用類似的工作流程,其中訓練和驗證流程可以循環的運行,並且驗證流程可選。在每個周期,我們都會在模型上運行多次前傳和反傳操作。

為了使流程更加靈活和個性化,我們定義了一個最小流程單位,其他行為由鉤子來觸發。為了運行自定義訓練流程,我們希望在某些特定步驟之前或之後執行一些自定義操作。我們定義了一些時間點,用戶可以在其中插入任何可執行方法(鉤子),在運行的各個時期,都能實現在優先順序之後的指定時間點觸發插入的鉤子。MMDetection 中的典型訓練流程如下圖所示,驗證流程未在圖中顯示。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 3 典型訓練流程

基準

一、實驗設置

  • 數據集。MMDetection 支持 VOC 類型和 COCO 類型的數據集。我們採用 MS COCO 2017 作為所有實驗的主要基準,因為它更具挑戰性,並且使用更廣泛。

  • 其它參數。(1) 在不改變寬高比的情況下,將圖像調整為最大尺寸 1333×800。(2) 我們使用 8 個 V100 GPU 進行訓練,總批量為 16(每個 GPU 2 個圖像)和單個 V100 GPU 進行推理。(3) 訓練計劃與 Detectron 相同。「1x」和「2x」分別表示 12 個時期和 24 個時期,級聯模型採用「20e」,表示 20 個時期。

  • 評估指標。我們採用 COCO 數據集的標準評估指標,其中應用了 0.5 到 0.95 的多個 IoU 閾值。區域生成網路(RPN)的結果用召回率(AR)測量,檢測結果用 mAP 評估。

二、基準結果

1、主要結果

我們對 COCO 2017 val 的不同方法進行了基準測試,包括 SSD,RetinaNet,Faster RCNN,Mask RCNN,Cascade R-CNN,Hybrid Task Cascade 和 FCOS 。我們使用四種廣泛使用的主幹網路來評估這些結果,包括 ResNet-50,ResNet-101,ResNet-101-32x4d 和 ResNeXt101-64x4d。

在圖中我們展現了這些方法的推理速度和他們的邊界框(bbox)與實例分割(mask)AP 值之間的關係。推理時間由單個 Tesla V100 GPU 測試得出。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 4 不同方法的基準測試結果

2、與其他代碼庫的比較

除了 MMDetection 之外,還有其他流行的代碼庫,如 Detectron,maskrcnn-benchmark 和 SimpleDet。它們分別建立在 caffe21,PyTorch 和 MXNet 的深層學習架構之上。我們從性能、速度和內存三個方面來對 MMDetection 和 Detectron(@ a6a835f),maskrcnnbenchmark(@ c8eff2c)和 SimpleDet(@ cf4fce4)進行比較。

Mask R-CNN 和 RetinaNet 分別代表兩級探測儀和單級探測器。由於這些代碼庫也在開發中,因此在其模型倉庫中報告的結果可能已過時,並且這些結果是在不同的硬體上所進行的測試。為了公平比較,我們提取最新的代碼並在相同的環境中進行測試,結果顯示在下圖中。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 5 不同代碼庫在性能、速度和內存的比較

不同架構所得內存以不同方式進行測量。MMDetection 顯示所有 GPU 的最大內存,maskrcnn-benchmark 顯示 GPU 0 的內存,Detectron 使用 caffe2 API 測量 GPU,SimpleDet 測量 NVIDIA 提供的命令顯示的內存。通常,MMDetection 和 maskrcnn-benchmark 的實際內存使用率相似且低於其他內存。

3、不同 GPU 的推理速度

不同的研究人員可能會使用各種 GPU,這裡我們展示了常見 GPU 的速度基準,例如 TITAN X,TITAN Xp,TITAN V,GTX 1080 Ti,RTX 2080 Ti 和 V100。我們對每種類型的 GPU 進行了三種模型的評估,並將最終的推理速度展示在下圖中。需要注意的是,這些伺服器的其他硬體並不完全相同,例如 CPU 和硬碟,但結果可以為速度基準提供基礎的參考。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 6 不同 GPU 的推理速度基準

4、混合精度訓練

MMDetection 支持混合精度訓練,以減少 GPU 內存並加快訓練速度,同時性能幾乎保持不變;支持以 apex2 為基礎的混合精度訓練;SimpleDet 也有不同的實現方式;Detectron 目前還不支持混合精度訓練。我們在同一個 V100 節點上測試了三個代碼庫,並在下圖中展示了 MMDetection 與 maskrcnn-benchmark、SimpleDet 的比較結果。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 7 混合精度訓練測試結果

此外,我們研究了更多模型,以確定混合精度訓練的有效性。如下圖所示,我們可以了解到更大的批量大小可以節省更多內存。當批量增加到 12 時,FP16 訓練的內存減少到 FP32 訓練的近一半;並且混合精度訓練在應用於 RetinaNet 等更簡單的框架時內存效率更高。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 8 不同模型在 MMDetection 上的混合精度訓練結果

5、多節點可擴展性

由於 MMDetection 支持多個節點上的分散式訓練,因此我們分別在 GPU 不同的節點上測試其可擴展性。我們採用 Mask R-CNN 作為基準測試方法,並在另一個 V100 節點上進行實驗。接著我們採用不同的節點數量時,基本學習率被調整為線性,實驗結果展示在下圖中。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 9 Mask R-CNN 在多個節點上的訓練速度

回歸損失函數

通常我們採用多任務損失函數來訓練目標檢測器,該目標檢測器由分類和回歸的特徵表示。最廣泛採用的回歸損失函數是 Smooth L1 Loss;但最近也出現了更多的回歸損失函數,例如,Bounded IoU Loss,IoU Loss,GIoU Loss,Balanced L1 Loss。L1 Loss 也是衍生的一種損失函數。然而這些損失函數通常以不同的方法和設置實現。

在這裡,我們評估同一環境下的所有損失。值得注意的是,最終的測試性能會隨著回歸損失函數的不同損失權重而變化,因此我們執行粗網格搜索以找出每個損失的最佳損失權重。下圖結果表明,通過簡單地增加 Smooth L1 Loss 的損失權重,最終性能可以提高 0.5%。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 10 不同損失權重下不同回歸損失的比較

在沒有調整損失重量的情況下,L1 Loss 函數比 Smooth L1 Loss 函數性能高 0.6%,而增加損失權重不會帶來進一步的增益。L1 Loss 比 Smooth L1 Loss 具有更大的損耗值,尤其是對於相對準確的邊界框,差距更明顯。根據分析結果,提高定位精度較好的邊界框梯度將有利於定位。L1 Loss 的損失值已經非常大,所以增加損失權重不會帶來增益。

對於端到端速度更快的 R-CNN,Balanced L1 Loss 函數的 mAP 值比 L1 Loss 高 0.3%,這與採用預先計算方法的實驗結果略有不同。然而,我們發現 Balanced L1 Loss 可以在 IoU balanced 採樣或平衡 FPN 的基線上的帶來更高的增益。除了 Bounded IoU Loss 函數外,基於 IoU 的損失表現略好於具有最佳損耗權重的基於 L1 的損失。GIoU Loss 比 IoU Loss 高 0.1%,Bounded IoU Loss 與 Smooth L1 Loss 具有相似的性能,但前者需要更大的損失權重值。

歸一化

由於 GPU 內存有限,訓練檢測器時用到的數據量通常很小(1 或 2),因此 BN 層通常置為典型設定。配置 BN 層有兩個選項:是否更新統計數據 E(x)和 Var(x),以及是否優化仿射權重 γ 和 β。按照 PyTorch 的參數名稱,我們將這兩個選項分別表示為 eval 和 requires-grad。eval = True 表示不更新統計數據;requires-grad = True 意味著 γ 和 β 在訓練期間被優化。除了凍結 BN 層外,還有其他標準化層也可以解決小批量的問題,例如 Synchronized BN(SyncBN)[25] 和 Group Normalization(GN)。

圖 11 不同 BN 設置和 LR 時間表的結果

在這裡我們研究兩個問題:不同的歸一化層如何相互比較?在哪裡為檢測器添加標準化層?

為了回答這兩個問題,我們用 ResNet-50-FPN 進行 Mask R-CNN 的三次實驗,並分別用 FrozenBN,SyncBN 和 GN 代替主幹中的 BN 層,下圖中的結果顯示出:

(1)如果我們只用相應標準化層替換主幹中的 BN 層,FrozenBN,SyncBN 和 GN 也能夠實現類似的性能。

(2)將 SyncBN 或 GN 添加到 FPN 和 bbox / mask head 不會帶來進一步的好處。

(3)用 4conv1fc 替換 2fc bbox head 以及向 FPN 和 bbox / mask head 添加歸一化層可將性能提高約 1.5%。

(4)具有更多卷積層的 bbox head 將展現出更高的性能。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 12 採用不同歸一化層添加在不同組件上的對比

訓練數據規模

作為典型的慣例,訓練圖像被調整大小到預定義的比例而不改變縱橫比。以前的研究通常更喜歡 1000×600 的規模,現在通常採用 1333×800。

在 MMDetection 中,我們採用 1333×800 作為默認訓練數據規模。結果如下圖所示,其中 1333×[640:800:32] 表示較長的邊緣固定為 1333,較短的邊緣是從 {640,672,704,736,768 的池中隨機選擇的,800},對應「值」模式。設置 1333×[640:800] 表示在 640 和 800 之間隨機選擇較短邊緣,這對應於「範圍」模式。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 13 不同訓練數據規模的比較

從結果中我們可以了解到,「範圍」模式與具有相同最小和最大尺度的「值」模式執行類似或稍微好一些。通常更寬的範圍帶來更多改進,特別是對於更大的最大尺度。具體地,就 bbox 和 mask 的 AP 值而言,[640:960] 比 [640:800] 高 0.4%且高 0.5%。但是,較小的最小比例(如 480)將無法獲得更好的性能。

其它超參數

MMDetection 主要遵循 Detectron 中的超參數設置,以及根據我們所需要進行設定。根據經驗,我們發現 Detectron 的一些超參數不是最優的,特別是對於 RPN。在下圖中,我們列出了可以進一步提高 RPN 性能的那些超參數。雖然調整可能有利於性能,但在 MMDetection 中我們默認採用與 Detectron 相同的設置,並將此研究留作參考。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 14 RPNResNet-50 超參數的研究結果

詳細結果

我們提供了下圖中某些方法的詳細基準測試結果。

R-50 和 R-50(c)分別表示 pytorch 類型和 caffe 類型的 ResNet-50 主幹網路。在瓶頸殘差模塊中,pytorch 類型的 ResNet 採用了 1x1 步幅,1 卷積層;然後是採用了 3x3 步幅,2 卷積層;而 caffe 類型的 ResNet 採用 1x1 步幅,2 卷積層;然後是 3x3 步幅,1 卷積層。

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

OpenMMLab 第二版發布:吸引業界「目光」的史上最完整的目標檢測工具箱

圖 15 COCO val2017 的不同檢測方法的結果(APb和 APm分別表示 box 和 mask 的 mAP 值)

更多詳細設置和組件方面的信息,請參閱 https://github.com/open-mmlab/mmdetection/blob/master/MODEL_ZOO.md。


原文鏈接

https://arxiv.org/abs/1906.07155

GitHub 地址

https://github.com/open-mmlab/mmdetection

雷鋒網 AI 科技評論 雷鋒網

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

Uber展示空中計程車;格力記者會還原舉報全過程;手機殼暴露新iPhone外形
防火防盜防 AI 系列:你的心事,將被你的行走步態暴露!

TAG:雷鋒網 |