劉正東, 劉以涵, 王首人
(1. 北京服裝學院 服裝藝術與工程學院, 北京 100029; 2. 北京工業大學 信息學部, 北京 100124;3. 湖南大學 信息科學與工程學院, 湖南 長沙 410082)
服裝電子商務的發展為消費者帶來很大的方便,同時積累了大量的服裝款式圖片,可作為服裝圖像識別算法的樣本,進一步成為以圖搜圖系統的基礎。另外,人工智能中的人臉識別、步態識別、指紋識別已趨于成熟,進一步需要對視覺內容進行深層次的感知,比如對圖像中人物著裝進行識別和評判、服裝搭配智能推薦服務等。
由于服裝形態和特征的復雜性,傳統識別與分類算法的精度和場景適應性仍有待提高,圖像分割和特征提取等工作需要人為的規定和大量的實驗才能確定[1]。大部分算法研究主要通過使用圖像輪廓提取、邊緣檢測或者多尺度角點檢測來提取圖像特征[2],再利用各種分類器(貝葉斯、支持向量機、人工神經網絡等)進行模式識別[3-4]。由于服裝的柔性,其顯現出的多種形態給特征提取帶來了很大困難,傳統的特征抽取方法和分類識別模型面臨著巨大的挑戰。
深度卷積神經網絡的興起為復雜目標的識別提供了新思路。自AlexNet[5-6]在ImageNet大規模視覺識別挑戰2012(ILSVRC)上取得成功以來,后續研究人員已經提出了更深的網絡[7-8],并在ImageNet及其他基準數據集上實現高性能的實驗結果[9-10],但這類實驗一般是根據已有的經過標準化的圖像樣本集合(基準數據集),而非真實場景圖像。
為此,本文提出一種基于電商平臺實際圖片樣本庫,利用深度卷積神經網絡,快速檢測圖像中西裝的目標,并能確定1個或者多個目標的位置,有效處理不同照明條件、目標大小、背景變化等因素的影響,為服裝領域的機器視覺提供算法基礎。
深度學習方法允許研究人員設計從原始輸入到分類輸出這樣端到端的訓練與測試系統,而不像傳統的模式識別方法中特征抽取與分類識別階段分開處理的手工方法。卷積神經網絡(CNNs)作為圖像識別任務中的特征提取器具有突出的特點,目前該思想已經廣泛擴展到了機器人視覺、語音識別等多個人工智能領域[9-10]。
深度學習與傳統模式識別方法相比具有自動特征學習和深層架構的優勢。
自動特征學習是深度學習的主要特征,算法從大數據樣本中自動學習得到合適的圖像特征,而不像傳統方法一樣使用手工提取。手工提取主要依靠算法研究人員的先驗知識,提取到的特征集合維度和深度具有很大的限制。深度學習基于大量的樣本數據利用機器學習的方法自動學習特征表示,可以包含成千上萬的參數,而且在神經網絡的框架下,特征表示和分類器是聯合優化的,可最大程度地發揮二者聯合協作的性能。
深度學習另外一個特征是深層的結構,意味著作為基本構成的神經網絡具有很多層,多則可達到上百層。而傳統的分類方法,比如支持向量機、Boosting等機器學習模型都是淺層結構,一般為幾層。淺層模型提供的是局部表達,隨著分類問題復雜度的增加,需要將分類空間劃分成越來越多的局部區域,因而需要越來越多的參數和訓練樣本,以至于很難達到較高的識別效率。而深度模型能夠從像素級原始數據到抽象的語義概念逐層提取信息,具有強大的學習能力和高效的特征表達能力,這使得它在提取圖像的全局特征和上下文信息方面具有突出的優勢,為解決服裝識別等計算機視覺問題提供了思路。
目前,卷積神經網絡是深度學習中目標檢測的主要方法。隨著硬件技術的不斷提高,更高性能的深度網絡也被提出,其中,一些先進的目標識別和分類算法得到了很好的實驗效果。根據以往文獻及應用分析,實驗主要集中在3個學習框架:快速區域卷積神經網絡(faster R-CNN)[11],基于區域的全連接卷積網絡(R-FCN)[12]和單次多盒檢測(SSD)[13],其他的框架通常與這三者類似。谷歌發布的Tensorflow目標檢測API中,針對特定模型也提供了以上幾種開發模型。
1)快速區域卷積神經網絡。faster R-CNN的核心設計與原始的R-CNN一致:先假設對象區域,然后對其進行分類。不同點是用一個快速的區域建議網絡(RPN)代替了之前慢速的選擇搜索算法(selective search algorithm)。檢測過程分2個階段進行:在第1階段,區域建議網絡將圖像作為輸入,并通過特征提取器進行處理。中間層用于目標預測,每個候選目標區都有一個分數。為訓練RPN,系統根據候選區域與標簽區域的相交程度考慮候選區域是否包含對象;在第2階段中,通過池化層、全連接層以及最后的softmax分類層和目標邊框回歸器(bounding box regressor)識別目標區域。
2)基于區域的全連接卷積網絡。R-FCN框架提出使用位置敏感映射來解決平移不變性問題。這種方法類似于Faster R-CNN,但不是從區域建議的同一層抽取特征,而是從預測之前的最后一個特征層抽取特征(包含對象或成為其一部分的可能性較高的區域)。通過該技術的應用,減少了區域計算中使用的存儲器的數量。文獻[12]中表明使用ResNet-101作為特征提取器可產生比R-CNN更快的競爭性能。
3)單次多盒檢測。以上2個模型均是分 2個步驟執行,首先使用一個區域建議網絡來生成感興趣區域(region of interest),然后再利用卷積網絡對這些區域進行分類。SSD可在單個步驟中完成上述2個步驟,并且在處理圖像的同時預測目標包圍盒和目標分類。SSD模型通過前饋卷積網絡來處理目標識別問題,前饋卷積網絡產生固定大小的包圍盒集合并且在每個盒子中存在對象類別的評分。
雖然每個網絡模式都具有自己的特色,但他們都有相同的目標,即提高準確性,同時降低計算復雜度。3個框架在公開的圖像樣本庫PASCAL VOC、MS COCO和ILSVRC數據集上都有測評[7,9],并且與其他方法進行了對比,但這些樣本集是經過規格化處理的,是否能在實際圖片中得到很好的應用需要進一步驗證。真實場景包括拍攝的照片或者網絡下載的圖片,其特點是場景復雜,而且大小不同。這些與標準化的樣本圖片是不同的。由于目前并沒有統一的服裝圖像樣本庫,需要創建一個新的樣本庫。據此收集了來自天貓網(www.tmall.com)的包含西裝目標的500個樣本圖像。
表1示出利用3種算法對采集的真實樣本集的訓練結果,其中訓練時間是采用20萬步的迭代所花費的時間??梢钥闯?,SSD方法在速度上是3種算法中最快的,在檢測精度上可以和faster R-CNN相媲美,并有很高的召回率。

表1 3種方法的西裝識別對比Tab.1 Comparison of suit recognition by three methods
SSD架構是如圖1所示的一個開放系統,將規格化的300像素×300像素分辨率的輸入圖像利用多層卷積進行特征提取,經多層網絡(特征提取和分類器)處理后,識別圖像中目標類別并定位。其核心是在特征圖上采用卷積核來預測一系列候選區域框的類別分數和位置。

圖1 SSD架構Fig.1 SSD framework
SSD使用了經典的VGG(visual geometry group)深度卷積網絡。每組卷積都使用4×3的卷積核(以conv4-3表示)和fc7的全連接層。在訓練高級別的網絡時,可以先訓練低級別的網絡,用前者獲得的權重初始化高級別的網絡,可加速網絡的收斂。
由圖1可知,SSD各層中大量使用卷積獲得的目標特征。圖中標識出每個階段生成的特征圖結果,如38×38×512表示38像素×38像素的特征圖,層數為512個。
對于上層的輸入fi-1(x),利用卷積核gi(x)獲得該層的特征圖hi(x)。

式中:fi-1(x)為前一層的圖像;gi(x)為卷積函數;hi(x)為卷積處理之后的特征圖像。
為進一步降低特征的維度,深度學習采用池化層。SDD采用2×2的平均池化處理,相當于又一次的特征提取,數據量進一步減小,而且能夠對輸入的微小變化產生更大的容忍性,包括圖像成像的平移、旋轉和縮放等。
在卷積層和池化層獲得特征圖之后,進行目標的分類檢測。為提高檢測準確率,采用特征金字塔結構進行檢測,在不同尺度的特征圖上進行預測。這種架構設計,實現了端到端的訓練,即使圖像的分辨率比較低,也能保證檢測的精度。檢測時利用了4×3、6×2、7×2、8×2、9×2這些大小不同的卷積核,是為了能夠檢測到不同尺度的物體、達到多尺度的目的,如圖2所示。

圖2 金字塔型特征抽取Fig.2 Pyramid feature extraction
在訓練之前,需要用包圍盒和類標簽手動標注每個圖像中包含西裝的區域。卷積網絡目標識別輸出是不同大小的包圍盒邊界框,與其相應的預測結果區域通過交并比進行評估。
交并比(IoU)定義為目標識別產生的候選包圍盒C與真實目標包圍盒G的交疊率,即它們的交集與并集的比值,如圖3所示。最理想情況是完全重疊,即比值為1。loU的值定義為

圖3 交并比Fig.3 Inter section over union

圖4 失敗例子Fig.4 Failure cases. (a)Target failure; (b)Target loss; (c)Target overlap
在訓練時,真實標注與預測包圍盒按照如下方式進行配對:首先,尋找與每個真實標注框有最大的x的預測包圍盒,這樣就能保證每個真實標注包圍盒與唯一的一個預測包圍盒對應起來。之后將剩余還沒有配對的預測包圍盒與任意一個真實標注包圍盒嘗試配對,只要二者之間的x大于閾值0.5,就認為匹配。匹配成功的預測包圍盒就是正樣本(Pos),如果匹配不成功,就是負樣本(Neg)。
SSD的損失函數為
L(x,c,l,g)=(Lconf(x,c)+aLloc(x,l,g))/N
式中:x為IoU值;l為候選包圍盒的位置信息;g為真實目標包圍盒的位置信息;c為候選包圍盒的置信度,是一個權重參數,默認為1;a為用于調整預測誤差和位置誤差之間的比例,默認為1;N為與真實目標包圍盒相匹配的候選包圍盒數量,若N為0,則總體損失等于0;Lloc(x,l,g)為候選包圍盒與真實目標包圍盒的Smooth L1損失函數;Lconf(x,c)為置信損失函數,這里采用交叉熵損失函數。
Smooth L1損失函數定義為
在訓練過程中,通過隨機梯度下降以及反向傳播機制不斷減小損失函數值,從而使候選包圍盒的位置逼近真實目標包圍盒位置,同時提高類別置信度,通過多次優化,不斷增強網絡模型檢測目標的效果,最終得到一個最優的目標檢測模型。
盡管SSD深度學習算法在原始樣本的評估上表現出色,達到了87.64%的精確度,但在某些情況下也會出現評估困難,這是需要進一步研究的方向。需要說明的是,由于樣本數量只有500個,對于充分訓練是不足的,易引起過擬合。然而不同類別的服裝形態具有明顯的差異,彌補了樣本數量不足的弊病。但在一些形變差異較大的情況下往往識別錯誤,導致誤報或精度降低。
圖4示出分析和整理后出現最多的3種識別失敗的案例。圖4(a)是將一些特殊區域誤判為目標區域,這一般是因為樣本數量太少,訓練不夠充分造成的;圖4(b)是沒有識別出來西裝目標,因為大圖像在標準化過程中被縮小,相應地,西裝領部分變成了小目標,在卷積過程中小尺度的卷積未能很好地抽取其特征,SSD對小目標的識別率一直較低;圖4(c)是識別區域的包含錯誤,在SSD算法中,全包含的區域以最外層的包圍盒作為結果輸出,但對于交叉區域的識別具有很大的重復識別問題。
圖5示出西裝常用的幾種穿著形式。

圖5 西裝常用穿著形式Fig.5 Usual dress forms to suit. (a)With a tie;(b)With a bow tie; (c)No tie; (d)Not fasten
西服的領型一般分為平駁頭、戧駁頭或者青果領,一般是套在淺色的襯衫外面,有的配有領帶,有的沒有,還有的配有領結。從圖像視覺效果來看,作為整體,西服的特征具有一定的明顯性,無論什么領型都是具有大致統一的結構形式,而且與襯衫的色彩反差比較大,但是相比而言,無論是平駁頭、戧駁頭或者青果領,在圖片上的細分特征并不顯眼。
樣本數據集主要包含2個方面:一是電子商務平臺上大量的服裝產品圖;二是利用手機和攝像頭拍攝的生活中的圖片。因為產品效果圖是擺拍,使用了專業的影棚和專業設備,特征是很明顯的,而且更能體現現實生活的場景,所以樣本包括了這2種不同類型的數據,這些樣本的采集有助于將訓練模型用于現實場景的目標識別工作。
西裝目標的標注采用人工標注,鑒于特征的明顯部分在于領子的外形和襯衫的搭配,所以標注的范圍為如圖6所示的白色包圍框進行標簽處理。V型的西裝領所覆蓋的區域是讓機器進行學習的標注區。

圖6 目標標注Fig.6 Labeling target box. (a)Box of tie; (b)Box of bow tie
在失敗案例中,圖4(a)代表的類型可通過增加樣本數量逐步解決,圖4(b)、(c)代表的失敗類型可設定被包含區域與外層區域的占比來決定是否舍棄被包含區域,而選擇外層區域。因為在實際場景中,一個人的空間是較為獨立的,多個服裝彼此交叉的情況較少,即使在多人合影的圖片中,人與人之間的距離較近,服裝目標也會彼此交叉,但識別前面最大的目標的結果也是合理的。
SSD雖然采用了金字塔特征層次的思路,但對小目標的識別召回效果依然一般,如圖4(b)所示。一般認為,小目標識別率較低是由于SSD使用類似conv4-3小卷積核的低級特征檢測小目標,而低級特征卷積層數少,存在特征提取不充分的問題。這樣帶來一個問題,因為采集或者下載的圖片一般都是大尺寸圖片,訓練過程開始前會標準化為300像素×300 像素尺寸,相應的特征區域就變得很小,即被識別目標變成了小目標,這樣,對訓練結果會有很大影響。
另外,SSD會將一些場景中的非目標區域誤識別為目標。經過分析預判的原因可能是因為訓練的樣本缺乏這些場景的定義。尤其是當把模型應用于攝像頭等實時采集的應用環境時,新的背景成了模型未訓練的目標,會造成誤判。針對該問題,處理的方式是:當將模型應用于一個具有新背景的應用場景時,首先預采集使用環境下的多角度圖片,對模型進行增強訓練,讓模型熟悉新的環境。把這些需要讓模型排除的背景樣本稱之為負樣本。
針對以上2個問題,提出基于尺寸分割和負樣本的SSD增強方法(DN-SSD)。主要目的是能夠將SSD算法應用于任何實際場景,并能提高小目標的分辨能力。
基于尺寸分割的目的是防止小目標的消失,不是簡單地將輸入圖片規格化為固定大小(如300像素×300像素)的尺寸,而是將大于300像素的圖像按照300像素為單位進行分割,算法借鑒多視窗分割方法[14],但不是以圖像的4個角為單位,而是分割的區域含有交叉,通過實驗確定交叉的比例為圖像的10%,分割數量s按照下式進行計算。
s=sc×sr
式中:c為圖像的列數;r為圖像的行數;sc為橫向分割的個數;sr為縱向分割的個數;s為分割后的小圖像個數。
基于此,一幅大于300像素的圖像會被分割為具有交叉區域的多個圖像,每個圖像分別地獨立進行SSD檢測,避免了圖像縮小過程中目標區域的消失?;诔叽绶指詈拓摌颖镜腟SD增強方法識別過程如圖7所示。

圖7 SSD增強方法識別過程Fig.7 Recognition process of DN-SSD
其中,負樣本的引入是為了排除實際應用中環境圖像的影響,告訴系統什么樣的內容不應該誤識別為目標。負樣本圖像不包含任何實際目標,只是作為訓練,以防過樣本過少產生過擬合失敗。

圖9 識別的結果Fig.9 Detection results. (a)Single target detection 1; (b)Single target detection 2; (c)Multi target detection; (d)Small target detection
在500張樣本集的基礎上,采用編程語言Python 3.6,在谷歌深度學習框架Tensorflow 1.5中,基于HP ZBook筆記本電腦的Win10系統(Intel i7-4810 CPU,2.8 GHz,16 GB RAM)完成實驗。在已收集的西裝圖像數據集上進行實驗,所有圖像均被標注西裝所在的區域位置和大小。
DN-SSD模型是在SSD框架的基礎上增加了尺寸分割,以保證西裝目標不至于過小,并利用負樣本來處理真實圖像中西裝的檢測和識別。實驗時數據集被分成80%的訓練集,10%的驗證集和10%的測試集。實驗在訓練集上進行訓練,在驗證集上進行評估,對測試集進行最終評估。由于數據集中的圖像數量較少,為避免過擬合,針對應用場景又增加了50張負樣本。
圖8示出訓練過程迭代到20萬步時的損失函數值變化曲線。這證明了卷積網絡有效地學習了數據,同時在大約10萬次迭代中實現了較低的錯誤率。

圖8 訓練過程中損失函數值曲線Fig.8 Curve of loss function value in training process
因為實驗是識別西裝這一種類別,使用召回率和精確率來評估是合理的,在提出的新的DN-SSD算法中,其識別召回率為77.54%,精確率為92.76%,識別時間為388 ms,總體性能要要優于經典SSD算法。召回率提高了7.36%,精確率提高了 5.84%,總體的識別時間變化不是很大,提高了61 ms,對于實時的運算可以忽略不計。究其原因是在小目標檢測上提高了識別能力。實例識別結果如圖9 所示,最后一張圖是經典SSD無法識別的小目標。
相比于經典的SSD算法,本文采用的DN-SSD算法呈現出2點特點:一是可以檢測出更多的物體,如圖9(c);二是對于同樣識別出的物體,其置信度更高,大部分的識別置信度都在90%以上。此外,深度學習系統的實施需要大量數據,并會影響最終的性能。為避免過擬合,本文輸入負樣本也提高了算法的召回率。
為解決機器智能對人類著裝的視覺判斷,本文提出一種基于深度學習的西裝識別檢測算法DN-SSD。基于經典的SSD算法,使用基于尺寸分割和負樣本增強技術可獲得更好的性能和效率,為電商平臺或者實時監控系統對機器自動的著裝分類識別提供一個實用而快速的解決方案。該方法與其他分類方法的主要區別在于,其應用場景并非是針對已有的、規格化的樣本庫,而是針對真實的網絡圖片或者各種攝像設備捕獲的圖像,通過使用GPU的實時硬件和軟件系統進行處理。實驗結果和比較也證明了基于深度學習的檢測器能夠以92%以上的成功率識別圖像中的西裝。未來進一步研究將集中在改善當前的結果上,并將算法擴展到其他服裝款式的識別工作中。