2018 COCO+Mapillary 聯合挑戰賽有例項分割、全景分割、人體關鍵點檢測和人體密集姿態估計 4 類任務共 6 個賽項。中國戰隊摘取全部冠軍。
例項分割在區分異類物體的基礎上進一步區分同類物體及其 ID;人體關鍵點檢測模型區分關節、頭部和身體等關鍵結構,構建人體姿態的高階語義資訊。全景分割通過融合語義分割與例項分割,將一張影像分割為不同的前景與背景,旨在生成豐富而完整的連貫性場景分割。
俞剛認為,現代目標檢測的技術流程為輸入(影像)> Backbone(主幹網路)> Head(出口)> NMS(後處理),深度學習很多方法都依照這一流程。
比如 Faster R-CNN,其利用深度卷積網路作為 Backbone,並從原始影像中抽取一張特徵圖。隨後根據 RPN 輸出的候選框擷取主幹網路輸出的特徵圖,並作 RoI 池化得到最終的 Head;而最後一個後處理過程 NMS 則搜尋區域性極大值、抑制非極大值元素。
正因為檢測和分割等任務的處理框架已整體成型,在 COCO 競賽以及實際應用中,各個環節的創新變得格外重要。
針對 2018 COCO + Mapillary 挑戰賽、檢測&分割新探索以及團隊研究三個方面,俞剛博士條分縷析,系統介紹了曠視科技的技術突破與團隊創新;其中檢測與分割將基於上文介紹的整體流程,主幹網路、Head 和批量大小等方面的創新環節也將作具體探討。
以下是機器之心對俞剛博士的專訪。
2018 COCO + Mapillary 聯合挑戰賽
機器之心:在去年的 COCO 挑戰賽中,曠視在三個 track 中同樣也獲得了最好的水平,那麼相比之下,這一次曠視採用了哪些新策略?
俞剛:這一次比較新的策略主要體現在賽前準備、團隊組成和演算法創新上。那第一點就是準備方面,就是我們這次準備會比去年準備會更充分一點,因為去年第一次參加比賽,其實經驗並不多。
首先對於這次賽前準備,我們可以分成三個階段,第一個階段可能是一個比較發散的過程。剛開始我們有很多大方向,想知道某一點哪個方向可能會更科學一點,這就相當於選擇不同的設計路線。這個階段會經歷一個月或一個多月一點,思考討論的頻率是一週一次。
第二個階段,大概到比賽前一個半月的時候,我們會根據前期的探索確定具體路線,並優化整個流程裡面的細節。這一個階段討論的頻率大概是一週兩次,我們經常會腦洞一些新的想法,完善整個流程的一些細節。
最後第三個階段是前三週,目標是優化 Pipeline 的所有細節。這一個階段每天都會討論與思考,並儘可能把一些很細節的結構做得更極致。
其次從團隊組成來說,我們去年第一次參賽,所有人都是新人,但是今年好處就是有一些經驗豐富的「老人」。所以每個 Track 和比賽都是一個老人帶上多個新人,希望以老帶新,把團隊鍛鍊起來,我覺得這是一個比較差異的地方。團隊的培養和鍛鍊對於我們曠視來講是打比賽的一個非常重要的目的。
最後對於演算法來說,第一年參加比賽時演算法的積累還比較小,細節積累反而更多。今年的話,我們對問題理解會更深入一點,同時有蠻多新的創新。
先從例項分割任務開始說起,我們的突破主要在 backbone 以及 head 上面。Backbone 我們使用曠視最新推出的 ShuffleNet V2,並且在大模型上面做了很多嘗試。ShuffleNet V2 最早的設計初衷給出了一些設計 backbone 的原則,這些原則在大模型上面也很適用。我們內部大模型已經有超過 30G FLOPs,並且在 ImageNet 資料集上面精度高於市面上 report 的結果。
最重要的是,我們的 backbone 針對檢測以及分割任務做了優化設計,比如增加 receptive field 等。Head 上面我們提出了一種新結構,叫做 Location Sensitive Header, 主要的 motivation 是在 head 上面把 localization 相關的 (框的定位以及分割)merge 在一個 branch 出,然後把分類在另一枝出。
這樣可以避免分類任務跟定位任務的相互影響。同時,我們對定位那支的 head 加厚,增強對定位的效果。從 loss 上面來講,我們引入了 Mask Edge Loss,對分割的結果做更精細的監督處理。
全景分割我們主要是分別處理 stuff 以及例項分割,然後做後處理的 Merge 操作。Stuff 方面,我們針對有些位置的類似 appearance 但是不同類別的問題提出了一種新的 Multi-stage 的 context loss。在做 stuff 的時候,希望引入物體 (things) 的監督訊號,從而增強網路的 representation 能力。另外,在 merge 上面,我們引入了一種新的後處理策略,可以自適應地學習物體的上下層次關係,避免歧義。
人體姿態估計這個任務,在去年的基礎上面,我們今年主要針對 backbone 提出改進,引入了一種 cascade 的 backbone 結構。區別於傳統的 Hourglass 結構,我們網路內部增加了多個 stage 的資訊通道,同時不同 stage 的學習目標也是有差異的。前面 stage 希望是粗略定位簡單的關鍵點,後面的 stage 會不停的對關鍵點的定位進行 refine,同時希望能解決困難的關鍵點定位。
機器之心:在今年的挑戰賽中,是不是更注重於目標分割,而不是邊界框檢測?
俞剛:雖然今年的比賽任務取消了邊界框檢測,但我們做法其實還是依賴於有檢測框的;最後的演算法其實分成兩步,第一步會生成了一個檢測框,第二步會訓練一個例項分割模型。這個例項分割模型一開始其實不依賴於獨立訓練的檢測框,但是在做推斷的時候,我們會把檢測框模型的 RoIs 拿過來替換例項分割模型的 RoIs。這使得我們相對有更好的檢測框,並對 Detection 模型的候選框做一個分割(Mask)。
因此整個例項分割任務相當於分割為了兩個任務,第一個任務即預測邊界框的檢測任務,第二個是基於這個檢測任務輸出一個可能的 Mask。檢測框的目的只是保證召回率(Recall),即確保大多數物體都能檢測到。而 Mask 的目的是給定一個候選檢測框,我們希望模型能將目標整體畫地更精細一些。
機器之心:實際參與挑戰賽的模型會採用模型整合等技巧提升準確度嗎?
俞剛:這次競賽本質上來說一共三個任務,即例項分割、全景分割和關鍵點檢測。正如前面所說例項分割可以分成兩支,其中對於目標檢測分支,我們會整合多個模型。這一分支大概整合了三個檢測模型的結果,並希望得到更好的候選框。另一例項分割分支其實只使用了單個模型,所以單看任務本身的話實際只使用單個模型.
對於第二個全景分割任務,我們也是用了一些模型整合技巧,而且也有一些漲點。最後的關鍵點檢測也會使用更多模型,但漲點並不多,大概只有零點幾的收益。
此外對於全景分割的整合,首先全景分割可以視為兩部分,即 Stuff 和 Thing。我們最開始是嘗試使用端到端的方法將這兩部分組合在一起,但發現組合在一起會產生效能上的損失,且短期內做不到讓這兩部分形成互補的關係。最後我們分別處理這兩件事,並通過一些後處理方式將它們結合在一起。這種結合的方式非常重要,它能使例項分割與語義風格產生互補的效果,同時漲點比較多。
人體姿態估計這個任務,我們也用了模型整合,但是漲點不多。
曠視科技在檢測與分割上的新探索
如前文所示,現代目標檢測的基本框架基本可以表示為輸入、 Backbone、 Head(出口)和 NMS(後處理)五個部分,俞剛博士表示這其中暴漏了五個潛在的難題:
Backbone,目前主要使用基於 ImageNet 的預訓練分類模型,比如 VGG-16、ResNet、DenseNet 等,可以令其更適合檢測與分割任務;
Head,傳統的兩階段網路慢的主要原因在於 Head 太厚,可以對其進行加速;
Scale,影像中物體的尺寸變化很大,大到 2k x 2k,小到 10 x 10,如何使神經網路演算法更好地處理物體尺寸的變化是一個非常有趣的話題;
Batch Size,傳統目標檢測器的 batch size 非常小,為什麼不嘗試使用更大的 batch size 呢?
Crowd,無論是傳統還是現代目標檢測器,都會使用到一個叫做 NMS 後處理步驟,這種方法無法處理多個重疊的物體。
機器之心:曠視的在目標檢測上的研究主要是在於細節上,包括骨幹網路、目標的尺寸變化和密集型檢測等,這一次的競賽也會用到這些研究嗎?
俞剛:在比賽中其實我們用得更多的是主幹網路,它在實際應用佔比會很大,但是 Scale 的變化和 Crowd 的資料影響並不大。原因很簡單,因為 COCO 資料集本身是從網際網路中收集的標準影像,它會有自己固定的分佈。該資料集影像本身就不會很大,因此對目標尺寸的變化也不會很敏感。其次對於密集型檢測,COCO 資料集本身並沒有太多密集的目標,因此 Crowd 問題也不是非常明顯。但是密集型場景在實際應用中會存在很多問題,我們需要針對這一問題做更多的優化。而這一次更重要的是在主幹網路、Head 與損失函式等方面的改進。
首先對於主幹網路,其實我們會發現各大隊伍都會使用比較大型的網路作為 Backbone,而曠視在主幹網路上也有非常多的研究,包括張祥雨博士提出的 ShuffleNet 以及最近的 ShuffleNet v2。其實我們針對檢測與分割網路還提出了一種新型的 DetNet 架構,它不僅會保留感受野的資訊,同時還會保留空間解析度的資訊。Backbone 在檢測和分割任務中佔據了很大的計算量,它與 Head 兩部分是我們重點優化的方向。
曠視在主幹網路上有非常深的積累,小到幾兆十幾兆,大到十幾 G 引數的模型都會有積累。這種積累一般來說即什麼樣的模型段需要用什麼樣的結構,而這個過程中的細節選擇也非常講究,因此我們認為曠視在主幹網路的積累還是非常獨到的。第二個比較重要的部分是 Head,我們希望把 Head(輸出的特徵圖)變輕變合理。我們以前就有關於 Light-Head R-CNN 的研究,今年也會再有新研究對 Head 做優化,其主要邏輯是設計一個定位更魯棒的結構。
最後比較重要的是損失函式的設計,我們這一次競賽在全景分割裡面還是對損失函式做了一些創新,例如 Multi-stage context loss, Residual L2 loss 等,這些創新最後對結果的影響還是挺大的。在 COCO stuff 任務中,我們需要對背景類或那些不是物體類別的類進行分類,但是發現很多時候這些 stuff 根據顏色紋理等特徵很難區分。
例如背景是一塊草坪,那麼它的類別可能是 grass 或 playground,但是如果能加上一些例項分割方面的語義資訊,例如有一個人在踢球,那麼它對類別的判斷會更準。所以在損失函式上,我們希望把這些語義資訊引入到裡面去,使得對最後的影響更好。這種損失函式的改進,也可以視為在全景分割中,希望語義分割與例項分割能相互促進。
機器之心:對於目標檢測的主幹網路,曠視提出了一種名為 DetNet 的網路,相比於傳統的 ResNet 或 DenseNet,它有什麼特點?
俞剛:很多主幹網路基於 ImageNet 進行預訓練,因此它是一個分類任務,而完成這種任務的網路結構是一種金字塔形狀,底層的特徵圖尺寸會非常大,而越往上面特徵圖越小,這一變小的目標是希望能獲得更多的資訊,它需要整張圖的所有資訊進行分類。但檢測不一樣,它是一種畫素級的分類任務,每一個畫素都需要做一些預測,所以如果把所有特徵圖壓縮到一個點的話,資訊損失非常多,尤其是空間上的資訊損失。所以我們的想法是在預訓練主幹網路時,希望它不會丟棄空間資訊,同時還能抽象出高階語義資訊。
相較於 FPN 和一般的分類網路,DetNet 的改動相對簡單,但是效果非常明顯,即在後面幾層不做下采樣,而是增加 dilation,從而保留了一定空間解析度的特徵圖。另外,還會把 P6 加進去一直訓練。
具體而言,DetNet stage 1,2,3,4 與 ResNet 設定相同,從第 4 層的輸出開始,每層之後會做一個 16x 的下采樣;做 ImageNet 預訓練時會接一個 14x14 GAP 和一個 FC-1000,訓練完之後再把這兩部分去掉。可以看出 DetNet 結構上來講和 FPN 類似,只不過是把 ResNet-50 替換為 DetNet,想法直觀而簡單。
機器之心:從 R-CNN 到 R-FCN,兩階段的目標檢測框架都在嘗試降低計算力,且 Head 過厚是計算慢的主要原因,那麼曠視提出的 Light Head RCNN 有什麼樣的提升,它的出發點是什麼?
俞剛:R-FCN 是對 Faster R-CNN 的改進,它主要會使用全卷積網路代替全連線網路,而 Light Head RCNN 可以視為這兩種方法的結合體。首先第一點,R-FCN 解決了候選框複用的問題,但是空間解析度卻丟失很多,因此需要通過增加大量的通道來彌補這一損失,導致通道過多(4000+ 維),特徵圖過厚。而 Light Head RCNN 所做工作就是去除這些過多的通道,發現對速度影響很明顯,對結果幾乎沒有影響。
另外一點是在原來的 R-FCN 後面加上一些全連線層,而不是直接輸出預測,這對最後的效果其實還是有非常大的提升。從本質上來說,前面 R-FCN 給出的是一種比較抽象的特徵機制,而全連線層會將這些抽象的特徵組合成更加精確的類別。此外,由於 Light Head RCNN 將特徵圖的通道數降得很低,因此再接入全連線層也不會出現引數量過多的情況。
因此總體上,Light Head RCNN 將 R-FCN 的特徵圖變得非常「薄」,由 3969 的通道數降為 490。同時結合了 Faster R-CNN 的全連線層以實現更準確的分類。
機器之心:在最近的 ECCV 2018 中,何愷明的 Group Normolization 獲得了最佳論文榮譽提名獎,它降低了批量過小時採用 BN 的影響。您怎麼看待這篇論文,曠視在 batchsize 大小上有什麼樣的探索?
俞剛:在一般的目標檢測框架中,Batch Size 往往很小,比如 R-CNN 和 Faster RCNN 的為 2,在一些最新的工作比如 RetinaNet 和 Mask RCNN 中,Batch Size 也僅為 16。然後何愷明的 Group Normalization 在我們沒辦法提高批量大小的情況下是比較科學的一種方法,GN 把通道分為不同的組,並計算每一組之內的均值和方差,以進行歸一化。GN 的計算與批量大小無關,其精度也在各種批量大小下保持穩定。
但是在很多情況下,我們其實用的並不是很多,因為 GN 在批量受限的情況下可能會比較有用,但是在批量不受限的情況下,它的意義可能不是那麼大,我們還不如使用一般的 Batch Normalization。但是如果模型的輸入是視訊流,裡面有非常多的視訊幀,那麼在這種情況下因為視訊記憶體受限很難有比較大的批量,因此 Group Normalization 在這種任務中的價值就會非常大。
此外,增加批量大小通常需要配置更高的學習率以保持精度,但是在物體檢測中,高學習率很可能導致模型無法收斂。因此曠視在 Batch Size 上也做了一些研究,並提出了一項名為 MegDet 的解決方案。MegDet 在訓練早期藉助「warmup」學習率策略逐漸提高學習率,並引入多 GPU 批歸一化(CGBN)以更好地統計 BN,這樣就能解決精度和收斂問題。
曠視科技團隊與研究
機器之心:目前曠視在檢測與分割方向的團隊構成都是怎麼樣的,會劃分更細緻的研究方向嗎?
俞剛:我們 Detection 組的「Detection」是比較廣義的定義,包括檢測、分割、關鍵點和跟蹤等等。從整體上來說,大多數員工都是在做目標檢測相關的工作,同時會支援很多產品的落地。但是我們內部的訓練機制是希望所有同學都能瞭解廣義 Detection 所涉及的任務,例如主做目標檢測的同學同時還需要了解語義分割和關鍵點檢測等研究內容。
機器之心:您認為在工業中做計算機視覺的研究和學界中做研究有什麼不同?在曠視做研究都有什麼樣的優勢?
俞剛:就工業界而言,我們更側重一些實際產品的落地,也會做一些更遠方向的探索,但是我們首先會判斷這個方向會不會有用。所以從本身來講,不管是短期內落地還是長線應用,我們判斷的標準一定是認定這個方向在實踐中會比較有用。但是學術界可能會做一些更長期、形式更發散的的探索,甚至可能做一些比如說深度學習下一代方法或後續的發展是什麼。工業界的好處在於目前有非常多的資源和資料,因此對於大多數研究者來說,工業界會有很大的施展空間。
對於在曠視做研究的優勢,我認為主要有幾個方面,包括創新氛圍、平臺、團隊知識共享和技術積累等。首先是創新氛圍,整個研究院從孫劍老師開始就非常鼓勵嘗試一些新的想法和實驗。因為我瞭解過其它一些研究院,其實很多都不一定是在演算法層面或細節上的創新,他們主要是研究一些開原始碼或論文復現,並在本地執行或落地到產品中。而曠視會很鼓勵做一些原創性的技術或嘗試,我認為這是非常不錯的氛圍。然後從公司平臺角度來說,包括計算資源、資料以及內部非常穩定的深度學習框架都很有幫助。
在團隊方面,我們的內部培訓機制還是很科學的,我們希望將每一個人都培養成有獨立思考與創新的研究者。這可能體現在多個方面,首先我們希望每個人能將自己的實驗、自己的想法、自己的一些經驗分享給大家。因為每個人都只對自己的實驗與想法比較清楚,而通過分享能激發出一些新的東西來。其次是我們鼓勵有一些比較發散的想法,並通過實驗判斷這一想法能不能行。
最後對於研究的積累,其實我們做 Detection 已經兩年多,讀過、復現過市面上很多很好的論文,對於一些新的問題,比如產品中的實際問題或者下一代檢測的方向,我們也有很多深入的理解和探索。這一連串的東西其實是非常重要的無形資產,對大家的成長是非常有價值的。
俞剛博士簡介:
俞剛博士現為曠視科技 Research Leader、Detection 組負責人,2014 年畢業於新加坡南洋理工大學。博士畢業後在南洋理工大學從事 research fellow 的研發工作。2014 年底加入曠視科技公司。其主要研究方向主要集中在計算機視覺以及機器學習方面,包括物體檢測,語義分割,行人姿態估計以及行人動作行為分析。自 2010 年以來,已經在頂級會議如 CVPR, AAAI, ECCV 以及頂級期刊如 IEEE Transaction on Image Processing, IEEE Transaction on Multimedia 等上面發表學術論文二十餘篇。同時著有書籍一本。俞剛博士帶隊參加 2017 COCO+Places 挑戰賽獲得檢測第一名,人體姿態估計第一名;接著,帶隊參加 2018 COCO+Mapillary 挑戰賽,獲四項第一。