天天看點

R-FCN-3000算法詳解

R-FCN-3000算法詳解

    • 論文背景
    • 算法詳情
      • 算法重點
      • 算法提升
      • 算法對比
        • 遷移分類器到檢測器
        • 共享過濾器
        • 共享對象特征
      • 全卷積檢測器的設計
        • 有監督訓練
        • Super-class
        • 神經網絡結構
        • 标簽
        • 損失函數
      • 實驗
        • 實驗細節
      • 結論

論文背景

論文全稱:R-FCN-3000 at 30fps: Decoupling Detection and Classification

論文連結:https://arxiv.org/abs/1712.01802?context=cs.CV

論文日期:2017.12.5

本文提出了一個R-FCN-3000算法,針對多類别資料集的實時檢測。每秒可以檢測30張圖檔,可以檢測3000類對象。 該算法将檢測與分類解耦,為了獲得檢測分數,将目标分數與分類分數相乘。

該目标檢測算法是對與R-FCN算法的優化,因為在R-FCN算法中,需要訓練共享的position-sensitive filters,對于多類别的檢測,訓練卷積核會耗費大量的時間。

對于細粒度的分類器, position-sensitive filters是不必要的,R-FCN-3000在ImageNet資料集上可以達到34.9%mAP的準确率,YOLO-9000能每秒檢測30張圖檔,但是隻能達到18%的準确率。

==R-FCN-3000學習的對象可以泛化到新型對象上,并且表現會随着訓練對象類别的增多而增強。==支援可以學習一個通用檢測器的假說。

算法詳情

由于CNN算法結構強大的特征學習能力,深度學習神經網絡算法在目标檢測領域表現優秀,尤其是在擁有十類樣本的标準資料集上取得了很大進展,但是在真實案例中隻有微小的進展,因為需要實時檢測上千類樣本。樣本的數量太多, 之前的算法表現不佳。

YOLO-9000是一個基于對類别樣本的檢測算法,本文提出的R-FCN-3000與YOLO-9000比較,準确性有了18%mAP的提高。

本文提出了一個對于R-FCN算法的優化,全卷積檢測器需要計算每一個類别的對象分數,能在有限的預算内表現出優秀的準确性。但是全卷積神經網絡要求對于每一個類别的特殊過濾器集,進而阻止了将他們應用于多類的資料集。因為這會導緻需要計算大量的過濾器,使得計算非常緩慢。

算法重點

目前的大尺寸檢測算法都是以犧牲準确性為代價的,例如YOLO-9000。

目前的全卷積神經網絡算法是需要計算每一個類别的分數。雖然對于大多數算法而言,準确率高且計算量小,但是不能共享卷積核,需要單獨針對每一個類别訓練大量的卷積核。 而針對3000類對象,需要訓練大量的positive-special filters,會導緻檢測非常緩慢。

R-FCN-3000解耦目标檢測與分類,定位的計算量不會随着類别的增多而增加。将相似的類别進行級聯并且共享參數,

R-FCN-3000算法分為兩部分,首先是固定數量的super-classes得目标檢測器(帶有position-sensitive filters),接着是對于每一個super-class的細粒度分類器(不帶position-sensitive filters)。

super-classes是超類别,指代一個大類,例如狗類。是通過聚類圖檔的深度語義特征得到的(例如ResNet-101有2048維的特征)。是以不需要進行語義分層。

在檢測時,将檢測分為兩步:

  1. 固定超類别數目的目标檢測器。
  2. 每一個細類别的細粒度分類器。

将看起來相似并且共享部分特征的類别級聯起來,同一個大類的目标合并為一體,一起計算。例如識别目标是否是狗,而不識别是哪類狗。使用大類替代細類,然後訓練position-sensitive filters。

給定位置的細粒度類别機率通過将超類别機率與細粒度類别機率相乘。

R-FCN-3000算法詳解

算法提升

為了學習使用super-class的影響,而不是獨立的每一類目标。本文将super-class的數量設定為1至100,并ImageNet資料集上進行實驗,結果表明,準确性得到了很大提升,即使将super-class的數量設定為1。這也表明position-sensitive filters可以學習用于檢測通用對象,對象是一個通用概念,一個通用的目标檢測器可以被學習。

通過分别檢測一大類的目标,再進行類别的細分,可以提高目标檢測的速度,并且可以增多檢測的類别數量。 因為不需要訓練每一個類别的position-sensitive filters。

随着類别數量的增多,在大量類别的資料集上準确性提高,且泛化性增強。泛化性随着訓練類别數量的增多而增強。

算法對比

遷移分類器到檢測器

最初使用深度卷積神經網絡來進行多類别目标定位,利用回歸來預測定位的邊界框。之後RPN被用來在目标檢測中進行候選區域的提取,是在ImageNet資料集上進行測試的,但沒有實驗在沒有特殊訓練的資料集上進行。弱監督檢測器是過去解決多類别檢測的一個主要研究領域。使用邊界框訓練的檢測器可以别遷移至沒有邊界框的類别。這一假設也使訓練一個固定類别數量的檢測器成為可能。

對于一個無監督的類别,從一個分類器至檢測器的遷移也被學習,基于級聯用于遷移分類器到檢測器的弱監督資料方法的多執行個體學習也被提出了。

YOLO-9000算法共同訓練分類資料與檢測資料,分類損失就是利用擁有最高分數的邊界框進行反向傳播計算。這假設預測框就是真實框。 YOLO-9000非常快,因為隻使用一個輕量級的神經網絡,并且對于每個類别隻使用3個過濾器進行定位。然而,對于良好的定位,3個優先的過濾器是不足夠的。

共享過濾器

== 級聯可以與其他類别共享的部分,對象類别間共享卷積核來減小模型複雜度并且減小訓練基于部分卷積核需要的訓練資料數量。==

在過去的算法中顯示,共享過濾器會使算法更泛化。 Deformable-R-FCN, R-FCN, RetinaNet都沒有共享過濾器,是以檢測非常慢。 本文提出了一個在多個對象類别共享過濾器的結構,共享卷積核可以提高訓練速度。

共享對象特征

隻檢測一少部分類别的對象對于獲得高回召率是足夠的,檢測每一類目标是不必要的,R-CNN對于每一個類别都進行了邊界框回歸。=首先進行一個類别不可知的回歸,然後一個簡單的分類層對于檢測就足夠了。将對象的機率與分類機率相乘。

全卷積檢測器的設計

有監督訓練

首先需要獲得上千類的帶注釋的資料,使用已有的帶分類标簽的多類别資料集,然後在其基礎上打上邊界框的标簽,這就使訓練變成有監督的,目标檢測的準确性得到了很大提升。

監督學習需要準确的邊界框标簽,表現比弱監督學習表現更好。

對于檢測狗類,隻需要學習紋理與外表特征,而不需要學習檢測部分,例如腿部或者尾巴。

然而手工打标的花費是很高的,是以選用ImageNet資料集,每張圖檔隻包含1個或2個目标,會降低打标簽的花費。準确性得到了很大提升。

ImageNet基礎的算法檢測較快,每秒大概1-2張圖檔。

COCO資料集的比較慢。

因為ImageNet資料集有邊界框标簽,ImageNet分類資料集上訓練的大尺寸準确器比弱監督檢測器表現更好。

Super-class

全卷積目标檢測器基于不同尺寸與比例或者以每個類别的position sensitive filters的形式學習特定類别的過濾器,是以,當類别數過大時,計算就會變得非常不靈活。

分别訓練一個目标 / 背景的檢測器與一個分類網絡。

是以獲得可以共享position sensitive filters的外表相似的對象集,獲得第 j 類的對象,xj,然後計算例如ResNet-101最後一層的2048維特征向量的平均值。

Super-class是通過使用K-means聚類算法獲得的。

神經網絡結構

R-FCN-3000算法詳解

原始的R-FCN沒有解耦成兩個分支:

R-FCN-3000算法詳解

在conv5之後有兩個獨立卷積層,檢測分數與邊界框回歸偏移。

使用RPN得到候選區域,設定被訓練的獨立類别的檢測器集為C,super-classes是K,對于每一個super-class k,有P × P個位置敏感過濾器。

最後還加上背景這一個超類别, (K + 1)×P ×P 個filters。

檢測與分類機率相乘得到最後的檢測分數。

裁剪,遮蓋與均等不是檢測的瓶頸。

标簽

檢測分支:當對于i類super-class資料的所有真實框,邊界框的IoU大于0.5時,我們将RoI設為正樣本,否則設為背景。背景的标簽為1。

對于分類分支:對于所有的細類别,IoU大于0.5的邊界框為正樣本,隻有正樣本被用于訓練。分類的類别量為C,而不是K+1。

損失函數

對于檢測器,使用online hard example mining (OHEM),損失函數使用L1函數,

對于細粒度的分類器,使用softmax函數,當正樣本的數量太少時,分類分支的損失函數乘以參數0.05。

保持每一個分支的損失函數的平衡是非常重要的。

實驗

資料集

R-FCN-3000算法詳解

選用ImageNet資料集,資料集共有3130類對象,每類對象都有大約100張圖檔,本文隻選取了其中的194類對象,并且選用6類沒有邊界框的對象用作測試集。

實驗細節

圖檔的像素為375 × 500,錨框使用64,128,256三個尺寸,f (1:2), (1:1) 與 (2:1)三個比例,是以在RPN神經網絡,每個像素點都有9個錨框。并且訓練7個epoch。

前1000次疊代使用0.00002的學習率,然後增加至0.0002。在5.33個epoch之後學習率被提升10倍。

在兩個英偉達P6000 GPU上訓練3130類對象花費了兩周。

為了更快的訓練,不使用 position-sensitive RoI pooling,隻使用雙線性插值方法。使用與fast R-CNN相同的方法基于不同的叢集數量以及類别數量訓練變形的R-FCN,訓練1000類對象隻花了2天。

利用水準翻轉進行資料增強,使用兩個尺寸(375,500) 與 (750,1000) 進行多尺寸推測,并且結合NMS進行兩個尺寸的預測。使用使用ResNet-50作為神經網絡的主幹。

不同尺寸的資料集的對比實驗:

R-FCN-3000算法詳解

與弱監督檢測器的對比實驗:

R-FCN-3000算法詳解

不同數量的超類别的對比實驗:

R-FCN-3000算法詳解
R-FCN-3000算法詳解

NMS中不同數量的超類别的對比實驗:

R-FCN-3000算法詳解

結論

R-FCN-3000算法具有很強的泛化性以及準确性,通過将分類分數與檢測分數相乘計算得到對象分數,随着訓練的對象數量的增多,泛化能力增強。

在未來我們要思考如何提高算法在100000類對象的場景中提高分類速度。

繼續閱讀