1. 程式人生 > 實用技巧 >AI 向善:幫助視障使用者通過移動裝置實時識別商品

AI 向善:幫助視障使用者通過移動裝置實時識別商品

文 / Chao Chen,軟體工程師,Google Research

在商店和家中的櫥櫃裡挑選包裝食品,是普通人的生活常態,卻是視障使用者的一大難題。這是因為大多數食品的包裝幾乎都完全相同,比如同樣大小的盒子、瓶子、金屬罐和玻璃罐,僅僅容器上標籤的文字和影象不同。不過,隨著智慧移動裝置的普及,我們已經有能力運用機器學習 (ML) 解決這一難題。

近年來,裝置端神經網路對各種感知任務的準確率有了顯著提高。再加上現代智慧手機計算能力不斷提高,如今許多視覺任務都可在完全運行於移動裝置上時產生高效能表現。將 MnasNet 和 MobileNets(基於資源感知架構搜尋)等裝置端模型開發與裝置端索引結合,即可完全在裝置端實時執行標籤產品識別等完整的計算機視覺系統。

  • MnasNet
    https://ai.googleblog.com/2018/08/mnasnet-towards-automating-design-of.html

最近,我們利用這些開發成果釋出了一款名為 Lookout 的 Android 應用,通過計算機視覺幫助視障使用者更順暢地感知物理世界。使用者只要將智慧手機攝像頭對準產品,Lookout 就會識別產品並大聲地報出品牌名稱和產品尺寸。Lookout 搭載了帶有裝置端產品索引的超市產品檢測和識別模型,以及 MediaPipe (mediapipe.dev) 目標追蹤和光學字元識別模型。最終產生的架構非常高效,可以完全在裝置端實時執行。

  • Lookout

    https://play.google.com/store/apps/details?id=com.google.android.apps.accessibility.reveal

為什麼要在裝置端?

完全裝置端系統的優勢在於低延遲和對網路連線的不依賴。然而,這也意味著一個產品識別系統要想完全派上用場,它的裝置端資料庫就必須充分覆蓋各種產品。正是這些需求推動了 Lookout 所用資料集的設計。Lookout 資料集由兩百萬種熱門產品組成,並且全部根據使用者的所在的地理位置動態選擇。

傳統解決方案

過去,使用計算機視覺的產品識別以 SIFT 等演算法提取區域性影象特徵來解決。這些非 ML 方法的匹配結果相當可靠,但單張索引影象的儲存量很大(每張影象通常在 10KB 到 40KB 之間),而且容易受到光線不足和影象模糊的影響。此外,這些描述符由於區域性性質,往往不會捕獲產品外觀等更全域性的部分。

另一種方法是使用 ML。ML 方法具有許多優點,在查詢影象和資料庫影象上執行光學字元識別 (OCR) 系統來提取產品包裝上的文字。影象上的文字查詢可以通過 N-Grams 與資料庫匹配,從而增強對 OCR 錯誤的判斷,比如產品包裝上的拼寫錯誤、誤識別、文字識別失敗等。N-Grams 還可以使用雅卡爾相似係數等量度在查詢文件與索引文件之間進行部分匹配,而不是要求完全匹配。當使用 OCR 時,索引文件可能會變得非常大,因為除了在產品包裝文字的 N-Grams 之外,還有可能需要儲存 TF-IDF 等其他訊號。此外,OCR+N-Gram 方法還存在匹配可靠性問題,如果兩個不同產品的包裝上有大量共用單詞,它很容易過度觸發。

對比 SIFT 與 OCR+N-Gram 方法,我們的神經網路方法會為每張影象生成一個僅需 64 位元組的全域性描述符(即嵌入向量),大幅降低了儲存需求,比每張影象 10-40KB 的 SIFT 特徵索引條目更小,比每張影象幾 KB 的 OCR+N-gram 方法更可靠。由於每張索引影象消耗的位元組數較少,因此更多產品可以加入索引,實現更完整的產品覆蓋和更良好的整體使用者體驗。

設計

Lookout 系統由幀快取、幀選擇器、檢測器、目標追蹤器、嵌入器、索引搜尋器、OCR、評分器和結果表述器組成。

產品識別流水線內部架構

幀快取 (Frame cache)
幀快取管理流水線中輸入攝像頭幀的生命週期。它根據其他模型元件的請求有效提供資料,包括 YUV/RGB/灰度影象,並管理資料生命週期,避免多個元件請求的同一攝像頭幀被重複轉換。

幀選擇器 (Frame selector)
當用戶將攝像頭取景器對準產品,基於 IMU 的輕型幀選擇器將作為預篩選階段執行。它根據角旋轉率(度/秒)測量的抖動從連續傳入的影象流中選擇與特定質量標準(例如,平衡的影象質量和延遲)最匹配的幀。這種方式僅選擇性處理高質量影象幀,跳過模糊幀,從而將能耗降到極低水平。

檢測器 (Detector)
隨後,各個選定幀被傳遞到產品檢測器模型,該模型關注幀中的興趣區域(也稱為檢測邊界框)。檢測器模型架構是以 MnasNet 為主幹的單發檢測器,可同時兼顧高質量與低延遲。

目標追蹤器 (Object tracker)
MediaPipe 檢測框追蹤用於實時追蹤檢測框,對於填補不同物體檢測之間的空白、降低檢測頻率,從而降低能耗起到了重要作用。目標追蹤器還維護著一個目標對映,執行期間,每個目標都被分配一個唯一目標 ID,後續將被結果表述器用於區分目標,避免重複“表述”單個目標。對於每一個檢測結果,追蹤器可在對映中註冊一個新目標,或者利用現有目標邊界框與檢測結果之間的交併比 (Interp over Union) 更新現有目標的邊界框。

嵌入器 (Embedder)
興趣區域 (ROI) 由檢測器傳送至嵌入器模型,嵌入器模型隨後計算出一個 64 維的嵌入向量。嵌入器模型最初是從涵蓋了成千上萬個類的大型分類模型(即教師模型,基於 NASNet)訓練而來。模型中添加了一個嵌入向量層,用於將輸入影象投射到“嵌入向量空間”,即向量空間。如果有兩個點在空間內接近,就意味著它們表示的影象在視覺上相似(例如,兩張影象顯示的是同一個產品)。

  • NASNet
    https://ai.googleblog.com/2017/11/automl-for-large-scale-image.html

僅分析嵌入向量可以確保模型足夠靈活,並且無需在每次擴充套件到新產品時重新訓練。然而,由於教師模型太大,無法在裝置端上直接使用,因此我們採用它生成的嵌入向量來訓練一個更小並且對移動裝置友好的學生模型。該模型學習的是如何將輸入影象在嵌入向量空間中對映到與教師網路相同的點。最後,我們應用主成分分析 (PCA) 將嵌入向量的維度從 256 減少到 64,簡化裝置端儲存的嵌入向量。

索引搜尋器 (Index searcher)
索引搜尋器使用查詢嵌入向量在預建的相容 ScaNN 索引上執行 KNN 搜尋。它將返回排名靠前的索引文件,包含產品名稱、包裝尺寸等元資料。為了降低索引查詢延遲,所有嵌入向量均以 k 均值聚類到簇。查詢時,相關資料簇在記憶體中載入用於實際距離計算。為了在不犧牲質量的前提下縮減索引大小,我們在編制索引時使用了乘積量化。

OCR
OCR 會在每個攝像頭幀的 ROI 上執行,提取包裝盒尺寸、產品口味變體等額外資訊。傳統解決方案將 OCR 結果用於索引搜尋,而在我們的方案中僅被用作評分。由 OCR 文字提供資訊的適當評分演算法可以協助評分器(如下)確定正確結果並提高精度,特別是在多個產品有相似包裝的情況下。

評分器 (Scorer)
評分器從嵌入向量(帶有索引結果)和 OCR 模組中獲取輸入,對先前檢索到的索引文件(通過索引搜尋器檢索到的嵌入向量和元資料)逐一評分。評分後的最高結果將用作系統的最終識別。

結果表述器 (Result presenter)
結果表述器收錄以上所有結果,通過文字轉語音服務報出產品名稱,向用戶表述結果。

在瑞士一家超市中進行的裝置端產品識別早期實驗

未來工作

本文概述的裝置端系統可實現一系列全新的店內購物體驗,包括產品資訊詳細顯示(營養成分、過敏原等)、客戶評分、產品比較、智慧購物清單、價格追蹤等。我們很期待探索這些未來應用,並將繼續研究推進底層裝置端模型的質量和穩健性。

致謝

本文所述論文由 Abhanshu Sharma、Chao Chen、Lukas Mach、Matt Sharifi、Matteo Agosti、Sasa Petrovic 和 Tom Binder 撰寫。感謝 Alec Go、Alessandro Bissacco、Cédric Deltheil、Eunyoung Kim、Haoran Qi、Jeff Gilbert 和 Mingxing Tan,沒有你們的支援和幫助,這項工作不可能完成。

更多 AI 相關閱讀: