王 彪,毋 濤
(西安工程大學 計算機科學學院,陜西 西安 710600)
近些年來,隨著互聯網經濟的快速發展,電子商業也進入了蓬勃發展的階段,消費者對于以紡織面料為原材料的商品,如服裝、鞋等的需求量大大增加。面料生產企業為了能滿足市場需求,不得不研究生產新的面料,這樣也就導致市場上的面料種類越來越多,從而給面料生產企業帶來了一個新的問題,即如何從種類繁雜的面料中快速、精準地檢索到目標面料[1]。
傳統的紡織企業在進行面料檢索時,一般都是采取人工的方式進行。該方式不僅費時費力,檢索結果還附帶主觀性的影響,不能達到用戶對檢索速度和準確度的要求[2]。市場上雖然存在成熟的圖像檢索方法和系統,但是由于面料圖像的特殊性,并不適用于面料圖像的檢索需求,需要進行較大的改進。
在圖像檢索領域,主要存在兩種技術:基于文本的圖像檢索(Text-Based Image Retrieval,TBIR)和基于內容的圖像檢索(Content-Based Image Retrieval,CBIR)[3-6]。TBIR,需要人為地對圖像進行文本標注,具有效率低、查找不準的缺點。CBIR,提取圖像的淺層視覺特征或深層語義特征,結合相似度度量方法,從數據庫中檢索出最為相似的top-k張圖片,這是目前國內外研究的熱點[7]。徐佳等人[8]提出一種基于全局和局部相位特征相融合的圖像檢索算法。王妙[9]提出基于深度學習的印花織物圖像檢索系統設計,采用哈希算法的粗檢索和卷積神經網絡的細致檢索相結合的分級檢索,在提高精度的基礎上進一步提高了速度。Xia等人[10]提出的CNNH通過對相似度矩陣進行分解,得到樣本的哈希碼,再利用卷積神經網絡對哈希碼進行擬合。Lai等人[11]提出DNNH。該方法對網絡結構做了針對性的設計:用部分連接取代全連接,引入分段量化函數。Zhang等人[12]提出的DRSCH用加權的漢明距離代替普通的漢明距離,這種方法可以提高計算距離的效率和精度,但是時間復雜度也會增加。Lin等人[13]在AlexNet的F7和F8之間加入一個全連接層,基于由粗到細的策略,利用學習到的類哈希二進制碼和F7層特征,實現圖片檢索。該方法降低了特征匹配的計算量,加速了檢索速度,但是不能保證哈希碼相似的圖像在語義上也相似,因此檢索精度不高。何彬等人[1]提出了一種基于InceptionV3遷移學習的面料圖像特征提取算法。該算法在Inception中加入哈希編碼層,并優化了損失函數,將模型輸出的哈希編碼作為面料圖像的特征向量,采用分級檢索的策略進行檢索。該方法雖然在精度和時間上優于一般的檢索算法,但是由于采用的暴力檢索策略,在速度上仍有較大的提升空間。劉瑞昊等[7]通過改進LresNet50E-IR網絡結構,將其遷移學習到面料檢索上,結合faiss進行面料圖像檢索可以取得很好的效果。但是算法采用的損失函數只能限制模型具有較好的分類效果,不能保證相似的面料圖像的特征也相似。
該文主要針對目前面料圖像檢索領域存在的“找料慢”“找料難”等問題[14],通過結合深度學習和faiss向量檢索解決以上問題,為紡織企業提供高效的面料管理策略。
面料圖像的檢索是以紡織企業的實際需求為依據,利用卷積神經網絡對面料圖像進行特征學習、表示和匹配,從面料數據庫中檢索出相似面料圖像。系統分為模型訓練、構建面料特征數據庫和面料檢索3個模塊。模型訓練是對VGG16[15]網絡結構進行微調,同時優化損失函數,以企業提供的面料作為訓練數據訓練模型參數,以表達面料圖像的特征;構建面料特征數據庫是用訓練好的模型提取面料特征,以向量的形式保存下來;面料檢索是將待檢索的面料和數據庫中圖像進行相似度匹配,排序輸出檢索結果。
基于CNN的面料檢索系統框架結構如圖1所示。

圖1 面料檢索整體框架流程
該系統首先以企業提供的面料為訓練集對模型進行訓練,得到提取面料特征的模型,對所有的面料圖形進行特征提取,將特征向量保存在本地作為特征向量庫;然后將待檢索的面料送到檢索系統中,提取其特征,以余弦相似度作為特征向量之間相似度的度量,將相似度最高的top-k檢索結果返回,完成一次檢索過程。
企業提供真實的面料樣本,通過圖像采集設備獲得每一張面料的圖像,一共有37 002張,部分面料圖像見圖2。根據不同紡織機機型,對面料進行批量的歸類,一共分為10類,分別是12E、14E、16E、18E、20E、22E、24E、26E、28E、36E。按照8∶2的比例,將數據集劃分為訓練集和測試集,其大小分別是29 602和7 400。

圖2 部分面料
在模型訓練階段,考慮到檢索情景的多樣性,提高模型的泛化能力,使檢索系統具有較強的魯棒性,對訓練集進行隨機水平翻轉、隨機顏色抖動等數據增強操作。
面料特征的提取是整個面料檢索系統最核心的環節。優秀的模型提取出的特征向量可以很好的表示圖像,也是后續進行特征匹配的關鍵,所以模型選擇至關重要[7]。
2.2.1 VGG16網絡結構
VGG網絡是2014年ImageNet大規模圖像識別大賽的亞軍,VGG16是其中的一類模型,常用于圖像分類、目標檢測和圖像分割等任務,其結構如圖3所示。VGG16一共有16層,包括卷積層、池化層和全連接層。

圖3 VGG16網絡結構
VGG16在卷積層采用3×3的小卷積核,減少了參數量,同時加快了模型的訓練速度。在每個卷積層之后使用ReLU激活函數對特征圖進行非線性映射以提高模型的表征能力。
池化層的池化窗口大小為2×2,步長為2,在不減少特征圖數量的前提下,縮小了特征圖的尺寸,壓縮了參數量。
網絡最后是3層全連接層,融合了卷積層提取的局部特征,表達了輸入圖像的全局特征。
2.2.2 改進VGG16
雖然使用3×3的卷積核減少了參數量,但是模型還是很復雜,有可能會出現過擬合的問題;在檢索過程中計算兩個面料的特征向量的相似度時,由于特征向量維度過高,帶來較大的計算量;交叉熵損失函數是用來分類的損失函數,只能保證模型能夠對圖像進行正確的分類,不能讓模型學習相似的面料圖像的特征向量也相似。本面料檢索系統以VGG16為基礎網絡,遷移學習其網絡結構,對其做出以下改進:為了避免模型發生過擬合,提高模型的泛化能力,在卷積層之后,激活層之前加入BN層;為了減少檢索過程中向量相似度計算的計算量,修改classifier部分的layer3的輸出神經元數量為128個;為了使模型學習到相似面料圖像的特征向量也相似,對損失函數進行優化:在原來分類損失函數的基礎上加入相似度損失函數similarity。要計算相似度損失函數,首先要構建兩個相似度矩陣A和B,然后再計算A和B對應位置元素差的平方和的均值。A和B,以及相似度損失函數的計算公式見式(1)、(3)、(4)。
(1)
式中,aij表示第i個特征向量xi和第j個特征向量xj的余弦相似度,計算公式見式(2)。
(2)

(3)
式中,bij僅有0和1兩種取值。0表示向量xi和向量xj不屬于同一種類別,即不相似;1表示兩個特征向量屬于同一種類別,即相似。
(4)
式中,n表示特征向量的數目。
準備數據集、選擇模型和構建損失函數這些前期工作做好后,下一步是訓練模型。訓練參數設置見表1。

表1 模型訓練參數
在迭代80個epoch后,訓練集和測試集的損失和準確率都已基本收斂,將此時的網絡保存到本地作為構建特征數據庫和檢索時提取面料特征的模型。
faiss是Meta(原Facebook)AI團隊為了解決海量稠密向量的檢索問題,結合高效相似度檢索和聚類方法,提出的一種開源的相似度檢索庫[16]。例如,從給定的面料圖像庫中檢索出與待檢索的面料圖像相似度最高的前K張圖像,稱為K近鄰檢索[17]。本研究借助faiss向量檢索工具,為每一張面料圖像的特征向量綁定一個唯一的索引,在損失極小的精度的情況下,大大提高了檢索的速度。
為證明文中方法的可行性,與多種圖像檢索算法進行對比。多特征融合方法結合了圖像的形狀、顏色和紋理3種特征,檢索效果要優于單一的特征[18]。Inception_HashOP[1]通過在倒數第2層加入哈希編碼層并優化損失函數,采取分級檢索的策略進行圖像檢索。VGG19[15]相比于VGG16在結構上沒有太大的區別,只是比VGG16多了三層卷積層。
要比較這幾種算法的性能,首先要確定統一的評價指標。該文采用圖像檢索領域常用的平均查準率(mAP)和檢索一張面料平均消耗的時間T作為算法性能的評估指標。
查準率(Precision)是指一張面料圖像經過檢索,檢索結果列表中與該圖像相似的數量在檢索結果列表中所占的比例[19]。Precision的計算公式見式(5)。
(5)
式中,TP是指檢索到的相關面料,FP是指檢索到的不相關面料。
平均查準率(Average Precision,AP)表示一張面料圖像經過檢索之后,檢索結果列表中,每個召回率點上的查準率的均值。計算公式見式(6)。
(6)
式中,ri是指第i召回點,R表示檢索結果中與檢索面料相似的個數,P(ri)表示第i個召回點的查準率。
平均查準率均值(mAP)是多張查詢面料的平均查準率的均值[20]。計算公式見式(7)。
(7)
式中,APi表示第i個查詢面料的平均查準率,n表示查詢面料的個數。
模型訓練是在服務器上進行。服務器CPU(E5-2678 v3)運行內存122 GB,GPU(RTX3090)顯存為24 GB,使用Pytorch深度學習框架。
從測試集中隨機抽取100張面料圖像,其余作為構建特征數據庫的面料圖像。當輸入一張要查詢面料圖像,經過改進的vgg16模型提取查詢面料圖像128維的特征向量,計算其與特征數據庫中的每一個面料的特征向量的余弦相似度,按相似度從高到低排序輸出,然后根據輸出結果計算平均查準率均值mAP。具體流程見圖4。

圖4 實驗流程
表2展示了各種算法在mAP和檢索時間上的對比。可以看出該文提出的方法無論是在平均查找率均值方面,還是在檢索速度上都具有巨大的優勢。其中,雖然Inception_HashOP和文中方法在mAP上相差不多,但是由于其在特征向量相似度計算時采取的是暴力遍歷的方法,所以其檢索速度遠遠低于文中方法;VGG19由于提取的特征向量維度較高,所以檢索速度最低。

表2 不同算法對比
綜上,提出的研究方法在企業面料數據集上同時具備檢索速度快和檢索精度高的特點,具有良好的檢索性能。
面料圖像檢索系統基于web技術,主要由四個模塊組成,分別是前端模塊、后端模塊、算法模塊和數據庫模塊。如圖5所示。其中前端模塊主要負責面料圖像的上傳、接受/處理請求和展示面料圖像檢索的結果,后端模塊主要負責整個面料圖像檢索系統的圖像數據的輸入與輸出,算法模塊主要負責對查詢的面料圖像的檢索,面料圖像特征數據庫保存在MySql數據庫中,數據庫模塊主要由Redis構成,主要負責存儲面料圖像及其相對應的id,便于前端模塊的檢索結果的展示。檢索流程為:第1步,用戶通過前端頁面將待檢索的面料圖像上傳至前端;第2步,前端將面料圖像傳輸至后端;第3步,由后端對面料圖像進行相關處理,將其輸入至算法模塊中;第4步,算法模塊將檢索結果的面料圖像id返回至后端模塊;第5步,后端將算法模塊返回的檢索結果id輸入數據庫模塊;第6步,數據庫將圖片路由返回給后端;第7步,后端將圖片路由和id返回給前端;第8步,前端模塊接收后端模塊返回的面料圖像檢索結果id和相對應的圖片路由后,顯示給用戶。

圖5 系統框架
在面料檢索的檢索頁面中,點擊上傳按鈕上傳要查詢的面料圖像,點擊檢索按鈕,經過系統檢索后,根據輸入的檢索數量N,系統的前端頁面展示出N張最相似的面料的圖像、id以及和查詢面料的相似度。檢索結果如圖6所示。

圖6 檢索結果
該文提出一種基于卷積神經網絡的面料檢索系統,解決了企業面料檢索速度慢、精度低的難題。通過微調VGG16網絡結構,遷移學習到面料數據集上,利用CNN強大的表征能力,同時借助向量檢索工具faiss進行特征向量檢索,使得檢索系統具有很好的性能。系統在面料圖像上的mAP可達到0.892,檢索時間僅為0.012秒,均優于以往的算法。該方法存在的缺點是,模型訓練時間耗時長,當面料數據集更新時需要重新訓練模型。因此,接下來可在現研究基礎上進一步優化網絡,降低模型訓練的時間,提高檢索系統的實用性。