詳解何愷明團隊4篇大作 !(附程式碼)| 從特徵金字塔網路、Mask R-CNN到學習分割一切
來源:新智元
作者:krish
本文5000字,建議閱讀10+分鐘。
本文介紹FAIR何愷明、Tsung-Yi Lin等人的團隊在計算機視覺領域最新的一些創新,包括特徵金字塔網路、RetinaNet、Mask R-CNN以及用於例項分割的弱半監督方法。
特徵金字塔網路(Feature Pyramid Networks)
讓我們以現在著名的Feature Pyramid Networks(FPN)[1]開始,這是在CVPR 2017發表的論文,作者Tsung-Yi Lin,何愷明等人。FPN的論文真的很棒。構建一個每個人都可以在各種任務、子主題和應用領域中建立的基準模型並不容易。在詳細討論之前,我們需要了解的一點是:
物體是以不同的的scale和size出現的。資料集無法捕獲所有這些資料。因此,可以使用影象金字塔(影象的多種縮小比例),以使CNN更易處理。但這太慢了。所以人們只使用一個單個scale的預測,也可以從中間層進行預測。這跟前一種方法有點像,但這是在特徵空間上進行的。例如,在幾個ResNet塊之後放一個Deconv,並獲得分割輸出(分類也類似,可以是1x1 Conv和GlobalPool)。
FPN的作者找到了一種改進上述方法的聰明方法。不是僅僅具有橫向連線,而是將自上而下的pathway也放在上面。
FPN論文的一些細節:
金字塔(pyramid):即屬於一個stage的所有大小相同的輸出圖。最後一層的輸出是金字塔的參考FMaps。例如:ResNet - 第2,3,4,5個block的輸出。根據記憶體的可用性和特定任務,你可以根據需要改變金字塔。
橫向連線(Lateral connection):1x1 Conv和Top-Down pathway是2x的上取樣。這個想法來自於頂部特徵,同時向下產生粗糙的特徵,而橫向連線則增加了從下往上的路徑中更精細的細節。如下圖所示。
這篇論文只描述了一個簡單的demo。它只是展現了這個想法在簡單的設計選擇中表現非常好,你可以做得更大、更復雜。
正如我前面所說,這是一個基礎網路,可以在任何任務上使用,包括目標檢測,分割,姿態估計,人臉檢測等等。論文釋出後幾個月的時間,已經得到100多個引用!論文的標題是FPNs for Object Detection,因此作者繼續將FPN用作RPN(Region Proposal Network)和Faster-RCNN網路的baseline。更多關鍵細節在論文中有更全面的解釋,這裡只列出一部分。
實驗的一些要點:
用於RPN的FPN:用FPN替換單一尺度的FMap。它們對每個級都有一個單一尺度的anchor(不需要多級作為其FPN)。它們還表明,金字塔的所有層級都有相似的語義層級。
Faster RCNN:他們以類似於影象金字塔輸出的方式觀察金字塔。因此,使用下面這個公式將RoI分配到特定level。
其中w,h分別表示寬度和高度。k是分配RoI的level。是w,h=224,224時對映的level。
他們對每個模組的工作進行消融實驗,以證實論文開頭的宣稱。
他們還基於DeepMask和SharpMask這兩篇論文展示瞭如何將FPN用於segmentation proposal生成。
程式碼:
官方:Caffe2
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——密集物件檢測的Focal Loss函式
RetinaNet跟上面的FPN來自同一團隊,第一作者也都是Tsung-Yi Lin。這篇論文發表於ICCV 2017,並且獲得當年的最佳學生論文。
這篇論文有兩個關鍵想法——稱為焦點損失(Focal Loss,FL)的損失函式和稱為RetinaNet的single stage物體檢測網路。該網路在COCO物體檢測任務上表現非常出色,同時也擊敗了前面的FPN benchmark。
Focal Loss:
Focal Loss是很聰明的想法,而且很簡單!如果你已經熟悉加權損失,這個與加權損失基本相同,但具有更聰明的權重,將更多的注意力集中在對困難的樣本進行分類。公式如下:
其中γ是一個可以改變的超引數。是來自分類器的樣本的概率。如果設γ比0大,將減小分類號的樣本的權重。是正常加權損失函式中類的權重。在論文中它被表示為α-balanced loss。需要注意的是,這是分類損失,並與RetinaNet中物體檢測任務的平滑L1損失相結合。
RetinaNet:
FAIR釋出這個single stage的檢測網路,很是令人驚訝。直到現在,在 single stage 的目標檢測中,佔據主導地位的仍是YOLOv2和SSD。但正如作者指出的那樣,這兩個網路都沒有能夠非常接近SOTA方法。RetinaNet做到了這一點,同時它是one stage而且快速的。作者認為,最好的結果是由於新的損失,而不是由於一個簡單的網路(它後端是一個FPN)。 one stage的檢測器將在背景與positive classes之間存在很多不平衡(而非positive classes內部的不平衡)。他們認為,加權損失函式只是針對平衡,但FL則針對簡單/困難的樣本,同時也表明兩者可以結合起來。
程式碼:
Official Caffe2
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也來自FAIR何愷明團隊,論文發表在ICCV 2017。Mask R-CNN用於目標例項分割。簡單來說,目標例項分割基本上就是物件檢測,但不是使用邊界框,它的任務是給出物件的精確分割圖!
TL;DR : 如果你已經瞭解Faster R-CNN,那麼Mask R-CNN就很好理解了,就是為分割增加另一個head(branch)。所以它有3個branch,分別用於分類、bounding box regression和分割。
下面的解釋假設你已經對Faster R-CNN有一定了解:
Mask R-CNN與Faster R-CNN相似,Faster R-CNN是two-stage的,其中第一個stage是RPN。
新增一個預測分割mask的並行分支——這是一個FCN。
Loss是,和的和。
ROIlign Layer而不是ROIPool。這就不會像ROIPool那樣將(x / spatial_scale)分數舍入為整數,相反,它執行雙線性插值來找出那些浮點值處的畫素。
例如:想象一下,ROI的高度和寬度分別為54,167。空間尺度基本上是影象大學/ FMap大學(H / h),在這種情況下它也被稱為步幅(stride)。通常224/14 = 16(H = 224,h = 14)。
◦ ROIPool: 54/16, 167/16 = 3,10
◦ ROIAlign: 54/16, 167/16 = 3.375, 10.4375
◦ 現在我們可以使用雙線性插值來進行上取樣。
◦ 根據ROIAlign輸出形狀(例如7x7),類似的邏輯將相應的區域分成適當的bins。
◦ 感興趣的話可以看看Chainer的ROIPooling的python實現,並嘗試自己實現ROIAlign
◦ ROIAlign程式碼可以在不同的庫中使用,請檢視下面提供的程式碼庫。
它的主幹是ResNet-FPN
程式碼:
官方 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
學習分割一切(Learning to Segment Everything)
文如其名,這篇論文是關於分割的。更具體的說,是關於例項分割的。計算機視覺中用於分割的標準資料集非常小,對現實世界的問題不足以有效。即便到了2018年,創建於2015年的COCO資料集仍然是最流行、最豐富的資料集,儘管它只有80個物體類別。
相比之下,物件識別和檢測的資料集(例如OpenImages [8])具有用於分類任務的6000個類別和用於檢測的545個類別。話雖如此,斯坦福大學還有另一個名為Visual Genome的資料集,其中包含3000個物體類別!那麼,為什麼不使用這個資料集呢?因為每個類別中的影象數量太少,因此DNN在這個資料集上並不會真正起作用,所以即使它更豐富,人們也不會使用這個資料集。而且,這個資料集沒有任何分割註釋,只有3000個類別的物件檢測的邊界框(bounding boxes)標籤可用。
讓我們回到Learning to Segment Everything這篇論文。實際上,邊界框(bounding box)和分割註釋(segmentation annotation)對於域來說並沒有太大的區別,僅僅是後者比前者更精確。因此,因為Visual Genome資料集有3000個類,為什麼不利用這個資料集來做例項分割呢?FAIR何愷明團隊正是這樣做的。這可以被稱為弱監督(或弱半監督?)學習,也就是說你沒法完全監督你想要實現的任務。它還可以與半監督相關聯,因為它們都使用COCO + Visual Genome資料集。這篇論文是迄今為止最酷的。
它是建立在Mask-RCNN之上的
同時在有mask標註和無mask標註的輸入上訓練
在mask和bbox mask之間新增一個weight transfer函式
當無mask標註的輸入通過時,wseg 預測將於馬薩卡 features相乘的權重;當有mask標註的輸入通過時,不使用這個函式,代而使用一個簡單的MLP。
如下圖所示。A是COCO資料集,B是VG。注意不同輸入的兩個不同路徑。
由於沒有註釋可用,作者無法在VG資料集上顯示精確度,因此他們把這個想法應用到可以證明結果的資料集上。PASCAL-VOC有20個類別,而且這些類別在COCO中都很常見。因此,他們使用VOC分類標籤進行訓練,並且只使用來自COCO的bbox標籤對這20個類別進行訓練。結果顯示在COCO資料集中20個類的例項分割任務上。反之亦然,因為這兩個資料集都有ground-truth。結果如下表所示:
References:
[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.
原文:
https://skrish13.github.io/articles/2018-03/fair-cv-saga
相關推薦
詳解何愷明團隊4篇大作 !(附程式碼)| 從特徵金字塔網路、Mask R-CNN到學習分割一切
來源:新智元作者:krish本文5000字,建議閱讀10+分鐘。本文介紹FAIR何愷明、Tsun
【轉】FAIR何愷明團隊推出全景分割,開闢影象分割新方向
轉自:https://www.jqr.com/news/009492在計算機視覺發展的早期,人們主要關注影象中的人、動物或工具等明顯物件(things)。之後,Adelson提出要訓練系統識別其他物體的能力,如天空、造地、道路等沒有固定形狀的事物(stuff)。直到現在,仍然
區塊鏈技術進階-深入詳解以太坊智慧合約語言 solidity(含原始碼)-熊麗兵-專題視訊課程...
區塊鏈技術進階-深入詳解以太坊智慧合約語言 solidity(含原始碼)—103人已學習 課程介紹 區塊鏈開發技術進階-深入詳解以太坊智慧合約語言 solidity視訊培訓教程:本課
《詳解比特幣白皮書》-Timestamp Server(時間戳)
時間戳:他的提出主要是為使用者提供一份電子證據,證明使用者的某些資料的產生時間。廣泛運用於合同簽字,智慧財產權保護,金融賬務等方面的字元序列,他可以表示一份資料,在某個特定時間之前就已經存在的,完整的,可驗證的。通常有兩種: 1.自建時間戳:此類時間戳是通過時間接收裝置(如GPS,CDMA,北斗
OpenLayers官方示例詳解十四之可重用地圖源(Reusable Source)
目錄 一、示例簡介 二、程式碼詳解 一、示例簡介 這個示例展示如何更新地圖中的瓦片。 可以呼叫source.setUrl()來更新瓦片地圖源的URL,請注意,當更改瓦片地圖源的URL時,在載入完新的瓦片之前,將不會替換現
java Comparable 和Comparator詳解及 區別(附程式碼)
java中,對集合物件或者陣列物件排序,有兩種實現方式。 即:(1)物件實現Comparable 介面 (2)定義比較器,實現Comparator介面。 下面會簡要介紹這兩種方法的區別,並附上實現程式碼,供大家參考。 Comparable介紹 Compar
Objective-C屬性詳解(附程式碼)
宣告 在Objective-C中,有兩種宣告變數的方法,第一種直接宣告: @interface Person : NSObject { NSString *name; NSString *sex; NSString *age;
詳解二叉查詢樹演算法的實現(c語言)
樹(Tree)是n(n≥0)個結點的有限集。在任意一棵非空樹中:(1)有且僅有一個特定的被稱為根(Root)的結點;(2)當n>1時,其餘結點可分為m(m>0)個互不相交的有限集T1,T2,…,Tm,其中每一個集合本身又是一棵樹,並且稱為根的子樹(SubTre
XMPPFramework初始化、登入、註冊詳解(附程式碼)
第一步、新增依賴 > 拷貝 <XMPPFramework>/Vendor/CocoaLumberjack 到專案根目錄下,add files...,選擇 CocoaLumberjack 資料夾 > 同樣的步驟,拷貝 CocoaAsync
原始碼詳解系列(五) ------ C3P0的使用和分析(包括JNDI)
簡介 c3p0是用於建立和管理連線,利用“池”的方式複用連線減少資源開銷,和其他資料來源一樣,也具有連線數控制、連線可靠性測試、連線洩露控制、快取語句等功能。目前,hibernate自帶的連線池就是c3p0。 本文將包含以下內容(因為篇幅較長,可根據需要選擇閱讀): c3p0的使用方法(入門案例、JDNI使
android4.4核心編譯(附原始碼)
編譯環境如下圖所示 1.下載原始碼 由於國內有限制,所以我買了一臺香港的VPS用來下載國外的資源。 git clone https://android.googlesource.com/kern
何愷明大神的「Focal Loss」,如何更好地理解?
轉自:http://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/78920998 作者丨蘇劍林 單位丨廣州火焰資訊科技有限公司 研究方向丨NLP,神經網路 個人主頁丨kexue.fm 前言
Linux裝置驅動開發詳解 第3版 (即 Linux裝置驅動開發詳解 基於最新的Linux 4 0核心 )進展同步更
本博實時更新《Linux裝置驅動開發詳解(第3版)》的最新進展。 目前已經完成稿件。 2015
ImageNet時代將終結?何愷明新作:Rethinking ImageNet Pre-training
譯者 | 劉暢 林椿眄 整理 | Jane 出品 | AI科技大本營 Google 最新的研究成果 BERT 的熱度還沒褪去,大家都還在討論是否 ImageNet 帶來的預訓練模型之風真的要進入 NLP 領域了。如今,Facebook AI
【資料結構與演算法】之排序全家桶(十大排序詳解及其Java實現)---第七篇
本篇文章彙總了10種場常見的排序演算法,篇幅較長,可以通過下面的索引目錄進行定位查閱: 7、桶排序 一、排序的基本概念 1、排序的定義 排序:就是使一串記錄,按照其中的某個或者某些關鍵字的大小,遞增或遞減的排列起來
Android觸控式螢幕事件派發機制詳解與原始碼分析三(Activity篇)
PS一句:最終還是選擇CSDN來整理髮表這幾年的知識點,該文章平行遷移到CSDN。因為CSDN也支援MarkDown語法了,牛逼啊! 【工匠若水 http://blog.csdn.net/yanbober】 該篇承接上一篇《Android觸控式螢幕事件派發機制詳解與原始碼分析
Android觸控式螢幕事件派發機制詳解與原始碼分析二(ViewGroup篇)
【工匠若水 http://blog.csdn.net/yanbober】 該篇承接上一篇《Android觸控式螢幕事件派發機制詳解與原始碼分析一(View篇)》,閱讀本篇之前建議先閱讀。當然,閱讀完這一篇之後可以閱讀繼續進階的下一篇《Android觸控式螢幕事件派發機制詳解與原始碼
Android觸控式螢幕事件派發機制詳解與原始碼分析一(View篇)
【工匠若水 http://blog.csdn.net/yanbober】 Notice:閱讀完該篇之後如果想繼續深入閱讀Android觸控式螢幕事件派發機制詳解與原始碼分析下一篇請點選《Android觸控式螢幕事件派發機制詳解與原始碼分析二(ViewGroup篇)》檢視。 1
ICCV 2017獲獎論文公佈 何愷明成為最大贏家! | 聚焦
本文系網易新聞-智慧工作室出品 聚焦AI,讀懂下一個大時代! 網易年度AI人物評選——2017網易AI英雄風雲榜,自薦提名進行中! 獎項設定:技術創新人物TOP 10,商業創新人物TOP 10 表彰人物:華人科學家、學者、企業家、創業者 評委陣容:資深媒體人、AI投資人、AI專業機構等 頒獎:20
完整復現何愷明ICCV獲獎論文結果並開源 !(附論文&開原始碼)
整理自:AI科技評論、AI科技大本營、圖森未來 本文長度為1434字,建議閱讀3分鐘 本文為你介紹何愷明ICCV 2017兩篇獲獎論文,並附上完整復現論文結果的開原始碼! ICCV 作為計算機視覺的頂級會議,2017年共收到2143篇論文投稿,比上一屆ICCV2015的1698篇增加了26.2%。共6