原文:你的 AI 造型师-基于 Milvus 的服装图片搜索系统及应用
作者:方宇,Mozat 人工智能科学家
出处:Zilliz
Mozat 是一家成立于 2003 年的互联网公司,总部位于新加坡,在广州和沙特阿拉伯设有分公司。Mozat 为全球移动互联网用户提供娱乐和社区服务,致力于打造一个充满乐趣的新移动世界。旗下产品 Stylepedia 是一款面向全球时尚女性的衣柜伴侣 APP。在这里,用户不仅可以打造自己的专属衣柜,还能与全世界的时尚达人在线互动,获取最 in 穿搭。
App 中有三类图片,分别是用户图片、 商品图片、街拍图片。每张图片上都会有一个或多个服饰单品。为了保证用户能精确地检索到与某一单品相似的服装,我们需要一个精准、快速、稳定的服装相似性检索系统作为业务的技术基础,实现拍照搜索、搭配建议和街拍推荐等功能。
系统框架
系统流程框架图,
整个系统分为离线和在线两个部分。
- 离线部分是图片入库的流程。在数据流程中,符合要求的商品图和街拍图在经过服装检测、特征提取模型后得到 512 维的特征向量;将该特征向量加入到向量数据库,建立搜索索引。
- 在线部分是图片搜索的过程。查询图片同样经过服装检测、特征提取后得到特征向量。基于该特征向量,使用向量数据库 Milvus 搜索得到 TopK 个相似向量以及相对应的图片 ID。最后经过后处理(筛选、重排序等)后得到与查询图片的服装相似的图片集合。
技术实现
基于系统框架,Stylepedia 的功能实现分为四个模块,分别是服装检测、特征提取、相似向量搜索、后处理。
服装检测
服装检测模块使用 YOLOv5 作为目标检测模型,识别图片中的服饰单品,并将其切割(crop)出来作为特征提取模型的输入。YOLOv5 是一个一段式(one-stage)、人为设定框(anchor-based)的目标检测框架, 检测性能较好。由于检测目标较大,此处选择了深度最小、特征图宽度最小的 YOLOv5s 网络。另外,我们将所有服装分为六大类(上衣、外套、裤子、半身裙、连衣裙、连体衣),检测模型也会输出分类的预测结果, 用于后续处理。
特征提取
特征提取模型是相似性检索的关键。模型的输入是以某件单品为主体的图片,经过转化后输出 512 维的浮点向量,作为该单品的特征。我们采用基于度量学习的方法,以 EfficientNet 为骨干网络。
度量学习的对象是样本特征向量之间的距离,其目的是通过训练和学习减小同类样本之间的距离,同时增大不同类别样本之间的距离。在本文所描述的场景下,同类样本即同一件单品。
EfficientNet 同时兼顾速度和精度,有助于探索网络深度、网络宽度和图像分辨率的最优组合。我们选取其中的 EfficientNet-B4 作为特征提取网络,其最后一层全连接层的输出便是我们需要的图片特征。
相似向量搜索
采用 Milvus 作为大规模相似向量搜索引擎。
Milvus 是一款开源的向量数据库,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及快速查询等特点。它集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,可以针对不同场景选择不同的索引类型。
基于业务场景和数据规模的需求, 我们使用的是 CPU 版 Milvus,搭配 HNSW 索引。系统内有商品和街拍两个索引库(集合),服务于不同业务需求,每个索引库又基于检测分类结果分为六个分区来缩小搜索范围。Milvus 在千万级数据上的向量搜索时间以毫秒计算,在开发成本低、资源占用少的前提条件下实现最优性能。
后处理
为了提高召回图片和搜索目标图片的相似度,我们结合业务场景在召回的街拍图片集合增加了颜色特征过滤和主要标签(袖长、衣长、衣领等)过滤,筛选掉不符合要求的图片。
此外, 我们还利用图片质量评估算法对街拍图重新排序, 让用户优先看到质量更高的图片。
应用
用户拍照搜索
用户可以将自己的衣服拍照上传到虚拟衣柜,并基于上传的图片找到商品库中与之最相似的同类商品图。
搭配建议
通过商品图和街拍图之间的相似搜索,可以找到含有特定单品的所有街拍图。然后通过与之搭配的另一件单品的聚类,形成对用户有价值的搭配建议。如下图所示,一件黑夹克可以和很多单品搭配,其中一种是黑色牛仔裤。
街拍推荐
会根据用户虚拟衣柜中的单品、单品浏览记录以及街拍点赞等,基于服装单品相似性,为用户推荐潜在相关的街拍。
利用深度学习和计算机视觉方法,我们基于 Milvus 向量数据库搭建了一个精准、快速、稳定的图片相似性搜索系统,并利用该系统实现用户拍照搜索、穿搭自动生成、推荐等功能,提供更好的用户体验。