劉鳳華, 劉兆琪, 劉衛光, 趙紅升
(中原工學院 計算機學院, 河南 鄭州 450007)
顏色是服裝的重要屬性,是用戶購買服裝時的主要關注點的之一;準確預測服裝顏色流行趨勢,對整個服裝行業的生產銷售具有重大的指導意義[1]。目前,服裝流行色的研究方法可主要分為兩大類:一類是基于經驗的主觀分析方法;另一類是基于統計數據的建模分析方法。柴志君等以中國紡織信息中心發布的2012-2019春夏秋冬流行色方案為數據集,考慮流行色變化與季節要素的關聯性,結合統計分析與灰色關聯分析方法,通過建立曲線擬合模型分析了服裝的流行顏色[2];江莎莉以中國紡織信息中心發布的2000-2019春夏秋冬流行色方案為數據集,采用線性趨勢分析法、滑動平均法和Mann-Kendall法,對流行色分布規律進行了研究[3];張婕針對服裝流行色傳統預測方法存在的預測精度低、結果不可靠問題,采用模糊C均值聚類算法對數據進行聚類處理,并在構成訓練樣本集后用支持向量機技術訓練樣本,完成模型學習,建立了預測模型[4];黃偉在比較市場調研法、函數模型法、主管判斷法3種服裝流行色預測方法優劣的基礎上,提出了利用云計算技術設計預測模型的思路[5]。分析文獻發現,目前的服裝流行色研究主要存在3個方面的問題:其一是數據可用性問題,即無論是官方公布數據還是市場調研數據,都會受到所采用數據時間段的限制,且實時性不高;其二是模型實用性問題,即所建立模型大都只是用于泛泛討論服裝的流行色,而缺乏進一步針對款式、品牌等的細致研究;其三是流行色討論的單一性,即大都局限于對服裝單一流行色系的討論,而未涉及服裝的流行色組合。本文提出一種基于實時挖掘的互聯網數據進行服裝流行色分析的方法,從互聯網平臺獲取實時顏色數據并得到準確的流行色數據集,利用深度學習算法建立模型,在獲取不同服裝類別的顏色和銷量信息后,分析服裝顏色的流行趨勢,進一步建立不同關鍵字下的服裝顏色預測模型。
本文采用Selenium框架的Webdriver工具,以測試方式運行瀏覽器,按設定步驟對電商平臺進行操作:首先,搜索服裝并按評論數量從多到少進行排序,獲取頁面內所有關于服裝的信息,建立服裝唯一性的特征表;然后,設置時間間隔,并定時更新,以保障數據獲取的實時性和可靠性;最后,將提取的數據存入本地文件中。由于網頁展示數據使用的是Ajax異步加載方式,在頁面生成時只能展示數據總量的一半,因此必須通過瀏覽器操作,下拉滾動條,才能加載所有的數據。
基于Python軟件的request庫,通過構造url和請求條信息,向目標服務器發送數據請求;返回服務器接口提供的json數據,得到商品詳情頁的評論數據、圖片數據、時間數據等,并存入本地文件中。對于圖片數據則需在圖片預處理后進行保存。根據電商平臺的先購物再評論規則,可以把評論的數量視作商品的銷量。因此,通過匯總評論數量可得到相應的銷量信息。
在數據抓取時,采用Chromedriver工具抓取服裝中的評論數據和圖片數據,共計抓取了10 000張圖片,并將它們分成了33類,包括男士上衣、男士下裝,女士上衣和女士下裝等。將評論數據和圖片數據組成鍵值對,并根據評論數量(評論數量>1 000條時)決定要抓取的圖片,對圖片進行數據清洗后將有效數據存儲到本地[6]。
本文構建一種基于MobileNetV3[7]的輕量級網絡模型。該模型采用Depthwise(縮寫為DW)卷積和Pointwise(縮寫為PW)卷積,比傳統模型的參數量大為減少,因此可將其直接部署在移動端的設備上。MobileNetV3輕量級網絡模型的block結構如圖1所示。

圖1 MobileNetV3輕量級網絡模型的block結構
構建MobileNetV3輕量級網絡模型的方法為:首先,用倒殘差結構進行升維操作,將原先低緯度密集的信息抽象到高維度空間,并在高維度空間采用不同的激活函數來濾除無關信息;然后,采用通道域注意力機制(Squeeze-and-Excitation,SE)模塊,增強通道間的特征表達能力;最后,用1×1的卷積核進行降維。SENet[8]是通過對每個通道的加權,使原特征圖分別點乘權值,達到對不同特征通道進行資源分配的。但是,它忽略了空間維度上的注意力機制。為此,本文在原有網絡模型的基礎上,將倒殘差結構中的SE模塊替換為融合空間域和通道域的注意力機制(Convolutional Block Attention Module,CBAM)模塊[9]。CBAM模塊的結構如圖2所示。CBAM模塊包括兩部分:第一部分用于對輸入特征圖進行通道域注意力機制的操作,并將其與輸入特征圖相乘,以得到空間域注意力機制模塊需要的輸入特征;第二部分用于對新的輸入特征進行空間域注意力機制的操作,并將其與新的輸入特征圖相乘,以得到最終的生成特征。

圖2 CBAM模塊的結構
將圖像分類后,需要判斷圖像中人物的服裝顏色。由于每張圖像都含有大量的干擾信息,因此需要將無關區域分割出來,以便有針對性地分析服裝顏色。
GrabCut算法可用于人工選取矩形的感興趣區域。其矩形框外為背景,框內為前景。首先通過GrabCut算法獲取人物區域,再通過形態學計算前景區域的像素點數量,以得到人物區域占整張圖像的比例,即服裝區域所占的比例。
GrabCut算法采用的是s-t網絡。采用s-t網絡,能針對前景區域與背景區域建立高斯混合模型(Gaussian Mixed Model,GMM),而GMM能通過參數的迭代更新來有效地提高算法的精度。
K-means顏色聚類算法是一種基于數據劃分的無監督聚類算法。它能在不知道樣本集所屬標簽或類別的情況下,借助樣本間的相似性完成自主聚類[10],將具有某些相似性的數據點歸為一個群集。
該算法的主要步驟為:①隨機選取k個像素點,作為初始聚類質心(c1,c2,…,ck);②更新聚類質心,包括分配聚類(即計算數據集中每個像素點xj與各個聚類質心的歐式距離,并將像素點歸于與聚類質心最近的聚類)與移動質心(即計算每個聚類中所有像素點的歐氏距離之和,并將聚類質心重定位到平均位置);③迭代步驟②,直到每個聚類中所有像素點的歐氏距離之和達到最小為止。
實時數據獲取模塊用于實時獲取大型電商平臺的服裝評論和圖像數據,并在預處理所獲取數據后進行數據的持久化存儲。對圖像的預處理包括統一圖像格式和統一圖像文件名格式,將所有圖像通過處理函數統一成.jpg格式,在文件名中加上時間戳后通過算法去除雷同的圖像,建立服裝基礎信息表,并保存服裝的評論和所獲取的其他屬性數據。
服裝圖像分類模塊用于:針對服裝圖像采用深度學習算法進行分類,為每個圖像類別建立數據表,保存圖像的分類結果,并建立分類表與服裝基本信息表的關聯。
服裝圖像分類過程包括3個階段:第一個階段是數據的預處理,即采用Mosaic數據增強、MixUp混類增強(包括圖像的水平翻轉、隨機裁剪、色域扭曲),將圖像尺寸固定在224像素×224像素×3通道;第二個階段是構建合適的特征提取網絡并進行圖像的特征提取(由于MobileNetV3模型的參數量小、可進行實時性檢測、易于部署在移動端等,因此可基于MobileNetV3模型,構建一個融合多策略的分類模型);第三個階段是模型的訓練,包括訓練階段和測試階段。訓練階段,將訓練集輸入搭建好的網絡模型中,并將訓練好的參數模型保存起來;測試階段,把圖像輸入訓練好的網絡模型中,并在輸出圖像的類別后進行分類。服裝圖像分類模塊的算法流程如圖3所示。

圖3 服裝圖像分類模塊的算法流程
服裝圖像主顏色提取模塊用于分析圖像像素點的顏色分量,確定服裝的顏色大類,建立服裝圖像的主顏色表,并存儲服裝的主顏色。服裝顏色大類分為單色服裝、混色服裝(包括雙色、三色服裝)。
服裝主顏色的提取主要采用GrabCut方法和K-means方法。
GrabCut方法的作用是提取前景區域[11],并將前景區域的顏色設置成白色,背景區域的顏色設置成黑色,以組成前景值為1、背景值為0且與原始圖像大小一致的掩模圖像。將掩模圖像與原始圖像做“與”計算,得到的圖像是包含前景圖像和黑色背景的圖像,且黑色區域所占比例為背景所占整張圖像的比例。將原背景區域所占的像素點去除,剩下的部分即前景區域所有顏色的像素點。原始圖像經過與掩膜圖像的“與”計算,可得到提取前景后的圖像,而且此時背景全部為黑色。圖像提取前景區域的效果如圖4 所示。

(a) 原始圖像 (b) 提取前景后的圖像
K-means方法的作用是找出圖像中能代表整張圖像的n種顏色,并針對這n種顏色統計圖像中的像素點數量。分別將前景區域每種顏色的像素點數量與前景區域總像素點數量相除,就能得到前景區域每種顏色的占比。某圖像中5種顏色的占比如表1所示。

表1 某圖像中5種顏色的占比
由表1可知,灰紫色可以作為服裝的主顏色。
在服裝圖像主顏色提取時,首先將要識別的圖像輸入程序中,創建一個和原始圖像尺寸一致的掩模圖像;然后利用GrabCut算法分割前景與背景,得到包括前景輪廓信息的掩膜圖像,并將掩模圖像中背景區域標記為黑色,前景區域標記為白色;再將原始圖像與掩模圖像做“與”運算,得到去除背景的圖像;最后進行K-means聚類運算,得到圖像每種顏色像素點的占比。占比最大的顏色即為圖像的主顏色。主顏色提取算法的偽代碼為:
Begin
cv2.grabCut(原始圖像,掩模圖像,ROI區域,臨時背景,臨時前景,迭代次數,cv2.GC_INIT_WITH_RECT)
mask = np.where((掩模圖像== 2)|(掩模圖像== 0), 0, 1).astype(‘uint8’)
ratio_brown = cv2.countNonZero(mask)/(原始圖像尺寸/ 3)
bPercentage = 1 - np.round(ratio_brown, 2)
cutimg *= mask [:, :, np.newaxis]
kmeans = KMeans(n_clusters = CLUSTERS, random_state=0)
hex_colors = [RGB值換算Hex值(center) for center in kmeans.cluster_centers_]
for c in kmeans.cluster_centers_:
h, name = RGB值換算名稱(c)
顏色名稱數組[h] = name
cluster_map = pd.DataFrame()
mydf=cluster_map.分組查詢([‘color’,顏色名稱]).agg({‘position’:‘像素點數量’}).reset_index().rename(columns={“position”:“count”})
plt.pie(顏色像素點數量, labels=顏色名稱, colors=顏色Hex值, autopct=‘%1.1f%%’, startangle=90)
plt.show()
for index, row in mydf.iterrows():
if check_color(color.to_rgb(row[‘color’])):
mydf.loc[index, “count”] = abs(顏色的像素點數量之和-當前顏色像素點數量)
mydf.loc[index, “Percentage”] =當前顏色像素點數量/圖像中像素點總數*100
End。
改進的MobileNetV3圖像分類模型如圖5所示。

圖5 改進的MobileNetV3圖像分類模型
在圖5中,Bneck為MobileNetV3圖像分類模型中的倒殘差結構。利用該模型操作時,先將13個倒殘差結構堆疊成特征提取網絡;然后在提取的特征圖上連接線性層,進行特征組合;最后經過Softmax層分類輸出圖像所屬類別的最大概率,實現對圖像的分類。
采用遷移學習訓練模型時,首先將圖像大小設定為224像素×224像素,并輸入網絡模型中進行訓練;其次用預訓練權重固定網絡特征提取時確定的參數值,并在訓練迭代100 epoch后基于驗證集測試準確率;然后將訓練好的MobileNetV3-CBAM模型(即改進后網絡模型)的權重在本地進行保存,并凍結主干提取部分;最后將后續圖像批量輸入模型中,得出分類結果,并依據分類結果對圖像進行分類,以滿足對不同類別服裝進行分析的需要。采用不同網絡模型進行圖像分類的結果對比如表2 所示。

表2 采用不同網絡模型進行圖像分類的結果對比
由表2可知:MobileNetV3-CBAM網絡模型比MobileNetV3-SE網絡模型(即原網絡模型)的準確率提升了1.5個百分點;MobileNetV3-CBAM網絡模型比ResNet101-CBAM網絡模型的參數量下降了一個數量級??梢哉J為,本文對圖像分類網絡模型的改進,無論在網絡模型輕量化方面還是在提升圖像分類準確率方面都是可行的。
為了進行服裝流行色分析實驗,本文給出了圖6所示的服裝流行色分析模型。該模型主要包括4個模塊,即實時數據獲取模塊、服裝圖像分類模塊、服裝圖像主顏色提取模塊和服裝流行色分析模塊。

圖6 服裝流行色的分析模型
可根據得到的數據對服裝進行時序規律分析[12]、品類流行分析、地域流行分析等[13]。本文在基于MobileNetV3-CBAM網絡模型的服裝流行色分析實驗中,進行了時序規律分析和品類流行分析。
時序規律包括年規律、季規律[14]、月規律、周規律、特定節日規律等。根據文獻[15],對整個數據集的某個時間段進行流行色分析時,可匯總該時間段全部服裝的主顏色,繪制圖形,進行流行色分析。圖7所示為2020年1月到2022年5月的黑色、紅色、米色服裝銷量曲線。

圖7 2020年1月到2022年5月的黑色、紅色和米色服裝銷量曲線
品類流行分析在于分析不同服裝類別、不同服裝款式的流行色變化規律,分類匯總數據并進行可視化展示。圖8所示為某品牌羽絨服約兩年半時間所有色系的銷量折線。

圖8 某品牌羽絨服約兩年半時間所有色系的銷量折線
從圖8可看出,在2020年1月到2022年5月期間,某品牌羽絨服的銷售旺季是每年的10月到次年1月,銷量排名前三的流行色分別為黑色系、紫色系和紅色系。
本文提出了一種基于互聯網大數據的服裝流行色研究方法。其重點在于數據獲取和數據分析。采用深度學習方法對服裝圖像進行分類識別,可分析不同類別不同款式服裝的流行色,解決服裝流行色分析數據來源受限、數據集容量不足的問題。下一步將重點研究在復雜背景下準確預測服裝流行色的方法,以便從不同維度如不同性別、不同地域進行服裝流行色的分析。