讓AI幫你穿搭!用CLIP實作一個時尚穿搭資料庫
2020年由OpenAI團隊所提出的CLIP,就是multi-modal learning的經典模型架構,同時也是近來熱門的DALL-E-2等「AI算圖」工具的基本架構,本篇文章將簡單介紹CLIP模型的概念與架構外,並實際試做一個穿搭資料庫的應用。
什麼是CLIP模型架構?
CLIP的目標是透過大量圖片及文字描述,建立兩者間的對應關係,如上圖1. 所示,CLIP模型包含幾個主要部份。首先Image Encoder(圖中綠色部分)是CNN或是ViT等架構,目標是將圖片編碼成固定長度的向量(embedding);而Text Encoder(紫色部分),使用的是Transformer架構,會將一段句子同樣編碼成相同長度的向量,並讓相對應的圖片-文字兩向量相似度越接近1越好,而沒有對應的圖片-文字向量則相似度要接近0 (圖的右側為相似度矩陣),如圖1.中總共有N張的圖片,以及相對應的N段文字,在取得圖片向量I與文字向量T後,我們希望右側矩陣中淺藍色的部分(代表是對應的圖片-文字)數值為1,而其他灰色的部分(非對應的圖片-文字)數值為0。
訓練完成的CLIP模型有著明確的優勢,就是Image encoder與Text encoder能將圖片與文字映射到同一個向量空間,因此可以直接計算圖片與句子的相似程度。若想將其應用到分類情境上,也只需要將不同類別的描述列出,並計算圖片與哪個描述最為相似即可(如圖2. 所示),可直接達到零樣本學習(zero-shot learning)的效果。若想進一步了解CLIP架構較為詳細的描述與應用,建議可參考OpenAI的官方部落格文章。
CLIP應用實作解析
接下來,我們將使用OpenAI釋出的CLIP預訓練模型,做到以文字搜尋資料庫中圖片的效果。本次使用的範例資料為Yang et al. 2014年於CVPR發表的資料集,其中共有1000張真人於室外拍的全身照(範例請見圖3.),在原資料集中也包含了這1000張照片中各個衣物部件的語義分割標籤,但在本次的應用中,並不會用到標籤的部分。
我們會將這個資料集作為穿搭的參考依據,根據輸入的服飾特徵描述,找出相似度最高的照片並呈現出來(用法與google圖片搜尋非常類似,但此方式與google背後的演算法機制不全然相同),一起來看看CLIP能做到什麼程度吧!
關於資料集的更多說明請參考kaggle連結
實作流程依序為
- 載入CLIP預訓練模型
- 將1000張圖片透過Image Encoder轉換為1000組向量
- 根據我們想搜尋的文字描述(prompt),利用Text Encoder同樣轉換為1組向量(這個用來查詢的向量被我們稱為query)
- 將query跟1000組圖片向量計算相似度
- 找出前k個相似程度最高的圖片作呈現
實際看一下我們能夠在資料庫中搜尋到什麼穿搭。首先,假設下個月要去參加一場重要的活動,如研討會或婚禮,因此我以” Formal clothes for man.”作搜尋,可以看到CLIP的確幫我們找到資料庫中一些偏向正式的衣服,但可能是國外的穿搭比較前衛一點,長袖配短褲的部分還是讓人不敢貿然嘗試。
但看到上述的穿搭,也許有人會想挑戰一些比較大膽的風格,因此再以”A man wearing Colorful shirts.”當作搜尋關鍵詞,這次出現的幾套穿搭的確可以考慮敗下去。
有趣的是,若將同樣的句子丟到google圖片搜尋,反而得到以粉色系襯衫為主的搜尋結果,也許google對colorful的定義比較特別一點XD(note : 由於google搜尋資訊會持續更新,也許大家後續嘗試所得到的結果會跟我不一樣)。
接著,也考慮到除了衣著,連造型都想換一下。由於CLIP並非只考慮服裝的描述,因此,讀者也可以放入更多說明,這次選擇的輸入是”Man with beard, wearing stylish clothes.”,除了要留鬍子,還想穿得潮一點。的確看到許多潮男,不過似乎他們的帥與衣著無關,跟長相好像比較有關聯。
想看更多不同的搜尋結果嗎?
可以看到,無論是輸入特定顏色,或是比較抽象的描述,例如「穿的像貓的男人」、或是直接形容環境狀態,如「冷冷的下雨天」,都能得到精準度蠻高的結果,這也代表著CLIP某程度上,的確能根據使用者給與的文字描述找到類似的圖片。也歡迎大家嘗試輸入其他的描述內容並且試著玩玩看這樣子的應用。
總結
CLIP在整合文字資訊與圖像上做了非常大的突破,也能透過描述文句找到相對應的圖片,然而研究團隊也發現,要找到一個適當的句子並不容易;此外,在概念非常相似的句子上,搜尋結果也可能有一些差異,建議讀者也可以在上述的應用中,嘗試用不同的句子描述相同的概念,並觀察結果。針對要分類/搜尋的文句做設計,研究團隊稱之為prompt engineering,反倒成為後續需要較多人為介入的部分。
另外,由於CLIP中訓練資料主要是較為廣泛的圖片與句子配對,因此若希望將CLIP模型用於較為精細或領域專業的分類問題(fine-graind classification problem)則效果可能有限。而CLIP較不擅長的內容還包括較為抽象的任務,如在文句中提到數量相關的描述,CLIP也時常無法精確地理解。但是,CLIP的確是深度學習中的一個重要里程碑,也期待能看到更多CLIP延伸的應用以及多模態學習的領域上有趣的進展。(撰稿工程師:蔡岳霖)
相關網站與資源
- Two minutes NLP — Semantic search of images with CLIP and Unsplash
- Building Image search with OpenAI CLIP
- natural-language-joint-query-search
- OpenAI 的 multimodal 神經網路 (下) CLIP: Connecting Text and Images
- 資料 : {(影像,文字)} : OpenAI 2021 一月
原文連結:利用CLIP模型做時尚穿搭資料庫搜尋