先詩亮,劉本永
(1貴州大學 大數據與信息工程學院,貴陽 550025;2貴州大學 智能信息處理研究所,貴陽 550025)
在行人識別領域,目前比較成熟的技術主要是人臉識別,但是人臉識別容易受到表情變化、光照條件,面部遮擋物的影響。因此,如果將被識別對象的體型特征(比如矮胖、高瘦等)加以利用,可以很好地彌補人臉識別的缺陷。許多學者對體型測量展開了研究,并取得了很大進展。
基于圖像的體型測量方法主要分二種:一種是立體視覺方法[1-2],一種是單目測量方法[3]。立體視覺法需要進行三維重建來實現測量,其主要步驟是圖像匹配、攝像機參數標定。單目測量法避免了圖像匹配、相機標定的難點。Criminisi[4]等首先提出未標定圖像的視覺測量理論,利用圖像的消失點和消失線信息,以及映射變換中共線四點形成的交比不變性的性質,推導出度量信息之間的比例關系。此后,Peng[5]等人提出以場景中的規則物體建立歐式坐標系,以便測量其幾何量的方法。根據投影幾何中的約束關系,以及共線四點交比不變的性質,建立約束方程求得目標的高度。但該方法僅能準確測量規則物體的長度。
與基于圖像的測量方法相比,基于視頻的體型測量方法不僅可以利用視頻的運動信息,還可以對每幀的測量結果進行概率統計,提高測量的精度。董秋雷[6]等人采用混合高斯模型提取頭頂點,根據幾何約束計算垂足點,結合投影矩陣求出人體高度。Park[7]等人根據前景區域的主軸線和前景區域的交點計算頭頂點、垂足點,根據攝像機參數和投影矩陣求出人體高度。以上方法都需要事先進行相機標定。姜明新[8]等人提出一種為未標定視頻下的人體身高測量方法,通過構造虛擬水平面和虛擬垂直線來提取特征點,完成身高測量。
以上體型測量方法雖都能較準確的得到人體身高,但是求解過程都比較復雜。有些場景下,并不需要準確的身高數據,而高瘦、矮胖這樣的體型特征或許更有用處。基于此,本文研究了一種基于人體寬高比的體型分類算法,將體型分為正常、矮胖、高瘦3類,并嘗試將核非線性表達器[9](KNR)用于實現體型分類算法,并在相同條件下,與支持向量機[10](SVM)的分類性能作對比。
支持向量機是一種結構風險最小化的統計學習方法,是基于分類邊界的方法。若給定一個具有N個輸入/輸出對的訓練集:

其中,xi∈X、yi∈Y,X為訓練樣本的輸入集,Y為訓練樣本的輸出集。
傳統的線性回歸估計線性函數Y=WT X+b是通過最小二乘估計的方式實現的,其表達式為:

線性回歸估計適用于樣本能夠線性分離的情況,但在實際應用中很多樣本是不能夠線性分離的。為了得到更好的結果,支持向量回歸通過非線性映射φ,將數據X映射到一個高位特征空間F中,使得φ(X)在特征空間F中具有很好的線性回歸特性。首先在該特征空間中進行線性回歸,然后返回到原始空間中。支持向量回歸可以通過最優化問題來解決:

其中,ζ為不敏感值,為松弛變量,表示ζ帶的上界和下界,所有在ζ帶內部的樣本點(xi,yi)都不是支持向量;C為代價函數,l為支持向量的個數,WTW為正則化項,主要是為了防止過擬合現象的發生。
使用Lagrange乘子法,得到式(3)的對偶形式:

其中,k(xi,xj)=<φ(xi),φ(xj)>核函數。常用的核函數有線性核、多項式核、高斯核等。核函數可以將m維高維空間的內積運算,轉化為n維低維輸入空間的核函數計算,從而解決了在高維特征空間中計算的維數災難等問題,為在高維特征空間中解決復雜的回歸問題奠定了理論基礎。最終,可得出如下回歸函數:

假設擬合函數所屬空間為再生核Hilbert空間,xi為第i個訓練樣本,x為測試樣本,定義其對應的核函數如式(8):

其中,k為核函數,則擬合函數f(x)有多個核函數疊加而成,表示如式(9):

式中,M為原圖像像素點的總數;a為系數向量。由最小二乘準則估計a,如式(10):

其中,T表示向量或者矩陣的轉置,+則表示矩陣的MoorePenrose廣義逆,并且K中的第i行第j列的元素為:

本實驗采用中科院的CISIA-B數據集,該數據集由124人的二值輪廓圖組成。其中每個人有3種形態(背包、穿夾克、正常),每一種形態有十一個角度(從00,180,360,...,1800)。本文選取了數據集中所有人正常形態的00二值輪廓圖,共計7 500張圖片,每張圖片的分辨率均為240*320。算法流程如圖1所示。

圖1 算法流程Fig.1 Algorithm flow
輪廓檢測指在包含目標和背景的數字圖像中,采用一定的技術和方法來實現目標輪廓提取的過程[11]。常用的輪廓檢測算法是Opencv中的findcontour。該算法核心是確定二值圖像外邊界、孔邊界之間的層次關系,找到最外圍的邊界,然后用邊框將該邊界畫出。本文為了減少手臂的擺放、衣著對體型的影響,采用如下步驟完成:
(1)對原始二值輪廓圖的每一列進行遍歷,統計每一列非零像素的數量,得到一個像素數與列的關系,如圖2所示;

圖2 像素分布Fig.2 Pixel distribution
(2)對像素數非零的所有列求均值μ和方差σ;
(3)保留μ+σ和μ-σ的列數,其余列的像素全部置為0,得到一個新的輪廓圖;
(4)利用findcontour對新輪廓圖進行輪廓檢測,畫出主軀干的邊框,如圖3所示;

圖3 原始圖與主軀干效果圖Fig.3 Original image and body main contour image
(5)得到主軀干寬度和高度,計算寬高比。
Kmeans聚類是一種無監督學習算法,其思想是在給定的樣本集,按照樣本之間的距離大小,將樣本劃分為K個簇,讓簇內的點盡量緊密的連在一起,而使均方誤差最小,同時簇間的距離盡量的大[12]。
通過3.1節的處理已獲得每張圖片的主軀干的長度和寬度,將7 500張圖片主軀干的寬度和長度比值進行聚類,其目的是將體型數據分為正常、高瘦、矮胖3類。聚類所用參數見表1。

表1 聚類過程Tab.1 Clustering process
聚類結果如下:
第一類的聚類中心:018,含有2 122個寬高比數據;第二類的聚類中心:0.20,含有3 821個寬高比數據;第三類的聚類中心:0.22,含有1 557個數據。
為了方便驗證本文的分類算法,采用五折交叉驗證法:
在第一類的2 122個數中選取2 000個數據,在第二類的3 821個數中選取3 500個數,第三類的1 557個數中選取1 500個數,將以上取出的3組數據均分為5等份,并隨機取一組作為測試集,其余4組用作訓練集展開多次實驗。
KNR分訓練階段和測試階段,整體的訓練流程如下:
(1)本文采用高斯核,確定核函數k的形式;(2)高斯核函數關鍵參數σ的估計;
(3)利用每類體型數據的訓練樣本及核函數,按照式(11)構造核矩陣K,并根據式(10)計算對應的系數矢量α;
(4)給定一個訓練樣本x,將其輸入到每類KNR分類器中,根據式(9)計算每類的輸出,取輸出值最大的分類器所對應的類別作為x的分類結果。
根據3.2節可知,3種類別都有5種不同數據集,為了更加明顯的和SVM比較分類效果,需估計出每一種數據集性能較理想的σi(i=1,2,3,...,15)。σ的估值過程為:首先,將σi的初始值σi0取為訓練樣本的方差,然后按照式(10)和式(9)分別求出相應的的K和α,根據測試樣本可得到αi0下的準確率;將σi的值從0.2σi0開始,按照相隔0.1σi0的增值規律增加到2σi0,統計對比相應的識別率。當取到最高識別率(見表3)時,得到的最佳σ估計值見表2。

表2 σ的最佳估計值Tab.2 The best estimate ofσ
為了與SVM進行比較,SVM也采用高斯核,并且使用相同的訓練和測試樣本,同時其σ取表2中每一類經過多次實驗后得到的均值,即0.33,0.27,0.47。將3類的訓練集和測試集樣本送入SVM中,得到的準確率對比結果見表3。

表3 KNR和SVM準確率對比Tab.3 Comparison of accuracy between KNR and SVM
實驗結果表明,在本文研究的三分類體型任務中,KNR的平均識別率總體上好于SVM,證明了KNR用于多分類問題的有效性。
本文利用人體主軀干寬高比來描述體型,通過對輪廓進行處理,提取到了人體主軀干數據,盡可能地消除了手臂、衣著對寬度測量的影響。作為一種嘗試,將KNR(核非線性回歸)用于體型分類中,并與SVM進行了性能對比。從實驗結果可以看到,KNR得到了滿意的識別率。如何在該分類算法基礎上,實現異常體型的檢測,則是未來工作需要進一步解決的問題。