作者丨派派星
來源丨CVHub
編輯丨極市平台
導讀
目标檢測是指在圖像或視訊中分類和定位物體的任務。由于其廣泛的應用,最近幾年目标檢測受到了越來越多的關注。本文概述了基于深度學習的目标檢測器的最新發展。同時,還提供了目标檢測任務的基準資料集和評估名額的簡要概述,以及在識别任務中使用的一些高性能基礎架構,其還涵蓋了目前在邊緣裝置上使用的輕量級模型。在文章的最後,我們通過以圖表的形式直覺地在多個經典名額上比較了這些架構的性能。
背景
Structure of the paper
目标檢測對于人類來說是一項很簡單的任務,但是對于計算機來說卻是一項艱巨的任務。目标檢測涉及在視野範圍内識别和定位所有物體(如汽車、人、街道标志等)的執行個體。此外,分類、分割、運動估計、場景了解等任務也是計算機視覺中的基本問題。早期的目标檢測模型是由手工提取的特征提取器建構的,例如 Viola-Jones 檢測器和方向梯度直方圖(HOG)等。這些模型運作速度慢且檢測不準确,在未熟悉的資料集上表現不佳。卷積神經網絡(CNN)和深度學習在圖像分類任務中的再次出現改變了視覺感覺的景觀。AlexNet 在 2012 年 ImageNet 大規模視覺識别挑戰賽(ILSVRC)中以絕對優勢獲得了冠軍,這極大地啟發科研人員/從業者對基于深度學習的計算機視覺算法進行深入研究。今天,目标檢測在自動駕駛汽車、身份檢測、安防和醫療領域都有大量的應用。近年來,随着新工具和技術的快速發展,目标檢測算法的性能取得了指數級增長。如上圖所示,本文内容的組織結構如下:
- 全文内容的概述及背景介紹
- 目标檢測任務的問題陳述及關鍵挑戰
- 學術界常用的基準資料集和評估名額
- 現代目标檢測算法的幾種裡程碑式的基礎架構
- 單/雙階段目标檢測算法的發展史
- 輕量級網絡架構的發展史
- 各種網絡架構的性能對比
- 目标檢測算法領域的未來趨勢
- 全文總結
問題陳述
目标檢測是目标分類的自然延伸,其目的僅在于識别圖像中的目标。目标檢測的目标是檢測預定義類别的所有執行個體,并通過軸對齊的框提供目标在圖像中的粗略定位。檢測算法應該能夠識别目标類别的所有執行個體,并在其周圍畫出邊界框。它通常被視為有監督學習問題。現代的目标檢測模型可以通過大量的帶标記圖像進行訓練,并在多個經典的基準資料集上上進行性能評估。
關鍵挑戰
計算機視覺在過去十年取得了巨大進步,但仍有一些關鍵挑戰需要克服。算法在實際應用中面臨的一些關鍵挑戰包括:
- 類内變化: 同一目标執行個體之間的類内變化在自然界中很常見。這種變化可能由多種原因引起,如遮擋、照明、姿勢、視角等。這些不受限制的外部因素可能會對目标外觀産生巨大影響。 某些目标可能具有非剛性變形或旋轉、縮放或模糊等特性,這都使得特征提取變得異常困難。
- 類别數量: 同時檢測大量的目标是一個非常具有挑戰性的問題。它需要大量的高品質注釋資料,這極大的增加了标注成本。 使用少樣本訓練政策來訓練檢測算法目前十分熱門的研究領域。
- 效率: 當今的模型需要大量的計算資源來生成準确的檢測結果。随着移動和邊緣裝置變得普遍,高效的目标檢測器對計算機視覺領域的進一步發展至關重要。
資料集和評估名額
資料集
Sample images from different datasets.
Comparison of various object detection datasets.
我們将在下文介紹一些常用的目标檢測資料集。這些資料集可能包括圖像資料集、視訊資料集或者其他類型的資料集。我們會對這些資料集進行概述,包括資料集的大小、資料類型、标注資訊等。
PASCAL VOC
Number of images for different classes annotated in the PascalVOC dataset
Pascal Visual Object Classes(VOC)是目标檢測領域常用的資料集。它于2005年開始,在四種目标類别上進行分類和檢測任務,但兩個版本的挑戰通常被用作基準。VOC07資料集有5k張訓練圖檔和超過12k張标注圖檔,而VOC12資料集将其增加到11k張訓練圖像和超過27k張标注圖檔。目标類别被擴充到20類,并且像分割和動作檢測這樣的任務也被包括在内。Pascal VOC引入了平均精度(mAP)并以IoU@50(交集除以并集)的标準來評估模型的性能。上圖描繪了在Pascal VOC資料集中各類圖像的數量分布。
ILSVRC
Number of images for different classes annotated in the ImageNet dataset
ImageNet Large Scale Visual Recognition Challenge(ILSVRC)是一項從2010年到2017年每年舉辦的挑戰賽,并成為了評估算法性能的基準資料集。資料集大小超過100萬張圖像,其中包括1000個目标類别。其中200個類别被手選用于目标檢測任務,包括超過500k張圖像。包括ImageNet和Flikr在内的各種來源被用于建構檢測資料集。此外,ILSVRC還通過放寬IoU門檻值來更新評估名額,以用于評估小目标檢測性能。上圖描繪了在ImageNet資料集中各類圖像的數量分布。
MS-COCO
Number of images for different classes annotated in the MS-COCO dataset
Microsoft Common Objects in Context(MS-COCO)是目前可用的最具挑戰性的資料集之一。它包含91種真實世界中常見的普通目标。它有超過200萬個執行個體,平均每張圖像有3.5類别。此外,每張圖像平均包含7.7個執行個體,比其他流行資料集都要多。MS-COCO包含來自不同視角的圖像。它還引入了一種更嚴格的方法來測量檢測算法的性能。與Pascal VOC和ILSVCR不同,它門檻值範圍從0.5到0.95并以0.05為步長計算IoU,然後使用這10個值的組合作為最終度量标準,其稱為平均精度(mAP)。除此之外,它還分别使用小、中、大目标的AP來比較不同尺度下的性能。上圖描繪了在MS-COCO資料集中各類圖像的數量分布。
Open Image
Number of images for different classes annotated in the Open Images dataset
谷歌的Open Images資料集由9.2 m張圖像組成,其中包括圖像級标簽、目标邊界框和分割掩模等标注。它于2017年推出,并已經曆了六次更新。對于目标檢測,Open Images有16 m個邊界框,針對1.9 m張圖像的600個類别,這使它成為最大的目标定位資料集。它的建立者特别注意選擇有趣、複雜和多樣的圖像,每張圖像平均有8.3個目标類别。在Pascal VOC中引入的AP做了幾點改變,比如忽略未标注的類别、類别及其子類别的檢測要求等。上圖描繪了在Open Images資料集中各類圖像的數量分布。常用的目标檢測資料集(如Pascal VOC、MS-COCO和Open Images)存在資料不平衡問題,即某些類别的圖像數量遠遠大于其他類别。這種資料不平衡會導緻訓練出的目标檢測模型在某些類别上表現較好,而在其他類别上表現較差。雖然ImageNet資料集也存在這一問題,但是程度要小得多。此外,ImageNet資料集中出現頻率最高的類别是“考拉”,而在真實世界目标檢測場景中(如人、車、交通标志等)最關注的類别并不在前幾位。是以,在使用這些資料集訓練目标檢測模型時,需要注意這種資料不平衡帶來的影響。
評估名額
目标檢測任務常用多個标準來衡量檢測算法的性能,如每秒幀數(FPS)、精度和召回率。但是,平均精度(mAP)是最常見的評估名額。精度是由交叉率(IoU)推導出來的,它是GT和預測邊界框之間的重疊區域與聯合區域的比率。此外,可以通過設定門檻值來确定檢測是否正确,如果IoU大于門檻值,則将其分類為真陽性(True Positive),而IoU低于門檻值時分類為假陽性(False Positive)。如果模型未能檢測到GT中存在的目标,則稱其為假陰性(False Negative)。
根據上述方程,将每個類别的平均精度分别計算出來。為了比較檢測器之間的性能,使用所有類别的平均精度的平均值,稱為 mAP,作為最終評估的單一名額。
主幹網絡結構
主幹網絡結構是目标檢測算法最重要的組成部分之一。這些網絡從輸入圖像中提取模型使用的特征。下面,我們讨論了一些在現代檢測算法中常用的裡程碑式的主幹網絡結構。
AlexNet
Krizhevsky等人于2012年提出了AlexNet,這是一種基于卷積神經網絡的圖像分類網絡結構,并赢得了2012年的ImageNet大規模視覺識别挑戰賽冠軍。它的準确度顯著高于(%26)當時其他選手的模型。AlexNet由八個可學習層組成,包括五個卷積層和三個全連接配接層。全連接配接層的最後一層連接配接到N路(N:類别數)softmax分類器。它在整個網絡中使用多個卷積核從圖像中擷取特征。它還分别使用dropout和ReLU進行正則化和更快的訓練收斂。AlexNet再次介紹了卷積神經網絡,并很快成為處理圖象資料的首選技術。
VGG
AlexNet 及其後繼模型均隻關注淺層CNN網絡,并未對更深層的CNN網絡進行研究。Simonyan和Zisserman通過調查網絡深度對準确度的影響,提出了經典網絡架構-VGG,這是一種使用小卷積濾波器建構的不同深度的網絡。雖然較大的感受野可以通過一組較小的卷積濾波器捕獲,但這大大減少了網絡參數并且收斂速度更快。VGG向我們展示了如何使用深層網絡架構(16-19層)進行圖象分類,并具有更高的準确度。VGG是通過添加多個卷積層堆疊後再加上三個全連接配接層來建構的,網絡最後跟着一個softmax層。根據VGG作者的說法,卷積層的數量可以從8到16不等。VGG在多次疊代中進行訓練;首先,使用随機初始化訓練最小的11層網絡結構,然後使用這些權值訓練更大更深的網絡以防止梯度不穩定。VGG在單個網絡性能類别中優于ILSVRC 2014獲勝者GoogLeNet。它很快成為用于目标分類和檢測模型中最常用主幹網絡之一。
GoogLeNet/Inception
盡管分類模型在實作更快,更準确的方向上取得了很大的進展,但由于計算資源仍不足以承受模型巨大的參數量,将它們部署到現實世界的應用中仍然很遙遠。随着網絡規模的增大,計算成本呈指數級增長。Szegedy等人提出網絡中計算浪費是造成這種情況的主要原因。這是因為更大的模型也具有大量參數,大模型往往會導緻資料過拟合。是以,他們提出使用局部稀疏連接配接的架構代替完全連接配接的架構來解決這些問題。GoogLeNet是以是一個22層深的網絡,由多個Inception子產品堆疊構成。Inception子產品是一種具有多種尺寸濾波器的網絡,輸入特征圖通過通過多個濾波器編碼後再融合成一個特征圖轉發到下一層。該網絡還在中間層使用輔助分類器,以助于網絡梯度的有效傳播。它在ImageNet資料集上實作了93.3%的top-5精度,而且比其他的分類模型更快。在接下來的幾年中,Inception的更新版本也陸續釋出,性能也得到了很大的提升,并為稀疏連接配接架構的有效性提供了進一步的證明。
ResNets
在卷積神經網絡變得越來越深的情況下,Kaiming He等人通過大量的實驗證明了它們的準确度是如何先被飽和,然後迅速降低。他們提出将殘差連接配接應用于卷積堆疊層,以緩解網絡性能下降的問題。殘差連接配接可以通過在鄰接層之間添加skip connection來實作。這種連接配接是塊的輸入和輸出之間的元素加法,并不會為網絡增加額外的參數或計算複雜度。典型的34層ResNet 實際上是由一個大(7x7)卷積過濾器、16個瓶頸子產品(兩個小3x3濾波器和身份快捷方式),以及一個全連接配接層組成。瓶頸架構可以通過堆疊3個卷積層(1x1,3x3,1x3)來調整網絡深度。Kaiming He等人還證明了16層VGG網絡與其深度較小的101層和152層ResNet架構相比具有更高的複雜度,更低的精度。在後續的論文中,作者還提出了使用批量歸一化和ReLU層的Resnetv2,這是一種更通用且易于訓練的網絡架構。ResNets在分類和檢測的基礎架構中廣泛使用,它的核心思想:“殘差連接配接”啟發了許多後續網絡架構的設計。
ResNeXt
ResNeXt是 ILSVRC 2016 挑戰賽的亞軍。它的建構靈感來自于 VGG/ResNet 中堆疊相似塊的建構方式和 Inception 子產品的“分裂-變換-合并”政策。它的核心思想是用類似 Inception 的 ResNeXt 子產品替換 ResNet 中的每個block,進而使得網絡更容易縮放和泛化。ResNeXt 還提到了“基數(cardinality)(ResNeXt 塊中的拓撲路徑)”可以作為深度和寬度的第三維來提高模型準确度。與同等深度的 ResNet 架構相比,ResNeXt 在具有更少的超參數的情況下取得了更高的準确度。
CSPNet
雖然目前的神經網絡在計算機視覺任務中表現出令人滿意結果,但它們需要依賴大量的計算資源。Wang等人相信通過裁剪網絡中重複的梯度資訊可以減少大量的推理複雜度。他們設計的CSPNet旨在通過減少網絡中重複梯度資訊來降低推理計算的複雜度。它通過将基礎層的特征圖分成兩部分來實作這一目的。其中一部分通過部分卷積網絡塊(例如DenseNet中的Dense和Transition塊或ResNeXt中的Res(X)塊)進行處理,另一部分在稍後的階段與其輸出合并。這樣可以減少參數量,提高計算單元的使用率,并簡化記憶體占用。CSPNet易于實作,并且足以适用于ResNet、ResNeXt、DenseNet、Scaled-YOLOv4等網絡架構。在這些網絡上應用CSPNet可以将計算量減少10%到20%,同時保持或提高精度。CSPNet還大大減少了記憶體成本和計算瓶頸,并被廣泛用于許多先進檢測模型,同時也被應用在移動或邊端裝置。
EfficientNet
Tan等人系統地研究了網絡縮放對模型性能的影響。他們總結了網絡參數的改變(如深度、寬度和分辨率)對其精度的影響。單獨縮放任何參數都會有相關的代價。增加網絡的深度可以幫助捕獲更豐富和複雜的特征,但是梯度消失問題會使得網絡難以訓練。類似地,擴充網絡寬度可以幫助捕獲細粒度的特征,但是很難獲得進階語義特征。增加圖像分辨率的增益(如深度和寬度)會随着模型的擴充而飽和。在該篇論文中,Tan 等人提出了一個複合系數,可以均勻縮放這三個次元。每個模型參數都有一個相關的常數,通過将系數固定為1,并在基礎網絡上執行網格搜尋來找合适的相關系數。基礎網絡結構是受到以前的文章啟發建構的,主要思想是在搜尋目标上進行神經網絡架構搜尋,同時優化精度和計算量。EfficientNet是一種簡單高效的網絡架構。它在精度和速度方面均優于現有模型,同時具備較小參數量。通過在效率方面提供裡程碑式的提高,EfficientNet開啟了高效網絡領域的新時代。
目标檢測算法
下面我們主要介紹的是目标檢測算法,其中包含了傳統目标檢測算法以及基于深度學習的單/雙階段目标檢測算法。具有生成區域建議子產品的網絡稱為雙階段目标檢測算法。這些算法在第一階段嘗試在圖像中找到任意數量的目标候選區域,然後在第二階段再對它們進行分類和定位。由于這些算法需要分兩個步驟進行處理,它們具有複雜的架構、需要更長的推理時間并且缺乏全局背景資訊。單階段檢測算法使用密集采樣政策在單次推理中圖象中目标分類和定位。通常,單階段檢測算法會使用各種尺度和寬高比的預定義框/關鍵點充當先驗資訊來輔助檢測,并且在實時性能和簡單設計方面優于雙階段檢測算法。
傳統方法
Viola-Jones
一種在2001年提出用于人臉檢測的目标檢測算法。Viola-Jones 結合了多種技術,如Haar-like特征,積分圖像,Adaboost和級聯分類器。第一步是在輸入圖像上滑動視窗搜尋Haar-like特征,并使用積分圖像來計算編碼。然後,它使用訓練過的Adaboost來找到每個haar特征的分類器并進行級聯。得益于高效且快速的特性,Viola Jones算法仍然在小型裝置中使用。
HOG
這是由Dalal和Triggs在2005年提出一種用于提取物體檢測特征的方法。HOG提取邊緣的梯度及其方向來建立特征表。首先将圖像劃分為等比例網格區域,然後使用特征表為每個網格中的單元格建立直方圖,最後為感興趣的區域生成HOG特征,并将其輸入線性SVM分類器進行檢測。該檢測算法是為行人檢測而提出的,同時也可以用于訓練和檢測各種類别。
DPM
這是由Felzenszwalb等人在2009年提出的可變形部件模型。它使用目标的單個“部分”進行檢測,并且比HOG獲得了更高的準确度。它遵循分而治之的理念,在推理時單獨檢測目标的組成部分,并将它們标記為感興趣區域。例如,人的身體可以被視為頭、手臂、腿和軀幹等部分的集合。首先,模型會捕獲整個圖像中的一部分區域,并且循環該過程直至所有圖象部分區域都被捕獲。然後,模型會根據各個部分區域的相關性删除不相關區域,以生成最終的檢測結果。DPM是深度學習時代之前最成功的算法之一。
二階段檢測器
R-CNN
RCNN
一種基于卷積神經網絡(CNN)改進的目标檢測算法。它使用與類别無關的候選區域生成算法與CNN将檢測轉換為分類和定位問題。首先,将減去平均值的輸入圖像傳遞給候選區域生成算法,該子產品産生2000個目标候選區域。該算法使用選擇性搜尋找到可能存在目标的區域。然後将這些候選區域統一采樣并傳遞到CNN網絡,該網絡為每個候選區域生成4096維特征向量。Girshick等人使用AlexNet作為檢測算法的主幹網絡,然後将特征向量傳遞給訓練過的支援向量機(SVMs)以獲得置信度分數。最後,根據IoU和類别的計算結果,對得分區域應用非最大抑制(NMS)得到最終的目标預測框。一旦确定了類别,算法就使用經過訓練的邊界框回歸器來預測其邊界框,該邊界框回歸器預測四個參數,即框的中心坐标以及其寬度和高度。
R-CNN 有一個複雜的多階段訓練過程。第一階段是使用大型分類資料集進行預訓練。第二階段是使用經過特定預處理的圖像輸入至網絡,通過随機初始化的 N+1 分類器(N 是類别數)替換分類層來進行檢測微調,其中優化器使用的是随機梯度下降(SGD)。最終,R-CNN為每個類别訓練一個單行 SVM 和邊界框回歸器。
R-CNN 引領了目标檢測領域的新浪潮,但其缺點也十分明顯:(1)推理速度十分慢(每張圖檔的推理時間約 47 秒);(2)它的訓練過程很複雜,即使在計算共享優化的情況下,在小資料集上訓練仍需幾天的時間。
SPP-Net
SPP-Net
He 等人提出了使用空間金字塔池化(SPP)層來處理任意大小或寬高比的圖像。SPP-net 僅在候選區域生成算法之前的卷積層後添加了一個池化層,進而使網絡能不再受限于固定尺寸的輸入圖象,并這一操作能減少大量的計算量。選擇性搜尋算法用于生成候選視窗。首先通過 ZF-5 網絡的卷積層将輸入圖像映射到特征圖,然後将候選視窗映射到特征圖上,再将其通過金字塔池化層的空間 bins 轉換為固定長度的表示,最後該向量通過全連接配接層并最終傳遞給 SVM 分類器以預測類别和分數。與 R-CNN 類似,SPP-net 也使用特定的後處理層來優化目标的定位結果,同時它也使用相同的多階段訓練過程,但僅需要在全連接配接層上進行微調。
SPP-net 的優勢在于它可以處理任意大小和寬高比的輸入圖像,這得益于它使用了 SPP 層來将輸入圖像映射到固定長度的表示。這與 R-CNN 的固定輸入大小形成了鮮明對比。另外,SPP-net 使用選擇性搜尋算法生成候選視窗,這比 R-CNN 生成的視窗更少,是以 SPP-net 的計算量更少。然而,SPP-net 仍然存在一些問題,如需要較長的訓練時間和較大的記憶體使用量。
Fast R-CNN
Fast R-CNN
R-CNN/SPP-Net 的一個主要問題是需要單獨訓練多個網絡元件/子產品。Fast R-CNN 通過建立單個端到端可訓練系統解決了這個問題。 首先,該網絡将圖像和候選區域作為輸入,圖像通過一組卷積層,并将目标候選區域映射到所獲得的特征圖上。然後,使用 RoI 池化層取代 SPP-net 中的金字塔池化層進行特征編碼,接着通過 2 個全連接配接層進行全局特征融合,最後輸入至 N+1 類 SoftMax 層和邊界框回歸層得到最終的預測結果,其中邊界框回歸層有一個全連接配接層。該模型還将邊界框回歸器的損失函數從 L2 改為了平滑 L1以提高性能,同時引入了多任務損失來訓練網絡。
Fast R-CNN 的優勢在于它是一個端到端可訓練系統,是以可以避免 R-CNN/SPP-Net 中訓練多個網絡組合/子產品問題。 它使用了 RoI 池化層,進而使網絡能夠處理任意大小的輸入圖像,同時使用了平滑 L1 損失來提高邊界框回歸的性能。然而,Fast R-CNN 仍然具有較長的訓練時間和較大的記憶體使用量。
Faster R-CNN
Faster R-CNN
雖然 Fast R-CNN 更能滿足實時的需求,但其候選區域生成的速度仍然十分緩慢。Ren 等人提出使用全卷積網絡作為候選區域建議網絡(RPN),該網絡接受任意輸入圖像并輸出一組候選視窗。每個這樣的視窗都具有關聯的目标置信度,該分數決定了目标的可能性。與之前使用圖像金字塔解決目标尺寸變化的方法不同,RPN 引入了錨框機制,其使用了多個不同長寬比的邊界框作為先驗值對目标的位置進行回歸。 首先将輸入圖像通過 CNN 傳遞,以獲得一組特征圖。這些特征圖被轉發到 RPN,該 RPN 生成邊界框及其類别。然後将候選區域映射回前一個 CNN 層獲得的特征圖上的 RoI 池化層。最終輸入全連接配接層,并輸入到分類器和邊界框回歸器。
Faster R-CNN 比先前最先進的檢測算法提高了 3% 的精度,并将推理時間減少了一個數量級。它解決了候選區域提取緩慢的瓶頸,并以每秒 5 幀接近實時的速度運作。在候選區域建議子產品中使用 CNN 的另一個優點是,它可以學習生成更好的候選區域,進而提高準确度。
FPN
FPN
使用圖像金字塔提取多尺度圖象資訊是增強小物體檢測的常用方法。雖然這種方法會增加檢測算法的平均精度,但同時推理時間也是極大地增加。Lin 等人提出了特征金字塔網絡 (FPN),它具有自上而下與橫向連接配接的架構,這可以在不同尺度上建立進階語義特征。 具體地,FPN 具有兩條通路,一條自下而上的通路是在對多個尺度特征圖編碼的 ConvNet,另一條自上而下的通路将來自更進階的粗糙特征映射升采樣為高分辨率特征。這兩條通路由橫向連接配接相連,通過 1x1 卷積操作來增強特征中的語義資訊。如上圖所示,FPN 被用作于将主幹網絡的多尺度特征融合互動後再輸入至RPN。
FPN 可以為所有尺度特征圖提供進階語義,這可以有效降低檢測中的誤檢率。它成為了未來檢測模型的标準子產品,同時也引起了很多基于FPN改進的子產品的出現,如 PANet、NAS-FPN 和 EfficientNet。
R-FCN
R-FCN
在 R-FCN 中,輸入圖像經過主幹網絡獲得特征圖,然後将特征圖送入分類子網絡和回歸子網絡中。分類子網絡包括一組卷積層,每個卷積層對應一個類别,所有類别共享權值。回歸子網絡的每個卷積層都對應一個位置,用于預測邊界框的四個參數(中心坐标以及寬度和高度)。這種共享卷積層的方式使得 R-FCN 在計算效率方面優于其他兩階段檢測算法,同時也能保留了不錯的精度。具體地,首先輸入圖像先經過 ResNet-101 獲得特征圖,然後将中間輸出(Conv4 層)傳遞給區域建議網絡(RPN)以确定 RoI 候選區域,最終輸出經過卷積層處理後輸入到分類器和回歸器。R-FCN 使用位置敏感得分圖來編碼主體的相對空間資訊,并在後期使用池化層以确定精确的定位。R-FCN 使用了一個分類層和一個回歸層,分别用于生成預測類别和輸出邊界框位置坐标。分類層結合了位置敏感映射和 RoI 建議(RoI,即感興趣區域)來生成預測。分類層和回歸層使用交叉熵和邊界框回歸損失函數進行訓練。R-FCN 的訓練過程和 Faster-RCNN 類似也是包括四個步驟,此外在訓練過程中還使用了線上困難樣本挖掘(OHEM)。線上困難樣本挖掘是一種訓練方法,用于選擇較難預測的樣本進行訓練,可以有效提高模型的泛化能力。
Dai 等人提出了一種新方法來解決卷積神經網絡中的平移不變性問題。R-FCN 将 Faster R-CNN 和 FCN 結合起來,實作了一個快速且更準确的檢測器。盡管 R-FCN 的準确率沒有多大提高,但是它的速度比其對手快了 2.5-20 倍。
Mask R-CNN
Mask R-CNN
Mask R-CNN 是一種擴充了 Faster R-CNN 的雙階段目标檢測算法,它在 Faster R-CNN 的基礎上增加了一個并行分支,其用于像素級目标執行個體分割。該分支是一個在 RoI 上應用的全連接配接層,用于将每個像素分類以完成擴充的分割任務。它使用類似于 Faster R-CNN 的基本架構進行目标區域建議,并增加了一個Mask Head并行于分類 Head 和回歸 Head。Mask R-CNN與 Faster R-CNN最主要差別是前者使用 RoIAlign 層,而不是 RoIPool 層,這可以避免由于空間量化而導緻的像素不對齊問題。作者選擇 ResNeXt-101 作為其主幹網絡,并使用特征金字塔網絡(FPN)來提高準确率。此外,Mask R-CNN 的總體訓練過程類似于 Faster R-CNN。
Mask R-CNN 的性能優于當時所有的雙階段檢測算法,并且在隻需很少的額外計算開銷下增加了執行個體分割功能。它的訓練簡單、靈活,并且在關鍵點檢測、人體姿态估計等應用中很好地推廣。然而,它的實時推理速度(即每秒幀數)仍低于 30 fps。
DetectoRS
Unrolling RFP to an example 2-step sequential implementation
許多當代的雙階段檢測算法均是使用“先檢視再思考”機制,即先計算目标候選區域,再使用它們來提取特征來進行目标的分類與定位。DetectoRS 在網絡的宏觀和微觀層面都應用了這種機制。在宏觀層面,他們提出了遞歸特征金字塔(RFP),由多個特征金字塔網絡(FPN)堆疊而成,并從 FPN 的自上而下層路徑向 FPN 的自下而上層添加了額外的回報連接配接。FPN 的輸出在傳遞到下一個 FPN 層之前由空洞空間金字塔池化層(ASPP) 處理。DetectoRS 使用融合子產品将來自不同子產品的 FPN 輸出結合起來以生成注意力圖。在微觀層面,Qiao 等人提出了可切換擴張卷積(SAC)來調節卷積的擴張率。使用 5x5 濾波器的平均池化層和 1x1 卷積作為切換函數來決定擴張卷積的速率,幫助主幹網絡實時檢測不同尺度的物體。他們還将 SAC 嵌入在兩個全局上下文子產品之間,因為這有助于使切換更穩定。簡單來說,遞歸特征金字塔和可切換擴張卷積的結合形成了 DetectoRS。
DetectoRS 結合了多個元件/子產品來提高檢測算法的性能,并成為了當時雙階段檢測算法的SOTA水準。它的 RFP 和 SAC 子產品具有很好的泛化性,可以用于其他檢測模型。但由于它推理速度隻達到約4FPS,并不适用于實時檢測。
單階段檢測器
YOLOv1
YOLOv1
雙階段檢測算法在第一階段會将目标檢測視為分類問題,區域建議子產品提供了一些候選預取,網絡将其分類為前景或背景。然而,YOLO 将其重新定義為純回歸問題,直接将圖像像素預測為目标的類别及其邊界框坐标。 在 YOLO 中,輸入圖像被劃分為 S x S 網格,負責檢測該物體的網格單元位于目标中心所在的單元格。一個網格單元預測多個邊界框,每個預測數組由 5 個元素組成:邊界框中心的 x 和 y 坐标、寬高 w 和 h,以及置信度得分。
YOLO 的靈感來自于提出小卷積層級聯的圖象分類模型 GoogLeNet。它預先在 ImageNet 資料上訓練,直到模型達到高精度,然後通過添加随機初始化的卷積層和全連接配接層進行微調。YOLO 使用多任務損失(multitask loss)來優化模型,多任務損失即是所有預測分支的組合損失。此外,YOLO也是使用非最大抑制(non maximum suppression,NMS)删除類特定的多次檢測。YOLO 在各種網絡規模和計算資源之間提供了很好的平衡,并且可以在實時應用中使用。然而,它在處理小物體方面表現較差,并且易受到光照變化的影響。這些問題在後續的YOLO系列版本中得到改善。
SSD
SSD
Single Shot MultiBox Detector(SSD)是第一個與 Faster R-CNN 等雙階段檢測算法精度相當的單階段檢測算法,同時實作了實時的推理速度。SSD 基于 VGG-16 建構,并添加了附加結構以提高網絡性能。這些附加卷積層添加到模型末尾,并且輸出特征圖逐漸減小。當圖像分辨率較大時,SSD 可以利用此部分特征來檢測較小的物體,而較深層則負責預設框和寬高比的偏移。
在訓練期間,SSD 會将每個GT 與具有最佳 jaccard 重疊的網絡預測框進行比對,并按照此訓練網絡。此外,它還使用了困難負樣本挖掘和大量資料增強。與 DPM 類似,它使用位置和置信度損失的權重和來訓練模型,最後再通過NMS獲得預測結果。
盡管 SSD 比 YOLO 和 Faster R-CNN 等最先進的網絡都快得多且更準确,但它在檢測小物體方面仍存在困難。後來,通過使用更好的主幹網絡(如 ResNet)和其他的進階技術來解決了這個問題。
YOLOv2 and YOLO9000
YOLOv2
YOLOv2 是 YOLO 的改進版,在速度和精度之間提供了更好的權衡,而 YOLO9000 模型則可以實作實時預測 9000 個目标類别。他們用 DarkNet-19代替 GoogLeNet 成為檢測算法的主幹架構。它結合了許多令人印象深刻的技術:批量歸一化以提高收斂性、分類和檢測系統的聯合訓練以增加檢測類别、删除全連接配接層以增加運作速度以及使用錨框機制以提高召回率并具有更好的先驗知識。Redmon 等人還通過使用 WordNet 将分類和檢測資料集結合在層次結構中。其中WordTree 可用于預測更高的上位詞的條件機率,即使下位詞未被正确分類,進而提高系統的整體性能。YOLOv2 在精度和速度方面都比先前的 YOLO 模型有顯著提高,并且可以達到實時預測的能力。然而,它在檢測小物體方面仍存在困難,并且易受到光照變化的影響。
RetinaNet
RetinaNet
Lin 等人認為單階段檢測算法精度低于雙階段檢測算法的原因是“極端的前/背景類别不平衡” 。他們提出了一種稱為 Focal loss 的重構交叉熵損失來改善這種不平衡問題。Focal loss 可以減少簡單樣本的損失貢獻,同時增加困難樣本的損失貢獻。作者通過簡單的單階段檢測算法 RetinaNet 展示了它的有效性,該檢測算法通過密集采樣輸入圖像的位置、尺度和寬高比來預測目标。如上圖所示,它使用由 FPN 擴充的 ResNet 作為主幹網絡,以及兩個類似的子網作為分類器和邊界框回歸器。在訓練過程中,RetinaNet 使用 Focal loss 減少簡單樣本對損失的貢獻,進而更多地關注困難樣本。這有助于解決類别不平衡問題,并使 RetinaNet 在單階段檢測算法中獲得了領先的性能。RetinaNet 還使用了在 FPN 中提出的概念,即通過使用更小的卷積核在不同的感受野之間獲得更多的分辨率和精度。這有助于 RetinaNet 在檢測小物體方面取得成功。 RetinaNet 的 FPN 的每一層都傳遞給子網,使其能夠在不同尺度下檢測目标。分類子網為每個位置預測目标分數,而邊界框回歸子網則對每個錨的偏移量進行回歸以與真實值比對。兩個子網都是小的 FCN,并在各個網絡之間共享參數。與大多數先前的工作不同,作者采用了無類别邊界框回歸器,并發現它們同樣有效。
RetinaNet 訓練簡單、收斂快,易于實作。它在精度和運作時間方面都比雙階段檢測器取得了更好的性能。此外,RetinaNet 還通過引入新的損失函數,推進了目标檢測算法優化的方式。
YOLOv3
YOLOv3
YOLOv3 對比之前的 YOLO 版本有不少的改進,其中包括将主幹網絡替換為更大的 Darknet-53 網絡。此外,還結合了各種技術,如資料增強、多尺度訓練、批歸一化等。分類層中的 Softmax 被邏輯分類器取代。
盡管 YOLOv3 比 YOLOv2更快,但它沒有從其前任中帶來任何突破性的變化。
CenterNet
CenterNet
Zhou 等人提出的CenterNet采用了一種非常不同的方法,即将目标模組化為點,而不是傳統的邊界框表示。 CenterNet 預測目标為邊界框中心的單個點:輸入圖像通過 FCN 生成熱圖,其峰值對應于檢測到的目标中心。它使用 Hourglass-101作為特征提取網絡,并具有 3 個頭 - 熱圖頭來确定目标中心,次元頭來估計目标大小,偏移頭來糾正目标點的偏移。在訓練時,三個頭的多任務損失都被反向傳播到特征提取器。在推理期間,使用偏移頭的輸出來确定目标點,最後生成預測框。由于預測是點而不是邊界框,是以不需要 NMS 進行後處理。
CenterNet 抛棄了傳統的邊界框表示方式,為目标檢測領域帶來了一種全新的視角。它比之前的單階段檢測算法更準确,推理時間更短。它在多種任務(如 3D 目标檢測、關鍵點估計、姿态、執行個體分割、方向檢測等)中均具有很高的精度。
EfficientDet
EfficientDet
EfficientDet 旨在建構具有更高準确率和運作效率的可擴充檢測算法。它引入了有效的多尺度特征、BiFPN 和模型縮放政策。BiFPN 是雙向特征金字塔網絡,具有可學習的權重,用于在不同尺度的輸入特征之間進行交叉連接配接。它通過删除一個輸入節點并添加一個額外的橫向連接配接來改進 NAS-FPN,進而減少了效率較低的節點,并增強了進階特征融合。與使用更大、更深的主幹網絡或堆疊 FPN 層來擴充的現有檢測算法不同,EfficientDet 引入了一個複合系數,可用于“聯合縮放主幹網絡、BiFPN 網絡、分類器/回歸器和分辨率的所有次元”。EfficientDet使用EfficientNet 作為主幹網絡,并在其中堆疊多組BiFPN層作為特征提取網絡。每個最終BiFPN層的輸出都被發送到類别和邊界框預測網絡。模型使用SGD優化器進行訓練,并使用同步批歸一化和swish激活,這能加快網絡收斂速度并提高網絡精度。
EfficientDet在更小、計算成本更低的情況下,比以前的檢測算法實作了更好的效率和準确性。它易于擴充,在其他任務上推廣良好,達到了當時單階段檢測算法的SOTA水準。
YOLOv4
YOLOv4
YOLOv4是一種快速且易于訓練的目标檢測算法,可以在現有生産系統中工作。它使用了“免費物品袋”,即僅增加訓練時間而不影響推理時間的方法。YOLOv4使用資料增強技術、正則化方法、類标簽平滑、CIoU損失、交叉小批量标準化(CmBN)、自我對抗訓練、餘弦退火排程器和其他技巧來提高訓練。隻影響推理時間的方法,稱為“Bag of Specials”,也被添加到網絡中,包括Mish激活、跨階段部分連接配接(CSP)、SPP塊、PAN路徑聚合塊、多輸入權重剩餘連接配接(MiWRC)等。它還使用遺傳算法搜尋超參數。它具有在ImageNet上預訓練的CSPNetDarknet-53骨幹網絡、SPP和PAN塊頸部以及YOLOv3作為檢測頭。
大部分的檢測算法需要用到多張GPU顯示卡進行訓練,但YOLOv4可以僅用一張GPU顯示卡就能訓練。并且它的推理速度比EfficientDet快兩倍,這表現出強大的競争力。
Swin Transformer
Swin Transformer
Transformer 是一種新型的神經網絡架構,最初用于自然語言處理(NLP)領域,在諸如BERT(雙向編碼器表示 Transformer),GPT(生成預訓練 Transformer),T5(文本到文本 Transformer)等語言模型中取得了巨大成功。Transformer 使用注意力模型來建立序列中元素之間的依賴關系,并且可以關注到比其他順序架構更長的上下文資訊。Transformer 在NLP領域的成功引發了人們對其在計算機視覺領域應用的興趣。盡管CNN一直是視覺領域發展的支柱,但它們有一些固有的缺點,例如缺乏對全局上下文的關注以及固定的訓練權重等。
Swin Transformer是一種基于 Transformer 的計算機視覺任務後端。首先,它将輸入圖像分割成多個不重疊的patch,并将它們轉換為Embedding。然後,在4個編碼階段中對patch應用多個Swin Transformer子產品,每個後繼編碼階段減少patch的數量以保持分層表示。Swin Transformer子產品由基于連續塊中交替移位的局部多頭自注意力(MSA)子產品組成。在局部多頭自注意力中,計算複雜度與圖像大小呈線性關系,而移位視窗允許跨視窗連接配接。作者還通過大量實驗表明,移位視窗僅需很少的開銷便可增加檢測精度。Swin Transformer 在MS COCO資料集上取得了最優的結果,但是與CNN相比擁有更多的參數。
YOLOv5
YOLOv5
YOLOv5 是 one stage 的目标檢測算法,該算法在 YOLOv4 的基礎上添加了一些新的改進思路,使得其速度與精度都得到了極大的性能提升,具體包括:輸入端的 Mosaic 資料增強、自适應錨框計算、自适應圖檔縮放操作、Focus 結構、CSP 結構、SPP 結構、FPN + PAN 結構、CIOU_Loss 等。
在 YOLOv3、YOLOv4 中,訓練不同的資料集時,是使用單獨的腳本進行初始錨框的計算,在 YOLOv5 中,則是将此功能嵌入到整個訓練代碼裡中。是以在每次訓練開始之前,它都會根據不同的資料集來自适應計算 anchor。此外,YOLOv5 提出一種方法能夠自适應的添加最少的黑邊到縮放之後的圖檔中,有效地提升了網絡的推理速度。對于主幹網絡,YOLOv5使用了Focus子產品使得資訊不丢失的情況下提高計算力(在新版中,Focus子產品替換為6 x 6 的卷積層。兩者的計算量是等價的,但是對于一些 GPU 裝置,使用 6 x 6 的卷積會更加高效),不同于 YOLOv4 隻有主幹網絡使用了 CSP結構,YOLOv5 設計了兩種 CSP 結構。其中,CSP1_X 應用于 Backbone,另一種 CSP2_X 則是應用于 Neck 中。在訓練政策部分,YOLOv5 使用了多尺度訓練,具體地,如果網絡的輸入是416 x 416。那麼訓練的時候就會從 0.5 x 416 到 1.5 x 416 中任意取值,但所取的值都是32的整數倍。此外,訓練開始前會使用 warmup 進行訓練,以及 cosine 學習率下降政策和 EMA 更新權重等技巧。在損失函數部分,采用的依舊是由 Classes loss、Objectness loss、Location loss組成。(1)Location loss 采用的是 CIOU loss,這裡隻會計算正樣本的定位損失。(2)Classes loss 和 Objectness loss 采用的是 BCE loss,其中 Classes loss 也隻會計算正樣本的分類損失。(3)Objectness loss 是使用所有樣本進行反向傳播的計算,并且這裡用的是網絡預測的目标邊界框與 GT Box 的CIOU。
YOLOv5 是一種非常快、性能強并且易用使用的目标檢測算法。它提供了多個不同量級的參數模型應對不同的任務場景,目前被研究人員和從業人員廣泛關注與使用。
YOLOX
YOLOX檢測頭
YOLOv5面世不久後,曠世科技發表了研究改進的 YOLOX 算法,其主要貢獻是在 YOLOv3 的基礎上靠着 Decoupled Head、SimOTA 等方式進行優化。
不同Yolov3、Yolov4、Yolov5采用的都是 Anchor Based的方式來提取目标框。YOLOX 将 Anchor free 的方式引入到 YOLO 系列中,使用anchor free方法有如下好處:(1)降低了計算量,不涉及IoU計算,另外産生的預測框數量也更少;(2)緩解了正負樣本不平衡問題;(3)避免了anchor的調參。在資料增強與網絡結構部分,YOLOX 與 YOLOv5 大同小異,主要的差別在檢測頭和正負樣本配置設定。在檢測頭部分,YOLOX 使用了解耦頭(Decoupled Head)結構。具體地,通過将分類和回歸任務進行分開預測,避免這兩種不同類型的任務形成沖突狀态,有效地加快了模型收斂速度以及提升了模型精度。在正負樣本配置設定政策中,YOLOX 使用了SimOTA 算法,其主要思想是為圖像中的所有 gt 找到全局的高置信度配置設定,這極大地改善了在開放場景中常見的多目标耦合問題。
YOLOv6
YOLOv6
YOLOv6 是美團視覺智能部研發的一款目标檢測架構,緻力于工業應用。該架構同時專注于檢測的精度和推理效率,在工業界常用的尺寸模型中,對比同級别參數的 YOLO 模型,YOLOv6 表現出非常具有競争力的性能。在部署方面,YOLOv6 支援 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署,極大地簡化工程部署時的适配工作。
YOLOv6 主要在 Backbone、Neck、Head 以及訓練政策等方面進行了改進。首先是設計了更高效的 Backbone 和 Neck: 受到硬體感覺神經網絡設計思想的啟發,基于 RepVGG style 設計了可重參數化、更高效的骨幹網絡 EfficientRep Backbone 和 Rep-PAN Neck。其次是更簡潔有效的 Efficient Decoupled Head,在維持精度的同時,進一步降低了一般解耦頭帶來的額外延時開銷。最後,在訓練政策上采用了Anchor free 範式,同時輔以 SimOTA标簽配置設定政策以及 SIoU 邊界框回歸損失來進一步提高檢測精度。
YOLOv7
YOLOv7
王建堯博士與AB大神在2022年七月初推出了最新力作 - YOLOv7,該算法在5FPS~160FPS範圍内的速度和準确度都超過了所有已知的目标檢測算法,像是基于 Transformer 的 SWIN-L-Cascade-Mask R-CNN、基于卷積的 ConvNeXt-XL,Cascade-Mask R-CNN、YOLO 系列的 YOLOv4, Scaled-YOLOv4, YOLOR, YOLOv5, YOLOX, PPYOLO、還有 DETR, Deformable DETR, DINO-5scale-R50, ViT-Adapter-B 等。
YOLOv7 減少了當今實時目标檢測 SOTA 算法約40%的參數量和50%的計算量,主要分為兩個方面進行優化:模型架構優化和訓練過程優化,針對模型架構優化,作者提出了有效利用參數和計算量的 extended 和 scaling 方法,而針對訓練過程優化,在YOLOv4 中将“以增加訓練成本為代價提高準确率,但是不會增加推理成本的方法”,成為 bag-of-freebies,在 YOLOv7 中使用重參數化技術替換原始的CNN子產品和使用 動态标簽分類政策,将label 更有效利地配置設定給不同的輸出層。
DAMO-YOLO
DAMO-YOLO
DAMO-YOLO 是阿裡達摩院在2022年11月份提出的一個兼顧速度與精度的目标檢測架構,其效果超越了目前的一衆YOLO系列方法,在實作 SOTA 的同時,保持了很高的推理速度。DAMO-YOLO 是在 YOLO 架構基礎上引入了一系列新技術,對整個檢測架構進行了大幅的修改。具體包括:基于 NAS 搜尋的新檢測 backbone 結構,更深的 neck 結構,精簡的 head 結構,以及引入蒸餾技術實作效果的進一步提升。模型之外,DAMO-YOLO還提供高效的訓練政策以及便捷易用的部署工具,能夠快速解決工業落地中的實際問題。
在網絡的Backbone部分,不同于之前的 YOLO 系列算法的 Backbone 都是通過人工設計的,DAMO-YOLO 利用了其自研的一種啟發式和免訓練的 NAS 搜尋方法,最終搜出來的 Backbone 結構能在同量級的模型複雜度下獲得更優的模型精度和推理速度。在 Ncek 部分,DAMO-YOLO 使用了 RepGFPN 結構,對比傳統的 PAFPN 結構,RepGFPN 能夠充分交換進階語義資訊和低級空間資訊。具體地,将GFPN和重參數化技術結合增加特征提取能力,此外,通過多尺度特征融合發生在前一層和目前層的不同尺度特征中,log_2(n)的跨層連接配接提供了更有效的資訊傳輸,可以擴充到更深的網絡。在 Head 部分,作者提出了 ZeroHead結構,不同于此前檢測算法常用的解耦頭結構(Decouple Head),該結構隻保留了用于分類和回歸任務的一層線性投影層。通過将 RepGFPN 與 ZeroHead 這種大 Neck 和 小 Head 的搭配,進一步提升了 DAMO-YOLO 的性能。接下來是正負樣本配置設定部分,DAMO-YOLO 基于最優傳輸配置設定算法(OTA)提出了 AlignOTA,其是針對在計算目标框和 GT 比對時,分類與回歸不對齊問題進行改進。最後是模型蒸餾,作者主要引入了兩種技術,一個是對齊子產品,用于把teacher和student的特征圖大小進行對齊。另一個是歸一化操作,用于弱化teacher和student之間數值尺度波動所造成影響,其作用可以看成是一種用于KL loss的動态溫度系數。
DAMO-YOLO 是目标在精度和速度這兩個關鍵名額上表現最佳的單階段目标檢測算法,并且已在 github 上開源。
輕量級網絡
在物聯網 (IoT) 部署中,設計小型和高效的網絡是重要的研究分支。這種趨勢也影響到了高性能目标檢測算法的設計。雖然許多目标檢測算法可以實作出色的精度并實時推理,但對于邊緣端/移動端來說,目前大部分的模型仍需要大量的計算資源,是以很難在這些裝置上部署。
在過去,許多不同的方法都取得了令人興奮的結果。利用高效的元件和壓縮技術,如剪枝、量化、散列等,極大地提高了深度學習模型的運作效率。使用訓練過的大型網絡來訓練較小的模型(稱為蒸餾)也取得了有趣的結果。然而,在本節中,我們将探讨一些在邊緣裝置上實作高性能的輕量化神經網絡。
SqueezeNet
SqueezeNet Module
近年來,卷積神經網絡 (CNNs) 領域的最新進展主要集中在提高基準資料集上的準确度,這導緻了模型大小和參數的激增。但在2016年,Iandola等人提出了一種名為SqueezeNet的更小、更智能的網絡,它在保持性能的同時減少了大量的參數。他們通過采用三種主要設計政策來實作這一點,即利用較小的濾波器、将輸入通道數減少到3x3濾波器以及将下采樣層置于編碼子產品後方。前兩種政策減少了參數數量,同時嘗試保留準确性,而第三種政策則提高了網絡的準确性。SqueezeNet的building子產品稱為fire子產品,其由兩層組成:一個擠壓層和一個擴充層,每個層都具有ReLU激活。擠壓層由多個1x1濾波器組成,而擴充層則是1x1和3x3濾波器的混合,進而限制了輸入通道數。SqueezeNet架構由8個fire子產品的堆棧構成,這些子產品被壓縮在卷積層之間。受ResNet啟發,還提出了帶有殘差連接配接的SqueezeNet,該模型精度相比原始模型得到進一步的提高,作者還嘗試使用Deep Compression ,并且與AlexNet相比,達到了510倍的模型大小差異,同時保持了基線準确度。SqueezeNet是提高神經網絡體系結構硬體效率的優秀候選者。
MobileNet
MobileNet Module
MobileNet 不再使用縮小、剪枝、量化或壓縮等傳統的小型模型方法,而是使用了高效的網絡架構。網絡使用深度可分離卷積,将标準卷積分解為深度卷積和1x1點卷積。标準卷積使用編碼所有輸入通道的核心,并在一步中将它們結合起來,而深度卷積則使用編碼每個輸入通道的不同核心,并使用點卷積将輸入結合起來。這種過濾和特征組合的分離降低了計算成本和模型大小。 MobileNet由28個獨立的卷積層組成,每個卷積層後面都有批量歸一化和ReLU激活函數。Howard等人還引入了兩個模型縮小超參數:寬度和分辨率乘數,以進一步提高模型的速度并減小模型的大小。寬度乘數統一地控制網絡的寬度,通過減小輸入和輸出通道,而分辨率乘數影響輸入圖像的大小及其在整個網絡中的表示。對比正常模型,MobileNet的大小隻是它們的1/10甚至更少,但實作了與這些模型相當的準确度。Howard等人還展示了它如何推廣到各種應用,如人臉檢測、地理定位和目标檢測。然而,它和VGG一樣模型結構設計過于簡單并且線性,是以梯度流的途徑較少。這些問題在該模型的後續疊代中得到了解決。
ShuffleNet
ShuffleNet Module
2017年,Zhang等人提出了ShuffleNet,這是一種計算高效的神經網絡架構,專門設計用于移動裝置。他們認識到許多高效的網絡在繼續變小時會變得不那麼有效,并且将其歸因于昂貴的1x1卷積操作。與通道混洗操作配合使用,他們提出了使用組卷積來避免資訊流量有限的缺點。ShuffleNet主要由标準卷積和由三個階段分組的ShuffleNet單元堆疊組成。ShuffleNet單元類似于ResNet塊,在3x3層中使用深度卷積,并用點組卷積替換1x1層,深度卷積層前面有一個通道洗牌操作。ShuffleNet的計算成本可以通過兩個超參數管理:組數量來控制連接配接稀疏度,縮放因子來操縱模型大小。當組數變大時,誤差率會達到飽和,因為每組的輸入通道數減少,是以可能會降低表示能力。ShuffleNet在擁有相當小的尺寸的同時精度優于目前的模型。由于ShuffleNet唯一的改進是通道混洗,是以模型的推理速度沒有提高。
MobileNetv2
MobileNetv2 Module
在2018年,Sandler等人在MobileNetv1 的基礎上提出了MobileNetv2。它引入了帶有線性瓶頸的倒置殘差,這是一種新型的層子產品,旨在減少計算量并提高準确度。該子產品将輸入的低維表示擴充到高維,并用深度卷積進行濾波編碼,然後将其投影回低維,不同于常見的殘差塊,它的執行順序是壓縮、卷積再擴充。MobileNetv2包含一個卷積層、19個殘差瓶頸子產品,以及網絡最後的兩個卷積層。當步幅為1時,殘差瓶頸子產品才附帶殘差連接配接,對于步幅較大的情況,由于次元不同,不使用殘差連接配接。他們還使用ReLU6作為非線性函數,而不是簡單的ReLU,以進一步減少計算量。對于目标檢測性能評測,作者使用MobileNetv2作為SSD 的特征提取器,并取名為SSDLite。該模型聲稱比原始SSD的參數少8倍,同時實作了具有競争力的準确性。MobileNetv2在其他資料集上推廣得很好,易于實作,是以受到了社群的歡迎。
PeleeNet
Residual prediction block
由于像MobileNet 和 ShuffleNet 這樣的輕量級深度學習模型嚴重依賴深度可分離卷積,Wang等人提出了一種基于正常卷積的新型高效架構,稱為PeleeNet,其使用了各種節省計算量的技術。PeleeNet圍繞DenseNet展開,但也從許多其他模型中獲得了靈感。它引入了雙向密集層、根塊、瓶頸中的動态通道數、轉換層壓縮以及正常的激活函數,以減少計算成本和提高速度。雙向密集層有助于獲得感受野的不同尺度,使更易于識别更大的目标。為了減少資訊損失,他們也使用了根塊。此外,他們還放棄使用的壓縮因子,因為這會損害特征表達并降低準确度。PeleeNet由根塊、四個雙向密集層、轉換層以及最終的分類層組成。作者基于PeleeNet和SSD 提出了一個實時目标檢測算法,稱為Pelee。它在移動和邊緣裝置上的性能更由于當時的輕量級目标檢測算法,這表明了簡單的設計選擇對整體性能有着巨大影響。
ShuffleNetv2
ShuffleNetv2 Module
2018年,Ningning Ma等人在ShuffleNetv2 中提出了一套用于設計高效網絡架構的綜合指南。他們主張使用更為直接的名額(如速度或延遲)來衡量計算複雜度,而不是間接名額(如FLOP)。ShuffleNetv2建立在四項指導原則之上:1)輸入和輸出通道的寬度相等,以最小化記憶體通路成本;2)根據目标平台和任務仔細選擇組卷積;3)多路徑結構在代價效率的前提下實作更高的精度;4)元素操作(如add和ReLU)在計算上是不可忽略的。遵循上述原則,他們設計了一個新穎的子產品。它通過通道拆分層将輸入分成兩部分,然後是三個卷積層,之後再與殘差連接配接并通過通道混洗層。對于下采樣模型,删除通道拆分,并在殘差連接配接上添加深度可分離卷積層。在兩個卷積層之間插入這些塊的集合就形成了ShuffleNetv2。作者還對較大的模型(50/162層)進行了實驗,并獲得了更優的精度和更少的FLOP。ShuffleNetv2在相當複雜度的情況下超越了其他最先進的模型。
MnasNet
Factorized Hierarchical Search Space
随着各種邊緣裝置對精确,速度和低延遲模型的需求日益增加,設計這種神經網絡變得比以往任何時候都更具挑戰性。2018年,Tan等人提出了Mnasnet,該模型由神經網絡架構搜尋(NAS)方法設計。他們将搜尋問題表示為旨在同時獲得高精度和低延遲的多目标優化問題。它還通過将CNN劃分為獨特的塊并将這些塊内的操作和連接配接分開搜尋來因式分解搜尋空間,進而達到減小了搜尋空間的目的,這也使得每個塊具有獨特的設計,而不像早期的模型,它們堆疊了相同的塊。作者使用基于RNN的強化學習代理做為控制器,并使用訓練器來測量精度,使用移動裝置測量延遲。将每個采樣的模型訓練在任務上以獲得其精度,并在真實裝置上運作以獲得延遲。這用于獲得軟獎勵目标,并更新控制器。重複該過程直到達到最大疊代次數或找到合适的候選者。MnasNet的速度幾乎比MobileNetv2快兩倍,同時具有更高的精度。然而,與其他基于強化學習的神經架構搜尋模型一樣,MnasNet的搜尋時間需要天文數字級别的計算資源。
MobileNetv3
MobileNetv3 Module
MobileNet v3 是一種高效的神經網絡架構,專門用于邊緣裝置。它是使用MnasNet 相同方法建立的,但其中有一些修改。通過在分解層次搜尋空間中執行自動神經架構搜尋并通過NetAdapt 進行優化,後者在多次疊代中删除網絡中未使用的元件。一旦獲得了子網架構,就會修剪通道與随機初始化權值,然後微調它以提高目标名額。該模型進一步修改以删除架構中一些昂貴的層,并獲得額外的延遲改進。Howard等人認為,架構中的濾波器通常是彼此的鏡像,即使删除其中的一半濾波器,準确性也可以保持不變。MobileNet v3結合ReLU和hard swish作為激活函數,後者主要用于模型末尾層。Hard swish與swish函數沒有明顯差異,但MobileNet v3還為不同的資源使用情況提供了兩種模型 - MobileNet v3-Large和MobileNet v3-Small。MobileNet v3-Large由15個瓶頸塊組成,而MobileNet v3-Small則有11個。它還在其building block上包含了擠壓與激活層。這些模型在SSDLite中充當特征檢測器,比之前的疊代快35%,同時達到更高的mAP。
Once-For-All (OFA)
OFA
神經網絡架構搜尋算法(NAS)在過去幾年中建構了許多輕量級SOTA模型。然而,由于抽樣模型訓練政策,它們的計算成本非常高。Cai等人提出了一種将模型訓練階段與神經網絡架構搜尋階段解耦的方法。模型隻被訓練一次,并且可以根據需要從中蒸餾出子網絡。Once-For-All(OFA)網絡在卷積神經網絡的四個重要次元中為這樣的子網絡提供了靈活性,其中包括:深度、寬度、核心大小和次元。由于它們嵌套在OFA網絡内并且與訓練相沖突,是以它可以在訓練過程中逐漸縮小參數尺寸,進而減少計算量并提高精度。首先,使用最大的參數尺寸訓練最大的網絡。然後,通過逐漸減小核心大小、深度和寬度來微調網絡。對于彈性核心,使用大核心的中心作為小核心。由于中心是共享的,是以使用核心變換矩陣來保持性能。為了改變深度,使用前幾層,而跳過大網絡的其餘部分。彈性寬度采用通道排序操作來重新組織通道,并在較小的模型中使用最重要的通道。OFA在ImageNet top-1精度百分比方面取得了最先進的80%,并獲得了第4屆低功耗計算機視覺挑戰(LPCVC)的冠軍,同時在搜尋時間上減少了許多數量級。它展示了一種為各種硬體需求設計輕量級模型的新範式。
GhostNet
Ghost Module
GhostNet 是一種新型的端側神經網絡架構,它來自華為諾亞方舟實驗室發表在CVPR 2020的一篇工作。該架構可以在同樣精度下,速度和計算量均少于當時的 SOTA 輕量級架構。該論文提供了一個全新的 Ghost 子產品,旨在通過廉價操作生成更多的特征圖。基于一組原始的特征圖,作者應用一系列線性變換,以很小的代價生成許多能從原始特征發掘所需資訊的 Ghost 特征圖。該Ghost子產品即插即用,通過堆疊Ghost子產品得出Ghost bottleneck,進而搭建輕量級神經網絡——GhostNet。在ImageNet分類任務,GhostNet在相似計算量情況下Top-1正确率達75.7%,高于MobileNetV3的75.2%
作者通過對比分析ResNet-50網絡第一個殘差組(Residual group)輸出的特征圖可視化結果,發現一些特征圖高度相似。如果按照傳統的思考方式,可能認為這些相似的特征圖存在備援,是多餘資訊,會想辦法避免産生這些高度相似的特征圖。但本文思路清奇,推測CNN的強大特征提取能力和這些相似的特征圖(Ghost對)正相關,不去刻意的避免産生這種 Ghost 對,而是嘗試利用簡單的線性操作來獲得更多的 Ghost 對。
Ghost Module 的計算過程主要分為正常卷積、廉價操作和特征圖拼接三步。首先,利用正常卷積對輸入特征圖進行特征提取并壓縮通道。然後,對壓縮通道數後的特征圖進行廉價操作,作者在這裡使用的是深度卷積操作。最後,将正常卷積和廉價操作的輸出特征圖進行拼接得到最終的結果。
G-GhostNet
傳統卷積、G-Ghost子產品和G-Ghost with mix子產品
2022年初華為諾亞方舟實驗室團隊對GhostNet進行了擴充,提出了适用于伺服器的G版GhostNet,即G-GhostNet。該團隊将早期GhostNet稱之為C-GhostNet,即适用于CPU/移動端的GhostNet。
盡管 C-GhostNet 能大幅減少FLOPs同時保持高性能,但它所用到的廉價操作對于GPU既不廉價也不夠高效。具體來說,深度卷積具有低計算密度特性,無法充分利用 GPU 的并行計算能力。如何在精度和GPU延遲之間獲得更好的平衡,仍然是一個被忽視的問題。除了 FLOPs 與參數量外,《Designing Networks Desing Space》一文引入"Activations"衡量網絡複雜度,相比FLOPs,它與GPU延遲具有更高的相關性。另一方面,CNN的主體部分通常包含多個分辨率漸進式縮小的階段,每個階段由多個Blocks堆疊而成。作者旨在降低"stage-wise"備援而非C版的"block-wise",極大的減少中間特征進而降低計算量與記憶體占用。
G-GhostNet 具體的計算過程如上圖 G-Ghost with mix 子產品所示,複雜特征經過連續的n個卷積塊生成,Ghost特征則由第一個卷積塊經過廉價操作所得。其中mix子產品用于提升廉價操作表征能力,即先将複雜特征分支中第2至第n層的中間特征進行拼接,再使用變換函數,變換至與廉價操作的輸出同域,最後再進行特征融合(如簡單的逐元素相加)。
GhostNetV2
GhostNetV2 Module
2022年11月華為諾亞方舟實驗室團隊提出了 GhostNetV2,文章提出了原始 GhostNet 存在無法有效提取全局感受野的問題,通過對其加入輕量化注意力結構,有效解決了正常卷積隻能編碼局部資訊的固有缺陷。GhostNetV2 僅用 167M FLOPs 就達到了75.3% 的 top-1準确率,這極大地超過了 原版 GhostNet (74.5%),并且兩者的計算成本相近。
盡管 Ghost 子產品可以大幅度地減少計算代價,但是其特征的表征能力也因為 "卷積操作隻能模組化一個視窗内的局部資訊" 而被削弱了。在 GhostNet 中,一半的特征的空間資訊被廉價操作 (3×3 Depth-wise Convolution) 所捕獲,其餘的特征隻是由 1×1 的 Point-wise 卷積得到的,與其他像素沒有任何資訊上的交流。捕捉空間資訊的能力很弱,這可能會妨礙性能的進一步提高。為了改善正常卷積固有的局部資訊問題,作者引入了如今被廣泛使用的注意力結構,并考慮到計算成本,将正常的全局特征權重改進為水準與垂直方向特征權重,設計出了一種新穎的輕量化注意力方式并融入到 GhostNet中,這使得 GhostNet 獲得了長距離編碼能力,極大地增強了網絡的特征提取能力。
對比結果
Performance comparison of various object detectors on MS COCO and PASCAL VOC 2012 datasets at similar input image size.
Comparison of Lightweight models in 2020
Performance of Object Detectors on MS COCO dataset
Comparison of one-stage models
Comparison of Lightweight models in 2022
未來趨勢
在過去的十年中,目标檢測技術取得了巨大的進步。在某些領域中,該算法幾乎達到了人類的水準。然而,它仍然面臨着許多令人興奮的挑戰。在本節中,我們讨論了目标檢測領域中的一些未解決問題。
AutoML
AutoML是一個正在快速發展的領域,它使用神經網絡架構搜尋(NAS)來自适應資料集建構目标檢測算法。在前面的章節中,我們已經展示了一些由NAS設計的檢測算法,但它仍處于起步階段。對算法進行搜尋是一項複雜且需要巨大計算資源的任務。
輕量級檢測算法
盡管輕量級網絡在與正常網絡在分類任務上的誤差幾乎沒有差異,但它們在檢測精度方面仍然有較大的差距。随着越來越多的邊緣端的機器學習應用程式推向市場,小型,高效且高精确模型的需求将會增長。
Weakly supervised/few shot detection
大多數最先進的目标檢測模型都是在數百萬個帶有标注的資料上訓練,這需要巨大的時間和人力成本。能夠在弱監督資料(即圖像級标記資料)上訓練可能會大大降低這些成本。
Domain transfer
Domain transfer 是指首先在特定源任務的帶标簽圖像上訓練的模型,然後在單獨但相關的目标任務上使用。它鼓勵重複使用訓練模型,并減少對大型資料集的依賴。
3D目标檢測
3D目标檢測是自動駕駛中一個特别關鍵的問題。盡管模型已經取得了很高的準确度,但如果在人類水準性能以下部署任何東西都會引發安全問題。
視訊目标檢測
目标檢測算法旨在在不相關的單個圖像上進行推理預測。使用幀之間的空間和時間關系進行目标檢測是一個懸而未決的問題。
總結
盡管過去十年目标檢測算法取得了很大進展,但最好的檢測算法在性能方面仍然遠未飽和。随着它在現實世界中的應用範圍的擴大,能夠部署在移動和嵌入式系統上的輕量級模型的需求将呈指數級增長。這個領域的關注量日益增長,但仍然存在很多挑戰。在本文中,我們展示了雙階段和單階段檢測算法是如何逐漸改進,在精度和速度名額上擊敗過去的算法。雖然雙階段檢測算法通常會更加準确,但它們的推理速度較慢,不能用于自動駕駛汽車或安全系統等實時應用。但是,在過去的幾年中,單階段檢測算法的準确度與前者相當,速度也快得多。 正如性能對比結果圖所示,DAMO-YOLO 是迄今為止最準确的檢測器。由于檢測算法準确度呈現出積極的趨勢,我們對更準确和更快的檢測算法有很大希望。