0
本文作者: AI研習(xí)社-譯站 | 2018-04-08 17:44 |
本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題Recent FAIR CV Papers - FPN, RetinaNet, Mask and Mask-X RCNN,作者為Krish。
FPN, RetinaNet,,Mask 和 Mask-X RCNN
翻譯 | 李石羽 林立宏 整理 | 凡江
這篇文章會(huì)從 FAIR 在基本模塊上的創(chuàng)新開始談到CNN,再到one-shot 物體檢測(cè)。之后會(huì)講實(shí)例分割的創(chuàng)新。最后聊聊依靠弱半監(jiān)督模型來(lái)擴(kuò)展實(shí)例分割。
FPN
特征金字塔網(wǎng)絡(luò) (FPN) [1] 發(fā)表在 2017 年的 CVPR 上。如果你關(guān)注最近兩年計(jì)算機(jī)視覺(jué)的發(fā)展,就知道冥冥之中存在著那樣一些優(yōu)秀的算法,而你要做的,就是等著大神們把它寫出來(lái)、訓(xùn)練好、再公開源碼。認(rèn)真地說(shuō),F(xiàn)PN這篇論文寫的非常不錯(cuò),很合我胃口。能構(gòu)建出一個(gè)簡(jiǎn)單易行的基本模型,在各種不同的任務(wù)都好使,并不是一件容易的事。深究細(xì)節(jié)之前先強(qiáng)調(diào)一點(diǎn),F(xiàn)PN 是基于一個(gè)特征提取網(wǎng)絡(luò)的,它可以是常見(jiàn)的 ResNet 或者 DenseNet 之類的網(wǎng)絡(luò)。在你最常用的深度學(xué)習(xí)框架下取一個(gè)預(yù)訓(xùn)練模型,就可以用來(lái)實(shí)現(xiàn) FPN 了。
圖像里的目標(biāo)尺寸大小各種各樣,數(shù)據(jù)集里的物體不可能涵蓋所有的尺度,所以人們利用圖像金字塔(不同分辨率的下采樣)來(lái)幫助 CNN 學(xué)習(xí)。但是這樣的速度太慢了,所以人們只使用單一尺度來(lái)預(yù)測(cè),也有人會(huì)取中間結(jié)果來(lái)預(yù)測(cè)。后者和前者很像,只不過(guò)是在特征圖上的。比較容易想到的方法是,在幾層殘差模塊后面加一層轉(zhuǎn)置卷積,提高分辨率,得到分割的結(jié)果,或者通過(guò) 1x1 的卷積或 GlobalPool 得到分類的結(jié)果。這種架構(gòu)在有輔助信息和輔助損失函數(shù)時(shí)被大量使用。
FPN 的作者用一種很巧妙的辦法提高了上述的方法。除了側(cè)向的連接,還加入了自上而下的連接。這樣做效果非常好。作者把從上到下的結(jié)果和側(cè)向得到的結(jié)果通過(guò)相加的辦法融合到一起。這里的重點(diǎn)在于,低層次的特征圖語(yǔ)義不夠豐富,不能直接用于分類,而深層的特征更值得信賴。將側(cè)向連接與自上而下的連接組合起來(lái),就可以得到不同分辨率的的特征圖,而它們都包含了原來(lái)最深層特征圖的語(yǔ)義信息。
模型細(xì)節(jié)
金字塔 - 同樣尺寸的特征圖屬于同一級(jí)。每級(jí)最后一層輸出是金字塔的特征圖,比如 ResNet 第2,3,4,5個(gè)模塊的最后一層。你可以根據(jù)需要進(jìn)行調(diào)整。
側(cè)向連接:通過(guò) 1x1 卷積并與經(jīng)過(guò)上采樣的從上到下連接的結(jié)果相加求和。自上而下的部分生成粗粒度特征,自下而上的部分通過(guò)側(cè)向連接加入細(xì)粒度特征。原文的圖示表達(dá)的非常明了。
原文中只是用一個(gè)簡(jiǎn)單的例子展示了 FPN 的設(shè)計(jì)之簡(jiǎn)單以及效果之可觀,這不代表它不能用于更復(fù)雜的研究中。
如我剛才所說(shuō),這是個(gè)萬(wàn)金油網(wǎng)絡(luò),可以用在目標(biāo)檢測(cè)、實(shí)例分割、姿態(tài)識(shí)別、面部識(shí)別等各種各樣的應(yīng)用里。文章僅僅公開幾個(gè)月就有了近 100 次引用。文章題目是《用于目標(biāo)識(shí)別的金字塔特征網(wǎng)絡(luò)》,所以作者把 FPN 帶入到 Faster-RCNN 中作為區(qū)域推薦網(wǎng)絡(luò) (RPN)。很多關(guān)鍵的細(xì)節(jié)在原文中都有詳細(xì)的解釋,為了節(jié)約時(shí)間我這里列幾條重點(diǎn)。
實(shí)驗(yàn)要點(diǎn)
用 FPN 作為 RPN - 用 FPN 的多分辨率特征取代單一分辨率的特征圖,每一級(jí)上用同樣的尺寸的 anchor(因?yàn)樘卣鲌D尺度不同從而達(dá)到了多尺度 anchor 的效果)。金字塔的每一級(jí)都共享相似的語(yǔ)義水平。
FasterRCNN - 用類似于處理圖像金字塔的方法來(lái)處理 FPN。ROI通過(guò)下面這個(gè)公式來(lái)分派給特定的一級(jí)。
w 和 h 分別代表寬度和高度。k 是ROI被分配到的層級(jí),表示輸入原圖大小(224x224)的那一層。
簡(jiǎn)單粗暴地在 COCO 數(shù)據(jù)集上獲得了最優(yōu)效果。
對(duì)每一個(gè)模塊都進(jìn)行了單變量實(shí)驗(yàn),從而證明了開頭的說(shuō)法。
基于 DeepMask and SharpMask 架構(gòu)演示了 FPN 可以用于圖像分割建議生成。
對(duì)實(shí)現(xiàn)細(xì)節(jié)感興趣的同學(xué)一定要去讀一讀原文。
附注:FPN 是基于一個(gè)主干模型的,比如 ResNet。常見(jiàn)的命名方法是:主干網(wǎng)絡(luò)-層數(shù)-FPN,例如:ResNet-101-FPN
代碼實(shí)現(xiàn)
Caffe2(官方實(shí)現(xiàn)) - https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines
Caffe - https://github.com/unsky/FPN
PyTorch - https://github.com/kuangliu/pytorch-fpn(just the network)
MXNet - https://github.com/unsky/FPN-mxnet
Tensorflow - https://github.com/yangxue0827/FPN_Tensorflow
RetinaNet
同樣的團(tuán)隊(duì),同樣的一作,這篇文章發(fā)表在了 2017 年的 ICCV 上[2]。這篇文章有兩個(gè)重點(diǎn),一般性的損失函數(shù) Focal Loss (FL) 以及單階段的目標(biāo)檢測(cè)模型 RetinaNet。這兩者的結(jié)合在 COCO 目標(biāo)檢測(cè)任務(wù)中大顯身手,超過(guò)了剛才提到的 FPN。
Focal Loss
這是一個(gè)極其精巧簡(jiǎn)潔的設(shè)計(jì)。如果你熟悉加權(quán)損失函數(shù)的話,這基本上是同樣的原理,只不過(guò)更集中在難以分類的樣本上。它的公式如下,很好理解
是一個(gè)可以調(diào)整的超參數(shù)。
表示樣本分類的概率。 讓
大于 0 會(huì)降低分類正確樣板的權(quán)重。
含義與在常規(guī)的加權(quán)損失函數(shù)中相同。論文中被稱為
損失函數(shù)。注意這只是用于分類的損失函數(shù),在 RetinaNet 的目標(biāo)檢測(cè)任務(wù)中要與 smooth L1 損失一起使用。
RetinaNet
一款單階段檢測(cè)器竟是出于 FAIR 之手,實(shí)在驚人。YOLOv2 和 SSD 在單階段檢測(cè)領(lǐng)域稱霸至今。但如作者所說(shuō),它們都沒(méi)有達(dá)到目前(包括兩階段檢測(cè)器)最佳的效果。 同為單階段檢測(cè)器的 RetinaNet 卻做到了,兼顧速度與效果。作者表示能帶到如此效果是因?yàn)樾碌膿p失函數(shù)而不是網(wǎng)絡(luò)的改進(jìn)(網(wǎng)絡(luò)用的是 FPN)。 單階段檢測(cè)器會(huì)面臨大量的樣本不平衡狀況,背景樣本太多,物體樣本太少。加權(quán)損失只能做到平衡,而 FL 主要針對(duì)難例,這兩者也可以相結(jié)合。
需要注意的地方
兩階段檢測(cè)器不需要擔(dān)心不平衡的問(wèn)題,因?yàn)榈谝浑A段移除了幾乎所有的不平衡。
網(wǎng)絡(luò)包含兩部分 - 主干網(wǎng)絡(luò)(用于特征提取,比如 FPN)和兩個(gè)子網(wǎng)絡(luò)分別用于分類與邊框回歸。
選擇不同組件時(shí)性能差異不大。
Anchor 或 AnchorBoxes 與 RPN [5] 中的 Anchor 相同,都以滑窗為中心并有一個(gè)長(zhǎng)寬比。尺度與長(zhǎng)寬比和 [1] 一樣,尺度從到
,長(zhǎng)寬比分別為 1:2, 1:1, 2:1。
FPN 的每一級(jí),都通過(guò)子網(wǎng)絡(luò)給出相應(yīng)的有 anchor 的輸出。
代碼實(shí)現(xiàn)
Caffe2(官方實(shí)現(xiàn)) - https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines
PyTorch - https://github.com/kuangliu/pytorch-retinanet
Keras - https://github.com/fizyr/keras-retinanet
MXNet - https://github.com/unsky/RetinaNet
Mask R-CNN
Mask R-CNN [3] 也是來(lái)自同一個(gè)團(tuán)隊(duì)。在2017年的ICCV上發(fā)表的,用于圖像實(shí)例分割。對(duì)于外行人來(lái)說(shuō),它是基本的對(duì)象檢測(cè),而不是畫邊界框, 任務(wù)是給出對(duì)象的精確分割圖! 回想起來(lái),人們會(huì)說(shuō)這一個(gè)如此簡(jiǎn)單的想法,但是它是可行的,并且成為了SOTA,為預(yù)訓(xùn)練的模型提供了一種快速實(shí)現(xiàn),這是一項(xiàng)了不起的工作!
長(zhǎng)話短說(shuō),如果你知道 Faster-RCNN,那你就會(huì)知道它非常簡(jiǎn)單,給分割添加另外一個(gè)頭部(分支)。通常是3個(gè)分支,分別用于分類,邊框回歸和分割。
又一次,這種方法關(guān)注于使用簡(jiǎn)單和基本的神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)來(lái)提高效率。沒(méi)有任何花里胡哨的東西就讓他們獲得了SOTA。(有一些免費(fèi)技術(shù)(比如OHEM,多維度訓(xùn)練/測(cè)試等)能夠適用于所有的方法用于提高準(zhǔn)確性,花里胡哨的實(shí)現(xiàn)并不使用他們。因?yàn)樗麄兪敲赓M(fèi)的,準(zhǔn)確率肯定會(huì)提高。但是這不在本文的討論范圍之內(nèi))
我非常喜歡這篇論文,它非常的簡(jiǎn)單。但有一些論文在一些很簡(jiǎn)單的事情上給了過(guò)多的解釋,并給出了明確的方式進(jìn)行實(shí)現(xiàn)。比如說(shuō),使用多項(xiàng)mask和獨(dú)立的mask(softmax 和 sigmoid)。此外,它不需要假定大量先驗(yàn)知識(shí)和解釋所有的事情(有時(shí)候可能也是一個(gè)騙局)。有人認(rèn)真了論文的話就會(huì)很明顯地發(fā)現(xiàn),他們的新想法在現(xiàn)有成熟的環(huán)境上不能工作。下面的解釋假定了你對(duì) Fast RCNN有基本的了解:
它和FasterRCNN是相似的,有兩個(gè)階段,第一階段是RPN。
加入了平行分支用于預(yù)測(cè)分割mask——一個(gè)FCN。
損失是的總和
用ROIAlign 層替代了ROIPool。這實(shí)際上是將 (x/spatial_scale) 分?jǐn)?shù)四舍五入為一個(gè)整數(shù)像ROIPool中那樣。 相反,它通過(guò)雙線性插值來(lái)找出那些浮點(diǎn)值處的像素。
例如:假設(shè)ROI的高度和寬度分別為54,167。 空間尺度基本上是圖像尺寸/ FMap尺寸(H / h),在這種情況下它也被稱為步幅。通常為:224/14 = 16(H = 224,h = 14)。
ROIPool: 54/16,167/16 = 3,10
ROIAlign:54/16,167/16 = 3.375,10.4375
現(xiàn)在我們可以使用雙線性插值來(lái)上取樣
根據(jù)ROIAlign輸出形狀(例如7x7),類似的邏輯將相應(yīng)的區(qū)域分成適當(dāng)?shù)膮^(qū)域。
如果感興趣的話,可以查閱Chainer用python實(shí)現(xiàn)的ROIPooling,并嘗試自己實(shí)現(xiàn)ROIAlign
ROIAlign代碼可以在不同的庫(kù)中使用,請(qǐng)查看下面提供的代碼倉(cāng)庫(kù)。
核心是 ResNet-FPN
PS - 我針對(duì)Mask-RCNN上也寫了一篇單獨(dú)的文章,很快就會(huì)在這里發(fā)布。
代碼實(shí)現(xiàn)
Official Caffe2 - https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines
Keras - https://github.com/matterport/Mask_RCNN/
PyTorch - https://github.com/soeaver/Pytorch_Mask_RCNN/
MXNet - https://github.com/TuSimple/mx-maskrcnn
Mask-X RCNN
正如標(biāo)題所說(shuō)的,這是關(guān)于分割的。更準(zhǔn)確的說(shuō),是實(shí)例分割。計(jì)算機(jī)視覺(jué)中的分割標(biāo)準(zhǔn)數(shù)據(jù)集,對(duì)現(xiàn)實(shí)世界有用的非常少。 COCO數(shù)據(jù)集[7]即使在2018年也是最流行和豐富的數(shù)據(jù)集,只有80個(gè)對(duì)象類。這甚至不是很有用。 相比之下,對(duì)象識(shí)別和檢測(cè)數(shù)據(jù)集(如OpenImages [8])具有近6000個(gè)分類和545個(gè)檢測(cè) 。話雖如此,斯坦福大學(xué)還有另一個(gè)名為Visual Genome數(shù)據(jù)集的數(shù)據(jù)集,其中包含3000類對(duì)象!那么,為什么不使用這個(gè)呢? 每個(gè)分類下的對(duì)象數(shù)量太少,所以DNN沒(méi)有辦法在這樣的數(shù)據(jù)集上很好的工作,所以人們不使用這個(gè)數(shù)據(jù)集盡管它很豐富,對(duì)現(xiàn)實(shí)世界也很有用。請(qǐng)注意,數(shù)據(jù)集沒(méi)有任何分割的注釋,只有3000個(gè)類別的對(duì)象檢測(cè)(邊框)標(biāo)簽可用。
談到第四篇論文啦,這也是一篇非??岬恼撐摹U缛藗兡芟氲?,在邊框和分割注解領(lǐng)域上并沒(méi)有太大的區(qū)別,只是后者比前者精確得多。所以,因?yàn)槲覀冊(cè)赩isual Genome [9]數(shù)據(jù)集中有3000個(gè)類,為什么不利用它來(lái)給出分割輸出。這就是他們所做的,這可以稱為弱監(jiān)督(或弱半監(jiān)督)學(xué)習(xí),你沒(méi)有完全監(jiān)督你試圖完成的任務(wù)。它還可以與半監(jiān)督相關(guān)聯(lián),因?yàn)樗鼈兪褂肅OCO + Visual Genome數(shù)據(jù)集。分割標(biāo)簽以及邊框標(biāo)簽。這篇論文是迄今為止最酷的。
建立在Mask-RCNN之上
輸入有mask和輸入沒(méi)有mask兩種方式進(jìn)行訓(xùn)練
在mask和bbox mask之間添加一個(gè)權(quán)重轉(zhuǎn)換函數(shù)
在訓(xùn)練過(guò)程中,一個(gè)能夠在整個(gè)數(shù)據(jù)集上 反向傳播bbox的損失,但是另外一個(gè)只能在輸入的真實(shí)數(shù)據(jù)(數(shù)據(jù)集 A)中帶有mask的損失上反向傳播
在推斷過(guò)程中,當(dāng)通過(guò)一個(gè)輸入的時(shí)候,函數(shù) τ 預(yù)測(cè)mask特征需要相乘的權(quán)重。模型的一種拓展使用了融合MLP+FCN模型的方式來(lái)改善準(zhǔn)確度。這里只是使用了簡(jiǎn)單的MLP來(lái)代替。
如下圖所示,兩個(gè)數(shù)據(jù)集:A是COCO數(shù)據(jù)集和B是VG數(shù)據(jù)集, 注意不同輸入(bbox和mask)在任意輸入計(jì)算得到不同的損失。
反向傳播是計(jì)算這兩種損失會(huì)導(dǎo)致的權(quán)重出現(xiàn)差異,因?yàn)镃OCO和VG之間的共同類別有兩個(gè)損失(bbox和mask),而其余類別只有一個(gè)(bbox)。這有一個(gè)解決辦法:
當(dāng)反向傳播mask時(shí),計(jì)算預(yù)測(cè)mask權(quán)重
與權(quán)重傳遞函數(shù)參數(shù)θ的梯度,但不包括邊框權(quán)重
。
其中 τ 函數(shù)預(yù)測(cè)mask的權(quán)重
由于沒(méi)有注釋可用,因此他們無(wú)法在VG數(shù)據(jù)集上顯示精確度。 所以他們把這個(gè)想法應(yīng)用到可以證明結(jié)果的數(shù)據(jù)集上。PASCAL-VOC有20個(gè)等級(jí),在COCO中都很常見(jiàn) 。因此,他們使用VOC分類標(biāo)簽進(jìn)行培訓(xùn),并且只使用來(lái)自COCO的bbox標(biāo)簽對(duì)這20個(gè)類進(jìn)行訓(xùn)練。 針對(duì)在COCO數(shù)據(jù)集的20個(gè)類的實(shí)例分割的任務(wù)的結(jié)果如下. 反之亦然,因?yàn)檫@兩個(gè)數(shù)據(jù)集中都有真實(shí)值(Ground truth),這個(gè)結(jié)果列在下面的表格中。
PS - 如果它變得有用的話,我打算查閱論文來(lái)寫一篇關(guān)于使用權(quán)重預(yù)測(cè)方法,去做有意思的事。
代碼實(shí)現(xiàn)
參考文獻(xiàn)
[1] Lin, Tsung-Yi, Piotr Dollár, Ross B. Girshick, Kaiming He, Bharath Hariharan and Serge J. Belongie. “Feature Pyramid Networks for Object Detection.” *2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)* (2017): 936-944.
[2] Lin, Tsung-Yi, Priya Goyal, Ross B. Girshick, Kaiming He and Piotr Dollár. “Focal Loss for Dense Object Detection.” *2017 IEEE International Conference on Computer Vision (ICCV)* (2017): 2999-3007.
[3] He, Kaiming, Georgia Gkioxari, Piotr Dollár and Ross B. Girshick. “Mask R-CNN.” *2017 IEEE International Conference on Computer Vision (ICCV)* (2017): 2980-2988.
[4] Hu, Ronghang, Piotr Dollár, Kaiming He, Trevor Darrell and Ross B. Girshick. “Learning to Segment Every Thing.” *CoRR*abs/1711.10370 (2017): n. pag.
[5] Ren, Shaoqing, Kaiming He, Ross B. Girshick and Jian Sun. “Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks.” *IEEE Transactions on Pattern Analysis and Machine Intelligence* 39 (2015): 1137-1149.
[6] Chollet, Fran?ois. “Xception: Deep Learning with Depthwise Separable Convolutions.” 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (2017): 1800-1807.
[7] Lin, Tsung-Yi, Michael Maire, Serge J. Belongie, James Hays, Pietro Perona, Deva Ramanan, Piotr Dollár and C. Lawrence Zitnick. “Microsoft COCO: Common Objects in Context.” ECCV (2014).
[8] Krasin, Ivan and Duerig, Tom and Alldrin, Neil and Ferrari, Vittorio et al. OpenImages: A public dataset for large-scale multi-label and multi-class image classification. Dataset available from https://github.com/openimages
[9] Krishna, Ranjay, Congcong Li, Oliver Groth, Justin Johnson, Kenji Hata, Joshua Kravitz, Stephanie Chen, Yannis Kalantidis, David A. Shamma, Michael S. Bernstein and Li Fei-Fei. “Visual Genome: Connecting Language and Vision Using Crowdsourced Dense Image Annotations.” International Journal of Computer Vision 123 (2016): 32-73.
更多文章,關(guān)注雷鋒網(wǎng) 雷鋒網(wǎng) 雷鋒網(wǎng)
添加雷鋒字幕組微信號(hào)(leiphonefansub)為好友
備注「我要加入」,To be an AI Volunteer !
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。