天天看點

目标檢測論文筆記 2019.11

初入門目标檢測,近兩個月看的一些論文筆記彙總。

盡量用簡單的語言概括論文的思想,提出highlight,具體實作細節參考各論文。

文章目錄

    • General
        • 《MoCo: Momentum Contrast for Unsupervised Visual Representation Learning 》2019
    • Instance Segmentation
        • 《Mask RCNN》2018
    • Object detection
      • Pipeline
        • 《selective search for object recognition》2012
        • 《R-CNN》2014 /《Fast R-CNN》2015 /《Faster R-CNN》2015 /《R-FCN》2016
        • 《Cascade R-CNN: delving into high quality object detection》
        • 《Grid R-CNN》
        • 《YOLO: you only look once》2016
        • 《YOLO v2》2016 / 《YOLO v3》2018
        • 《SSD:single shot multibox detector》2016
        • 《CornerNet: detecting objects as paired keypoints》2019
        • 《CenterNet: Objects as points》2019
        • 《FCOS: Fully convolutionall one-stage object detection》2019
      • Tricks
        • 《FPN: feature pyramid networks for object detection》 2017
        • 《DCN: Deformable convolutional networks》2017
        • 《RetinaNet: Focal loss for dense object detection》2018
        • 《GA: Region Proposal by Guided Anchoring 》2019

General

《MoCo: Momentum Contrast for Unsupervised Visual Representation Learning 》2019

閱讀日期:2019.11.21

Highlight

目标檢測論文筆記 2019.11
  • unsupuvised visual representation learning
  • buiding large and consistent dictionary
    • Dictionary as Queue: 解耦dict大小與mini-batch大小,使得dict可以足夠大,不受制于記憶體
    • Momentum update: 逐漸更新key encoder的模型參數,保持queue中keys的一緻性
  • shuffling BN:多塊GPU各自進行BN。在key_encoder進行編碼前,先shuffle minibatch,編碼完後shuffle back,而query_encoder不進行shuffle,保證兩者進行BN用的batch資訊不來自同一組batch,避免intra-batch資訊洩漏,使模型過于容易找到一個low-loss solution,而representation的提取卻不夠general.

算法流程

  1. query-encoder 和 key-encoder 初始化為相同的網絡
  2. 對于每個minibatch,對圖像做兩次随機增強,分别用兩個encoder進行編碼(生成queries和keys),keys不計算梯度
  3. 将目前batch對應圖檔生成的key作為正例(1個),Queue中的所有keys作為負例,計算交叉熵損失

contrastive loss: similarity of sample pairs in representation space

L q = − l o g e x p ( q ⋅ k + / τ ) ∑ i = 0 K e x p ( q ⋅ k i / τ ) L_q = -log{exp(q·k_+/\tau) \over \sum_{i=0}^K exp(q·k_i/\tau)} Lq​=−log∑i=0K​exp(q⋅ki​/τ)exp(q⋅k+​/τ)​

  1. back propagation 更新query-encoder的模型參數, momentum update 更新key-encoder
  2. 更新Queue(Dictionary): enqueue current minibatch, dequeue the earliest minibatch

Instance Segmentation

《Mask RCNN》2018

閱讀日期:2019.11.22

Highlight

  • 在faster-RCNN上做了微小改動,添加一個head用于預測binary mask,實作執行個體分割,5FPS。還可以被拓展用于keypoint檢測任務,把每個關鍵點作為一個one-hot mask.
  • 提出RoI Align,通過雙線性插值,避免量化,使提取的特征更好地保持原圖位置資訊,這一點對生成準确的mask非常重要,而分類任務則對位置資訊更魯棒一些。
  • 解耦classification和segmentation,對每個類别都分别預測一個binary mask,避免類别競争
    Models Per pixel Loss
    解耦 Mask RCNN sigmoid BCE
    競争 traditional FCN Softmax Multinomial cross-entropy

Object detection

Pipeline

Two-stage系列:R-CNN,fast R-CNN,faster R-CNN,R-FCN

One-stage with anchor:YOLO,SSD

One-stage anchor-free :CornerNet,CenterNet,FCOS

《selective search for object recognition》2012

閱讀日期:2019.10.23

Highlight

  • 結合exhaustive search & segmentation提出了一種類别無關的region proposal方法,召回率99%
  • 捕捉多尺度資訊(by hierarchical algorithm),多樣化的選區合并政策,計算速度快(在當時可能成立,但在R-CNN系列成為性能瓶頸)

算法流程

  • 生成原始選區(using region-based feature algorithm),加入region proposals L L L
  • 計算選區間相似度(多樣化政策:顔色/紋理/大小/吻合度),放入 S S S
  • 通過貪心政策每次合并相似度最高的兩個選區,合并結果放入 L L L,從 S S S中删除原來兩個小選區相關的相似度,并計算新選區與各剩餘選區的相似度放入 S S S。重複直到最終所有選區合并為一個大選區( S = ϕ S=\phi S=ϕ)
  • 輸出所有region proposal L L L

《R-CNN》2014 /《Fast R-CNN》2015 /《Faster R-CNN》2015 /《R-FCN》2016

閱讀日期:2019.10.23 -24

共同點:都屬于two-stage detection,先生成類别無關的proposal region(區分前景/背景),再對每個proposal進行分類。利用了transfer learning的思想。考慮平移不變性,多尺度性。采用非極大值抑制消重。

不同點:速度越來越快(faster RCNN可以達到實時5fps),共享參數越來越多,整體網絡結構越來越整合。

R-CNN

先由selective search算法提出region proposal,每個proposal分别通過CNN編碼為一個4096維的特征,再單獨訓練SVM針對不同類别進行打分。額外訓練一個CNN對bbx的位置進行回歸修正。

每個階段都是單獨訓練的,是以開銷大。訓練/測試時間都很長。

Fast R-CNN

  • Feature map sharing & ROI pooling layer
在R-CNN中,每個proposal分别做卷積有大量重複操作,是以本論文提出對整張輸入圖檔做卷積,生成一個被全體proposal共享的feature map,大大減少了卷積次數。各proposal根據感受野映射到feature map上,再通過RoI pooling layer轉換為同樣大小的特征。
  • trained end-to-end with multi-task loss: 同時做分類和bbox regression
RoI feature vector同時連接配接兩個sibling FC layer,一個做分類,一個做回歸

Faster R-CNN

  • Region proposal network(RPN)
    目标檢測論文筆記 2019.11

對于前兩種算法而言,bottleneck都是最初提出region proposal的速度太慢。是以本論文提出一種通過CNN,自動預測每個位置的bbx和objectness score的方法。

通過pyramid of anchors,達到高效的多尺度提取的效果(相比于pyramids of features / pyramids of filters)。雖然每個feature感受野一樣,得益于anchor,能夠提取不同尺度的資訊。

  • merge RPN and Fast R-CNN -> train a unified single network
RPN和detection network共享feature map層,通過alternate training的方法(4-step)進行訓練。

R-FCN region-based fully convolutional networks

論文提出觀點,分類的平移不變性&目标檢測的平移敏感性,這兩者之間的沖突導緻使用普通的全共享卷積網絡進行目标檢測精度極低(用于分類的全卷積網絡對位置資訊不敏感)。為了解決這個問題,先前的方案插入了RoI-wise子網,在其後構造更深的網絡來提高精度,但每個RoI計算不共享導緻速度慢。

本論文提出将所有耗時的卷積操作放在整張圖檔上,并生成最終的position-sensitive score maps在所有RoI之間共享。position-sensitive RoI pooling之後,沒有任何需要學習的參數,簡單計算平均得分即可得出每個分類上的分數。簡單起見,使用了類别無關的bbx的回歸。

《Cascade R-CNN: delving into high quality object detection》

閱讀日期:2019.11.8

這篇論文的關注點很有意思。在two-stage detecor訓練過程中,我們都要人為設定一個IoU_threshold,第一階段提出的proposal的IoU高于門檻值的作為正樣本,繼續第二階段分類器的訓練。根據經驗大多設定為0.5,但是為什麼要這樣設定,這是最好的選擇嗎?作者對此進行了實驗。

實驗發現,随着提高訓練的IoU_thr至0.7,檢測精度反而下降,主要原因有二:

  1. 正樣本更少,導緻過拟合
  2. inference時,由RPN提出的proposal的IoU低于訓練時輸入的正樣本,導緻mismatch (作者通過另一實驗發現,regressor在輸入圖檔的IoU與設定的IoU_thr接近時優化效果最好,且regressor輸出圖檔的IoU普遍高于輸入。也就是說,regressor有普遍優化效果,且對與自身訓練精度一緻的圖檔優化更好)

基于上述發現,提出 級聯式檢測器 cascade R-CNN 解決上面兩個問題:

  1. Resampling:每個stage進行resample,調整合适的正負樣本比例,同時因為cascade RCNN能在每個stage逐漸提高輸出圖檔的IoU,是以提高IoU_thr後正樣本數量不會減少太多
  2. 級聯訓練 & 級聯檢測:保持訓練和檢測時輸入圖檔的IoU一緻性

highlight

這是一個逐漸優化的過程,前一個stage的輸出是精度更高的圖檔,該分布剛好适合下一個stage中IoU_thr更高的regressor進行訓練。實驗證明,該級聯訓練的方法對二階段檢測算法有着普遍的效果提高。

目标檢測論文筆記 2019.11

《Grid R-CNN》

閱讀日期:2019.11.9

highlight

  • 傳統RCNN中将bbox的定位用fc+回歸的方式來做,本文提出了用FCN來保持空間資訊,通過預測pixel level的grid points來定位物體。
  • Feature map level information fusion:對相鄰點的feature map進行融合,互相矯正
  • Extended region mapping:第一階段提出的proposal很可能沒覆寫整個object,導緻許多grid point 沒有落在proposal中。如果簡單使用enlarge proposal進行RoI pooling會導緻引入背景資訊或其他物體,導緻detector精度下降;本文提出RoI不變,在FCN得到的heatmap映射為原圖時,映射到原proposal的兩倍大小

模型架構:隻是修改了二階段檢測器的bbox regressor部分 -> FCN

目标檢測論文筆記 2019.11
  • 将物體的bbox劃分為N*N的grid,共生成N*N個grid point(包括内部)
  • 對backbone的輸出的特征做FCN,得到N*N張heatmap,每個heatmap對應一個grid point的分布機率
  • grid points feature fusion:對相鄰點的heatmap做融合(卷積後疊加),起校準效果
  • 每個heatmap中找到最大值點作為grid point,映射回原圖(extended region mapping),bbox的真實邊界通過同一條邊上的grid point的heatmap機率權重得到

《YOLO: you only look once》2016

閱讀日期:2019.10.24

Highlight

  • 提出了一種one-stage的目标檢測方法,将目标檢測作為一個回歸任務(同時對bbx和分類機率),使用簡單單一的網絡結構,訓練友善
  • 相比于SOTA的方法,localization error更高,但對背景的假正例預測更少
  • 速度極快!YOLO 45 fps, fast YOLO 155 fps
  • 泛化能力強:能在自然風景上訓練,在藝術作品上預測

模型架構

目标檢測論文筆記 2019.11
  • 将輸入的完整圖像劃分為 S ∗ S S*S S∗S個grid,對每個grid預測 ( 5 ∗ B + C ) (5*B+C) (5∗B+C)個值 -> 卷積+全連接配接
    • B個bbx : 包括五個參數,位置x,y,w,h, 包含物體的機率$confidence $(IoU)
    • 針對每個分類的條件機率,共C個
  • 測試時各bbx的confidence乘以各分類條件機率p,可得到各bbx屬于某分類的機率,再做NMS
  • 訓練時先在ImageNet上預訓練卷積層,再fine tune。訓練時對每個ground truth object隻取一個IoU最大的bbx作為responsible bbx。

    Multi-part loss = bbx + confidence + classification

Limitations

  • 對一群出現的小物體識别能力差 <- 空間限制強,每個grid提出的bbx少
  • 難以泛化到特殊長寬比例的物體 <- 通過資料來學習預測bbx
  • localization的精度差

《YOLO v2》2016 / 《YOLO v3》2018

閱讀日期:2019.10.25

《YOLO9000: Better, Faster, Stronger》

  • 改進YOLO,簡化網絡結構
    • Batch normalization 替代 dropout 來預防過拟合
    • 使用更高分辨率的圖檔先在分類網絡上fine tune,再遷移到detection任務上微調
    • 使用類似faster RCNN的 anchor box 替代 原YOLO隻對每個grid預測兩個bbx
      • 提出更多的預選bbx,解決YOLO對密集小物體的檢測缺陷
      • 對每個anchor box預測 分類條件機率、objectiveness、邊界框修正(YOLO的分類條件機率是對每個grid進行預測,而不是對每個bbx)
      • 對anchor的形狀先驗不再人工指定,而是用在訓練集做k-means的方法得到更能表征的anchor
      • 邊界框修正的參數進行限制,預測絕對位置,使bbx的中心落在對應的grid cell中
      • 添加feature map的通道數,通過stack前面高分辨率的特征(passthrough layer)類似ResNet
  • Multi-scale training

    因為網絡是全卷積的,所有在訓練時使用不同大小的圖檔,這樣網絡對不同分辨率的圖檔的特征提取能力都會提升,在test time就可以用同一個模型預測不同分辨率的圖檔,自由選擇speed/accuracy trade-off

  • 分類、檢測聯合訓練,使YOLO v2可以分類超過9000種物體

    Hierarchical classification,根據類别從屬關系構造WordTree,在每個節點預測條件機率。

    訓練時混合detection和classification資料集,碰到detection資料時,正常BP,但對層級分類部分隻傳遞标簽分類以上的;碰到classification資料時,找到對标簽分類打分最高的bbx,隻在這個bbx的分類預測樹上做BP。

    通過這種聯合訓練,可對detection資料集中沒有的分類進行預測,也可預測出未被方框标注過的物體。

《YOLO v3: An Incremental Improvement》

  • 用LR對各bbx的objectness進行預測,取IOU>0.5為正例 (原先是作為IOU回歸任務處理的)
  • 對multilabel分類任務,對每個類别獨立使用LR并用cross entropy loss 對比softmax(mutual exclusive)
  • 對小物體檢測能力好,IOU=0.5的标準下準确度很好,但不能更精準地localization

《SSD:single shot multibox detector》2016

和YOLO很類似,一些差別如下

  • 在多尺度的feature maps上用多個不同尺寸的anchor作bbx預測,最後将所有bbx結果合并考慮做NMS
  • 用卷積的方法來做bbx和cls的預測,而YOLO最後采用了2個FC層

《CornerNet: detecting objects as paired keypoints》2019

閱讀日期:2019.11.8

highlight

  • One-stage, anchor-free
  • 把檢測bbox的任務簡化為檢測bbox的左上和右下兩個角點(heatmap),并對每個角點生成embedding vector,用embedding的距離來比對角點生成bbox
  • 角點往往遠離物體中心,為了找到角點,提出corner pooling
  • 使用hourglass作為backbone,隻是用網絡最後一層特征輸出,不用FPN
  • 使用角點比對的好處是,減少了bbox的離散空間, O ( w h ) O(wh) O(wh)個角點可以生成 O ( w 2 h 2 ) O(w^2h^2) O(w2h2)個可能的bbox.

模型loss設計:先coner pooling,再生成heat map / embedding / offset

  • heatmap:label在gt角點周圍呈高斯分布,variant of focal loss 使越接近gt的點penalty越小
  • offset:不同類别共享offset,SmoothL1Loss
  • Embedding: pull & push loss (同類相近,不同類相斥)

    <--有趣的loss

目标檢測論文筆記 2019.11

《CenterNet: Objects as points》2019

Highlight

  • 通過每個類别的heatmap找到center point,其他參數(size of bbx/3D location)通過回歸得到
  • 不需要post-processing,NMS(不可微)被提取中心點時的max pooling取代,實作真正的end-to-end training

模型

  • Loss = keypoint probability(heatmap) + local offset of keypoint + bbx regression
  • Inference
    • 對每個類别分别在heatmap上提取局部最大值,3*3 max pooling
    • 保留數值最大的100個峰值點,把heatmap看作分類置信度
    • 計算每個峰值點的offset和bbx regression,确定bbx

《FCOS: Fully convolutionall one-stage object detection》2019

閱讀日期:2019.11.6

Highlight

  • 與其他FCN-solvable tasks比如語義分割相統一,對per-pixel進行目标檢測任務
  • anchor free & proposal free,避免敏感的超參,避免類别不平衡,且省時省記憶體。與CenterNet隻有keypoint點是正樣本不同,本模型中每個落在目标區域内的像素點都被認為是正樣本
  • 采用了FPN的結構,解決傳統FCN用于目标檢測的兩個問題:low recall / ambiguous overlapping bboxes

    在不同層級的feature map上預測不同大小的物體

模型

目标檢測論文筆記 2019.11

對每個像素點,計算classification \ centerness \ regression

  • classification 通過C個二分類器組成,focal loss。每個落在目标區域内的像素點都被認為是正樣本。
  • Centerness 用于抑制目标區域内遠離中心的點,因為它們回歸出來的bbox不理想。
  • Regression 直接計算每個正樣本點到對應bbox的四個距離,用 e x p ( s i x ) exp(s_ix) exp(si​x)做基,FPN的不同層共享heads

Tricks

《FPN: feature pyramid networks for object detection》 2017

閱讀日期:2019.11.5

Highlight:特征金字塔在手工提取特征時期被廣泛使用,能夠保持檢測任務中的尺度不變性。本文利用深度卷積網絡内在的金字塔特性,在很小的cost下構造一個多尺度的層級金字塔,并使每一層都能表達高層語義。每一層都能用于預測,并共享head部分的參數。

模型架構

  • Bottom-up pathway:就是backbone的前向傳播CNN,把輸出的空間大小相同的層分為同一個

    stage

    ,取每個stage的最後一層輸出作為金字塔的一層,相鄰stage的大小相差2倍。
  • Top-down pathway and lateral connections:通過對top feature上采樣得到空間上更粗粒度但語義更強的feature,再element-wise加上lateral connections(1*1 conv)來維持空間資訊,最後通過一個3*3 conv 消除由上采樣引入的空間偏差,生成最終的feature map。
目标檢測論文筆記 2019.11

Applications

  • FPN for RPN:anchor對每層feature map固定scale,取不同ratio;head參數共享。
  • FPN for Fast RCNN:對越小的RoI,用更高分辨率的feature map進行特征提取。

《DCN: Deformable convolutional networks》2017

閱讀日期:2019.11.5

Highlight:傳統CNN受卷積層幾何轉換的限制,本文提出一種可學習的dense offset來使高層特征可以有不規則的感受野,可解釋性強效果好。減輕了對資料增強、設計變換不變特征/算法的依賴。

兩種模型

  • deformable convolution:對輸入的feature map上的每個特征點計算一個2D-offset(通過對該input feature map的卷積),應用于卷積,小數偏移量用鄰近位置的雙線性插值來逼近。
目标檢測論文筆記 2019.11
  • Deformable ROI pooling:先對RoI做普通RoI pooling得到pooled feature maps,加一個fc層得到offsets(RoI的每個bin共享一個offset,整個bin一起平移)。在實驗中發現,Deformable RoI pooling得到的bins會向前景偏移。

《RetinaNet: Focal loss for dense object detection》2018

閱讀日期:2019.11.6

highlight

  • 提出觀點:前景-背景樣本數量的極度不平衡,是one-stage detectors精度普遍低于two-stage detectors的關鍵。過多的負樣本主導了loss,使正樣本的分類器根本無法學習。

    在two-stage detecor中,可以通過(1)第一階段region proposal過濾大量簡單負樣本 (2)第二階段訓練前進行有偏采樣使正負樣本比例保持在合适範圍。one-stage detectors 多使用anchors進行密集采樣,引入了大量 easy negative.

  • Robust loss希望outliers(hard example with large errors)貢獻更少的loss,而focal loss的設計理念剛好與之相反,focal loss更關注hard examples。

    F L ( p t ) = − α t ( 1 − p t ) γ l o g ( p t ) . FL(p_t) = -\alpha_t(1-p_t)^\gamma log(p_t). FL(pt​)=−αt​(1−pt​)γlog(pt​).

    其中 p t p_t pt​代表預測gt的機率, α t \alpha_t αt​ 是超參數,用于調節正負樣本的不平衡; ( 1 − p t ) γ (1-p_t)^\gamma (1−pt​)γ 使得loss更加關注hard exmaple.

  • focal loss的設計非常簡潔直覺,隻是在交叉熵 C E ( p t ) = − l o g ( P t ) CE(p_t) = -log(P_t) CE(pt​)=−log(Pt​)上略加改動,可以很容易地應用到多種模型中。且其效果很好,應用了該loss的RetinaNet能夠達到one-stage的速度,同時超過two-stage的精度。

《GA: Region Proposal by Guided Anchoring 》2019

閱讀日期:2019.11.23

hightlight

  • dense amd predefined anchors -> Non-uniform and arbitrary shaped sparse anchors

    産生更少的anchor,recall幾乎不變,precision提高

  • 将anchor的聯合分布拆解為兩個條件機率分布(location/wh)的連乘
  • 提出anchor應該遵循的原則:alignment / consistency
    • 為保證alignment,不對center位置作回歸,隻回歸wh
    • feature adaption: 由于在同一層feature上使用了任意形狀大小的anchor,要求feature map上不同位置的表意程度也不同,要适應該位置對應的anchor(即consistency),采用deformable conv

model

目标檢測論文筆記 2019.11

繼續閱讀