張聲傳,喻松林,紀榮嶸
(廈門大學信息學院,廈門 361005)
計算機視覺(Computer Vision,CV)是人工智能領域的研究熱點,自2012年AlexNet[1]網絡問世以來,CV經歷了從簡單的圖像分類到更為精細的語義分割、實例分割等任務的發展。伴隨深度學習和卷積神經網絡(Convolutional Neural Networks,CNN)的發展,CV在識別精度和速度上取得了長足進步,十年來涌現了大量的理論與方法,在諸多領域取得了豐碩的成果。實例分割的任務是輸入一張圖像,輸出圖像中每個物體的類別,同時為每個物體生成像素級別的實例掩碼[2]。圖像分類、目標檢測、語義分割和實例分割四類CV任務難度遞增,圖像分類只需要指出圖像中有哪些物體類別;目標檢測在圖像分類的基礎上同時需要輸出物體的邊界框;語義分割需要預測圖像上每一個像素點屬于哪個類別;實例分割在語義分割的基礎上還需要區分同一類別的不同實例。
以Mask R-CNN[3]為代表的雙階段實例分割方案遵循先檢測后分割的理念,通常會先由區域候選網絡[4](Region Proposal Network,RPN)提出候選區域,然后針對興趣區域(Region of Interest,ROI)進行池化和對齊操作,最后將特征送入后續網絡進行分類和掩碼生成。雙階段分割方案掩碼生成是基于候選區域特征進行的,避免了圖像其他位置對掩碼生成的干擾,一般分割精度較高。雙階段分割方案的主要問題在于存在大量的負樣本候選區域,計算耗時。為了解決這個問題,以實時實例分割(Real-time Instance Se-gmentation,YOLACT)[5]和基于位置的實例分割(Segmenting Objects by Locations,SOLO)[6]等為代表的單階段分割方案產生,相比雙階段分割,這類方案放棄了提出候選區域的操作,轉而利用全卷積在全圖范圍進行卷積操作,一步到位同時實現物體種類預測和掩碼生成,免去了RPN結構,提高了分割速率。但是全圖卷積在掩碼生成過程中無法避免背景影響,難以區分同一種類的不同實例,導致精度有所下降。
為了提高單階段分割精度,本文秉持通過增加不同實例特征區分度,以降低掩碼生成過程背景干擾的基本思想,針對全圖卷積的固有缺點,提出了在特征圖上添加注意力機制的方法。該方法在特征圖每個位置的特征向量上進行點積運算,例如位置(i,j) 用向量[1,0,0]表示,位置(m,n) 用向量[0,1,0]表示,這樣(i,j)位置和(m,n)位置的特征向量在與自己點積后結果為1,相互點積后結果為0,以達到區分的目的。同一位置特征向量點積后結果變大,不同位置特征向量點積后結果變小,這樣便能提高不同實例間區分度,利于掩碼生成,提高了分割精度。
一個良好的特征表示是實例分割的基礎步驟,為后續準確地分類和分割提供了必要保障。深度學習興起后,特征提取的工作基本由深度網絡來完成。利用深度網絡提取圖像特征能夠免去繁瑣的人工運算,并且在效果上相較于傳統方法也有較大提升。深度網絡的淺層含有比較豐富的圖像細節信息,語義信息較少;而深層有更大的感受野,以及更豐富的語義信息,但圖像細節丟失嚴重。為了綜合深度網絡深層和淺層的優勢,特征金字塔[7](Feature Pyramid Network,FPN)是一種被廣泛采納的方案。FPN結構包括自下而上、自上而下和橫向連接三部分。自下而上路徑是用于特征提取的常規卷積網絡,隨著層數加深,感受野變大,空間分辨率降低,檢測到更多上下文信息,逐層語義信息遞增。自上而下路徑采用上采樣方式,提高了圖像分辨率,同時還原了更多細節信息。橫向連接是對自上而下路徑的補充,將原始的高分辨率特征融合到自上而下的路徑中,更好地還原了圖像細節。
全卷積網絡[8](Fully Convolution Network,FCN)能對圖像進行像素級別分類,與經典CNN在卷積后使用全連接層進行類別預測不同,FCN沒有全連接層,取而代之的是對最后一個卷積層的特征圖進行上采樣,使它恢復到與輸入圖像相同的尺寸,從而對輸入圖像每一個像素點進行分類。理論上,全卷積能對任意尺寸的圖像進行處理,廣泛應用于語義分割和實例分割中。
單階段實例分割以快速著稱,相較于雙階段實例分割其模型更加緊湊。一般而言,整體網絡分為特征提取、分類和掩碼生成三部分[9-10]。以SOLO算法為例,其基本思想是根據實例的位置和大小信息進行區分。具體而言,將圖像分割成S×S個格子,坐標(i,j)對應圖像中第i行第j列位置的格子。對于某個實例,如果該實例的幾何中心落在了(i,j)格子內,那么該格子將負責預測這個實例的類別和掩碼生成。網絡結構一體化不需要ROI操作,所有卷積都是全圖卷積,不對特征圖進行裁剪,憑借這些特性,單階段實例分割速度快。然而當圖像中出現同一種類的不同實例時,全圖卷積固有弊端顯現,同一種類提取到的特征相似,而在掩碼生成過程中要求同一種類不同實例的掩碼單獨生成,全圖卷積難以區分,導致精度下降。針對該問題,本文提出了注意力模型,能夠提高同一種類不同實例特征的差異,方便全圖卷積區分,從而提高分割精度。
總體上,本文是以SOLO算法為框架進行改進。前文提到,SOLO算法將圖像分割成S×S個格子,對于每一個格子,預測幾何中心落在該格子的實例屬于C個類別的概率,其中C為數據集中實例的種類數。在分類網絡中,每一個格子對應輸出空間為一個C維向量,由于圖像被分割成S×S個格子,因此分類網絡輸出空間為C×S×S。
同時,每一個格子將負責幾何中心落在該格子內實例的掩碼生成,掩碼生成網絡輸出空間為S2×2h×2w,第k個通道對應(i,j)位置格子的生成掩碼,滿足條件:k=i×S+j,圖1所示為網絡輸出空間。本文提出了添加注意力機制的掩碼生成網絡結構,如圖2所示。所提方法主要分為特征提取、預測頭網絡結構、注意力機制、添加注意力機制的網絡結構和損失函數這五部分,下面分別進行詳細介紹。

圖1 分類分支和掩碼分支輸出空間Fig.1 Classification branch and mask branch output space

圖2 添加注意力機制的掩碼生成網絡結構Fig.2 Mask generation network structure with attention mechanism
特征提取使用了ResNet-FPN結構。具體而言,輸入圖像經過ResNet-50[11]前向計算,輸出4個特征層,該過程對應FPN結構中自下而上計算。然后每個特征層經過1個1×1卷積橫向連接,將特征通道規整到256,同時與自上而下特征層上采樣后的結果相加,最后經過1個3×3卷積輸出。提取特征自下而上分辨率逐層降低,語義信息逐層豐富。低層特征用于小物體分割,高層特征用于大物體分割。各層分辨率和通道數如表1所示。

表1 ResNet-FPN提取各特征層詳細信息
預測頭網絡由2個分支組成,一個分支負責類別預測,另一個分支負責掩碼生成。分類分支首先將提取到的各特征層分割成S×S個格子,不同特征層S取值如表2所示。

表2 各特征層S取值
將各層特征圖分割為不同的格子后,輸入到分類網絡進行類別預測。分類網絡由7個卷積組和1個輸出卷積組成。每個卷積組由1個3×3卷積層、1個GN(Group Normalization)層[12]和1個ReLU激活層[13]組成。輸出卷積核大小為3×3,步長和填充均為1,輸出通道為類別數量。類似地,掩碼生成網絡也由7個卷積組和1個輸出卷積組成。不同于分類分支,掩碼生成網絡不需要將特征分割成S×S個格子,而是為特征層添加2個坐標通道,以區分同一種類的不同實例。對于位置(i,j)添加的x、y坐標信息,計算方式如下
(1)
其中,w和h分別表示特征圖的寬和高。然后將添加坐標信息的特征送入掩碼分支進行掩碼生成。
前文提到,對于同一種類的不同實例,分類網絡要求輸出相同的物體類別,掩碼生成網絡要求輸出不同的實例掩碼,為了實現這個目的,需要對特征圖進行一定處理。本文提出了一種注意力機制,在經過ResNet-FPN特征提取后,由輸出特征圖每個位置的c個通道組成一個c維向量表示該位置實例的特征,對于同一種類不同實例,在經過注意力操作后應當具備區分能力。本文提出的注意力機制是基于向量點積的一種操作,要求某一位置的c維向量與其他位置的c維向量點積后結果最小化,而與自己點積后結果最大化,以達到區分不同實例的目的。具體而言,首先對特征位置進行編號,編號方式如下
num=i×S+j
(2)
新特征與原特征對應關系如下
Fnew(c,i,j)=Vnum=c?Vnum=i×S+j
(3)
其中,Fnew(c,i,j)表示新特征第c個通道(i,j)位置的特征值;Vnum=c表示編號為c的特征向量;Vnum=i×S+j表示編號為i×S+j的特征向量。圖3詳細說明了該過程。

圖3 注意力機制圖解(以編號為1、7、15的特征向量示例)Fig.3 Illustration of attention mechanism(take the index 1, 7, 15 as examples)
SOLO算法掩碼分支保留了特征圖h×w的大小,而注意力機制需要將特征圖分割成S×S的大小,不同格子對應圖像中的不同實例。經過注意力機制后,特征空間變為S2×S×S。受到ResNet網絡結構啟發,將注意力機制單獨作為一個分支,該分支的輸出直接按位置加到原SOLO算法掩碼生成分支。因此,最后的掩碼將由兩部分構成:原SOLO掩碼分支生成的掩碼和注意力分支生成的掩碼。
本文沿用SOLO算法損失函數,定義為
L=Lcate+λLmask
(4)
其中,Lcate為Focal Loss[14];Lmask為掩碼損失,詳細參閱文獻[6]。
實例分割常用數據集為微軟發布的環境常見對象(Common Objects in Context, COCO)數據集[15],包含80個類別。然而COCO數據集較大,需要較高的算力。限于實驗設備,本文實驗過程中采用的數據集為CityScapes部分數據集,并將其標注轉化為COCO格式。構造的數據集包含450張訓練圖像和50張驗證圖像,共5個類別,分別為person、rider、car、truck和bus。圖4所示為一個訓練數據集示例。

圖4 訓練數據集示例Fig.4 Training data examples
實驗中將去除坐標通道的SOLO算法作為基準,對比了去除坐標信息的SOLO算法、原SOLO算法和添加注意力機制三種方法的分割效果。圖5所示為3個樣本的分割效果。在樣本1中,SOLO算法對于畫面中央的汽車生成的掩碼不準確,去除坐標信息的SOLO算法對于畫面徑深的汽車沒有生成掩碼,而注意力機制則對這些問題有所改善。在樣本2中,畫面右側多名行人重疊,SOLO算法和去除坐標信息的SOLO算法無法將重疊行人進行區分,而注意力機制區分效果明顯更好。在樣本3中,由于圖像較為空曠且實例面積小,SOLO算法和去除坐標信息的SOLO算法幾乎無法生成掩碼,而注意力機制能對行人生成掩碼。本文對比了三種方法的準確率,結果如表3所示。

圖5 分割效果示例Fig.5 Segmentation examples

表3 各算法分割精度對比
對比去除坐標通道的SOLO算法和原始SOLO算法發現,僅僅添加2個通道的坐標信息就能將平均準確率(Average Precision,AP)提高1.8%,足見差異化信息在實例分割中起到了舉足輕重的作用。對比SOLO算法和注意力機制,在添加了注意力機制后AP提高了1.9%,可見注意力機制提供了更為豐富的差異化信息,增強了不同實例的區分度,進而更利于生成準確的掩碼。
同時本文對比了不同算法對小、中和大物體的分割效果。仔細觀察圖5可以發現,在樣本1中較大的汽車生成的掩碼比較小的行人生成的掩碼更準確。在樣本2中,畫面前方較大的行人相比畫面后方較小的行人生成的掩碼更精確。在樣本3中,對于較小的行人SOLO算法甚至無法生成掩碼。本文對比了SOLO算法和注意力機制對不同面積實例的分割精度,結果如表4所示。

表4 不同大小的實例分割精度對比
結果顯示,不管哪類算法在對小物體的分割上精度都欠佳,而對大物體的分割則表現良好。小物體分割依舊是實例分割領域的瓶頸,有待未來突破。
本文針對單階段目標檢測全圖卷積的固有缺點提出了一種注意力機制,該機制能增強不同實例間的區分度,從而提高分割精度。實驗結果表明,注意力機制相比簡單的坐標信息能提供更豐富的差異化信息,這也為提高單階段實例分割精度的后續研究提供了一種思路。CV領域有諸多不同的注意力機制,本文提出的注意力機制主要有以下優點:
1)基本思想區別。不同于其他注意力機制關注特定信息的理念,本文注意力機制的目的是增加不同實例間的區分度,以提高各類實例的分割精度。
2)思路清晰,運算簡便。本文的注意力機制不需要求相似度,直接在原算法基礎上添加向量點積操作便可實現。
但是點積需要遍歷特征圖所有位置,運算復雜且耗時有所增加。此外,實例分割雖然取得了一系列進步,但也存在諸多挑戰:
1)小物體分割精度低。網絡層數增加,感受野變大,但分辨率降低,這對小物體的分割是一種災難。目前的分割方案普遍對于大物體有更好的分割效果,而對小物體則欠佳。
2)實時性、高精度的分割算法有待研究。在無人駕駛領域,不僅對識別的時效性有很高的要求,同時對精度也有很高要求。目前的實例分割方案應對該領域還有些吃力,如何在保證高精度的前提下快速分割也是未來研究的重要方向。
3)三維圖像分割研究較少。目前主流方案都是針對平面圖像分割,然而三維點云應用廣泛,且包含更多平面圖像無法表達的信息。因此實現對三維點云圖的分割,將極大程度豐富實例分割的應用場景。