陳亞亞, 孟朝暉
(河海大學 計算機與信息學院,南京 211100)
近年來,隨著網購的發展,越來越多的服裝圖片出現在購物網站上,對于這些服裝進行分類和屬性識別變的越來越困難,以前對于服裝屬性識別大部分是基于關鍵字的,但是這種檢索的方法就需要提前給數據庫里面的服裝打標簽,手工打標簽耗時耗力,并且這種標簽都是基于語義特征的,忽略了圖像中的很多細節特征和一些難以描述的特征,準確率不是很高. 隨著圖像處理技術和卷積神經網絡逐漸發展,網絡直接學習圖像的特征,獲取到特征表示之后再度量特征[1]之間的距離和相似度來分類,可以很好的提高分類的速度和精度.
Pan RR[2]等人采用了FCM算法從針織物中提取紋理特征和結構特征送入到BP網絡進行花紋識別.Salem YB[3]對于服裝在紋理分析的基礎上進行屬性識別,使用SVM分類器進行分類. Liu S[4]等人提出了一種新的colorfashion數據集,結合了人體姿態估計模塊,顏色和類別推斷模塊和超像素類別分類器學習模塊使用多個分類器,直接解析分類服裝圖像的多個類別.Bourdev L[5]等人使用了基于poselet的方法,將多個屬性分解,然后訓練每個屬性的分類器,將這些分類器組合在一個判別模型中. Hu ZL[6]等人采用了CDT的服裝分割算法,對于前景和背景分別建模,可以從背景和光照條件不同的靜態圖像中提取到不同的服裝特征.這些方法是基于人工設計的特征,包括sift特征,hog特征,即使采用特征融合也很難達到一定的準確率. 近年來,卷積神經網絡[7-9]得到了快速的發展,利用卷積網路提取圖像的特征已經成為研究的熱點,因為卷積可以通過學習和訓練提取到圖像的特征,并且卷積神經網絡快速地被利用到服裝屬性識別和分類中,Liu ZW[10]等人引入了deepfashion數據集提出了基于關鍵點的服裝屬性識別,取得了很好的效果. 在2018年阿里舉辦了FashionAI比賽,分為服裝關鍵點定位和屬性標簽識別兩個任務. 總之,深度學習[11]促進了服裝屬性識別技術發展,提高了服裝屬性識別的準確率. 然而在基于深度學習的服裝屬性識別中,由于服裝的細節信息比較豐富,屬性之間的相似度比較高,加上一些例如光照的外界干擾因素嚴重影響識別和分類的精度和準確度. 首先需要一個種類豐富的數據集,另外網絡框架的一些細節的設計直接影響到了服裝屬性識別和分類的效果. 本文研究分析現有的服裝屬性識別框架,并做了對比實驗,在已有網絡的基礎上改進損失函數,采取更有效的區域選擇方法.
將原來的網路分為單個網絡分支,全局網絡,局部網絡,和關鍵點檢測網絡. 加入了一個新的層,這個層叫做landmark. 首先得到一個局部特征,然后將這些局部特征按通道進行組合在一起,使用全連接層進行編碼輸出,得到固定維數的局部特征. landmark代表的是一種局部的細粒度的特征,將這些特征和全局特征進行組合能較好的對圖像特征進行表征,基于這一點設計了一種關鍵點回歸網絡,基本部分與主網絡共享權值. 輸出的關鍵點信息作為輸入被網絡2吸收. 當有足夠多的有標注的數據時,深度學習可以同時學習圖像特征和度量函數,其背后的思想就是通過給定的度量函數,學習特征在該度量空間下具有很好的判別性,端到端的特征學習重要研究方向就是如何構建更好的特征表示形式和損失函數,網絡結構如圖1所示.

圖1 fashionnet網絡結構
目標檢測算法就是給定一張圖片,對于圖形中的物體進行分類和定位,傳統的目標檢測采用的是基于滑動窗口的,并且圖像的特征是人工設計的特征,不僅計算復雜度高,而且檢測精度比較低. 隨著深度學習的發展,基于深度學習目標檢測算法已經逐漸取代了傳統的目標檢測算法,RCNN[12]系列的目標檢測算法是Two-Stage[13]的檢測算法,首先在圖片上選出Proposals Region,然后在建議區域上進行特征提取,隨后在最后面加上分類頭和回歸頭進行分類和定位. 隨著檢測算法的發展,SPP-Net[14]的提出解決了全連接層必須輸入固定尺度大小的特征圖導致的原始圖像經過wrap和crop帶來的拉伸變形問題,它在最后一個卷積層上加入了金字塔池化層,使得全連接層的輸入固定. 這樣輸入圖像就可以是任意尺寸的,輸出還是一個固定維數的特征向量然后送到全連接層. 這種結構隨后被加入到RCNN中,Fast R-CNN就是對于整張圖片進行特征提取,然后找到每個Proposals Region在特征圖上的映射patch,將patch作為每個Proposals Region的卷積特征輸入到SPP層和后面的層,Faster R-CNN[15]提出了新的RPN結構,已經成為目標檢測的主流框架,被很多檢測網絡使用.
Faster R-CNN是Girshick RB在他設計的RCNN和Fast R-CNN基礎上改進出來的. Faster RCNN無論在速度還是精度上都都比之前的框架有明顯的提升,它是一種基于雙階段的檢測算法,之前的Fast R-CNN首先使用selective search選出2000個Proposals Region,然而速度的運算瓶頸在于候選區域的生成時間. 候選區域的生成時間嚴重制約了目標檢測的時間,并且候選區域的好壞直接影響了后續目標檢測任務的結果. 設計一種含有少量的候選區域而且質量很高的結構進行候選區域提取就顯得很重要.Faster R-CNN就設計了RPN結構,RPN直接利用了CNN產生候選區域,不再使用selective search,而是使用卷積網絡在整張圖上進行特征提取,并在卷積層的最后一層利用RPN網絡滑動,利用網絡的邊框回歸機制和Anchor機制來得到多個面積不一,多個不同的長寬比的候選區域. Faster R-CNN真正意義上實現了端到端的網絡訓練,將目標候選框的查找和目標的分類兩個步驟結合起來,在速度和精度上都有不錯的提高.Cascade R-CNN[16]在此網絡的基礎上在后面的檢測器堆疊了幾個級聯模塊,并采用不同的IOU閾值訓練,進一步提高了準確率. IOU-Net[17]改進NMS算法,本文就是采用了這個網絡進行訓練,得到了很好的效果.
Mask-R-CNN[18]擴展了Faster R-CNN結構,在后面添加了一個和分類頭,回歸頭并行的機制mask層,這一層是一種二值的mask,可以實現逐像素的檢測.并且在細節上為了提高特征表達能力,使用ResNet替換了Faster R-CNN中的VGG基礎網絡. 為了挖掘多尺度的特征,作者使用了FPN網絡,FPN網絡可以將金字塔高級特征傳遞到底層,每一層都是高層特征與底層特征的組合. 使得網絡的特征圖同時具備細節和局部信息. 由于此網絡的mask層是逐像素的檢測,所以會出現misalignment問題,于是作者提出了ROIAlign結構,之前的ROI Pooling會經歷兩個量化的過程,第一個就是從ROI Proposals到特征圖進行映射的過程,第二個就是從特征圖劃分成7×7的bin的過程,由于四舍五入將會導致量化的誤差. ROIAlign結構可以使用雙線性插值,不再進行四舍五入,將候選區域分割成k×k個單元,在每個單元中計算固定的4個坐標的位置,用雙線性內插的方法計算出4個位置的值,然后進行最大池化操作. Mask-RCNN損失函數就是分類加上回歸和Mask的預測的損失之和. Mask使用了sigmoid的函數,這樣避免了類間的競爭. 基于Mask R-CNN的這些優點,本篇文章將mask-rcnn運用到服裝檢測中,建立了服裝檢測模型.
Faster R-CNN候選區域的生成使用了RPN網絡,采用一種Anchor機制,既保證了精度又提高了速度.在候選區域的生成過程中,采用的主要算法如下:以IOU為分類指標,將候選框分為正負樣本兩類.

其中,Sa代表預測框,Sb代表是標記框,FIOU代表的這兩者之間的重疊率,這個比值越高,預測效果越好. 值大于0.7,就標記為正樣本,如果小于0.3就標記為負樣本,但是在進行候選框的選取時候,傳統的NMS算法采用的是分類得分作為評判標準,然而在實驗中就會發現這種方式不能很好地表征預測框的準確性,得分高的預測框并不一定比得分低的預測框好,就會使一些分類得分低但是與Sb的值很接近的框被抑制過濾掉,導致最終的得分指標下降. 本文采用了IOU-Net的思想,引入了回歸得分作為評判標準. 每次計算預被剔除的框的的分類得分和之前的計算的最高的分類得分的最高值,保留最高的分類得分,這樣返回的IOU的預測框的得分不一定是此框的原始得分,而是以該預測框為依據提出框的最高分類得分.
Mask R-CNN不再使用原始的ROI池化,因為ROI池化將對應的候選區域池化成固定尺寸的特征圖的時候,兩次量化結果的輸出導致最后得到的特征圖和原來的特征圖像素位置偏移,不能很好的匹配. Mask R-CNN使用了ROIAlign方法,不再取整,而是采用雙線性差值的方法固定四個點坐標的像素值,使得不連續的操作變得連續起來. 且定義了三個階段的損失,總的損失函數定義為:

本文實驗目的主要有兩個,其一是在原有的數據集上面進行微調訓練自己的數據集,得到一個新的模型ClothNet,然后將這個模型作為檢測網絡的基礎模型,繼續微調送入到Faster R-CNN檢測網絡. 其二在預訓練模型的基礎上使用了Mask R-CNN結構訓練檢測網絡,對比這兩種算法的結果.
本節實驗所使用到的數據集有deepfashion,coco數據集. DeepFashion是香港中文大學開放的一個large-scale數據集,包含80萬圖片,包含了不同角度,不同場景,買家秀,賣家秀的圖片,總共有四個任務,分別是服裝類別和屬性預測,in-shop和c2s服裝檢測點,外接矩形檢測. 每張圖片具有豐富的標注信息,包括類別,屬性,bbox,特征點等信息. 本文主要做服裝的屬性識別與分類,所選的五個數據集中的一個,category-attribute,里面包含了289 222張服裝圖片,50個類別,1000個服裝屬性,每張圖片是否標注了Bounding Box和服裝類型clothing type. Bounding Box標注了左上角位置和右下角位置,每張圖片的最長邊resize到300,保持原圖片的長寬比. 服裝類型分為上身服裝,下身服裝,全身服裝這三個類別,屬性包括五類,紋理,面料,形狀,部分和風格. 數據的可視化結果如圖2所示.
我們在實驗中抽取了這個數據集單個類別個數超過2000的20個類別,每個類別抽取2000張圖像,構建子數據集deepfashionkid在VGG16[19]上進行微調.
由于本實驗解決的問題是服裝的目標檢測,本文做了一組對比實驗,并在改進的網絡結構上做了實驗.實驗如下:
首先對于Faster R-CNN,首先使用VGG16在imagenet的預訓練模型上進行fine-tuning使用數據集deepfashion的子數據集deepfashionkid. 將得到的模型clothNet保存下來,方便后面的目標檢測進行遷移學習. 算法框架如圖3所示.

圖2 數據的可視化結果

圖3 服裝檢測系統整體框架圖
Deepfashionkid數據集內容如表1所示:又在deepfashionkid數據集中每類抽取200張構建目標檢測的標記數據集,分別是deepfashionVoc和deepfashion Mask兩個數據集,如表2和表3所示.
嫁接學習的訓練方式將數據集分成兩部分,part1和part2,part1部分的數據量遠大于數據part2,首先訓練part1部分得到的模型基礎上訓練part2. Faster R-CNN采用的是clothNet作為預訓練的模型,然后使用了deepfashionVoc數據集進行目標檢測. Mask RCNN采用了coco數據集的與訓練的模型,在這個基礎上進行微調,進而得到目標檢測的結果. 使用labelme進行標注,因為數據集中的服裝基本上都是穿在人身上的,coco數據集也有關于人的關鍵點檢測模型,可以拿來作為預訓練模型,在這個基礎上從頭訓練,得到的實驗結果.

表1 各算法采用的數據集個數
本節主要評估服裝屬性識別在deepfashion數據集上對比實驗,并且在此數據集上改進實驗.
本次的實驗方案參照BTIC[20]的訓練trick進行訓練的,線性擴展學習率,隨著batchsize的增大,學習速率也在增大. 在剛開始訓練的時候使用一個小的學習率訓練幾個epoch,然后增大學習率,并且采用16位的浮點型參數進行訓練. 在訓練的過程中,學習的初始速率為0.02,每經過5000次迭代就將,學習的速率就會相應的減少0.1.

表2 deepfashionVoc數據集上實驗結果對比
在自己手動標注的數據集上進行Mask R-CNN的實驗,根據不同的樣本數據,實驗結果如表3.

表3 deepfashionMask數據集上實驗結果對比
由此發現,隨著樣本數量的增加,mAP的值也會提升,隨著網絡模型深度的增加,mAP的值相對于淺層模型提高的更為明顯,增加數量可以提高模型的準確度,但是增加一定的數量就會導致過擬合,目標檢測多框或者框的位置不夠準確. 使用新的數據在原有的網絡上進行微調,并且在檢測網絡上更換數據,進一步微調對于檢測效果的提高作用很明顯. 并且損失函數是影響模型檢測的一個重要方面.
本文自己構建了一個新的數據集deepfashionkid,使用這個數據集在VGG16上面進行微調得到了一種新的服裝檢測模型叫做clothNet,并且在這個數據集上進一步選取deepfashionVoc數據集和deepfashion-Mask數據集. 使用clothNet預訓練的模型加上deepfashionVoc進行Faster R-CNN的目標檢測. 接著采用了coco數據集預訓練的模型進行微調,訓練Mask R-CNN網絡. 得到服裝檢測模型. 本文在訓練網絡的時候,采取了BTIC論文中提到的很多訓練技巧. 本文仍有改進之處,在IOU的處理上可以參照Cascade RCNN和IOUNet的結構和想法運用到這個網絡上,結果可能會更好. 本文只是做了服裝的分類和定位,數據集也是選取了部分數據集,對于這個數據集,上面仍有很多的關鍵點標記數據和一些特定屬性類別的數據,完全可以采用多任務和多標簽學習的方式,重新定義損失函數,進一步提高服裝屬性和類別的準確度,擴張整個算法框架,運用到更多的應用中,比如智能衣柜,提高“以圖搜圖”的準確度.