正如我們今天所知,人工智慧具有改變零售業的潛力。 相信零售商會開發 AI 支援的客戶體驗架構,是可理解的。 有些人預計,因人工智慧而平台更強大,進而由超個人化帶來收入成長。 數位商務持續拉高客戶的期望值、喜好和行為。 即時參與、相關建議和超個人化等需求,會在按一下按鈕後加快速度及提高便利性。 我們透過自然語音、視覺等方式在應用程式中啟用智慧。 此智慧可改善零售業,在改變客戶購物方式的同時增加價值。
本文件著重於圖像式搜尋的 AI 概念,並提供一些關於實作的重要考量。 它提供工作流程範例,並將其各階段對應至相關的 Azure 技術。 此概念是基於客戶能夠利用行動裝置拍攝的影像或位於網路上的影像 他們會根據體驗的意圖搜尋相關和類似的物品。 因此,圖像式搜尋可改善從文字輸入到具有多個中繼資料之影像的速度,以快速呈現所有可用的適用項目。
圖像式搜尋引擎
圖像式搜尋引擎也會使用影像做為輸入來擷取資訊,但通常不是專屬的輸出。
引擎在零售業中變得越來越普遍,這是有原因的:
- 根據 2017 年發佈的 Emarketer 報告,大約 75 %的網際網路使用者在購買前會先搜尋產品的圖片或影片。
- 根據 Slyce (圖像式搜尋公司) 2015 年的報告,74% 的消費者發現到文字搜尋效率不佳。
因此,根據 Markets & Markets 的研究,2019 年時,影像辨識市場的價值超過 250 億美元。
該技術已經在主要電子商務品牌中獲得重用,這些品牌也為其發展做出了重大貢獻。 最著名的早期採用者可能是:
- eBay 在其應用程式中使用影像搜尋功能和「在 eBay 上尋找」工具 (目前這只是行動裝置體驗)。
- 使用其 Lens 視覺探索工具進行 Pinterest。
- Microsoft 和 Bing 圖像式搜尋。
採用和調適
幸運的是,您不需要大量的運算能力,也可以從圖像式搜尋中獲利。 任何提供影像目錄的業務, 都可以利用其 Azure 服務內建 Microsoft AI 專業知識。
Bing 圖像式搜尋 API 提供從影像中擷取內容資訊的方式,例如傢俱、時尚、數種產品等等。
它也會從自己的目錄、具有相對購物來源的產品、相關搜尋等,傳回視覺上類似的影像。 雖然很有趣,但如果您的公司不是這些來源之一,那麼這將是有限的用途。
Bing 也會提供:
- 可讓您探索影像中找到的物件或概念的標記。
- 影像中感興趣區域的邊界框 (例如服裝或傢俱商品)。
您可以利用該資訊將搜尋空間 (和時間) 大幅縮減到公司的產品目錄中,限縮在區域和感興趣的類別等物件。
實作您自己的
執行圖像式搜尋時,有幾個須考慮的要件:
- 擷取和篩選影像
- 儲存和擷取技術
- 特徵化、編碼或「雜湊」
- 相似度量值或距離和排名
圖 1:圖像式搜尋管線範例
採購圖片
如果您沒有圖片目錄,您可能需要在公開可用的資料集上訓練演算法,例如時尚 MNIST、深度時尚等等。 它們包含數種產品類別,通常用來將影像分類和搜尋演算法進行基準測試。
圖 2:DeepFashion 資料集的範例
篩選影像
大部分的基準測試資料集,例如先前所述的資料集,都已經預先處理。
如果您建置自己的基準測試,您至少會希望影像具有相同的大小,大部分是由為訓練模型所輸入的資料來決定。
在許多情況下,最好也要將影像的亮度正規化。 根據您的搜尋詳細資料層級,色彩也可能是多餘的資訊,因此縮減為黑白有助於處理時間。
最後且重要的是,影像資料集應該在它所代表的不同類別之間保持平衡。
影像資料庫
資料層是架構特別微妙的組成部分。 它包含:
- 影像
- 與影像相關的任何中繼資料 (大小、標籤、產品 SKU、描述)
- 機器學習模型所產生的資料 (例如每個影像 4096 元素的數值向量)
當您從不同來源擷取影像,或使用數個機器學習模型來獲得最佳效能時,資料的結構將會改變。 因此,請務必選擇可以處理半結構化資料,且沒有固定結構描述的技術或組合。
您可能還需要最少數量的有用資料點 (例如影像識別碼或金鑰、產品 SKU、描述或標記欄位)。
Azure Cosmos DB 為建置在上面的應用程式提供所需的彈性和各種存取機制 (可協助您進行目錄搜尋)。 不過,務必小心推動最佳價格/效能。 Azure Cosmos DB 允許儲存文件附件,但每個帳戶都有總限制,而且這可能是一個成本高昂的提議。 在 Blob 中儲存實際影像檔案,並在資料庫中插入連結的作法很常見。 在 Azure Cosmos DB 的情況下,這意謂著建立文件,其中包含與該影像相關聯的目錄屬性 (例如 SKU、標籤等),以及包含影像檔 URL 的附件 (例如,在 Azure Blob 儲存體、OneDrive 上等等)。
圖 3:Azure Cosmos DB 階層式資源模型
如果您打算利用 Azure Cosmos DB 的全域散發,請注意,它會複寫文件和附件,但不會複寫連結的檔案。 您可能想要考慮這些內容發佈網路。
其他適用的技術是 Azure SQL 資料庫 (如果可接受固定結構描述) 和 Blob 的組合,甚至是 Azure 資料表和 Blob,以便宜且快速儲存和擷取。
特徵擷取和編碼
編碼程序會從資料庫中的圖片擷取突顯特徵,並將每個特徵對應至疏鬆的「特徵」向量 (具有許多零的向量),這些向量可以有數千個元件。 此向量是特徵 (例如邊緣和圖形) 的數字表示法,可描述圖片。 這類似於程式碼。
特徵擷取技術通常使用 傳輸學習機制。 當選取預先定型的神經網路、透過它執行每個影像,並將產生的特徵向量儲存在影像資料庫中時,就會發生這種情況。 如此一來,您就會從訓練網路的人「轉移」學習。 Microsoft 已開發並且發佈數個預先定型的網路,這些網路已廣泛使用於影像辨識工作,例如 ResNet50。
視神經網路而定,特徵向量會比較長或更少且疏鬆,因此記憶體和儲存需求會有所不同。
此外,您可能會發現不同的網路適用於不同的類別,因此圖像式搜尋的操作實際上可能會產生不同大小的特徵向量。
預先定型的神經網路相對容易使用,但可能不像在影像目錄上定型的自訂模型那麼有效率。 這些預先定型的網路通常是針對基準測試資料集的分類所設計,而不是搜尋您特定的影像集合。
您可能想要修改並重新定型它們,使其產生類別預測和密集 (也就是更小,而不是疏鬆) 向量,這將非常適用於限制搜尋空間、減少記憶體和儲存體需求。 二進位向量可以使用,通常稱為「 語意雜湊」– 衍生自文件編碼和擷取技術的詞彙。 二進位表示法可簡化進一步的計算。
圖 4:圖像式搜尋的 ResNet 修改 – F. Yang 等人著作,2017 年
無論您選擇預先定型的模型或是自行開發,您仍然需要決定執行模型本身特徵化和/或定型的位置。
Azure 提供數個選項:VM、Azure Batch、Batch AI、Databricks 叢集。 不過,在所有情況下,GPU 的使用會提供最佳價格/效能。
Microsoft 最近也宣布推出 FPGA,可以用 GPU 成本的一小部分進行快速運算 (專案 Brainwave)。 不過,在撰寫本文時,此供應項目僅限於特定網路架構,因此您必須密切評估其效能。
相似度量值或距離
當影像以特徵向量空間表示時,尋找相似度會成為定義這類空間中點之間的距離量值的問題。 定義距離之後,您可以計算類似影像和/或定義相似性矩陣的叢集。 視選取的距離計量而定,結果可能會有所不同。 例如,在實數向量上最常見的 Euclidean 距離量值很容易理解:擷取距離的大小。 不過,在計算方面相當沒有效率。
餘弦 距離通常用來擷取向量的方向,而不是大小。
漢明距離等替代方法,會以二進位表示法來交易一些效率與速度的精確度。
向量大小和距離量值的組合,決定了搜尋的計算密集程度和記憶體密集程度。
搜尋和排名
定義相似性之後,我們需要設計一個有效率的方法,以擷取最接近輸入的 N 項目,然後傳回識別碼清單。 這也稱為「影像排名」。 在大型資料集上,禁止計算每個距離的時間,因此我們使用近似的鄰近演算法。 有數個開放原始碼程式庫,因此您不需要從頭開始撰寫程式碼。
最後,記憶體和計算需求將決定已定型模型的部署技術選擇,以及高可用性。 搜尋空間通常會分割,而排名演算法的數個執行個體會平行執行。 允許延展性和可用性的其中一個選項是 Azure Kubernetes 叢集。 在此情況下,建議將排名模型部署到數個容器 (處理每個容器的搜尋空間分割) 和數個節點 (以取得高可用性)。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- Giovanni Marchetti | 經理,Azure 解決方案架構師
- Mariya Zorotovich | HLS & 新興技術的客戶體驗主管
其他投稿人:
- Scott Seely | 軟體架構師
下一步
實作圖像式搜尋並不複雜。 您可以使用 Bing 或透過 Azure 服務自行建置,如此可同時受益於 Microsoft 的 AI 研究和工具。
開發
- 若要開始建立自訂服務,請參閱 Bing 圖像式搜尋 API 概觀
- 若要建立您的第一個要求,請參閱快速入門:C# | Java | Node.js | Python
- 透過圖像式搜尋 API 參考熟悉您自己。
背景
- 深度學習影像分割:Microsoft 文件說明將影像與背景分開的程序
- Ebay 的圖像式搜尋:Cornell University 研究
- Pinterest Cornell University 研究
- 語意雜湊多倫多大學研究