羅夢研,劉雁飛
(浙江理工大學 信息學院,杭州 310018)
根據央視財經頻道聯合中國社科院財經戰略研究院發布的《2017中國電商年度發展報告》中國的相關數據顯示,在我國,電商產業發展迅猛,體量也日益龐大.就目前而言,電商交易額達到了全世界電商總交易額的40%以上.一直以來我國網絡購物市場銷售占比最高的品類是服裝鞋帽類,2017年服裝鞋帽類網購率比例已達8成.
伴隨著市場需求的增大,一個待需解決的問題逐漸凸顯出來:電商平臺對于商品往往需要對平臺內的商品進行分類,貼上合適的標簽,以便于用戶通過類別進行挑選或者搜索.但是采用人工進行分類和標注的方式往往會難以避免諸如時間和人力成本,標注結果容易受到個體差異的影響等問題.
傳統的圖像分類算法主要是集中在對圖像的全局特征和局部特征進行提取上,其中全局特征又包括顏、形狀、紋理等.對于形狀特征,使用鏈碼直方圖[1]、P階矩陣[2].以及使用了幾何不變矩[3]等方式.除此之外,有基于結構的LBP描述子[4]、基于頻譜的Gabor[5]描述子等對紋理特征進行提取的方法.對于局部特征而言,可以利用 Harris[6]角點、SIFT[7]特征、HOG[8]特征進行分類.Bossard[9]利用了HOG和LBP等局部特征,結合機器學習當中的SVM和隨機森林等方式來進行分類.
以上這些傳統圖像分類算法,在具有較高質量、沒有復雜背景的服裝圖像中可以得到較好的效果.但是在實際的使用場景中,會因為背景信息的干擾,圖像采集過程不夠規范,圖像質量不高等因素導致模型準確率下降,不能很好地應用到實際的使用場景中來.
本文設計了一套基于輕量化卷積神經網絡的服裝分類方法.著重針對于傳統圖像分類中易受背景干擾,魯棒性較差等缺點進行改進.利用物體檢測算法對圖像中的行人進行檢測,來對輸入圖片進行初步的預處理,從而將其與背景相分離,減少無關的背景信息對分類結果產生的干擾;為了提升模型的分類效果,增強魯棒性,使用局部信息輔助進行分類.通過對服裝圖片中的關鍵點進行定位,從而將局部特征和全局特征進行融合,輔助提高模型的分類效果.考慮到卷積神經網絡的運行需要較高的硬件支持,為了拓寬模型的應用范圍,在保證模型一定的分類效果的前提下,對模型進行了壓縮處理,極大的減少了計算量,使得在算法模型在低配置硬件或者移動設備也可以運行.
本論文從實際應用場景出發,結合當下在圖像分類領域取得巨大突破的卷積神經網絡算法,設計基于卷積神經網絡的服裝分類算法模型.雖然基于卷積神經網絡的圖像分類算法在各大數據集競賽(ImageNet、Kaggle等)都取得了不俗的成績[10,11],但是針對于本文所涉及的實際應用場景,還是存在一些難題需要進行解決.于是本論文針對一些問題進行了改進和優化,設計了應用場景更廣,模型的魯棒性更強的算法模型.
在分類模型實際進行使用過程中,進行分類的圖片除了包含服裝信息之外,不可避免的會包含部分背景信息,對最終的分類結果產生極大的干擾.為了提升模型的分類效果以及魯棒性,背景信息的剔除就顯得尤為重要了.本文巧妙的利用了卷積神經網絡在物體檢測領域的優勢,使用物體檢測算法進行行人檢測,從而將圖片中的行人和背景相分離.利用物體檢測比賽MPII中的數據集(包括行人在內的20種物體的標注數據),將其中包含行人的圖片提取出來,得到了5717張標注了圖片中行人位置的訓練數據,用來進行行人檢測算法的訓練.這里我們分析對比了主流的物體檢測算法模型的實現方案,從檢測效果mAP和處理速度FPS上進行考量.采用了Faster-RCNN和YOLO3進行測試對比,對比結果如表1所示.

表1 運行時間和 IOU 對比
雖然Faster-RCNN預測的準確率較YOLOv3有較大優勢,但是作為模型的預處理階段,不宜耗費太高的計算成本和時間成本,于是本論文選擇基于YOLOv3算法訓練出的行人檢測模型來進行背景信息的移除,減少干擾.
針對于服裝圖像的分類問題,往往可以對局部信息比如Harris[6]角點、SIFT[7]特征、HOG[8]特征進行分類.一般而言,對于服裝圖片,其袖口、衣領、雙肩等位置的特征往往包含了更多的關于服裝種類的信息.傳統的基于卷積神經網絡的分類算法使用整張圖片作為輸入,利用若干層層卷積層的疊加進行全局特征的提取,然后再利用分類器進行分類操作.為了對服裝圖片當中的局部信息加以利用,論文考慮設計服裝圖片的關鍵點定位算法,用來定位到服裝圖片當中的衣領、袖口等部位,幫助進行局部特征的提取操作.
對于關鍵點定位問題,本文對傳統的卷機神經網絡進行改進,一方面借鑒了 Residual Learning 中的“跳層連接”,對模型結構進行改進.
如圖1所示,首先通過卷積核大小為1×1 的卷積操作調整 Feature map 的通道數量,減少計算量.然后再經過卷積核大小為3×3的卷積操作,最終輸出的Feature map的同道數量再經過1×1大小的卷積核進行調整.

圖1 “跳層連接”結構示意
除此之外,增加了一條由1×1的卷積核構成的卷積層作為旁路,將輸入該卷積模塊的Feature map分別通過兩條同道進行計算,最終的結果進行通道上的疊加.一方面可以保存原Feature map在更多尺度下的特征信息,另一方面增加了旁路連接可以更好的幫助梯度進行傳遞,幫助模型進行訓練.
為了更好的處理不同尺度的特征向量,一些常見的做法是針對不同尺度的特征分別進行處理,然后再將處理的結果進行融合和疊加[12,13].本文則是采用了通過多次使用短連接的方式不斷的將不同尺度的信息進行融合.
在通過堆疊的卷積模塊進行特征提取的同時,為了提升對多尺度信息的處理能力,增加了若干層旁路連接,多次將不同尺度的特征信息進行融合,圖中的橘黃色向下箭頭表示使用Max-Pooling進行下采樣操作,橘黃色向上的箭頭表示通過使用雙線性插值的方式進行上采樣.從而產生了不同尺度下的特征信息,很好的兼顧到了由于圖片中衣服大小不一而導致的信息提取困難的問題.
考慮到對于不同種類的服裝圖像,其圖片中所含的關鍵點數量也不一致.而 Convolutional Pose Machine和Hourglass只能對圖片中固定數量的關鍵點進行定位.于是對上述兩種算法的Loss進行改進,綜合考慮到各種不同服裝圖像中關鍵點數量,每張圖片中輸出20個關鍵點位置進行損失函數的計算,不存在的關鍵點的Loss值設置為 0.采用了 Online Hard Keypoints Mining (CPN),僅保留損失值較大的關鍵點進行回傳,閾值設置總關鍵點數量的一半.
基于卷積神經網絡的算法模型,由于堆疊了大量的卷積運算,模型的訓練和使用階段都需要較高硬件環境的支持,由此而導致了時間成本和硬件成本的提升.目前深度學習模型的研究主要也是集中在了提升模型的效果和減少參數和計算量這兩個方面.考慮到為了節省運行本設計所需要花費的硬件成本(如果需要花費較高價格購買高配置的設備,則與本設計節省成本的初衷相違背).為了使得所設計的算法模型有更多的應用場景,勢必需要對本設計的模型采用輕量化的模型結構,對計算量進行壓縮.以便于在保證一定準確度的前提下盡量減少運算開銷和時間成本.
當使用1×1的卷積核進行卷操作時,會使得輸出的Feature map的尺寸不發生變化,而只會改變Feature map的通道數.所以卷積核大小為1×1的卷及操作往往被用來對Feature map的大小進行調節.在進行卷積操作之前先對Feature map的通道數量進行壓縮,從而可以一定程度上減少計算量和參數量.GoogleNet和ResNet均采用這種方式對模型的計算量進行一定程度的削減.輕量化模型結構SqueezeNet中的Fire modul模塊通過這種方式達到了輕量化模型的設計.
壓縮Feature map通道的方式雖然可以大幅減少模型的計算量,但是由于在壓縮過程中往往會丟失部分數據信息,對最終的模型結果產生一定的影響.于是考慮從卷積操作的方式上進行改進.將尺度為Dk×Dk×M的 (Dk為 size.M為通道數量)Feature map 切分成M/2 個獨立的 Feature map,每個 Feature map 的通道數均為2.然后分別進行卷積核大小為3×3,輸出通道數為2,Padding為1的卷積操作,得到的結果按順序進行通道上的疊加.得到尺度為Dk×Dk×M的Feature map.這種卷積方式稱之為“分塊卷積”具體操作如圖2所示.

圖2 分塊卷積操作示意
使用傳統的卷積方式,一次卷積操作的計算量為(卷積核大小為Df):

由于分塊卷積是將Feature map分離開來進行操作,會在一定程度上減少Feature map不同通道的信息之間的相互關聯性.于是在進行卷積操作之后通過1×1 大小的卷積核進行卷積操作.有三點作用:1)幫助不同通道之間的信息進行融合.2)可以對通道數量進行融合.3)可以對通道數量進行調節(輸出的同道數量設置為N).于是完整的一次分塊卷積操作所需要的計算量大小為:

現在最常用的卷積核大小為3×3,即則計算量減少的到原來的1/4以內(N一般遠大于9,可忽略不計).
訓練數據采取的是 Large-scale Fashion (Deep Fashion)Database 數據集,其中針對于服裝的種類,材質,風格等方面進行的劃分.關于服裝種類的標注數據有20萬張.足以滿足本算法的需求.
在Ubuntu16.04、CUDA9.0環境下,采用Pytorch框架進行模型結構的搭建.首先采用了DenseNet-121、DenseNet-169、DenseNet-201、DenseNet-264模型進行測試.為了使得輸出尺寸大小不收限制,將最終的輸出層采用 Global Average Pool+1×1 的卷積層 (卷積層輸出通道數為分類數量)進行替換.模型結構如圖3所示.

圖3 模型結構
訓練過程中,使用了 Color Jittering,Random Crop Resize,Rotate等數據增強方法,對比了使用行人檢測消除背景前后的分類結果差異.
使用以上幾種模型結構進行訓練并且測試,測試結果如圖4所示.
針對關鍵點定位問題,采用這里采用的是阿里天池大賽中服裝標注點定位比賽里所采用的衡量標準NE值來對模型的定位效果進行衡量和比較,數值越大則代表定位效果越好.

其中,k為關鍵點編號,dk表示預測關鍵點和標注關鍵點的距離,sk為距離的歸一化參數(上衣、外套、連衣裙為兩個腋窩點歐式距離,褲子和半身裙為兩個褲頭點的歐式距離),vk表示關鍵點是否可見.
1)Convolutional Pose Machine 進行關鍵點定位,使用了6個stage的CPM訓練之后NE為13.37%.
2)嘗試使用Hourglass進行定位,僅使用了翻轉進行了數據增強,NE值為10.78%.
3)增加了 Color Jittering,Random Crop Resize,Rotate等數據增強方法,降低到8.8.
4)使用Hourglass在MPII比賽上的模型參數進行參數初始化,降低到7.86%.
5)僅訓練單個模型進行預測,對Loss進行修改,不存在的關鍵點Loss為0,采用了CPN中提出的Online Hard Keypoints Mining (OHKM),僅保留損失較大的關鍵點進行回傳.之前訓練過的模型進行權重的初始化,預測時通過Yolo進行裁剪,NE降低到6.76%.

圖4 不同模型結構測試準確率對比
使用以上5種方式進行關鍵點定位,測試得到的NE值對比,如圖5所示.

圖5 5種不同關鍵點定位的NE值對比
使用關鍵點定位算法來進行局部特征提取,對原模型的提升效果如圖6所示.

圖6 關鍵點定位對模型準確率效果提升對比
考慮到大多數應用場景下無法提供較高的硬件設備支持,故使用入門級的硬件設備進行測試對比.本文采用的是 Inter Core i5 7300H CPU 搭配 NVIDIA 940mx低端入門級顯卡進行測試.使用CUDA9.0搭配Pytorch框架進行模型結構的搭建.對上述采用的模型進行測試,得到不同模型結構進行預測時所花費的時間對比.如圖7所示.

圖7 分塊卷積方式和傳統卷積方式在不同的網絡結構下的運行時間以及準確率(均未使用數據增強操作和背景信息的剔除操作)
從圖中的實驗數據我們可以看到,使用分塊卷積來替代傳統的卷積神經網絡中的卷積方式,可以大幅度減少進行計算時間,加快模型的訓練以及預測階段的速度.降低了對硬件設備的要求,從而可以節約成本,以便于拓寬應用場景.除此之外,使用分塊卷積的方式也減少了部分權重參數,節約了存儲開銷.當然,不可避免的是,隨著模型參數的減少,模型的擬合能力也隨之下降,準確率也有了一定的損失.但是減少模型的參數量,在一定程度上降低了模型的復雜程度,從而起到減少過擬合的作用,使得模型的可遷移性更強,適用于更多場景下采集的服裝圖像.
通過以上的理論論述和實驗部分的結果,得到了我們最終的模型設計方案.首先使用基于YOLOV3算法訓練出的行人檢測模型來對輸入數據進行預處理操作,減少背景信息對最終結果造成的干擾.將進行裁剪后的圖像輸入關鍵點定位模型中,得到關鍵點的位置信息,與全局信息一同傳入卷積神經網絡中進行特征提取,輔助提高模型的預測效果以及算法模型的魯棒性.除此之外,使用分塊卷積對模型進行輕量化的處理,可以幫助在較差的硬件環境下進行使用,提高算法模型的運行效率.
本文從實際的應用需求出發,分析了使用計算機輔助進行服裝類別的分類的意義以及可行性.利用當下在圖像分類領域取得極好效果的卷積神經網絡進行嘗試和研究.同時結合了實際的應用場景,從背景信息干擾,對關鍵部位信息的利用以及考慮到硬件條件限制這三個角度,設計了三種輔助操作,幫助提升基礎分類模型DenseNet在服裝類別分類這一應用場景下的效果進行提升.
最終得到的實驗結果可以基本滿足日常的使用需求.通過一系列的改進和優化,極大程度的減少了拍攝場景對最終的分類效果的不良影響.很好的拓寬了模算法模型的應用場景,很多在非幕布場景下拍攝的圖片也可以取得很好的分類效果.除此之外,在普通的PC設備上運行基本可以達到每張1~2 s.在訓練所使用的1080Ti顯卡上進行計算可以達到4FPS的速度,相對于使用人工進行分類的方式更加的高效快捷.可以很好替代人工分類,或者提供輔助.