原文:浅谈微信AI在通用图像搜索领域的探索 - 2021.12.03
出处:微信AI - 微信公众号
作者: lincolnlin
微信识物是一款主打物品识别的AI产品,通过相机拍摄物品,更高效、更智能地获取信息. 2020年,微信识物拓展了更多识别场景,上线了微信版的图片搜索. 本篇文章将与大家分享微信识物从识物拓展到通用图像搜索领域的发展过程.
1. 微信识物
微信识物是一款主打物品识别的AI产品,通过相机拍摄物品,更高效、更智能地获取信息. 2020年,微信识物拓展了更多识别场景,上线了微信版的图片搜索. 本篇文章将与大家分享微信识物从识物拓展到通用图像搜索领域的发展过程.
从一个query到结果,识物引擎是如何完成一次图像识别全过程呢?
首先会对query的图片做目标检测,去除背景干扰.
然后以图像主体进行检索,拿到图像召回的列表.
最后一步是进行信息提炼,得到商品的标题,品牌,主体,主图等.
从一个识别天地一号的例子来讲,可以看到从检测、图像召回、信息提炼后,得到了这是一个天地一号的苹果醋,再关联更多的搜索结果.
识别效果究竟如何,也跟公司内外的识别引擎作了一些对比发现,基于微信自研的识物引擎和微信小程序商城海量的商品数据,取得了一流的识别效果.
跟业界同类产品相比,微信识图无论是在体验、识别效果、内容和商品上,都更具有微信的特色.
2. 微信图像搜索
2.1. 识物搜索的先转
那么讲起图像搜索,大家肯定马上想到google、baidu. 这些搜索引擎在10年前就上线了图像搜索,并且经过多年经营,已经成了一个很大的入口.
微信识图又是怎么样的,如何基于微信的场景做出差异化?这是首先思考的问题.
2.2. 微信识图
接下来这个图,是对微信识图的一个设计蓝图. 期望微信识图是这样的一个产品形态:
微信图像识别的入口,拓展各类识别能力,包含图像识别、图像搜索、二维码识别、文字提取,以及各种图像的应用及玩法.
接下来,会介绍一下识图的一些具体应用场景.
2.3. 商品识别
社群中经常会看到商家在推荐商品,直接通过搜一搜,可以快速了解商品信息,看看是否真是物有所值,价廉物美.
2.4. 细分类识别
群聊中有时候看到一些豪车不认识时,长按搜一搜,避免被忽悠.
有些同事经常会在朋友发一些花草,尤其春夏季节. 但可能发表者自己都不认识花的名字,搜一搜可以快速知道植物的所有细节.
此外,还支持动物识别、菜品识别、红酒识别、名画识别等细分类识别能力.
菜品识别对一些正在减肥健身的人群,了解食品的热量是个强需求. 长按识别菜品,很快会支持查热量,支持常见的菜肴、水果蔬菜、包装食品等.
2.5. 以图搜图的拓展
接下来介绍以图搜图的一些拓展能力:
包含图片内容:溯源. 当图片是某个电影里的截图,想要知道它的出处. 或者想知道原创图片是否被他人转载或者盗用. 又或者有一个长得很漂亮的美女主动加微信,说头像是本人. 这时候通过图片搜索,很容易一探究竟.
相似图片:找一些相同风格的图片.
搜索物料:通过识别logo+ocr的方法,可以实现内容提取并跳转的能力.
3. 以图搜图的系统实现
前面是一些产品介绍,接下来详细聊一下以图搜图的系统实现,核心讲三个东西:分类、检测、检索.
3.1. 分类篇 | 图片内容标签体系
图像分类是CV的基础,为了更好地理解微信内图片的类型分布,构建了一套图片内容标签体系.
从图上来源上,主要分为广告、拍照、手机截屏这三种.
从图片的内容标签上,划分成9个一级类目,42个二级类目.
这是一个多标签、多任务的分类任务.
3.2. 分类篇 | 多标签分类
之所以是多标签,是因为多标签分类更加适合复杂的图像场景,比如上面图1,同时有美女、服装、植物、户外场景等标签. 所以采用的做法是来源和标签两种任务共享backbone网络,通过一个slice层、一个Batch训来源和标签两种分类任务.
上图像来源这块的分类结果示例,不同来源的图片,特征差异明显.
3.3. 分类篇 | 细分类的应用
前面提到的图像标签,是一个粗分类的方法. 只需要知道是一只狗,但不需要知道是蛤蟆狗,还是哈士奇. 要真的能见微知著,通过一些细节来分辨物体具体的款式,这也是计算机视觉擅长的领域. 实现细分类,总的来说,有两种做法.
电商场景:要识别的集合是无限大的,而且还是动态的. 所以是通过动态图像召回. 从召回的结果上推断出商品的具体款式.
动植物汽车这种场景:集合是相对固定的. 而且需要一些专业的数据库. 采用分类+检索的方法,在具体的处理逻辑上,也依据具体的场景不同而不同. 目前支持了动物/植物/菜品/地标/汽车/名画/红酒识别.
3.4. 检测篇 | 移动端主体检测
在微信识物中,需要在移动端构建一套图像采集的SDK. 首先,基于运动估计中的光流追踪方法,先判断用户手机是否处于静止状态,如果已经静止则会从camera的图片序列中,根据图像梯度的方法,选出较为清晰的帧,再用深度模型进行主体检测,如果检测到有物品,进行裁剪后再发送到后台,后台返回后还会做一些纠正后处理. 整个过程中难点在于实现一个轻量级的移动端物体检测模型.
基于centernet的方法,并基于移动端的场景进行专项优化,如大感受野、轻检测头、改进可形变卷积在移动端的实现等. 最终与主流方法在ms-coco上对比,在MAP相当的情况下,参数量只有1M,大大降低. 在iphone下测试,每帧只需25ms.. 从上图可以看出,扫描模型改进版,有效提高了扫描速度,节省3倍流量.
3.5. 检测篇 | 服务端物品检测
移动端是objness的无类别主体检测,服务端则更倾向于class-wise的目标检测. 既要支持商品类目,又需同时识别出各种自然场景. 故基于maskrcnn的训练框架,改进RetinaNet成为双流的RetinaNet, 一条流用于商品的精确位置和类别输