0
本文作者: 叢末 | 2019-02-23 15:40 |
雷鋒網(wǎng) AI 科技評(píng)論按:物體檢測(cè)是計(jì)算機(jī)視覺的基礎(chǔ)任務(wù)之一。香港中文大學(xué)多媒體實(shí)驗(yàn)室博士生陳愷在 AI 研習(xí)社的公開課上,為大家總結(jié)了深度學(xué)習(xí)背景下物體檢測(cè)算法的發(fā)展,分享 COCO 比賽冠軍團(tuán)隊(duì)所使用的算法,并介紹由港中大多媒體實(shí)驗(yàn)室開源的物體檢測(cè)算法框架 mmdetection。
公開課回放視頻網(wǎng)址:
分享嘉賓:
陳愷,香港中文大學(xué)多媒體實(shí)驗(yàn)室博士生,COCO 2018 Instance Segmentation Challenge 冠軍團(tuán)隊(duì)成員。
分享主題:物體檢測(cè)算法的近期發(fā)展及開源框架介紹
分享提綱:
1. 深度學(xué)習(xí)背景下物體檢測(cè)算法的發(fā)展
2. COCO 2018 Instance Segmentation 冠軍團(tuán)隊(duì)算法分享
3. 開源物體檢測(cè)框架 mmdetection 及 Open-MMLab 計(jì)劃介紹
雷鋒網(wǎng) AI 研習(xí)社將其分享內(nèi)容整理如下:
我叫陳愷,來自香港中文大學(xué)多媒體實(shí)驗(yàn)室。我 2015 年從清華大學(xué)自動(dòng)化系本科畢業(yè),之后進(jìn)入香港中文大學(xué)多媒體實(shí)驗(yàn)室讀博,現(xiàn)在是博士四年級(jí),導(dǎo)師是林達(dá)華老師。研究方向主要是物體檢測(cè)、視頻分析。
今天我報(bào)告的題目是《物體檢測(cè)算法的近期發(fā)展》。
對(duì)于物體檢測(cè),有的人可能比較了解,有的人可能還不怎么清楚,這里我借用 COCO dataset 論文(論文查看地址:https://arxiv.org/pdf/1405.0312.pdf)里面的 4 張圖來形象地介紹一下相關(guān)的任務(wù):
Image classification:圖像分類,這個(gè)任務(wù)指的是給出一張圖片,要識(shí)別出哪張圖片屬于哪個(gè)類別。
Object detection:物體檢測(cè),這個(gè)任務(wù)除了需要識(shí)別出圖片屬于哪個(gè)類別,還需要對(duì)相應(yīng)的物體進(jìn)行具體位置的定位,我們通常用矩形框來框出這個(gè)物體。
Semantic segmentation:語義分割,這個(gè)任務(wù)是指對(duì)圖片中的每個(gè) pixel 打上標(biāo)簽,比如這里要給它們打上 person、sheep、dog 的標(biāo)簽,需要進(jìn)行非常精細(xì)的分類。
Instance segmentation:實(shí)例分割,可以理解為進(jìn)行物體檢測(cè)后,對(duì)每個(gè)矩形框中的物體進(jìn)行語義分割,該任務(wù)除了需要找到物體的類別和位置之外,還需要分辨出不同物體的 pixel。
下面用這個(gè)案例來說明物體檢測(cè)和實(shí)例分割之間的區(qū)別:
(關(guān)于這個(gè)案例的具體講解,請(qǐng)回看視頻 00:04:05-00:05:35 處)
接下來介紹一下物體檢測(cè)在深度學(xué)習(xí)出現(xiàn)以來的發(fā)展情況。
上面綠色的字體表示的是 Two-stage Detector 的發(fā)展歷程,當(dāng)然還有很多其他的方法,這里列出的是一些比較有代表性的方法。
2014 年有一項(xiàng)很重要的工作是 R-CNN,它是將物體檢測(cè)首次應(yīng)用于深度學(xué)習(xí)中的一篇論文,引用量非常高,影響也非常廣泛。它的主要思路是將物體檢測(cè)轉(zhuǎn)化為這么一個(gè)問題:首先找到一個(gè) region(區(qū)域),然后對(duì) region 做分類。之后作者又提出了 Fast R-CNN,它是一個(gè)基于 R-CNN 的算法,運(yùn)算速度顯著提高。
2015 年,這一群人又提出了 Faster R-CNN,它在速度上相比 Fast R-CNN 有了更大的提高,主要是改進(jìn)了怎樣在 Fast R-CNN 和 R-CNN 中找 region 的過程,F(xiàn)aster R-CNN 也是用深度學(xué)習(xí)的方法得到一些 region(稱之為 proposal),然后再用這些 proposal 來做分類。雖然距離 Faster R-CNN 的提出已經(jīng)三年多了,但它依舊是使用非常廣泛的一種算法。
2016 年,代季峰等人提出了 R-FCN,它在 Faster R-CNN 的基礎(chǔ)上進(jìn)行了改進(jìn),當(dāng)時(shí)它在性能和速度都有非常大的提高。
2017 年有兩篇影響力非常大的論文,F(xiàn)PN 和 Mask R-CNN。FPN 也就是 Feature Pyramid Network,它相當(dāng)于生成了 feature pyramid,然后再用多個(gè) level 的 feature 來做 prediction。Mask R-CNN 這篇論文獲得了 ICCV 2017 的最佳論文,由何愷明他們提出,其在 Faster R-CNN 基礎(chǔ)上增加了 mask branch,可以用來做實(shí)例分割,同時(shí)因?yàn)橛?multi-task learning,因此它對(duì)物體框的性能也有很大的提高。
2018 年,沿著 Faster R-CNN 這條路線提出的方法有 Cascade R-CNN,它將 cascade 結(jié)構(gòu)用在了 Faster R-CNN 中,同時(shí)也解決了一些 training distribution 的一些問題,因此它的性能是比較高的。另外還有兩篇比較重要的論文——Relaiton Network 和 SNIP。
下面藍(lán)色字體表示的 Single-stage Detector 的發(fā)展歷程:2014 年的 MultiBox 是非常早期的工作;2016 年提出了 SSD 和 YOLO,這兩篇論文是 Single-stage Detector 中的代表作;2017 年提出了 RetinaNet(當(dāng)時(shí) Single-stage Detector 中性能最高的方法)和 YOLO v2;2018 年有一個(gè)新的思路,提出了 CornerNet,把物體檢測(cè)看成一堆點(diǎn)的檢測(cè),然后將這些點(diǎn) group 起來,我們下面會(huì)詳細(xì)講到它。
下面會(huì)講一下物體檢測(cè)近期(2017 年以來)的工作。由于 Faster R-CNN 是很多方法的基礎(chǔ),我們首先會(huì)介紹一下這個(gè)方法。
在此之前,先講一下物體檢測(cè)一般的 pipeline。下圖是一個(gè) Two-stage Detector,它的 pipeline 首先有一張圖片,之后的步驟共分為三個(gè)部分:
第一部分是 Feature generation:首先圖片經(jīng)過 backbone(分類網(wǎng)絡(luò))后,會(huì)生成 feature; 之后 feature 或者直接進(jìn)行 prediction,或者再過一個(gè) neck 進(jìn)行修改或增強(qiáng);
第二部分是 Region proposal:這個(gè)部分是 Two-stage Detector 的第一個(gè) stage,其中會(huì)有一堆 sliding window anchor(預(yù)先定義好大小的框),之后對(duì)這些框做 dense 的分類和回歸;接著再篩除大部分 negative anchor,留出可能是物體的框,這些框稱之為 proposal;
第三個(gè)部分是 Region recognition:有了 proposal 后,在 feature map 上利用 Rol feature extractor 來提取出每一個(gè) proposal 對(duì)應(yīng)的 feature(Rol feature),最后會(huì)經(jīng)過 task head。
相對(duì)來說,Single-stage Detector 的 pipeline 比較簡(jiǎn)單。
圖片首先經(jīng)過 feature generation 模塊,這里也有 sliding window anchor,但是它們不是用來生成 proposal 的,而是直接用于做最終的 prediction,通過 dense 的分類和回歸,能直接生成最終的檢測(cè)結(jié)果。
(對(duì)于該部分的具體講解,請(qǐng)回看視頻 00:12:00:00:16:25 處)
Faster R-CNN
Faster R-CNN 是 Two-stage Detector 工作的基礎(chǔ),它主要提出了兩個(gè)東西:
RPN:即 Region Proposal Network,目前是生成 proposal 的一個(gè)標(biāo)準(zhǔn)方式。
Traning pipeline:主要講的是 Two-stage Detector 應(yīng)該怎樣 train,論文里給出的是一種交替的方法。
(關(guān)于 Faster R-CNN 的具體講解,請(qǐng)回看視頻 00:17:00:00:21:45 處)
FPN
FPN(Feature Pyramid Network)主要也是提出了兩項(xiàng)重要的思路:Top-down pathway 和 Multi-level prediction。
下圖中的 4 張圖代表了基于單個(gè)或多個(gè) feature map 來做預(yù)測(cè)的 4 種不同的套路:
具體實(shí)現(xiàn)如下圖所示:
(關(guān)于 FPN 的具體講解,請(qǐng)回看視頻 00:22:35-00:25:45 處)
Mask R-CNN
Mask R-CNN 主要也有兩點(diǎn)貢獻(xiàn):
RoIAlign:在 Mask R-CNN 之前,大家用得比較多的是 Rol Pooling,實(shí)現(xiàn)過程是:給出一個(gè)框,在 feature map 上 pool 出一個(gè)固定大小的 feature,比如要 pool 一個(gè) 2×2 的 feature,首先把這個(gè)框畫出 2×2 的格子,每個(gè)格子映射到 feature map,看它覆蓋了多少個(gè)點(diǎn),之后對(duì)這些點(diǎn)做 max pooling,這樣就能得出一個(gè) 2×2 的 feature。它的劣勢(shì)是如果框稍微偏一點(diǎn),得出的 feature 卻可能是一樣的,存在截?cái)嗾`差。Rol Align 就是為了解決這一問題提出的。Rol Align 并不是直接對(duì)框內(nèi)的點(diǎn)做 max pooling,而是用雙線性插值的方式得到 feature。其中還有一步是:在 2×2 的每個(gè)框中會(huì)選擇多個(gè)點(diǎn)作為它的代表,這里選擇了 4 個(gè)點(diǎn),每個(gè)點(diǎn)分別做雙線性插值,之后再讓這 4 個(gè)點(diǎn)做 max/average pooling。
Mask branch:它是一個(gè)非常精細(xì)的操作,也有額外的監(jiān)督信息,對(duì)整個(gè)框架的性能都有所提高。它的操作過程如下圖所示:
(關(guān)于 Mask R-CNN 的具體講解,請(qǐng)回看視頻 00: 26:55—00:30:20 處)
Cascade R-CNN
Cascade R-CNN 是目前 Faster R-CNN 這條線中較新的方法。這個(gè)方法也提出了兩點(diǎn)貢獻(xiàn):一是提出了使用 cascade architecture;二是提出了怎樣來適應(yīng) training distribution。
Cascade architecture :這個(gè)框架不是特別新的東西,之前也有類似的結(jié)構(gòu)。下圖左邊是 Faster R-CNN,右邊是 Cascade R-CNN。其中 I 代表圖像或者圖像生成的 feature map,H0 是 RPN,B 是 bounding box regression,C 是 classification。經(jīng)過 RPN 得到的 proposal 再做 pooling 后,會(huì)有分類和回歸這兩個(gè) prediction。
Cascade R-CNN 的結(jié)構(gòu)是,在經(jīng)過第一次分類和回歸之后,會(huì)用得到 bounding box 再來做一次 pooling,然后對(duì)這些框做下一階段的分類和回歸,這個(gè)過程可以重復(fù)多次。但如果僅僅使用 Cascade R-CNN 而不做其他改變,Cascade R-CNN 帶來的提高是非常有限的。
我認(rèn)為 Cascade R-CNN 提出了一個(gè)很好的 motivation,這是它比較有意義的一個(gè)地方。它研究了一下采用不同的 IoU 閾值來進(jìn)行 training 的情況下,Detector 和 Regressor 的性能分布。如下圖所示:
基于此,Cascade R-CNN 就提出了在不同的 stage 怎樣進(jìn)行訓(xùn)練的問題。下圖是 3 個(gè) stage 的框的分布:
結(jié)果顯示,越往后的 stage,它的高 IoU 的框就越多。所以在 Cascade R-CNN 中,第 1 個(gè) stage 用的是傳統(tǒng)的 0.5 的閾值;第 2 個(gè) stage 用的是 0.6 的閾值;第 3 個(gè) stage 用的是 0.7 的閾值。這篇論文的核心思想是,training distribution 在不同的 stage 需要隨著 sample distribution 來改變的。
(對(duì)于 Cascade R-CNN 的具體講解,請(qǐng)回看視頻 00: 30:30-00:35:30 處)
RetinaNet
RetinaNet 是 Singe-stage Detector 目前比較重要的一項(xiàng)工作,它可以看做是由 FPN+Focal Loss 組成的,其中 FPN 只是該論文中用到的架構(gòu),而 Focal Loss 則是本論文主要提出的工作。
RetinaNet 結(jié)構(gòu)如下:
RetinaNet 的結(jié)構(gòu) 和 SSD 非常類似,只不過它用的是 ResNet,并在 ResNet 上加入了 FPN 的結(jié)構(gòu),每一層都有兩個(gè)分支:一個(gè)用來做分類;另一個(gè)用來做框回歸。此外它的每個(gè) head 都比 SSD 和 Faster R-CNN 都要大一點(diǎn),這樣的話,它的參數(shù)量比較大,計(jì)算速度也比較慢。
而 Focal Loss 試圖解決的問題是 class imbalance。針對(duì) class imbalance 的問題,Two-stage Detector 一般是通過 proposal、mini-batch sampaling 兩種方式來解決的;SSD 是通過 hard negative mining 來解決的;而 RetinaNet 則通過 Focal Loss 來解決該問題。
Focal loss 的核心思路是:對(duì)于 high confidence 的樣本,給一個(gè)小的 loss——這是因?yàn)檎?fù)樣本不平衡,或者說是由于 class imbalance 導(dǎo)致了這樣的問題:比如說正負(fù)樣本的比例是 1:1000,雖然負(fù)樣本的 loss 都很小,但數(shù)目非常多,這些負(fù)樣本的 loss 加起來的話,還是比正樣本要多——這樣的話,負(fù)樣本就會(huì)主導(dǎo)整個(gè)框架。其具體公式表示如下圖所示:
(關(guān)于 RetinaNet 更詳細(xì)的講解,請(qǐng)回看視頻 00:35:55-00 :40:45 處)
Relation Network
在 Relation Network 之前的大部分 detectcor,在做 prediction 或 training 的時(shí)候通常只考慮到當(dāng)前這一個(gè)框,而 Relation Network 提出還要考慮這個(gè)框周圍的框,并基于此提出了一個(gè) relation module,可以插在網(wǎng)絡(luò)的任何位置,相當(dāng)于是 feature refinement。Relation module 如下圖所示:
它的核心思想是:當(dāng)前框的 feature 除了由當(dāng)前框決定之外,還要考慮當(dāng)前框和周圍框及其它框的關(guān)系,具體怎樣計(jì)算,大家感興趣的話可以閱讀論文原文了解。
SNIP
SNIP(Scale Normalization for Image Pyramids)是我認(rèn)為另一篇比較有啟發(fā)性的工作。它提出的問題是:在 train 分類器的時(shí)候,究竟是要 scale specific 還是 scale invariant。傳統(tǒng)的 detector 通常會(huì)選擇 scale invariant,但 SNIP 研究了一下之前的方法后,發(fā)現(xiàn)之前的訓(xùn)練方式得到的 feature 對(duì) scale 并沒不是很 robust,因而提出要盡量減少 scale 的 variance,讓訓(xùn)練時(shí)的 scale 盡可能地相似。
SNIP 結(jié)構(gòu)圖如下:
CornerNet
CornerNet,是 Singe-stage Detector 中比較新的方法,其與其他方法最不一樣的地方是:之前的方法會(huì)在圖像上選出框,再對(duì)框做分類的問題;CornerNet 則是在圖中找到 pair 的關(guān)鍵點(diǎn),這個(gè)點(diǎn)就代表物體。它的 pipeline 包括兩步:第一步是檢測(cè)到這樣的 corner,即 keypoint;第二步是 group corner,就是說怎樣將同一個(gè)物體的左上頂點(diǎn)和右下頂點(diǎn)框到一起。
其 pipeline 如下圖所示:
(關(guān)于 CornerNet 的具體講解,請(qǐng)回看視頻 00: 41:35-00:47:40 處)
下面講一下我們?cè)?COCO Challenge 2018 中的工作。
我們實(shí)驗(yàn)室和商湯一起參加了 COCO Challenge 2018 比賽,然后在實(shí)例分割中取得了第一名的成績(jī)。
下圖展示了我們本次取得的成績(jī)與 2017 年的冠軍團(tuán)隊(duì)取得的成績(jī)的比較:
比賽中,我們?cè)谌齻€(gè)方面提出了比較新的東西:
第一,針對(duì) detection 和 segmentation,我們提出了 Hybrid Task Cascade,簡(jiǎn)稱 HTC;
第二,針對(duì) proposal 方面,我們提出了 Guided Anchoring,它是為了取代 sliding window 的 anchor;
第三,針對(duì) backbone,我們?cè)O(shè)計(jì)了新的 backbone——FishNet。
Hybrid task cascade(HTC)
前面我們講到過,Cascade Mask R-CNN 的×××performance 非常高,所以比賽中幾乎所有的隊(duì)伍都用了 Cascade Mask R-CNN,而這種方法其中的一項(xiàng)重要工作就是預(yù)測(cè) mask,我們當(dāng)時(shí)一個(gè)比較 naive 的想法就是把 Cascade R-CNN 和 Mask R-CNN 結(jié)合在一起,結(jié)構(gòu)如下圖所示:
但這種方法的問題是:每個(gè) stage 的 branch 都做并行的 prediction,彼此間沒有任何交集。
為了改善這一問題,我們提出了 interleaved execution,即交替做 bbox prediction 和 mask prediction。結(jié)構(gòu)如下:
但是它仍存在一個(gè)問題是:不同 stage 的 mask branches 之間沒有 information flow,所以需要人為引入 information flow,如下圖所示:
不過這樣的話,該方法依舊存在另外一個(gè)問題:做 mask prediction 需要一些 spatial context,然而上面這個(gè)架構(gòu)中并沒有引入任何 spatial context。那我們就想到可以做一個(gè)全圖的 semantic segmentation,這樣做的話,框架的 spatial context 就變得比較明顯了:
基于這些調(diào)整和改進(jìn),HTC 最終的 performance 如下圖所示:
無論是在小模型 ResNet-50 上還是大模型 ResNeXt-101 上,它的性能都有非常穩(wěn)定的提升。
Guided Anchoring
Guided Anchoring 的思路是:將 sliding window anchor 變成 learnable 的東西。因此其目標(biāo)就是得到 sparse anchor,同時(shí)其形狀是任意的。但是在設(shè)計(jì) anchor 的時(shí)候有兩個(gè)原則:alignment 和 consistency。
下面幾張圖是 Guided Anchoring 的實(shí)現(xiàn)過程:
下圖是 Guided Anchoring 的 performance:
FishNet
FishNet 這個(gè)工作的論文被 NIPS 2018 收錄了。它的想法是:對(duì)于圖像分類來說,需要的是深層的、低分辨率的特征,而不考慮空間上的信息;但是對(duì)于 segmentation 和 detection 來說,需要空間上的信息,因此需要的是深層的和高分辨率的特征,因此我們就將這兩種思路結(jié)合起來設(shè)計(jì)了 FishNet。具體設(shè)計(jì)大家可以參考論文。
FishNet 的性能如下圖所示:
在 detection 和 instance segmentation 中,性能也有比較大的提升。
(關(guān)于這三個(gè)工作的具體講解,請(qǐng)回看視頻 00:49:00-00:59:40 處)
下圖顯示了我們?cè)诒荣愔械南嚓P(guān)工作的一些細(xì)節(jié):
(關(guān)于比賽細(xì)節(jié)的詳細(xì)講解,請(qǐng)回看視頻 00:59:50-01:01:40)
最后我介紹一下 Open-MMlab 的這個(gè)項(xiàng)目。林達(dá)華老師在 MMLAB 知乎專欄(地址:https://zhuanlan.zhihu.com/p/47011261)里對(duì)這個(gè)項(xiàng)目進(jìn)行過介紹。
目前有兩個(gè)代碼庫 :一個(gè)是 mmcv;另一個(gè)是 mmdetection。
(關(guān)于這兩個(gè)項(xiàng)目的具體講解,請(qǐng)回看視頻 01:02:10-1:04:25 處。)
分享最后,嘉賓還對(duì)各位同學(xué)們的提問進(jìn)行了回答,大家可回看視頻 01:04:30 處
以上就是本期嘉賓的全部分享內(nèi)容。更多公開課視頻請(qǐng)到雷鋒網(wǎng) AI 研習(xí)社社區(qū)(http://ai.yanxishe.com/)觀看。關(guān)注微信公眾號(hào):AI 研習(xí)社(okweiwu),可獲取最新公開課直播時(shí)間預(yù)告。雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。