賈群喜 張偉民 孫占鵬 戶肖劍



摘 ?要:為了解決人體輪廓識別精度不高,魯棒性不好的問題,在保證實時性的要求下,提出了一種基于深度學習的人體輪廓識別方法,該方法采用U-Net神經網絡框架,建立特定視角的數據集,利用高斯濾波進行圖像預處理操作,設計使用Dice和交叉熵函數相結合的損失函數進行訓練。實驗表明,該方法的重合度為91.85%,單次識別耗時為50.56 ms,在保證精度和實時性的前提下,也保證了對不同環境的適應性,在實際應用中有良好的價值。
關鍵詞:人體輪廓;U-Net神經網絡;Dice損失函數;高斯濾波
中圖分類號:TP391.41;TP181 ? ? 文獻標識碼: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 ?引 ?言
在對現有人體輪廓算法實際運用過程中,發現現有算法無法滿足所要求的精度與魯棒性,就此展開了研究。在制作精準數據集、優化模型架構、訓練模型實踐認證的同時,認真比對現有開源優質人體輪廓識別算法,優中則優,不斷完善。最終得到符合理性預期,人體識別精度達到91.85%遠遠高于現有開源人體輪廓識別算法。并且在保證魯棒性的同時,基于有限的嵌入式平臺,將算法進一步優化,優化進程,提高處理效率,縮減處理時間。最終單次識別時間縮短至50.56 ms,僅僅為同類算法用時的十分之一。作者以參加全國大學生智能車競賽AI電磁組和百度飛漿組的經歷為基礎,利用Jetson Xavier NX AI系統模塊以U-NET神經網絡為基礎,制作數據集、設計損失函數實現人體輪廓識別。
1 ?基于深度學習人體輪廓識別算法
本文人體輪廓識別的方法的流程大致如下:
(1)數據集的建立,對原始圖像進行人工分割標記人體輪廓,并進行圖像預處理。
(2)設計損失函數。
(3)使用本文的神經網絡模型對人工標記好的人體輪廓進行訓練,測試。
(4)對結果進行分析。
1.1 ?數據集的獲取
人體姿態數據集、人體輪廓數據集網上有很多,其中符合設計要求的也有很多,比如LSP、FLIC這種只包含單人人像的數據集;比較經典的MPII、MSCOCO同時包含單人/多人人像的數據集。但此類數據集過于龐大且較為復雜,照片雖多但無法滿足我們特殊的要求。在LSP、MPII中多數為從YouTube Video中抽取出來的,照片模糊姿態不定。其中MPII Human Shape是一系列人體輪廓形狀的3D模型與工具,其中精確的人體正面輪廓與側面輪廓帶給了我們啟發,我們決定建立自己的數據庫。我們選取男女均勻、體態各異、穿著緊身衣物的100人,分別通過相機在固定背景下采集兩張正視、側視圖作為數據總集。由于數據集的類型統一劃分,處理起來也方便了許多。手工對數據集進行篩選,對有缺陷的圖片進行刪除、重拍處理。最終數據集共包括200張圖片,拿出12張作為驗證集,其余則為訓練集。
1.2 ?圖像預處理
在對圖像進行處理時,往往會對直接采集得來的圖像進行初步處理以及篩選。在我們采集數據時發現,這些真實數據中存在相當一部分噪聲和大量的缺失值。所以需要對采集來的圖像進行清洗,便于得到更標準、干凈、連續的數據。
本文選取的方法是高斯濾波方法,屬于線性平滑濾波方式。在計算機視覺算法的圖像預處理階段應用廣泛。以高斯濾波的實現方式對圖像數據像素點附近鄰域(包括本身)進行加權平均處理,是對整個圖像進行加權平均的過程。濾波后會得到信噪比SNR比較高的圖像。
本文實現卷積積分的操作是通過處理離散值的卷積。但實驗過程中處理幀數無法提升,又將高斯函數以分離的方式進行處理,將卷積的維度降低到一維,采用可分離濾波器來加速。
綜合考慮本文數據集圖像類型,平滑濾波器一般選擇高斯函數中二維零均值離散型。
二維高斯函數(原點中為心點):
(1)
其中,σ為高斯函數的標準差,用來調節高斯濾波器寬度的參數。
1.3 ?網絡模型
U-Net神經網絡的網絡結構形狀類似于字母U,因此而得名U-Net神經網絡,其網絡模型如圖1所示。由于U-Net神經網絡中沒有全連接層,所以也屬于全卷神經網絡模型的一種變形。
U-Net神經網絡是屬于編解碼結構,左側的搜索路徑是一個編碼器。右側的擴展路徑是一個解碼器。編碼器結構主要是用捕獲輸入信息圖片中的關聯信息,而解碼器結構主要是對輸入的信息圖片中所需要進行分割的物體進行精準化定位。U-Net神經網絡是基于FCN(全卷積神經網絡)來進行改進的,不需要占用大量儲存空間和算力,并且可以利用數據增強等技術手段把樣本數據集訓練出不錯的效果,在圖像分割領域具有比較強的實用性和優勢。
1.4 ?損失函數的設計
本文在設計損失函數上,采用Dice損失函數和交叉熵損失函數結合的方式。并且為解決樣本數量少的情況,在交叉熵損失函數中引入代價敏感矩陣。所示函數總體表示為:
(2)
其中,D為Dice損失函數;w,b為神經網絡模型中訓練的參數;xi為輸入模型的值;yo為模輸出的值;p為模型預測的值;y(k)為第k樣本;p(k)為第k個模型的預測值;m為樣本總數目;α為Dice與交叉熵損失之間的權重系數,在實驗時使用BP算法可對目標函數J(w,b,xi,yo)反向鏈式關于w和b的偏導數求解得到。其中交叉熵損失函數Lce可表示為:
Lce= ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(3)
A=[y ?1 ?-y]
B=
C=
其中,A為此事件結果的值,B為代價敏感矩陣的系數,C為交叉熵函數,6為將人體輪廓識別預測為背景的懲罰懲罰系數,I(p≤0.5)為指示函數,不滿足條件時設置為0,滿足條件時設置為1;0表示人體輪廓識別預測為背景時,不進行懲罰;1表示將背景預測為背景類別的懲罰系數。
在本文的神經網絡模型中w值越大,發現過擬合的現象越嚴重,因此在式(2)中加入L2進行正則化,可表示為:
J(w,b)=J(w,b,xi,yo)+ ? ? ? ? ?(4)
其中,λ為正則化系數,該方法可以加快模型的收斂速度,結果迭代,模型參數收斂為最優值,分割結果更加接近于真實值。
2 ?實驗結果與分析
2.1 ?數據集擴充
考慮到數據集的數量太少,神經網絡模型容易發生過度擬合,導致識別人體輪廓的性能較差。因此采用了數據集擴充的方式。具體步驟如下:首先把每張照片中的數據,通過[-20°,20°]的小角度隨機旋轉。然后通過鏡像旋轉操作。進行擴充,最終得到800張512×512大小的圖片數據集。
2.2 ?評價指標
本文選取平均容錯率H和重合度R作為評價指標。當重合度R越大,平均容錯率H越小時,證明實驗效果越好。
(5)
(6)
其中,j為第j張圖片,i為第j張圖片的i次檢測,n為每張圖片檢測的次數,z為測試圖片的數量,S真實值表示真實人體輪廓區域,S第i次實驗值表示第i次實驗預測人體輪廓區域。
2.3 ?環境配置與實驗過程
本實驗的硬件環境為嵌入式Jetson Xavier NX,CPU為6核NVIDIA Carmel 64位 ARMv8.2 CPU,內存為8 GB 128位LPDDR4X GPU搭載48個Tensor Core的384核NVIDIA Volta GPU,并且具有2個NVDLA引擎,操作系統為Ubuntu
28.04 64位。本文的模型在TensorFlow2.0的開源深度學習框架下建立。實驗過程主要分為數據準備,模型準備,模型訓練,結果分析。依據本文的方法準備數據集;利用Python語言編寫模型框架,和訓練過程的代碼準備;利用Jetson Xavier NX進行模型訓練。
2.3.1 ?創建訓練集和驗證集
在模型訓練前,首先進行創建訓練集和驗證集。數據集中的圖片共是800張。其中隨機選取640張圖片為訓練集,剩余的160張圖片為測試集,在本次實驗中,網絡的輸入模型部分為固定值512×512。此過程中的部分Python代碼為:
#創建訓練集和驗證集
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 ?模型建立
這個過程中本文采用tensorflow和kears工具包進行建立,kears具有用戶友好、模塊化、容易擴展和與Python協作等優勢。部分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 ?模型訓練
在模型訓練的過程中,神經網絡模型參數的更新尤其重要。本文采用批量梯度下降法,其中學習率設置為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 ?實驗結果分析
為了更加客觀的展示模型的性能,利用相同的評價方法對三種方法進行圖像分割的三種方法進行評價如表1所示。
表1中的U-Net方法是本文基于U-Net神經網絡的基礎上改進圖像處理和設計損失函數,構建的模型。表1是本文在為了進行數據的對比,在相同的環境上構建不同神經網絡模型,U-Net。在圖像分割領域經典卷積神經網絡的效果遠不如全卷積神經網絡,本文不再測試,重點測試FCN、SegNet、U-Net在嵌入式設備Jetson Xavier NX上的性能。
從表1中可以看出,本文的方法在重合率方面為91.85%,單次處理時間耗時為50.56 ms。在嵌入式設備中表現出來的性能比較良好,具有實際應用價值最終的提出效果如圖2所示。
FCN方法是最先提出來全卷積神經網絡,并應用在圖像分割領域達到了比較高的重合率為89.41%,但是由于本身的全卷積結構,導致單次的測試上耗時很長,沒有辦法進行實際的應用。本文提出的方法在實時性和重合率方面均優于FCN方法和SegNet方法。
SegNet方法在為了平衡重合率和實時性方面,就需要在特征提取時,更多的保留邊界信息,這就導致圖像邊緣信息的丟失,在相對較好的情況下,不考慮推理時間的情況下,SegNet方法暫時不如FCN方法的。
而本文的U-Net方法是一種不同于FCN和SegNet方法,但同時又有相似之處。本文的方法突出利用數據增加的方法進行數據集的制作,從而實現極少數據集的端對端訓練。同時也兼顧了訓練的準確率和實時性。本文認為U-Net方法的主要優勢在于深層信息和淺層信息的應用,淺層信息作為目標與環境中最為重要的特征,提供了在區分目標和非目標中的數據信息,可以更好地進行物體的分割。淺層結構由于沒有丟失信息而又有高分辨率信息屬性,可以更好地對物體進行細節方面的分割。
本文所述方法在準確率、耗時和對復雜場景的適應性比較好,缺點是只能測試單人,當輸入圖片中包含很多人的時候,人體的輪廓。
3 ?結 ?論
本文提出了一種基于U-Net卷積神經網絡人體輪廓識別方案,采用Dice損失函數和交叉熵損失函數結合的方式設計損失函數,在保證人體輪廓識別精度比較低的情況下,不需要占用大量儲存空間和算力,保證了比較好的實時性和魯棒性。在嵌入式設備中進行應用,為實際應用提供了方案。
參考文獻:
[1] 吳澤斌,張東亮,李基拓,等.復雜場景下的人體輪廓提取及尺寸測量 [J].圖學學報,2020,41(5):740-749.
[2] 路煜.基于全卷積的編解碼網絡的人體輪廓提取方法研究 [J].信息與電腦(理論版),2020,32(3):47-48+52.
[3] 王鵬,方志軍,趙曉麗,等.基于深度學習的人體圖像分割算法 [J].武漢大學學報(理學版),2017,63(5):466-470.
[4] 楊丹,劉國如,任夢成,等.多尺度卷積核U-Net模型的視網膜血管分割方法 [J].東北大學學報(自然科學版),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—),男,漢族,河南駐馬店人,本科在讀,研究方向:自動化。