游小榮,李淑芳,鄧 豐,雍成宇
(1.常州紡織服裝職業技術學院, 江蘇 常州 213164; 2.常州市生態紡織技術重點實驗室,江蘇 常州 213164)
織物圖像分類與檢索被廣泛應用于庫存管理、紡織品設計和電子商務等領域[1]。隨著電子商務的快速發展及織物圖像的井噴式增長,原有的手工分類、文本標注檢索已經不能滿足當前“以圖搜圖”的圖像分類及檢索要求,基于深度學習的圖像分類與檢索成為當前研究的熱點。常見圖像檢索包括基于文本的圖像檢索和基于內容的圖像檢索。基于文本的圖像檢索需要大量的人工標注,檢索詞匯與標注詞匯不一致導致檢索效果差,且只適合某一國語言,存在諸多缺點,而基于內容的圖像檢索是一種檢索圖像內容且過程自動化的方法,在各領域被廣泛應用[2]。根據特征提取方法的不同,傳統基于內容的圖像檢索又可以分為基于全局特征的圖像檢索和基于局部特征的圖像檢索。其中,基于全局特征的圖像檢索方法主要提取圖像的低級特征(如顏色、紋理、形狀和空間信息),主要方法包括顏色直方圖、Gaber、傅里葉描述子、空間金字塔匹配等,缺點是無法區分圖像中的對象和背景[3]。Srivastava 等[4]通過小波變換方法提取紋理和形狀特征,在不同數據集上精度范圍為35.37%~99.99%,存在部分數據集提取精度低的問題。而基于局部特征的圖像檢索方法提取局部描述符的形式,更關注圖像的關鍵點(如角點、邊緣等),對縮放、旋轉、平移、背景變化具有很好的魯棒性,基于局部特征的圖像檢索方法包括SIFT、SURF、LPB、HOG、Harris、FAST等[3]。Sarwar等[5]提出使用LBPV和LIOP 2個描述子提取特征,并通過使用SVM方法進行分類,在不同數據集上精度范圍為69.23%~89.58%,但該方法未考慮空間信息。
隨著機器學習的廣泛應用,特別是深度學習的興起,使用深度學習算法提取圖像的高維特征,可以很好地減少低級特征和人類視覺感知之間的語義差距[6]。Tzelepi等[7]通過使用卷積神經網絡方法進行圖像檢索,精度達到了98.59%,該方法的優勢在于通過卷積層之后使用最大池化的結果作為特征表示,最大限度保留空間信息的同時降低特征描述符的維度,不足之處是檢索時間非常長。Sezavar等[8]結合卷積神經網絡和稀疏表示方法進行圖像檢索,其中卷積神經網絡用于提取高級特征并作為分類器來查詢指定圖像的類別,稀疏表示用來降低計算成本,提升檢索效率,在ALOI數據集上精度可達97.06%。但是,基于卷積神經網絡的圖像檢索方法也存在一些問題,如數據集需要幾十萬幅甚至上百萬幅圖像、標記多、訓練時間長、樣本數據不足時容易出現過擬合或者陷入局部最優的情況[9]。現實中有些領域的訓練數據非常昂貴或者難以收集,因此段萌等[10]基于小樣本數據集,通過對原圖像進行平移、旋轉等幾何變換方法擴充樣本量,并借助遷移學習的方法,實現小樣本圖像分類識別。
針對織物在電子商務、庫存管理等領域的應用存在分類繁瑣、檢索精度不高以及訓練樣本不足等問題,本文設計并實現了一種基于遷移學習的織物圖像自動分類與檢索系統。首先,設計并訓練基于遷移學習的圖像分類深度學習模型;然后測試不同微調模型對織物圖像分類模型精度以及不同預訓練模型對織物圖像分類模型精度的影響;最后設計并實現基于Milvus向量數據庫的織物圖像檢索系統,并對其進行檢索精度和效率測試。
遷移學習指通過學習到的舊知識來學習新的知識,其目的是將已經學會的知識快速遷移到新的領域中[11]。遷移學習是解決圖像分類目標訓練數據有限問題的一種非常有效的方法[10]。Tan等[12]將深度遷移學習分成了4類:基于實例的深度遷移學習、基于映射的深度遷移學習、基于對抗的深度遷移學習和基于網絡的深度遷移學習。其中,基于網絡的深度遷移學習指用在源域中預訓練的部分網絡(包括其網絡結構和連接參數),將其遷移為在目標域中使用的深度神經網絡的一部分。本文織物圖像分類也選擇這種基于網絡的深度遷移學習方法。
基于上述遷移學習理論,借助ImageNet大數據集訓練好的預訓練模型,保留或微調用于特征提取部分的網絡,而分類層部分因為預訓練模型和實際需求輸出的類別數不同,需重新設計;然后基于小樣本數據集,訓練未被凍結的網絡及重新設計的分類層,在訓練過程中,將準確率最高時對應的模型作為新的分類模型。圖1所示為基于遷移學習的織物分類模型,在實際應用過程中,輸入未經過訓練的織物測試圖像,經新模型計算后,輸出織物種類,并將圖片放在相應分類的文件夾,實現織物自動分類。

圖1 基于遷移學習的織物分類模型Fig.1 Fabric classification model based on transfer learning
隨著織物圖像集的不斷增加,傳統的圖像檢索方法非常耗時,通過使用向量數據庫進行圖像檢索,可滿足億級圖像檢索時間控制在1 s以內的實際需求。常見的向量數據庫包括Milvus、Faiss、Hnsw等。由于Milvus具有支持語言多、高性能、可分布式集群、高可靠性等優點,本文選取Milvus作為向量數據庫。此外,Milvus向量數據庫對于浮點型的特征向量支持歐式距離和內積等相似度計算方法,其中內積方法要求數據進行歸一化,歸一化后與余弦相似度方法等價。
圖2為織物圖像檢索系統的運行過程,首先將數據集中所有織物圖像經過新模型提取特征向量,先刪除模型中的分類層,再通過網絡輸出特征向量;然后將提取到的所有特征向量保存到Milvus向量數據庫,并將圖片路徑信息保存到MySQL關系數據庫;將待測織物圖像上傳至系統,經新模型輸出特征向量,選擇內積相似度計算方法,與Milvus向量數據庫存儲的特征向量進行相似度運算,實現top k檢索;最后,通過web應用程序呈現top k檢索到的織物圖像。

圖2 織物圖像檢索系統Fig.2 Fabric Image Retrieval System
實驗數據集的圖像來源于國內織物生產企業。將圖像分成迷彩、花類、格子、純色、條紋5類,每一類圖像選取500幅,共計2 500幅,80%圖像用于訓練,20%圖像用于訓練過程驗證,另外再選取200幅未經過訓練和驗證的織物圖像,用于分類與檢索測試。實驗數據集部分織物圖像如圖3所示。

圖3 數據集中部分織物圖像Fig.3 Some fabric images in the dataset
實驗硬件及軟件環境如下:
硬件:Intel(R) Core(TM) i7-5500U CPU @ 2.40 GHz 2.39 GHz、16 GB內存、無GPU。軟件:win 10操作系統(64 bit)、Python 3.10.2、Pytorch 1.11.0+CPU。
Pytorch環境下圖像分類預處理模型包括ConvNeXt、DenseNet、AlexNet、Inception、ResNet、VGG等,以ResNet50模型為例,對網絡進行微調實驗如圖4所示。預處理模型前9層用于特征提取,輸出向量2 048個,分類層包括1個全連接層(fc),采用線性分類,處理后輸出向量1 000個。微調實驗包含4種微調方案,方案1和方案2保留模型特征提取層中的參數,只訓練分類層,輸出向量都是5個,方案1采用簡單的線性分類,方案2則采用三級網絡進行分類;方案3和方案4則凍結到layer3,后面未凍結部分和分類層則重新訓練,方案3、4分類層部分分別采用線性分類和三級網絡進行分類。

圖4 ResNet50模型微調方案Fig.4 ResNet50 model fine-tuning scheme
構建好微調模型后,需對這些微調模型進行重新訓練。具體訓練步驟為:①深度復制模型參數;②判斷所有的步長是否訓練完成,如果是,跳至步驟⑩執行,否則繼續;③間隔選擇訓練模式和驗證模式,如果選擇訓練模式,繼續執行步驟④,否則跳至步驟⑤;④加載1個批大小的標簽和圖像數據;⑤將參數梯度歸零; ⑥前向運算,經過模型輸出數據并計算損失值; ⑦如果存在驗證模式提供的損失值,則進行后向傳播并優化; ⑧完成1組批大小后,累計計算平均損失率和平均準確率,更新最佳模型及最佳準確率等參數; ⑨輸入驗證用的圖像數據,根據網絡輸出值,計算損失值;⑩完成1個步長后,選擇最高準確率及對應的模型,深度復制網絡參數,輸出新模型。
訓練過程中,步長設置為50,批大小設置為16,學習率(lr)為0.001,Momentum為0.9,損失函數選擇交叉熵損失函數,梯度下降算法選擇隨機梯度下降算法(SGD)可以獲得較好的訓練效果。
圖5為上述4種方案訓練過程中對應的準確率和損失率。從4組訓練結果看,方案3最優,最高訓練準確率為98.84%、驗證準確率達到了99.01%。此外,對部分用于特征提取的網絡層參數進行優化,比全部保留特征提取的網絡層參數要好,分類層采用三級模型不如一級線性模型。

圖5 4種方案訓練過程對應的準確率及損失率Fig.5 Accuracy rate and loss rate in the training process of the four schemes
新模型生成后,將訓練模式改成評價模式,為織物圖像分類實驗做好準備。對比經過微調后的ResNet50、AlexNet、VGG 16模型在本文測試集上的平均分類精度,如表1所示。3種模型微調后分類精度都在98%以上,ResNet50微調后的模型分類精度略高一些,達到了99.5%。

表1 不同深度學習模型對應的平均分類精度Tab.1 Average classification accuracy corresponding to different deep learning model
為了測試每個分類模型的檢索效果,選用平均精度均值(mAP)進行衡量。表2所示為top 5檢索后mAP對比情況,其中文獻[13]方法雖然也使用了預訓練模型,但未進行微調訓練,直接提取特征向量并進行檢索實驗。從表2可以看出,ResNet50模型優于其它模型和文獻[13]方法。

表2 各模型平均精度均值對比情況Tab.2 Comparison of the average mAP of each model
從分類來看,花類的分類mAP相對低一些。如圖6所示,圖6(a)為待檢索圖像,圖6(b)為ResNet50模型檢索結果圖像,其中圖6(b)第2、3張檢索類別發生錯誤,對應的相似度分別為0.795和0.793,說明花類圖像種類繁多,會發生與迷彩圖像相似的情況,從而導致檢索結果錯誤。

圖6 部分分類錯誤情況Fig.6 Some misclassification cases(a)Unretrieval image; (b)Retrieval result
此外,利用平均查準率和查全率2個指標定量驗證模型對整個數據集檢索的效果,表3所示為top 5檢索后平均查準率和平均查全率對比情況。可見基于ResNet50的檢索精度優于其他方法。

表3 不同模型平均查準率和查全率對比情況Tab.3 Comparison of the average precision and recall of different model %
最后,選取訓練和驗證數據集,提取所有圖像的特征向量,并保存到Milvus向量數據庫,再基于未經過訓練和驗證的200幅織物圖像,進行織物圖像檢索效率測試。圖7所示為基于Django框架開發的web織物圖像檢索軟件對一個查詢圖像的檢索結果。待測織物圖像經過軟件上傳后,提取特征向量,并與存儲在Milvus向量數據庫中的特征向量集進行基于內積方式的相似度運算,排序輸出top 5檢索結果。經過對200幅織物圖像的測試,統計出平均每幅圖像的檢索時間為0.165 3 s。

圖7 基于Django框架的web織物圖像檢索軟件Fig.7 Web fabric image retrieval software based on Django framework
通過基于遷移學習的織物圖像分類方法解決手工分類、小樣本、分類精度及檢索精度不高的問題,采用Milvus向量數據庫解決圖像檢索效率低的問題。實驗結果表明,針對織物圖像分類問題,對部分用于特征提取的網絡層參數進行優化,比全部保留特征提取的網絡層參數更好,分類層采用三級模型不如一級線性模型;模型選擇方面,基于ResNet微調后的模型分類和檢索精度均優于其它模型,分類精度達99.5%,top 5檢索的平均精度均值可達0.992、平均查準率為99.65%。此外,經過測試發現,采用Milvus向量數據庫后平均每幅圖像的檢索時間為0.165 3 s,實用性強。通過系統的實施,可為小樣本織物圖像分類與檢索領域現存問題提供可行的解決方案。