音 松,陳雪云,貝學(xué)宇
(廣西大學(xué) 電氣工程學(xué)院,南寧 530004)
行人實例分割[1-3]技術(shù)目前已被廣泛應(yīng)用于車輛自動駕駛、視頻監(jiān)控[4]和機器人等領(lǐng)域,然而在實際應(yīng)用場景中,行人姿態(tài)、背景、遮擋、光照等因素都會對檢測精度產(chǎn)生較大影響。因此,行人的實例分割成為一項具有挑戰(zhàn)性的研究課題。
目標檢測[5]是檢測圖像中目標的位置框,語義分割是識別圖像中每個像素點對應(yīng)的物體語義信息,實例分割則將兩者相結(jié)合,即識別檢測出位置框中每個像素點的類別歸屬?,F(xiàn)有基于深度學(xué)習(xí)的目標檢測算法主要可分為基于候選區(qū)域和基于端到端兩類?;诤蜻x區(qū)域的算法分兩階段來完成檢測,例如:RCNN[6]先通過選擇性搜索產(chǎn)生候選框,再通過支持向量機(Support Vector Machine,SVM)進行分類;Fast RCNN[7]先通過選擇性搜索產(chǎn)生候選框,利用VGGNet[8]進行特征提取并引入RoI Pooling 層,從而消除對輸入圖像的尺寸限制,再通過softmax 進行分類;Faster RCNN[9]通過區(qū)域候選網(wǎng)絡(luò)(Region Proposal Network,RPN)產(chǎn)生候選框,使檢測精度和速度得到提高?;诙说蕉说乃惴ㄖ恍枰粋€階段即可完成檢測,如YOLO[10]、YOLO 9000[11]、YOLO V3[12]等。這些算法將骨干網(wǎng)絡(luò) 從GoogLeNet[13]換為DarkNet,利用回歸的思想來完成目標檢測,其對于輸入的一張完整圖像直接得出目標位置和類別概率。得益于卷積網(wǎng)絡(luò)的發(fā)展,語義分割研究近年來也取得了極大的突破,例如:DeepLab V1[14]利用空洞卷積并通過條件隨機場(Conditional Random Field,CRF)做后處理;DeepLab V2[15]利用空洞金字塔池化,對不同分支采用不同的空洞率來獲得不同尺度的圖像特征;DeepLab V3[16]優(yōu)化了空洞金字塔池化并增加了BN 層,取消了CRF 的后處理過程;DeepLab V3+[17]將Xception 結(jié)構(gòu)用于語義分割任務(wù),進一步提高了模型的速度和性能。行人實例分割是行人檢測與行人分割的合并,其結(jié)合了目標檢測和語義分割技術(shù)。
本文以Mask RCNN[18]為基礎(chǔ),通過增加串聯(lián)特征金字塔網(wǎng)絡(luò)(Concatenated Feature Pyramid Network,CFPN)模塊優(yōu)化Mask RCNN 網(wǎng)絡(luò)分支,以提高算法的檢測精確率,并利用COCO 數(shù)據(jù)集和自建數(shù)據(jù)集中的行人圖像進行網(wǎng)絡(luò)訓(xùn)練和評估。在本文提出的改進算法中,用于RPN 和檢測的特征仍然由卷積網(wǎng)絡(luò)和特征金字塔網(wǎng)絡(luò)(FPN)[19]生成,用于Mask 分支的卷積網(wǎng)絡(luò)生成的多層特征,經(jīng)過上采樣后不再與上一層特征進行相加,而是先進行融合,再合并融合后的多組特征生成Mask,從而更充分地利用不同特征層的語義信息。
Mask RCNN 通過ResNet[20]或ResNeXt[21]提 取特征并通過FPN 構(gòu)成骨干網(wǎng)絡(luò),生成的特征圖為共享卷積層,特征金字塔對提取的階段特征進行不同的組合,一方面通過RPN 判斷前景和背景進行二值分類并生成候選框,另一方面將生成的候選框通過RoI Align 操作與特征圖中的像素對應(yīng)。之后,將一個分支用于分類和回歸,將另一個分支用于分割生成Mask。
Mask RCNN 定義了一個多任務(wù)的損失函數(shù),如式(1)所示:
在上式中,Lcls和Lbox為分類誤差和檢測誤差,計算公式如下:
Lmask是語義分割分支的損失,輸入Mask 分支的每個特征圖經(jīng)過一系列卷積和轉(zhuǎn)置卷積操作后,輸出k×m×m的特征圖,其中,k表示輸出的維度即總的類別數(shù),每一個維度對應(yīng)一個類別可以有效規(guī)避類間競爭,m×m表示特征圖的大小。Lmask為平均二值交叉熵函數(shù),其對每一個像素進行分類,對每一個維度利用sigmoid函數(shù)進行二分類,判斷是否為此類別。
本文針對行人實例分割任務(wù)對Mask RCNN 網(wǎng)絡(luò)進行改進。首先依據(jù)生活中的場景新建一個行人數(shù)據(jù)集,更有效地彌補COCO 數(shù)據(jù)集用于行人實例分割時的不足,然后新增一個CFPN 模塊和分支,通過對特征提取骨干網(wǎng)絡(luò)的重新設(shè)計,使得上下文語義信息得到更充分的運用。
引入CFPN 的改進Mask RCNN 網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,其中,ResNet 分5 個階段依次提取特征。與原始網(wǎng)絡(luò)不同的是,F(xiàn)PN 處理后的特征組通過RPN 生成候選框,經(jīng)RoI Align 操作后僅用于分類和回歸,而通過CFPN 融合的特征組與候選框經(jīng)RoI Align 操作后只進入Mask 分支用于分割任務(wù)。FPN 和CFPN都是對特征進行處理,且重組后的特征大小相同、維度相同,因此,即使分別經(jīng)RoI Align 操作,處理后的候選框仍然一一對應(yīng)。
圖1 改進Mask RCNN 網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Network structure of improved Mask RCNN
在深度神經(jīng)網(wǎng)絡(luò)中,低層特征包含更多的細節(jié)信息,而高層特征則更關(guān)注于語義信息。由于FPN自上而下通過上采樣與橫向特征相加得到的新的特征層包含了不同層的特征,因此具有更豐富的信息,這對于目標檢測尤其是小目標檢測具有重要意義。由于多維特征直接相加的操作不利于后續(xù)全卷積的分割任務(wù),因此本文設(shè)計改進的CFPN 模塊(如圖2 所示)用于Mask 分支,從而更充分地利用不同層的語義信息提高網(wǎng)絡(luò)性能。
圖2 CFPN 模塊Fig.2 CFPN module
將ResNet 提取的特征記為C1~C5,每一層的特征經(jīng)過1×1 卷積核的卷積,在保持特征圖大小不變的同時降低了維度,C3~C5 卷積后進行上采樣處理,目的是將特征圖擴大一倍與低層特征相融合。對每一個融合后的特征進行3×3 卷積核的卷積,從而消除上采樣后的混疊效應(yīng)并實現(xiàn)降維。在圖2 中,m5 由C5 直接上采樣后卷積得到,m2~m4 則是由高層特征上采樣分別和低層特征融合所得,形成的特征組[m2,m3,m4,m5]將用于Mask 分支。
改進后的Mask RCNN 算法流程如圖3 所示,該算法通過ResNet 網(wǎng)絡(luò)對輸入圖像分5 個階段提取特征,分別記為C1~C5,之后再分別進入后續(xù)兩個分支。
圖3 改進Mask RCNN 算法流程Fig.3 Procedure of improved Mask RCNN algorithm
FPN 將高層特征經(jīng)過上采樣后分別與低層的特征相加形成新的特征組合P2~P5,C5 經(jīng)過上采樣后直接得到特征層P6,RPN 利用特征組[P2,P3,P4,P5,P6]產(chǎn)生候選框,生成的候選框先通過RoI Align 操作,再經(jīng)過卷積核大小為7×7、通道個數(shù)為1 024 和卷積核大小為1×1、通道個數(shù)為1 024 的卷積操作后,通過全連接層和softmax 得到分類類別,經(jīng)全連接層和Reshape 操作獲得每個候選框的位置偏移量,用于回歸目標候選框。
CFPN 將提取的階段特征通過上采樣與低層特征相融合形成[m2,m3,m4,m5],并結(jié)合候選框,通過RoI Align 操作用于Mask 分支,先進行連續(xù)的卷積核大小為3×3、通道數(shù)為256 的卷積操作,再經(jīng)過一個2×2 的轉(zhuǎn)置卷積將特征面積擴大一倍,最終輸出候選框中對應(yīng)類別的像素分割結(jié)果。雖然這一系列的操作都是語義分割,但由于每一個候選框中只有一個類別,因此相當于進行實例分割。
COCO 數(shù)據(jù)集是微軟團隊提供的一個可用于圖像分割和目標檢測的數(shù)據(jù)集,主要為從日常復(fù)雜場景中選取的圖像,包括80 類目標,超過33 萬張圖片。該數(shù)據(jù)集中的圖像主要以物體檢測、關(guān)鍵點檢測、實例分割、全景分割、圖像標注5 種類型標注,以json文件存儲。本次實驗使用的是COCO 2014 數(shù)據(jù)集,共分為訓(xùn)練集、測試集和驗證集,其中訓(xùn)練集含82 783 張圖像,測試集含40 755 張圖片,驗證集含40 504 張圖像,本次實驗在該數(shù)據(jù)集上進行預(yù)訓(xùn)練。
雖然COCO 數(shù)據(jù)集包含大量數(shù)據(jù),但是數(shù)據(jù)種類眾多,范圍寬廣。為更好地完成行人實例分割的任務(wù),筆者仿照COCO 數(shù)據(jù)庫自建了一個行人實例分割數(shù)據(jù)集(如圖4 所示)用于數(shù)據(jù)增強。從街道、商場、海灘、公園、公路、車站等復(fù)雜日常生活場景中拍攝夜晚、清晨等弱光照條件下包含騎車、嬉鬧、遮擋等各異姿態(tài)和背景的1 000 張圖片,這些高分辨率圖像有近景也有遠景的行人,最后使用labelme 軟件對所有的圖像進行實例標定并生成對應(yīng)的json 文件,用于訓(xùn)練和測試。自建的行人數(shù)據(jù)集相對COCO 數(shù)據(jù)集更接近生活且更復(fù)雜,這對網(wǎng)絡(luò)性能檢測更具挑戰(zhàn)性。
圖4 自建數(shù)據(jù)集標定圖Fig.4 Calibration images of self-constructed dataset
本實驗在Ubuntu 16.04 系統(tǒng)中完成,實驗框架為keras 和tensorflow,處理器為AMD R5 2600,內(nèi)存為16 GB,顯卡為NVIDIA 1060Ti。為適配硬件和統(tǒng)一圖像尺寸,訓(xùn)練前將圖像大小歸一化為448 像素×448 像素,利用Python 圖像增強庫imgaug 隨機選取50% 訓(xùn)練集進行數(shù)據(jù)增強。對不同骨干網(wǎng)絡(luò)的Mask RCNN 和改進后的Mask RCNN 算法分別進行訓(xùn)練,訓(xùn)練共分為4 個階段,前三個階段在COCO 數(shù)據(jù)集中進行預(yù)訓(xùn)練,最后一個階段在自建的數(shù)據(jù)集中進行。前兩個階段學(xué)習(xí)率為0.001,每個迭代(epoch)1 000 次,每個階段訓(xùn)練40 個epoch;后兩個階段學(xué)習(xí)率為0.000 1,訓(xùn)練次數(shù)與前兩個階段相同。一個完整的訓(xùn)練過程共16 萬次訓(xùn)練。
訓(xùn)練過程中的損失包含了RPN 網(wǎng)絡(luò)和兩個分支的損失,如圖5 所示??梢钥闯?,在第120 個epoch 后損失下降明顯,是因為前120 個epoch 是在COCO 數(shù)據(jù)集上預(yù)訓(xùn)練,而后40 個epoch 在自建的數(shù)據(jù)集中進行。正因為自建數(shù)據(jù)集作為增強訓(xùn)練且容量有限,所以只進行了40 000 次迭代后損失已經(jīng)趨于穩(wěn)定。
圖5 網(wǎng)絡(luò)訓(xùn)練損失Fig.5 Network training loss
4.3.1 精確率
精確率(Precision)是評價網(wǎng)絡(luò)性能的一個重要指標,其為正確識別的物體個數(shù)占總識別出的物體個數(shù)的百分比,計算公式如下:
其中,XTP表示正確識別的物體個數(shù),XFP表示錯識識別出的物體個數(shù)。
本實驗以AP50(IoU=0.50)和mAP(IoU=0.50︰0.05︰0.95)兩個指標來分析實驗結(jié)果并與原網(wǎng)絡(luò)進行對比。
為避免測試準確率偶然性對實驗結(jié)果的影響,對AP50 和mAP 兩個指標各進行100 次測量,實驗結(jié)果如圖6 所示(彩色效果見《計算機工程》官網(wǎng)HTML版),其中,4個子圖的算法骨干網(wǎng)絡(luò)分別是ResNet50/101和ResNeXt50/101,原網(wǎng)絡(luò)結(jié)果用FPN 表示為藍色,改進后的網(wǎng)絡(luò)結(jié)果用CFPN 表示為紅色,實線和虛線分別為AP50 和mAP 的值。從圖6 可以看出,在4 種不同的骨干網(wǎng)絡(luò)中,改進的Mask RCNN 算法在AP50 和mAP 上都較原算法有較大提高,網(wǎng)絡(luò)越深,提升越明顯。
圖6 不同骨干網(wǎng)絡(luò)的精確率對比Fig.6 Precision comparison of different backbone networks
表1 和表2 顯示了100 次測量結(jié)果的平均值,其中,ResNet50_FPN 代表骨干網(wǎng)絡(luò)為ResNet50 的原網(wǎng)絡(luò),ResNet50_CFPN 代表骨干網(wǎng)絡(luò)為ResNet50 的改進網(wǎng)絡(luò),以此類推。可以看出,改進網(wǎng)絡(luò)性能較原網(wǎng)絡(luò)得到了很大提升,同時,相同深度的ResNeXt 網(wǎng)絡(luò)較ResNet 網(wǎng)絡(luò)精確率更高,且網(wǎng)絡(luò)越深,實驗結(jié)果越理想。
表1 改進前后精確率對比(ResNet 骨干網(wǎng)絡(luò))Table 1 Precision comparison before and after improvement(ResNet backbone network) %
表2 改進前后精確率對比(ResNeXt 骨干網(wǎng)絡(luò))Table 2 Precision comparison before and after improvement(ResNeXt backbone network) %
4.3.2 網(wǎng)絡(luò)預(yù)測時間
在網(wǎng)絡(luò)訓(xùn)練結(jié)束后,對網(wǎng)絡(luò)改進前后的每次精確率測試所花費的時間進行統(tǒng)計,以此來對比網(wǎng)絡(luò)預(yù)測時間的差異。表3 和表4 顯示了不同的骨干網(wǎng)絡(luò)改進前后精確率每測試一次所需要的時間。可以看出,計算mAP 所需要的時間往往比AP50 要多,在同樣層數(shù)情況下,ResNeXt 網(wǎng)絡(luò)比ResNet 耗費時間多,而同樣的網(wǎng)絡(luò)改進后雖然參數(shù)量有所增加,但是測試所需要的時間整體上變化不明顯,因此,改進后的算法并沒有影響原算法在實時性上的表現(xiàn)。
表3 改進前后測試時間對比(ResNet 骨干網(wǎng)絡(luò))Table 3 Test time comparison before and after improvement(ResNet backbone network) s
表4 改進前后測試時間對比(ResNeXt 骨干網(wǎng)絡(luò))Table 4 Test time comparison before and after improvement(ResNeXt backbone network) s
4.3.3 分割結(jié)果
基于生活場景圖的訓(xùn)練結(jié)果進行測試,實驗結(jié)果如圖7 所示。可以看出,在應(yīng)對不同的光照、姿態(tài)、背景時,本文改進算法都有很好的表現(xiàn)。但是在測試的過程中也發(fā)現(xiàn),行人個例分割的邊沿并不理想,仍然存在較大的誤差。
圖7 改進Mask RCNN 算法行人實例分割結(jié)果Fig.7 Pedestrian instance segmentation results of improved Mask RCNN algorithm
本文提出一種改進的Mask RCNN 算法用于行人實例分割任務(wù)。通過在Mask 分支中設(shè)計CFPN 模塊,更充分地利用不同層特征的語義信息。仿照COCO數(shù)據(jù)集自建包含1 000張圖片的行人數(shù)據(jù)集,對改進前后的網(wǎng)絡(luò)進行定量和定性分析。實驗結(jié)果表明,改進算法在不同的骨干網(wǎng)絡(luò)中測試結(jié)果都得到了提升,增強了網(wǎng)絡(luò)性能。但是該算法所得行人個例分割的邊沿仍然存在較大的誤差,下一步將對此進行改進。此外,還將研究如何減少網(wǎng)絡(luò)參數(shù)并提高小目標下的實例分割精度。