视障用户面临的最大挑战之一是识别包装食品,无论是在杂货店还是在家中的厨房橱柜中。这是因为许多食品都使用相同的包装,例如盒子、罐头、瓶子和罐子,只是标签上印刷的文字和图像有所不同。然而,智能移动设备的普及为使用机器学习 (ML) 解决此类挑战提供了机会。
近年来,设备上神经网络在各种感知任务中的准确性有了显着提高。再加上现代智能手机的计算能力增强,许多视觉任务现在可以在完全在移动设备上运行时获得高性能。MnasNet 和MobileNets等设备上模型(基于资源感知架构搜索)与设备上索引相结合的开发使人们能够实时在设备上运行完整的计算机视觉系统,例如带标签的产品识别。
利用这些发展成果,我们最近发布了Lookout,这是一款 Android 应用,它使用计算机视觉让视障用户更容易接触现实世界。当用户将智能手机摄像头对准产品时,Lookout 会识别产品并大声说出品牌名称和产品尺寸。为了实现这一点,Lookout 包含一个超市产品检测和识别模型,该模型带有设备上的产品索引,以及MediaPipe对象跟踪和光学字符识别模型。最终的架构足够高效,可以完全在设备上实时运行。
为什么要在设备上运行?
完全在设备上运行的系统具有低延迟和不依赖网络连接的优势。然而,这意味着,要使产品识别系统真正对用户有用,它必须有一个具有良好产品覆盖率的设备数据库。这些要求推动了 Lookout 使用的数据集的设计,该数据集包含根据用户地理位置动态选择的两百万种热门产品。
传统解决方案
使用计算机视觉的产品识别传统上是使用由SIFT算法等提取的局部图像特征来解决的。这些非基于机器学习的方法提供了相当可靠的匹配,但每个索引图像的存储量很大(通常为每张图像 10KB 到 40KB),并且对光线不足和图像模糊的鲁棒性较差。此外,这些描述符的局部性质意味着它通常不会捕捉到产品外观的更多全局方面。
另一种具有许多优点的方法是使用机器学习并运行光学字符识别(OCR) 系统对查询图像和数据库图像进行文本识别,以提取产品包装上的文本。可以使用N-Grams将查询图像上的文本与数据库进行匹配,以便对 OCR 错误(例如拼写错误、误识别、无法识别产品包装上的单词)具有鲁棒性。N-Grams 还可以使用Jaccard 相似系数等度量在查询文档和索引文档之间进行部分匹配,而不是要求完全匹配。但是,使用 OCR,索引文档的大小会变得非常大,因为需要存储产品包装文本的 N-Grams 以及其他信号(如TF-IDF)。此外,匹配的可靠性是 OCR+N-Gram 方法的一个问题,因为当两种不同产品的包装上存在大量常用词时,它很容易过度触发。
与 SIFT 和 OCR+N-Gram 方法相比,我们基于神经网络的方法为每个图像生成一个全局描述符(即嵌入),只需要 64 个字节,大大降低了存储要求,每个 SIFT 特征索引条目需要 10-40KB 的存储要求,或可靠性较低的 OCR+N-gram 方法需要几 KB 的存储要求。由于每个索引图像消耗的字节数更少,因此可以将更多产品纳入索引,从而实现更完整的产品覆盖和更好的整体用户体验。
设计
Lookout 系统由帧缓存、帧选择器、检测器、对象跟踪器、嵌入器、索引搜索器、OCR、评分器和结果呈现器组成。
产品识别管道内部架构。
帧缓存
帧缓存管理管道中输入相机帧的生命周期。它高效地提供其他模型组件请求的数据(包括 YUV/RGB/灰度图像),并管理数据生命周期,以避免多个组件请求的同一相机帧重复转换。
帧选择器
当用户将相机取景器指向产品时,轻量级的基于IMU的帧选择器将作为预过滤阶段运行。它根据以角旋转速率(度/秒)测量的抖动,从连续传入的图像流中选择最符合特定质量标准(例如平衡的图像质量和延迟)的帧。这种方法通过选择性地仅处理高质量图像帧并跳过模糊帧来最大限度地降低能耗。
检测器
每个选定的帧随后被传递到产品检测器模型,该模型会提出帧中的感兴趣区域(又称检测边界框)。检测器模型架构是一个单次检测器,具有MnasNet主干,可在高质量和低延迟之间取得平衡。
对象跟踪器
MediaPipe 框跟踪用于实时跟踪检测到的框,在填补不同对象检测之间的空白、减少检测频率、降低能耗方面发挥着重要作用。对象跟踪器还维护一个对象图,其中每个对象在运行时被分配一个唯一的对象 ID,结果呈现器稍后会使用这些 ID 来区分对象并避免重复宣布单个对象。对于每个检测结果,跟踪器要么在图中注册一个新对象,要么使用现有对象边界框与检测结果之间的交并比(IoU) 用检测边界框更新现有对象。
嵌入器
来自检测器的感兴趣区域 (ROI) 被发送到嵌入器模型,然后嵌入器模型计算 64 维嵌入。嵌入器模型最初是从大型分类模型(即基于NASNet的教师模型)训练而来的,该模型涵盖数万个类别。在模型中添加嵌入层以将输入图像投影到“嵌入空间”,即一个向量空间,其中两个点靠近意味着它们所代表的图像在视觉上相似(例如,两个图像显示相同的产品)。仅分析嵌入可确保模型的灵活性,并且不需要在每次扩展到新产品时重新训练。但是,由于教师模型太大而无法直接在设备上使用,因此它生成的嵌入用于训练较小的、适合移动设备的学生模型,该模型学习将输入图像映射到嵌入空间中与教师网络相同的点。最后,我们应用主成分分析(PCA) 将嵌入向量的维数从 256 降低到 64,从而简化了设备上的存储嵌入。
索引搜索器
索引搜索器使用查询嵌入对预构建的兼容ScaNN索引执行KNN 搜索。结果,它会返回排名靠前的索引文档,其中包含其元数据,例如产品名称、包装尺寸等。为了减少索引查找延迟,所有嵌入都通过K 均值聚类到簇中。在查询时,相关数据簇会加载到内存中,以进行实际距离计算。为了在不牺牲质量的情况下减小索引大小,我们在索引时 使用产品量化。
OCR
OCR 在每个摄像头帧的 ROI 上执行,以提取其他信息,例如包装大小、产品风味变体等。传统解决方案使用 OCR 结果进行索引搜索,而这里我们仅将其用于评分。由 OCR 文本提供的适当评分算法可帮助评分者(见下文)确定正确的结果并提高准确率,尤其是在多个产品具有相似包装的情况下。
评分器
评分器从嵌入(带有索引结果)和 OCR 模块获取输入,并对之前检索到的每个索引文档(通过索引搜索器检索到的嵌入和元数据)进行评分。评分后的最佳结果将用作系统的最终识别。
结果呈现器
结果呈现器接收上述所有结果,并通过文本转语音服务说出产品名称将结果呈现给用户。
瑞士超市对设备上产品识别的早期实验。
结论 / 未来工作
这里概述的设备内置系统可用于实现一系列全新的店内体验,包括显示详细的产品信息(营养成分、过敏原等)、客户评级、产品比较、智能购物清单、价格跟踪等。我们很高兴探索其中一些未来应用,同时继续研究提高底层设备内置模型的质量和稳健性。
致谢
这里描述的工作由 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 的支持和帮助,这项工作不可能完成。
评论