劉正東, 劉以涵, 王首人
(1. 北京服裝學院 服裝藝術與工程學院, 北京 100029; 2. 北京工業(yè)大學 信息學部, 北京 100124;3. 湖南大學 信息科學與工程學院, 湖南 長沙 410082)
服裝電子商務的發(fā)展為消費者帶來很大的方便,同時積累了大量的服裝款式圖片,可作為服裝圖像識別算法的樣本,進一步成為以圖搜圖系統(tǒng)的基礎。另外,人工智能中的人臉識別、步態(tài)識別、指紋識別已趨于成熟,進一步需要對視覺內(nèi)容進行深層次的感知,比如對圖像中人物著裝進行識別和評判、服裝搭配智能推薦服務等。
由于服裝形態(tài)和特征的復雜性,傳統(tǒng)識別與分類算法的精度和場景適應性仍有待提高,圖像分割和特征提取等工作需要人為的規(guī)定和大量的實驗才能確定[1]。大部分算法研究主要通過使用圖像輪廓提取、邊緣檢測或者多尺度角點檢測來提取圖像特征[2],再利用各種分類器(貝葉斯、支持向量機、人工神經(jīng)網(wǎng)絡等)進行模式識別[3-4]。由于服裝的柔性,其顯現(xiàn)出的多種形態(tài)給特征提取帶來了很大困難,傳統(tǒng)的特征抽取方法和分類識別模型面臨著巨大的挑戰(zhàn)。
深度卷積神經(jīng)網(wǎng)絡的興起為復雜目標的識別提供了新思路。自AlexNet[5-6]在ImageNet大規(guī)模視覺識別挑戰(zhàn)2012(ILSVRC)上取得成功以來,后續(xù)研究人員已經(jīng)提出了更深的網(wǎng)絡[7-8],并在ImageNet及其他基準數(shù)據(jù)集上實現(xiàn)高性能的實驗結果[9-10],但這類實驗一般是根據(jù)已有的經(jīng)過標準化的圖像樣本集合(基準數(shù)據(jù)集),而非真實場景圖像。
為此,本文提出一種基于電商平臺實際圖片樣本庫,利用深度卷積神經(jīng)網(wǎng)絡,快速檢測圖像中西裝的目標,并能確定1個或者多個目標的位置,有效處理不同照明條件、目標大小、背景變化等因素的影響,為服裝領域的機器視覺提供算法基礎。
深度學習方法允許研究人員設計從原始輸入到分類輸出這樣端到端的訓練與測試系統(tǒng),而不像傳統(tǒng)的模式識別方法中特征抽取與分類識別階段分開處理的手工方法。卷積神經(jīng)網(wǎng)絡(CNNs)作為圖像識別任務中的特征提取器具有突出的特點,目前該思想已經(jīng)廣泛擴展到了機器人視覺、語音識別等多個人工智能領域[9-10]。
深度學習與傳統(tǒng)模式識別方法相比具有自動特征學習和深層架構的優(yōu)勢。
自動特征學習是深度學習的主要特征,算法從大數(shù)據(jù)樣本中自動學習得到合適的圖像特征,而不像傳統(tǒng)方法一樣使用手工提取。手工提取主要依靠算法研究人員的先驗知識,提取到的特征集合維度和深度具有很大的限制。深度學習基于大量的樣本數(shù)據(jù)利用機器學習的方法自動學習特征表示,可以包含成千上萬的參數(shù),而且在神經(jīng)網(wǎng)絡的框架下,特征表示和分類器是聯(lián)合優(yōu)化的,可最大程度地發(fā)揮二者聯(lián)合協(xié)作的性能。
深度學習另外一個特征是深層的結構,意味著作為基本構成的神經(jīng)網(wǎng)絡具有很多層,多則可達到上百層。而傳統(tǒng)的分類方法,比如支持向量機、Boosting等機器學習模型都是淺層結構,一般為幾層。淺層模型提供的是局部表達,隨著分類問題復雜度的增加,需要將分類空間劃分成越來越多的局部區(qū)域,因而需要越來越多的參數(shù)和訓練樣本,以至于很難達到較高的識別效率。而深度模型能夠從像素級原始數(shù)據(jù)到抽象的語義概念逐層提取信息,具有強大的學習能力和高效的特征表達能力,這使得它在提取圖像的全局特征和上下文信息方面具有突出的優(yōu)勢,為解決服裝識別等計算機視覺問題提供了思路。
目前,卷積神經(jīng)網(wǎng)絡是深度學習中目標檢測的主要方法。隨著硬件技術的不斷提高,更高性能的深度網(wǎng)絡也被提出,其中,一些先進的目標識別和分類算法得到了很好的實驗效果。根據(jù)以往文獻及應用分析,實驗主要集中在3個學習框架:快速區(qū)域卷積神經(jīng)網(wǎng)絡(faster R-CNN)[11],基于區(qū)域的全連接卷積網(wǎng)絡(R-FCN)[12]和單次多盒檢測(SSD)[13],其他的框架通常與這三者類似。谷歌發(fā)布的Tensorflow目標檢測API中,針對特定模型也提供了以上幾種開發(fā)模型。
1)快速區(qū)域卷積神經(jīng)網(wǎng)絡。faster R-CNN的核心設計與原始的R-CNN一致:先假設對象區(qū)域,然后對其進行分類。不同點是用一個快速的區(qū)域建議網(wǎng)絡(RPN)代替了之前慢速的選擇搜索算法(selective search algorithm)。檢測過程分2個階段進行:在第1階段,區(qū)域建議網(wǎng)絡將圖像作為輸入,并通過特征提取器進行處理。中間層用于目標預測,每個候選目標區(qū)都有一個分數(shù)。為訓練RPN,系統(tǒng)根據(jù)候選區(qū)域與標簽區(qū)域的相交程度考慮候選區(qū)域是否包含對象;在第2階段中,通過池化層、全連接層以及最后的softmax分類層和目標邊框回歸器(bounding box regressor)識別目標區(qū)域。
2)基于區(qū)域的全連接卷積網(wǎng)絡。R-FCN框架提出使用位置敏感映射來解決平移不變性問題。這種方法類似于Faster R-CNN,但不是從區(qū)域建議的同一層抽取特征,而是從預測之前的最后一個特征層抽取特征(包含對象或成為其一部分的可能性較高的區(qū)域)。通過該技術的應用,減少了區(qū)域計算中使用的存儲器的數(shù)量。文獻[12]中表明使用ResNet-101作為特征提取器可產(chǎn)生比R-CNN更快的競爭性能。
3)單次多盒檢測。以上2個模型均是分 2個步驟執(zhí)行,首先使用一個區(qū)域建議網(wǎng)絡來生成感興趣區(qū)域(region of interest),然后再利用卷積網(wǎng)絡對這些區(qū)域進行分類。SSD可在單個步驟中完成上述2個步驟,并且在處理圖像的同時預測目標包圍盒和目標分類。SSD模型通過前饋卷積網(wǎng)絡來處理目標識別問題,前饋卷積網(wǎng)絡產(chǎn)生固定大小的包圍盒集合并且在每個盒子中存在對象類別的評分。
雖然每個網(wǎng)絡模式都具有自己的特色,但他們都有相同的目標,即提高準確性,同時降低計算復雜度。3個框架在公開的圖像樣本庫PASCAL VOC、MS COCO和ILSVRC數(shù)據(jù)集上都有測評[7,9],并且與其他方法進行了對比,但這些樣本集是經(jīng)過規(guī)格化處理的,是否能在實際圖片中得到很好的應用需要進一步驗證。真實場景包括拍攝的照片或者網(wǎng)絡下載的圖片,其特點是場景復雜,而且大小不同。這些與標準化的樣本圖片是不同的。由于目前并沒有統(tǒng)一的服裝圖像樣本庫,需要創(chuàng)建一個新的樣本庫。據(jù)此收集了來自天貓網(wǎng)(www.tmall.com)的包含西裝目標的500個樣本圖像。
表1示出利用3種算法對采集的真實樣本集的訓練結果,其中訓練時間是采用20萬步的迭代所花費的時間??梢钥闯觯琒SD方法在速度上是3種算法中最快的,在檢測精度上可以和faster R-CNN相媲美,并有很高的召回率。
表1 3種方法的西裝識別對比Tab.1 Comparison of suit recognition by three methods
SSD架構是如圖1所示的一個開放系統(tǒng),將規(guī)格化的300像素×300像素分辨率的輸入圖像利用多層卷積進行特征提取,經(jīng)多層網(wǎng)絡(特征提取和分類器)處理后,識別圖像中目標類別并定位。其核心是在特征圖上采用卷積核來預測一系列候選區(qū)域框的類別分數(shù)和位置。
圖1 SSD架構Fig.1 SSD framework
SSD使用了經(jīng)典的VGG(visual geometry group)深度卷積網(wǎng)絡。每組卷積都使用4×3的卷積核(以conv4-3表示)和fc7的全連接層。在訓練高級別的網(wǎng)絡時,可以先訓練低級別的網(wǎng)絡,用前者獲得的權重初始化高級別的網(wǎng)絡,可加速網(wǎng)絡的收斂。
由圖1可知,SSD各層中大量使用卷積獲得的目標特征。圖中標識出每個階段生成的特征圖結果,如38×38×512表示38像素×38像素的特征圖,層數(shù)為512個。
對于上層的輸入fi-1(x),利用卷積核gi(x)獲得該層的特征圖hi(x)。
式中:fi-1(x)為前一層的圖像;gi(x)為卷積函數(shù);hi(x)為卷積處理之后的特征圖像。
為進一步降低特征的維度,深度學習采用池化層。SDD采用2×2的平均池化處理,相當于又一次的特征提取,數(shù)據(jù)量進一步減小,而且能夠對輸入的微小變化產(chǎn)生更大的容忍性,包括圖像成像的平移、旋轉和縮放等。
在卷積層和池化層獲得特征圖之后,進行目標的分類檢測。為提高檢測準確率,采用特征金字塔結構進行檢測,在不同尺度的特征圖上進行預測。這種架構設計,實現(xiàn)了端到端的訓練,即使圖像的分辨率比較低,也能保證檢測的精度。檢測時利用了4×3、6×2、7×2、8×2、9×2這些大小不同的卷積核,是為了能夠檢測到不同尺度的物體、達到多尺度的目的,如圖2所示。
圖2 金字塔型特征抽取Fig.2 Pyramid feature extraction
在訓練之前,需要用包圍盒和類標簽手動標注每個圖像中包含西裝的區(qū)域。卷積網(wǎng)絡目標識別輸出是不同大小的包圍盒邊界框,與其相應的預測結果區(qū)域通過交并比進行評估。
交并比(IoU)定義為目標識別產(chǎn)生的候選包圍盒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的損失函數(shù)為
L(x,c,l,g)=(Lconf(x,c)+aLloc(x,l,g))/N
式中:x為IoU值;l為候選包圍盒的位置信息;g為真實目標包圍盒的位置信息;c為候選包圍盒的置信度,是一個權重參數(shù),默認為1;a為用于調整預測誤差和位置誤差之間的比例,默認為1;N為與真實目標包圍盒相匹配的候選包圍盒數(shù)量,若N為0,則總體損失等于0;Lloc(x,l,g)為候選包圍盒與真實目標包圍盒的Smooth L1損失函數(shù);Lconf(x,c)為置信損失函數(shù),這里采用交叉熵損失函數(shù)。
Smooth L1損失函數(shù)定義為
在訓練過程中,通過隨機梯度下降以及反向傳播機制不斷減小損失函數(shù)值,從而使候選包圍盒的位置逼近真實目標包圍盒位置,同時提高類別置信度,通過多次優(yōu)化,不斷增強網(wǎng)絡模型檢測目標的效果,最終得到一個最優(yōu)的目標檢測模型。
盡管SSD深度學習算法在原始樣本的評估上表現(xiàn)出色,達到了87.64%的精確度,但在某些情況下也會出現(xiàn)評估困難,這是需要進一步研究的方向。需要說明的是,由于樣本數(shù)量只有500個,對于充分訓練是不足的,易引起過擬合。然而不同類別的服裝形態(tài)具有明顯的差異,彌補了樣本數(shù)量不足的弊病。但在一些形變差異較大的情況下往往識別錯誤,導致誤報或精度降低。
圖4示出分析和整理后出現(xiàn)最多的3種識別失敗的案例。圖4(a)是將一些特殊區(qū)域誤判為目標區(qū)域,這一般是因為樣本數(shù)量太少,訓練不夠充分造成的;圖4(b)是沒有識別出來西裝目標,因為大圖像在標準化過程中被縮小,相應地,西裝領部分變成了小目標,在卷積過程中小尺度的卷積未能很好地抽取其特征,SSD對小目標的識別率一直較低;圖4(c)是識別區(qū)域的包含錯誤,在SSD算法中,全包含的區(qū)域以最外層的包圍盒作為結果輸出,但對于交叉區(qū)域的識別具有很大的重復識別問題。
圖5示出西裝常用的幾種穿著形式。
圖5 西裝常用穿著形式Fig.5 Usual dress forms to suit. (a)With a tie;(b)With a bow tie; (c)No tie; (d)Not fasten
西服的領型一般分為平駁頭、戧駁頭或者青果領,一般是套在淺色的襯衫外面,有的配有領帶,有的沒有,還有的配有領結。從圖像視覺效果來看,作為整體,西服的特征具有一定的明顯性,無論什么領型都是具有大致統(tǒng)一的結構形式,而且與襯衫的色彩反差比較大,但是相比而言,無論是平駁頭、戧駁頭或者青果領,在圖片上的細分特征并不顯眼。
樣本數(shù)據(jù)集主要包含2個方面:一是電子商務平臺上大量的服裝產(chǎn)品圖;二是利用手機和攝像頭拍攝的生活中的圖片。因為產(chǎn)品效果圖是擺拍,使用了專業(yè)的影棚和專業(yè)設備,特征是很明顯的,而且更能體現(xiàn)現(xiàn)實生活的場景,所以樣本包括了這2種不同類型的數(shù)據(jù),這些樣本的采集有助于將訓練模型用于現(xiàn)實場景的目標識別工作。
西裝目標的標注采用人工標注,鑒于特征的明顯部分在于領子的外形和襯衫的搭配,所以標注的范圍為如圖6所示的白色包圍框進行標簽處理。V型的西裝領所覆蓋的區(qū)域是讓機器進行學習的標注區(qū)。
圖6 目標標注Fig.6 Labeling target box. (a)Box of tie; (b)Box of bow tie
在失敗案例中,圖4(a)代表的類型可通過增加樣本數(shù)量逐步解決,圖4(b)、(c)代表的失敗類型可設定被包含區(qū)域與外層區(qū)域的占比來決定是否舍棄被包含區(qū)域,而選擇外層區(qū)域。因為在實際場景中,一個人的空間是較為獨立的,多個服裝彼此交叉的情況較少,即使在多人合影的圖片中,人與人之間的距離較近,服裝目標也會彼此交叉,但識別前面最大的目標的結果也是合理的。
SSD雖然采用了金字塔特征層次的思路,但對小目標的識別召回效果依然一般,如圖4(b)所示。一般認為,小目標識別率較低是由于SSD使用類似conv4-3小卷積核的低級特征檢測小目標,而低級特征卷積層數(shù)少,存在特征提取不充分的問題。這樣帶來一個問題,因為采集或者下載的圖片一般都是大尺寸圖片,訓練過程開始前會標準化為300像素×300 像素尺寸,相應的特征區(qū)域就變得很小,即被識別目標變成了小目標,這樣,對訓練結果會有很大影響。
另外,SSD會將一些場景中的非目標區(qū)域誤識別為目標。經(jīng)過分析預判的原因可能是因為訓練的樣本缺乏這些場景的定義。尤其是當把模型應用于攝像頭等實時采集的應用環(huán)境時,新的背景成了模型未訓練的目標,會造成誤判。針對該問題,處理的方式是:當將模型應用于一個具有新背景的應用場景時,首先預采集使用環(huán)境下的多角度圖片,對模型進行增強訓練,讓模型熟悉新的環(huán)境。把這些需要讓模型排除的背景樣本稱之為負樣本。
針對以上2個問題,提出基于尺寸分割和負樣本的SSD增強方法(DN-SSD)。主要目的是能夠將SSD算法應用于任何實際場景,并能提高小目標的分辨能力。
基于尺寸分割的目的是防止小目標的消失,不是簡單地將輸入圖片規(guī)格化為固定大小(如300像素×300像素)的尺寸,而是將大于300像素的圖像按照300像素為單位進行分割,算法借鑒多視窗分割方法[14],但不是以圖像的4個角為單位,而是分割的區(qū)域含有交叉,通過實驗確定交叉的比例為圖像的10%,分割數(shù)量s按照下式進行計算。
s=sc×sr
式中:c為圖像的列數(shù);r為圖像的行數(shù);sc為橫向分割的個數(shù);sr為縱向分割的個數(shù);s為分割后的小圖像個數(shù)。
基于此,一幅大于300像素的圖像會被分割為具有交叉區(qū)域的多個圖像,每個圖像分別地獨立進行SSD檢測,避免了圖像縮小過程中目標區(qū)域的消失?;诔叽绶指詈拓摌颖镜腟SD增強方法識別過程如圖7所示。
圖7 SSD增強方法識別過程Fig.7 Recognition process of DN-SSD
其中,負樣本的引入是為了排除實際應用中環(huán)境圖像的影響,告訴系統(tǒng)什么樣的內(nèi)容不應該誤識別為目標。負樣本圖像不包含任何實際目標,只是作為訓練,以防過樣本過少產(chǎn)生過擬合失敗。
圖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系統(tǒng)(Intel i7-4810 CPU,2.8 GHz,16 GB RAM)完成實驗。在已收集的西裝圖像數(shù)據(jù)集上進行實驗,所有圖像均被標注西裝所在的區(qū)域位置和大小。
DN-SSD模型是在SSD框架的基礎上增加了尺寸分割,以保證西裝目標不至于過小,并利用負樣本來處理真實圖像中西裝的檢測和識別。實驗時數(shù)據(jù)集被分成80%的訓練集,10%的驗證集和10%的測試集。實驗在訓練集上進行訓練,在驗證集上進行評估,對測試集進行最終評估。由于數(shù)據(jù)集中的圖像數(shù)量較少,為避免過擬合,針對應用場景又增加了50張負樣本。
圖8示出訓練過程迭代到20萬步時的損失函數(shù)值變化曲線。這證明了卷積網(wǎng)絡有效地學習了數(shù)據(jù),同時在大約10萬次迭代中實現(xiàn)了較低的錯誤率。
圖8 訓練過程中損失函數(shù)值曲線Fig.8 Curve of loss function value in training process
因為實驗是識別西裝這一種類別,使用召回率和精確率來評估是合理的,在提出的新的DN-SSD算法中,其識別召回率為77.54%,精確率為92.76%,識別時間為388 ms,總體性能要要優(yōu)于經(jīng)典SSD算法。召回率提高了7.36%,精確率提高了 5.84%,總體的識別時間變化不是很大,提高了61 ms,對于實時的運算可以忽略不計。究其原因是在小目標檢測上提高了識別能力。實例識別結果如圖9 所示,最后一張圖是經(jīng)典SSD無法識別的小目標。
相比于經(jīng)典的SSD算法,本文采用的DN-SSD算法呈現(xiàn)出2點特點:一是可以檢測出更多的物體,如圖9(c);二是對于同樣識別出的物體,其置信度更高,大部分的識別置信度都在90%以上。此外,深度學習系統(tǒng)的實施需要大量數(shù)據(jù),并會影響最終的性能。為避免過擬合,本文輸入負樣本也提高了算法的召回率。
為解決機器智能對人類著裝的視覺判斷,本文提出一種基于深度學習的西裝識別檢測算法DN-SSD?;诮?jīng)典的SSD算法,使用基于尺寸分割和負樣本增強技術可獲得更好的性能和效率,為電商平臺或者實時監(jiān)控系統(tǒng)對機器自動的著裝分類識別提供一個實用而快速的解決方案。該方法與其他分類方法的主要區(qū)別在于,其應用場景并非是針對已有的、規(guī)格化的樣本庫,而是針對真實的網(wǎng)絡圖片或者各種攝像設備捕獲的圖像,通過使用GPU的實時硬件和軟件系統(tǒng)進行處理。實驗結果和比較也證明了基于深度學習的檢測器能夠以92%以上的成功率識別圖像中的西裝。未來進一步研究將集中在改善當前的結果上,并將算法擴展到其他服裝款式的識別工作中。