賈群喜 張偉民 孫占鵬 戶肖劍
摘 ?要:為了解決人體輪廓識(shí)別精度不高,魯棒性不好的問題,在保證實(shí)時(shí)性的要求下,提出了一種基于深度學(xué)習(xí)的人體輪廓識(shí)別方法,該方法采用U-Net神經(jīng)網(wǎng)絡(luò)框架,建立特定視角的數(shù)據(jù)集,利用高斯濾波進(jìn)行圖像預(yù)處理操作,設(shè)計(jì)使用Dice和交叉熵函數(shù)相結(jié)合的損失函數(shù)進(jìn)行訓(xùn)練。實(shí)驗(yàn)表明,該方法的重合度為91.85%,單次識(shí)別耗時(shí)為50.56 ms,在保證精度和實(shí)時(shí)性的前提下,也保證了對不同環(huán)境的適應(yīng)性,在實(shí)際應(yīng)用中有良好的價(jià)值。
關(guān)鍵詞:人體輪廓;U-Net神經(jīng)網(wǎng)絡(luò);Dice損失函數(shù);高斯濾波
中圖分類號:TP391.41;TP181 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號:2096-4706(2020)23-0090-04
Human Contour Recognition Based on Deep Learning
JIA Qunxi,ZHANG Weimin,SUN Zhanpeng,HU Xiaojian
(Luoyang Institute of Science and Technology,Luoyang ?471023,China)
Abstract:In order to solve the problem of low accuracy and poor robustness of human contour recognition,a human contour recognition method based on deep learning is proposed under ensuring the real-time requirement. This method uses the U-Net neural network framework to establish a data set of specific perspective,uses Gaussian filtering to execute image preprocessing,and designs a loss function combined with Dice and cross entropy function for training. The experiment shows that the coincidence degree of the method is 91.85%,and the single recognition time is 50.56 ms. Under the premise of ensuring the accuracy and real-time,it also ensures the adaptability to different environments,which has good value in practical application.
Keywords:human contour;U-Net neural network;Dice loss function;Gaussian filtering
0 ?引 ?言
在對現(xiàn)有人體輪廓算法實(shí)際運(yùn)用過程中,發(fā)現(xiàn)現(xiàn)有算法無法滿足所要求的精度與魯棒性,就此展開了研究。在制作精準(zhǔn)數(shù)據(jù)集、優(yōu)化模型架構(gòu)、訓(xùn)練模型實(shí)踐認(rèn)證的同時(shí),認(rèn)真比對現(xiàn)有開源優(yōu)質(zhì)人體輪廓識(shí)別算法,優(yōu)中則優(yōu),不斷完善。最終得到符合理性預(yù)期,人體識(shí)別精度達(dá)到91.85%遠(yuǎn)遠(yuǎn)高于現(xiàn)有開源人體輪廓識(shí)別算法。并且在保證魯棒性的同時(shí),基于有限的嵌入式平臺(tái),將算法進(jìn)一步優(yōu)化,優(yōu)化進(jìn)程,提高處理效率,縮減處理時(shí)間。最終單次識(shí)別時(shí)間縮短至50.56 ms,僅僅為同類算法用時(shí)的十分之一。作者以參加全國大學(xué)生智能車競賽AI電磁組和百度飛漿組的經(jīng)歷為基礎(chǔ),利用Jetson Xavier NX AI系統(tǒng)模塊以U-NET神經(jīng)網(wǎng)絡(luò)為基礎(chǔ),制作數(shù)據(jù)集、設(shè)計(jì)損失函數(shù)實(shí)現(xiàn)人體輪廓識(shí)別。
1 ?基于深度學(xué)習(xí)人體輪廓識(shí)別算法
本文人體輪廓識(shí)別的方法的流程大致如下:
(1)數(shù)據(jù)集的建立,對原始圖像進(jìn)行人工分割標(biāo)記人體輪廓,并進(jìn)行圖像預(yù)處理。
(2)設(shè)計(jì)損失函數(shù)。
(3)使用本文的神經(jīng)網(wǎng)絡(luò)模型對人工標(biāo)記好的人體輪廓進(jìn)行訓(xùn)練,測試。
(4)對結(jié)果進(jìn)行分析。
1.1 ?數(shù)據(jù)集的獲取
人體姿態(tài)數(shù)據(jù)集、人體輪廓數(shù)據(jù)集網(wǎng)上有很多,其中符合設(shè)計(jì)要求的也有很多,比如LSP、FLIC這種只包含單人人像的數(shù)據(jù)集;比較經(jīng)典的MPII、MSCOCO同時(shí)包含單人/多人人像的數(shù)據(jù)集。但此類數(shù)據(jù)集過于龐大且較為復(fù)雜,照片雖多但無法滿足我們特殊的要求。在LSP、MPII中多數(shù)為從YouTube Video中抽取出來的,照片模糊姿態(tài)不定。其中MPII Human Shape是一系列人體輪廓形狀的3D模型與工具,其中精確的人體正面輪廓與側(cè)面輪廓帶給了我們啟發(fā),我們決定建立自己的數(shù)據(jù)庫。我們選取男女均勻、體態(tài)各異、穿著緊身衣物的100人,分別通過相機(jī)在固定背景下采集兩張正視、側(cè)視圖作為數(shù)據(jù)總集。由于數(shù)據(jù)集的類型統(tǒng)一劃分,處理起來也方便了許多。手工對數(shù)據(jù)集進(jìn)行篩選,對有缺陷的圖片進(jìn)行刪除、重拍處理。最終數(shù)據(jù)集共包括200張圖片,拿出12張作為驗(yàn)證集,其余則為訓(xùn)練集。
1.2 ?圖像預(yù)處理
在對圖像進(jìn)行處理時(shí),往往會(huì)對直接采集得來的圖像進(jìn)行初步處理以及篩選。在我們采集數(shù)據(jù)時(shí)發(fā)現(xiàn),這些真實(shí)數(shù)據(jù)中存在相當(dāng)一部分噪聲和大量的缺失值。所以需要對采集來的圖像進(jìn)行清洗,便于得到更標(biāo)準(zhǔn)、干凈、連續(xù)的數(shù)據(jù)。
本文選取的方法是高斯濾波方法,屬于線性平滑濾波方式。在計(jì)算機(jī)視覺算法的圖像預(yù)處理階段應(yīng)用廣泛。以高斯濾波的實(shí)現(xiàn)方式對圖像數(shù)據(jù)像素點(diǎn)附近鄰域(包括本身)進(jìn)行加權(quán)平均處理,是對整個(gè)圖像進(jìn)行加權(quán)平均的過程。濾波后會(huì)得到信噪比SNR比較高的圖像。
本文實(shí)現(xiàn)卷積積分的操作是通過處理離散值的卷積。但實(shí)驗(yàn)過程中處理幀數(shù)無法提升,又將高斯函數(shù)以分離的方式進(jìn)行處理,將卷積的維度降低到一維,采用可分離濾波器來加速。
綜合考慮本文數(shù)據(jù)集圖像類型,平滑濾波器一般選擇高斯函數(shù)中二維零均值離散型。
二維高斯函數(shù)(原點(diǎn)中為心點(diǎn)):
(1)
其中,σ為高斯函數(shù)的標(biāo)準(zhǔn)差,用來調(diào)節(jié)高斯濾波器寬度的參數(shù)。
1.3 ?網(wǎng)絡(luò)模型
U-Net神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)形狀類似于字母U,因此而得名U-Net神經(jīng)網(wǎng)絡(luò),其網(wǎng)絡(luò)模型如圖1所示。由于U-Net神經(jīng)網(wǎng)絡(luò)中沒有全連接層,所以也屬于全卷神經(jīng)網(wǎng)絡(luò)模型的一種變形。
U-Net神經(jīng)網(wǎng)絡(luò)是屬于編解碼結(jié)構(gòu),左側(cè)的搜索路徑是一個(gè)編碼器。右側(cè)的擴(kuò)展路徑是一個(gè)解碼器。編碼器結(jié)構(gòu)主要是用捕獲輸入信息圖片中的關(guān)聯(lián)信息,而解碼器結(jié)構(gòu)主要是對輸入的信息圖片中所需要進(jìn)行分割的物體進(jìn)行精準(zhǔn)化定位。U-Net神經(jīng)網(wǎng)絡(luò)是基于FCN(全卷積神經(jīng)網(wǎng)絡(luò))來進(jìn)行改進(jìn)的,不需要占用大量儲(chǔ)存空間和算力,并且可以利用數(shù)據(jù)增強(qiáng)等技術(shù)手段把樣本數(shù)據(jù)集訓(xùn)練出不錯(cuò)的效果,在圖像分割領(lǐng)域具有比較強(qiáng)的實(shí)用性和優(yōu)勢。
1.4 ?損失函數(shù)的設(shè)計(jì)
本文在設(shè)計(jì)損失函數(shù)上,采用Dice損失函數(shù)和交叉熵?fù)p失函數(shù)結(jié)合的方式。并且為解決樣本數(shù)量少的情況,在交叉熵?fù)p失函數(shù)中引入代價(jià)敏感矩陣。所示函數(shù)總體表示為:
(2)
其中,D為Dice損失函數(shù);w,b為神經(jīng)網(wǎng)絡(luò)模型中訓(xùn)練的參數(shù);xi為輸入模型的值;yo為模輸出的值;p為模型預(yù)測的值;y(k)為第k樣本;p(k)為第k個(gè)模型的預(yù)測值;m為樣本總數(shù)目;α為Dice與交叉熵?fù)p失之間的權(quán)重系數(shù),在實(shí)驗(yàn)時(shí)使用BP算法可對目標(biāo)函數(shù)J(w,b,xi,yo)反向鏈?zhǔn)疥P(guān)于w和b的偏導(dǎo)數(shù)求解得到。其中交叉熵?fù)p失函數(shù)Lce可表示為:
Lce= ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(3)
A=[y ?1 ?-y]
B=
C=
其中,A為此事件結(jié)果的值,B為代價(jià)敏感矩陣的系數(shù),C為交叉熵函數(shù),6為將人體輪廓識(shí)別預(yù)測為背景的懲罰懲罰系數(shù),I(p≤0.5)為指示函數(shù),不滿足條件時(shí)設(shè)置為0,滿足條件時(shí)設(shè)置為1;0表示人體輪廓識(shí)別預(yù)測為背景時(shí),不進(jìn)行懲罰;1表示將背景預(yù)測為背景類別的懲罰系數(shù)。
在本文的神經(jīng)網(wǎng)絡(luò)模型中w值越大,發(fā)現(xiàn)過擬合的現(xiàn)象越嚴(yán)重,因此在式(2)中加入L2進(jìn)行正則化,可表示為:
J(w,b)=J(w,b,xi,yo)+ ? ? ? ? ?(4)
其中,λ為正則化系數(shù),該方法可以加快模型的收斂速度,結(jié)果迭代,模型參數(shù)收斂為最優(yōu)值,分割結(jié)果更加接近于真實(shí)值。
2 ?實(shí)驗(yàn)結(jié)果與分析
2.1 ?數(shù)據(jù)集擴(kuò)充
考慮到數(shù)據(jù)集的數(shù)量太少,神經(jīng)網(wǎng)絡(luò)模型容易發(fā)生過度擬合,導(dǎo)致識(shí)別人體輪廓的性能較差。因此采用了數(shù)據(jù)集擴(kuò)充的方式。具體步驟如下:首先把每張照片中的數(shù)據(jù),通過[-20°,20°]的小角度隨機(jī)旋轉(zhuǎn)。然后通過鏡像旋轉(zhuǎn)操作。進(jìn)行擴(kuò)充,最終得到800張512×512大小的圖片數(shù)據(jù)集。
2.2 ?評價(jià)指標(biāo)
本文選取平均容錯(cuò)率H和重合度R作為評價(jià)指標(biāo)。當(dāng)重合度R越大,平均容錯(cuò)率H越小時(shí),證明實(shí)驗(yàn)效果越好。
(5)
(6)
其中,j為第j張圖片,i為第j張圖片的i次檢測,n為每張圖片檢測的次數(shù),z為測試圖片的數(shù)量,S真實(shí)值表示真實(shí)人體輪廓區(qū)域,S第i次實(shí)驗(yàn)值表示第i次實(shí)驗(yàn)預(yù)測人體輪廓區(qū)域。
2.3 ?環(huán)境配置與實(shí)驗(yàn)過程
本實(shí)驗(yàn)的硬件環(huán)境為嵌入式Jetson Xavier NX,CPU為6核NVIDIA Carmel 64位 ARMv8.2 CPU,內(nèi)存為8 GB 128位LPDDR4X GPU搭載48個(gè)Tensor Core的384核NVIDIA Volta GPU,并且具有2個(gè)NVDLA引擎,操作系統(tǒng)為Ubuntu
28.04 64位。本文的模型在TensorFlow2.0的開源深度學(xué)習(xí)框架下建立。實(shí)驗(yàn)過程主要分為數(shù)據(jù)準(zhǔn)備,模型準(zhǔn)備,模型訓(xùn)練,結(jié)果分析。依據(jù)本文的方法準(zhǔn)備數(shù)據(jù)集;利用Python語言編寫模型框架,和訓(xùn)練過程的代碼準(zhǔn)備;利用Jetson Xavier NX進(jìn)行模型訓(xùn)練。
2.3.1 ?創(chuàng)建訓(xùn)練集和驗(yàn)證集
在模型訓(xùn)練前,首先進(jìn)行創(chuàng)建訓(xùn)練集和驗(yàn)證集。數(shù)據(jù)集中的圖片共是800張。其中隨機(jī)選取640張圖片為訓(xùn)練集,剩余的160張圖片為測試集,在本次實(shí)驗(yàn)中,網(wǎng)絡(luò)的輸入模型部分為固定值512×512。此過程中的部分Python代碼為:
#創(chuàng)建訓(xùn)練集和驗(yàn)證集
dataset_train = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
dataset_val = tf.data.Dataset.from_tensor_slices((val_images, val_labels))
dataset_train = dataset_train.map(load_image_train, num_parallel_calls=auto)
dataset_val =dataset_val.map(load_image_val, num_parallel_calls=auto)
dataset_train = dataset_train.cache().repeat().shuffle (BUFFER_SIZE).batch(BATCH_SIZE). prefetch(auto)
dataset_val = dataset_val.cache().batch(BATCH_SIZE)
2.3.2 ?模型建立
這個(gè)過程中本文采用tensorflow和kears工具包進(jìn)行建立,kears具有用戶友好、模塊化、容易擴(kuò)展和與Python協(xié)作等優(yōu)勢。部分python代碼為:
def create_model():
inputs = tf.keras.layers.Input(shape=(512, 512, 3))
x = tf.keras.layers.Conv2D(256, 3, padding='same', activation='relu')(inputs)
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Conv2D(256, 3, padding='same', activation='relu')(x)
x = tf.keras.layers.BatchNormalization()(x)
2.3.3 ?模型訓(xùn)練
在模型訓(xùn)練的過程中,神經(jīng)網(wǎng)絡(luò)模型參數(shù)的更新尤其重要。本文采用批量梯度下降法,其中學(xué)習(xí)率設(shè)置為1×10-5。部分Python代碼為:
history = model.fit(dataset_train, epochs=EPOCHS,
steps_per_epoch=train_step_per_epoch,
validation_steps=val_step_per_epoch,
validation_data=dataset_val)
2.4 ?實(shí)驗(yàn)結(jié)果分析
為了更加客觀的展示模型的性能,利用相同的評價(jià)方法對三種方法進(jìn)行圖像分割的三種方法進(jìn)行評價(jià)如表1所示。
表1中的U-Net方法是本文基于U-Net神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上改進(jìn)圖像處理和設(shè)計(jì)損失函數(shù),構(gòu)建的模型。表1是本文在為了進(jìn)行數(shù)據(jù)的對比,在相同的環(huán)境上構(gòu)建不同神經(jīng)網(wǎng)絡(luò)模型,U-Net。在圖像分割領(lǐng)域經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)的效果遠(yuǎn)不如全卷積神經(jīng)網(wǎng)絡(luò),本文不再測試,重點(diǎn)測試FCN、SegNet、U-Net在嵌入式設(shè)備Jetson Xavier NX上的性能。
從表1中可以看出,本文的方法在重合率方面為91.85%,單次處理時(shí)間耗時(shí)為50.56 ms。在嵌入式設(shè)備中表現(xiàn)出來的性能比較良好,具有實(shí)際應(yīng)用價(jià)值最終的提出效果如圖2所示。
FCN方法是最先提出來全卷積神經(jīng)網(wǎng)絡(luò),并應(yīng)用在圖像分割領(lǐng)域達(dá)到了比較高的重合率為89.41%,但是由于本身的全卷積結(jié)構(gòu),導(dǎo)致單次的測試上耗時(shí)很長,沒有辦法進(jìn)行實(shí)際的應(yīng)用。本文提出的方法在實(shí)時(shí)性和重合率方面均優(yōu)于FCN方法和SegNet方法。
SegNet方法在為了平衡重合率和實(shí)時(shí)性方面,就需要在特征提取時(shí),更多的保留邊界信息,這就導(dǎo)致圖像邊緣信息的丟失,在相對較好的情況下,不考慮推理時(shí)間的情況下,SegNet方法暫時(shí)不如FCN方法的。
而本文的U-Net方法是一種不同于FCN和SegNet方法,但同時(shí)又有相似之處。本文的方法突出利用數(shù)據(jù)增加的方法進(jìn)行數(shù)據(jù)集的制作,從而實(shí)現(xiàn)極少數(shù)據(jù)集的端對端訓(xùn)練。同時(shí)也兼顧了訓(xùn)練的準(zhǔn)確率和實(shí)時(shí)性。本文認(rèn)為U-Net方法的主要優(yōu)勢在于深層信息和淺層信息的應(yīng)用,淺層信息作為目標(biāo)與環(huán)境中最為重要的特征,提供了在區(qū)分目標(biāo)和非目標(biāo)中的數(shù)據(jù)信息,可以更好地進(jìn)行物體的分割。淺層結(jié)構(gòu)由于沒有丟失信息而又有高分辨率信息屬性,可以更好地對物體進(jìn)行細(xì)節(jié)方面的分割。
本文所述方法在準(zhǔn)確率、耗時(shí)和對復(fù)雜場景的適應(yīng)性比較好,缺點(diǎn)是只能測試單人,當(dāng)輸入圖片中包含很多人的時(shí)候,人體的輪廓。
3 ?結(jié) ?論
本文提出了一種基于U-Net卷積神經(jīng)網(wǎng)絡(luò)人體輪廓識(shí)別方案,采用Dice損失函數(shù)和交叉熵?fù)p失函數(shù)結(jié)合的方式設(shè)計(jì)損失函數(shù),在保證人體輪廓識(shí)別精度比較低的情況下,不需要占用大量儲(chǔ)存空間和算力,保證了比較好的實(shí)時(shí)性和魯棒性。在嵌入式設(shè)備中進(jìn)行應(yīng)用,為實(shí)際應(yīng)用提供了方案。
參考文獻(xiàn):
[1] 吳澤斌,張東亮,李基拓,等.復(fù)雜場景下的人體輪廓提取及尺寸測量 [J].圖學(xué)學(xué)報(bào),2020,41(5):740-749.
[2] 路煜.基于全卷積的編解碼網(wǎng)絡(luò)的人體輪廓提取方法研究 [J].信息與電腦(理論版),2020,32(3):47-48+52.
[3] 王鵬,方志軍,趙曉麗,等.基于深度學(xué)習(xí)的人體圖像分割算法 [J].武漢大學(xué)學(xué)報(bào)(理學(xué)版),2017,63(5):466-470.
[4] 楊丹,劉國如,任夢成,等.多尺度卷積核U-Net模型的視網(wǎng)膜血管分割方法 [J].東北大學(xué)學(xué)報(bào)(自然科學(xué)版),2021,42(1):7-14.
[5] HE K M,GKIOXARI G,DOLL?R P,et al. Mask R-CNN [C]//2017 IEEE International Conference on Computer Vision (ICCV). New York:IEEE Press,2017:2980-2988.
[6] SHEN X Y,TAO X,GAO H Y,et al. Deep automaticportrait matting [C]// Computer Vision-ECCV 2016,2016:92-107.
[7] SHEN X Y,HERTZMANN A,JIA J Y,et al. Automatic Portrait Segmentation for Image Stylization [C]//37th Annual Conference of the European Association for Computer Graphics,Goslar:Eurographics Association,2016:93-102.
作者簡介:賈群喜(2000—),男,漢族,河南駐馬店人,本科在讀,研究方向:自動(dòng)化。