王澤榮
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)
圖像語義分割的目標(biāo)是給輸入圖像的每個(gè)像素分配一個(gè)類別,從而獲得逐像素的稠密分類圖。從2007年起,圖像語義分割或者場(chǎng)景解析已經(jīng)成為計(jì)算機(jī)視覺的重要部分,和其他計(jì)算機(jī)視覺任務(wù)一樣,圖像語義分割的重大突破在2014年,Long[1]等人首次提出利用全卷積來訓(xùn)練一個(gè)端到端的網(wǎng)絡(luò)。
FCN8結(jié)構(gòu)在Pascal VOC2012數(shù)據(jù)集上達(dá)到了62.2%的平均IOU,相對(duì)提高了20%。這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)是語義分割的基礎(chǔ),在這個(gè)基礎(chǔ)上提出了一些更新更好的網(wǎng)絡(luò)結(jié)構(gòu)。全卷積網(wǎng)絡(luò)被用于自然圖像的語義分割,用于多模醫(yī)學(xué)圖像分析和多光譜衛(wèi)星圖像分割。與AlexNet、VGG、ResNet等深度分類網(wǎng)絡(luò)非常相似,還有大量的深層網(wǎng)絡(luò)執(zhí)行語義分割。
針對(duì)圖像語義分割的網(wǎng)絡(luò)結(jié)構(gòu)有FCN、SegNet[2]、U-Net[3]、FC-Densenet[4]、E-Net[5]、RefineNet[6]、PSPNet、Mask-RCNN,還有一些半監(jiān)督的方法有DecoupledNet和GAN-SS。本文考慮了各種網(wǎng)絡(luò)模型結(jié)構(gòu),最后在FCN的基礎(chǔ)上提出了一種的簡潔的網(wǎng)絡(luò)結(jié)構(gòu)C-seg?net,在 320×240圖像上單張的分割時(shí)間 2ms(Titan-X)。在模型簡化方面,采用了Face++提出的Shuf?fleNet網(wǎng)絡(luò)結(jié)構(gòu)模型,對(duì)C-segnet中的兩個(gè)3×3的卷積操作添加了點(diǎn)組卷積和通道打亂操作,一定程度上減少了網(wǎng)絡(luò)模型的參數(shù)和計(jì)算的FLOPS,能夠在移動(dòng)端做實(shí)時(shí)的肖像分割。
本文實(shí)驗(yàn)采用的數(shù)據(jù)集由Camera360提供命名Cdataset。
本次實(shí)驗(yàn)室的數(shù)據(jù)集來源于手機(jī)照片服務(wù)提供商Camera360,圖片數(shù)據(jù)是手機(jī)用戶自拍照片,主要是上半身圖像。本次實(shí)驗(yàn)的groudtruth采用俄羅斯摳圖軟件fabby制作,包含前景和背景信息,一共10萬張訓(xùn)練集,300張驗(yàn)證集,100張測(cè)試集。
Cdataset數(shù)據(jù)集合中的數(shù)據(jù)如圖1所示。
本次實(shí)驗(yàn)采用語義分割,給輸入圖像的每一個(gè)像素點(diǎn)分配一個(gè)類別,本次實(shí)驗(yàn)室做的是二分類,前景和背景。前景是人像這種語義信息,背景是非人像的語義信息。本次實(shí)驗(yàn)的目的是在移動(dòng)端做到實(shí)時(shí),通過網(wǎng)絡(luò)模型運(yùn)算量計(jì)算想要在移動(dòng)端做到實(shí)時(shí),在Ti?tan-X上的分割速度必須大于125fps,也即是單幀分割時(shí)間小于8ms。本次實(shí)驗(yàn)的數(shù)據(jù)集都轉(zhuǎn)換到相同的尺度,長寬分別是320和240。為了避免網(wǎng)絡(luò)復(fù)雜帶來的過擬合做了一定的數(shù)據(jù)增強(qiáng),這些數(shù)據(jù)增強(qiáng)手段包括圖像旋轉(zhuǎn)、圖像翻轉(zhuǎn)、圖像伽馬濾波,最后增強(qiáng)后的數(shù)據(jù)一共10萬張作為訓(xùn)練數(shù)據(jù)。
本次實(shí)驗(yàn)的平臺(tái)是Ubuntu,GPU是Titan-X,深度學(xué)習(xí)框架是Pytorch。
第1小節(jié)中介紹了訓(xùn)練本文網(wǎng)絡(luò)所用的數(shù)據(jù)集。訓(xùn)練集中包含10萬張320×240大小的圖像,并通過fabby生成所有訓(xùn)練圖像的GroundTruth。一個(gè)通過的語義分割網(wǎng)絡(luò)結(jié)構(gòu)可以看成是一個(gè)編碼器連接一個(gè)解碼器,編碼器部分可以從一個(gè)預(yù)訓(xùn)練的分類網(wǎng)絡(luò)上做遷移學(xué)習(xí),例如子ImageNet上面訓(xùn)練好的VGG或者ResNet等。編碼器的機(jī)制與VGG或者ResNet這些體系結(jié)構(gòu)最大的不同在于解碼器的任務(wù)是將編碼器學(xué)習(xí)到的語義特征映射到像素空間,從而得到一個(gè)稠密的分類。分割任務(wù)和分類任務(wù)最大的不同在于分割最后要得到的是一個(gè)稠密的像素級(jí)別的分類,網(wǎng)絡(luò)的輸出是一張heatmap而不是一個(gè)vector,如下圖2所示。與分類網(wǎng)絡(luò)最大的不同在于,分割網(wǎng)絡(luò)里面沒有全連接層,只有卷積層在解碼階段做的是一個(gè)不斷上采樣的操作,常用的方法有去卷積和插值。
圖1
常用的全卷積網(wǎng)絡(luò)的Pipeline如圖3所示。
如何選擇上采樣的featuremap,在圖片分辨率下采樣到什么程度才進(jìn)行上采樣?這是全卷積網(wǎng)絡(luò)遇到的最大難題。如果上采樣的feature map分辨率低那么得到的heatmap會(huì)比較粗糙,如果過早地進(jìn)行上采樣那么得到的heatmap包含的語義信息將會(huì)比較少。FCN[1]的作者采用了一種如圖4所示的融合方式。
圖2
圖3
圖4
將下采樣到原圖長寬分別是原來的1/32feature map上采樣到原圖size一樣的圖用FCN-32表示,同理有FCN-16、FCN-8,將各層的heatmap進(jìn)行融合得到最后的結(jié)果,假設(shè)最后的網(wǎng)絡(luò)輸出用h表示h=FCN-32+FCN-16+FCN-8,這樣的融合方式一定程度上解決了最后的結(jié)果過于粗糙。本文的融合方式不同于FCN,本文的融合方式是每次上采樣2倍,然后與上一層的Score-Map融合,從而形成一個(gè)金字塔的融合方式。本文最后沒有采用ImageNet上預(yù)訓(xùn)練好的VGG網(wǎng)絡(luò)進(jìn)行Fine-tuning,主要因?yàn)椋?)VGG網(wǎng)絡(luò)太深,沒法做到實(shí)時(shí),雖然一定程度上可以提升IOU。(2)本次實(shí)驗(yàn)數(shù)據(jù)集全是人像,并且主要是上半身,ImageNet提取的語義信息對(duì)本次實(shí)驗(yàn)的幫助并不大。因此需要設(shè)計(jì)自己的網(wǎng)絡(luò)結(jié)構(gòu),并且把圖像都resize到320×240,這樣的處理一定程度上減小了數(shù)據(jù)的方差,使得網(wǎng)絡(luò)更容易訓(xùn)練,也減少了一次卷積計(jì)算所用時(shí)間,本文在FCN的基礎(chǔ)上設(shè)計(jì)的精簡網(wǎng)絡(luò)模型參數(shù)如表1所示。
表1
在訓(xùn)練階段,在conv5_3和conv5_7之后分別添加了dropout操作,一定程度上可以防止過擬合,本次實(shí)驗(yàn)的 batchsize是 1,學(xué)習(xí)率 lr=0.0001。添加了一個(gè)shufflenet對(duì)比實(shí)驗(yàn),將兩個(gè)3×3的conv都換成shuf?flenet的 bottleneck。
首先在驗(yàn)證集上選擇訓(xùn)練好的網(wǎng)絡(luò)模型,旋轉(zhuǎn)IOU最好的模型在測(cè)試集上測(cè)試網(wǎng)絡(luò)模型的泛化能力,本次實(shí)驗(yàn)用到的數(shù)據(jù)集包括訓(xùn)練集、驗(yàn)證集、和測(cè)試集,其中訓(xùn)練集10萬張照片,驗(yàn)證集300張,測(cè)試集100張。網(wǎng)絡(luò)性能的好壞通過IOU衡量,其定義如下:IOU=(predict&&target)/(predict||target)。
本次實(shí)驗(yàn)的學(xué)習(xí)曲線如圖5所示。
圖5
從圖5中我們可以看到添加shufflenet之后的網(wǎng)絡(luò)有了一定的IOU下降,原因在于點(diǎn)組卷積之后網(wǎng)絡(luò)可訓(xùn)練參數(shù)有所減少,網(wǎng)絡(luò)的表達(dá)能力不如之前,在不添加chanel shuffle和點(diǎn)組卷積之前網(wǎng)絡(luò)的大小為1.2MB,添加之后訓(xùn)練的網(wǎng)絡(luò)大小為864KB,并且網(wǎng)絡(luò)計(jì)算機(jī)的FLOPS比之前少了一些,單幀分割速度有所提升但并不明顯。
本次實(shí)驗(yàn)在FCN的基礎(chǔ)上提出了一個(gè)精簡的網(wǎng)絡(luò)模型,可以在移動(dòng)端做到實(shí)時(shí)的人像分割。并對(duì)比實(shí)驗(yàn)驗(yàn)證了shufflenet在模型復(fù)雜度降低方面的有效性。本次實(shí)驗(yàn)依然存在很多的不足:(1)當(dāng)用戶的手移動(dòng)過快,有fast motion存在的時(shí)候分割比較模糊;(2)當(dāng)背景和前景模式差別不大的時(shí)候分割效果不好,并且在頭發(fā)絲附近的分割還是比較粗糙。針對(duì)以上兩個(gè)問題,是未來研究工作的重點(diǎn)內(nèi)容。本次實(shí)驗(yàn)將移動(dòng)端的視頻分割,當(dāng)成了單幀的靜態(tài)圖像分割,一定程度上丟失了時(shí)間維度上的信息,未來的工作考慮在時(shí)間序列上做相關(guān)的工作。
參考文獻(xiàn):
[1]Jonathan Long,Evan Shelhamer,Trevor Darrell.The IEEE Conference on Computer Vision and Pattern Recognition(CVPR),2015:3431-3440.
[2]Kendall,Alex;Cipolla,Roberto.SegNet:A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation.Badrinarayanan,Vijay,2015.
[3]Olaf Ronneberger,Philipp Fischer,Thomas Brox.U-Net:Convolutional Networks for Biomedical Image Segmentation,2015.
[4]Simon Jégou,Michal Drozdzal,David Vazquez,Adriana Romero,Yoshua Bengio.The One Hundred Layers Tiramisu:Fully Convolutional DenseNets for Semantic Segmentation(CVPR),2016.
[5]Adam Paszke,Abhishek Chaurasia,Sangpil Kim,Eugenio Culurciello.ENet:A Deep Neural Network Architecture for Real-Time Semantic Segmentation,2016.
[6]LIN Guo-sheng,Anton Milan,SHEN Chun-hua,Ian Reid.RefineNet:Multi-Path Refinement Networks for High-Resolution Semantic Segmentation,2016.