点击下方卡片,关注“CVer”公众号

AI/CV重磅干货,第一时间送达

本文转载自:微信AI

导语

冬去春来日渐暖,柳絮萌芽草生根。立春已过,又到了户外踏青赏花的季节。再过段时间,公园、郊外、路边各种鲜花都会渐次开放,大家踏春的时候都会拍一些好看的照片,发一些朋友圈,写一些花语。市场上也出现了不少识花app,用户下载app,拍张照片就可以知道是什么花草树木了。

识别花草树木还用单独下载app岂不是很繁琐,微信“扫一扫”植物识别已经悄悄上线了快一年了,用户只需扫一扫,拍一拍,或者长按会话图片、朋友圈图片搜一搜就可以看到植物的种类,还有许多资讯文章,花语介绍,相关视频,盆栽商品等。

背景介绍

微信扫一扫识物已经上线一年多了,前期主要以商品图(鞋子/箱包/美妆/服装/家电/玩具/图书/食品/珠宝/家具/其他)作为媒介来挖掘微信内容生态中有价值的信息,为了提高我们的识别能力,有必要对不同场景的扫物能力进行扩展。

通过对用户行为分析,数据显示用户倾向于拍摄植物照片。虽然市面上涌现出各式各样的识花类app,但大多数都是简单的拍照,告诉用户植物的种类和介绍,信息量非常少,比较单一。结合我们特有的公众号资讯类文章、公众号短视频、小程序电商,我们自研了微信扫一扫识别植物。在业务形态上,除了扫一扫识物的入口,我们还支持了会话框聊天长按识图,朋友圈识图等多个方式,如下图所示,更加便捷方便。

微信识图的多个入口搜索形态

扫一扫识物之植物识别视频

目前扫一扫植物识别

■ 支持2w多类的细粒度植物图像识别,5k+种热门植物识别。

■ 识别精度达到业界一流水平。

■ 呈现方式多元化,包含百科信息、多图展示、相关视频、资讯、商品等。

扫一扫识花难点与挑战

2.1 数据侧——海量植物数据获取和清洗

■ 数据获取,如何构造植物数据训练和检索库;

■ 清理噪声,需要专业知识,难以人工清洗,比较依赖算法精度。

小小“植物学家”研究植物种类‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

2.2 算法侧——高精度细粒度分析算法

细粒度图像任务不同于通用图像任务,细粒度图像任务算法难点主要有:

■ 类内差异大;

■ 类间混淆度高;

■ 数据分布不均衡,长尾分布严重。

通用图像任务 vs 细粒度图像任务

2.3 工程侧——类中台化建设

整个扫一扫识物的框架图如下所示:

扫一扫识物框架图

其中,算法研发中台化主要指红色区域,我们需要设计一套可以复用的框架,这样在我们后续继续扩展其他类目的时候,效率更高,事半功倍。

扫一扫植物识别流程框架图

扫一扫识花解决方案

3.1 竞品预研

学术界细粒度图像任务的,基于细粒度图像分类的方法,主要利用强监督的信息、弱监督的信息、端到端的特征编码等。随着深度学习的迅猛发展,目前主流的细粒度图像分类的方法大多数以深度卷积网络为基础的,这些方法可以归纳于以下几个方向:

■ 基于图像分类网络微调的方法,如AlexNet、GoogleNet、ResNet以及DenseNet等;

■ 基于细粒度特征学习(fine-grained feature learning)的方法, 如Bilinear CNN等;

■ 基于目标块的检测(part detecetion) 和对齐(alignement)的方法, 如Part-RCNN等;

■ 基于视觉注意机制(visual attention)的方法, 如 RA-CNN等。

除了细粒度图像分类外,还有基于检索的方法来做细粒度图像分析任务的,以图搜图。细粒度图像检索的难点,一是图像粒度非常细微;二是对细粒度图像而言,哪怕是属于同一子类的图像本身也具有形态、姿势、颜色、背景等巨大差异。工业界借助自身强大的资源,拥有更多的分布式机器集群,可以构建更完备的检索数据库,所以有不少公司是选择基于图像检索的方法来做的。

通过下面几个维度对比细粒度图像分类和检索方法:

细粒度图像分类和检索方法对比

速度和复杂度方面,细粒度图像分类直接对用户图做一次识别就可以得到结果,速度很快,复杂度也比较低;检索方法需要先提取用户图的特征,然后在已有的离线检索数据库的特征进行搜索查询,取top1的结果,速度较慢复杂度较高。可扩展性方面,如果新的类目加进来,基于分类的方法需要重新训练模型,基于检索的方法不用重新训练模型,只需要把新的类目的图片特征提取加入到检索库里即可。

3.2 数据清洗

通过一开始获得的数据,我们可以得到一个不错的benchmark。不过这些图像数据噪声比较多,需要进行清洗和聚类,才可以得到相对干净的训练数据,识别的才能达到更高的精度。为了节省人力,同时提高效率,我们设计了下面的数据清洗流程:

植物数据清洗流程

首先对图片通过md5和phash进行去重,然后对每个植物属里面的图片进行聚类,当然这里聚类的方法我们也对比了好多聚类方法,如下所示:

聚类算法对比

考虑到植物图像聚类的特性,我们更加关注聚类算法的抗噪声能力,对不同植物图片特征分布的适应性以及处理速度,综合分析实践后,我们选择了DBSCAN作为我们的聚类算法。聚类的时候先设定DBSCAN的一个经验值参数作为初始的参数值,聚类结束之后,通过网页可视化这些聚类结果,然后再决定要不要修改下阈值,包括距离和每个簇的最小类目数。得到的结果生成训练标签,然后训练模型。得到新的模型之后,再重复上面的过程进行迭代。

聚类保留的图片 vs 聚类清除的图片

当然,为了更好地通过大量的实验验证我们算法的有效性,我们也构造了公正的评测数据集。评测集的构建主要有以下几个步骤:

■ 基于上面的聚类去噪方法对所有类进行类内进行去噪。

■ 从去噪之后的类目里面,按照2:1的比例划分query/gallery集和噪声集。

用这个数据集作为我们的评测集,一方面可以验证我们算法的有效性,一方面也可以看下我们模型的泛化能力。

3.3 高精度细粒度图像检索算法

■ 3.3.1 检索模型互学习:吸收不同网络架构优点,保证精度和速度的兼得

首先就是尝试各种经典的卷积神经网络,包括ResNet系列,Inception系列,EfficientNet系列,轻量级的网络系列等。其中EiffientNet 系列分类精度特别高,然后用模型提取的特征做检索时精度要低的多;轻量级的网络如MobileNet系列,ShuffleNet等也是分类精度很高,模型的特征检索比较低。分析主要是对分类拟合的比较好,特征表达能力欠缺。ResNet系列里面ResNet152在速度和精度上表现最好,Inception系列里面InceptionV4 也是。

众所周知,一般竞赛中大家都会融合多个模型的结果来提升精度。但是在实际的项目落地,我们需要同时考虑部署模型的精度和速度,融合多个模型会占用更多计算资源,降低前向速度。那么怎么既然融合多个模型结构的优势,又不增加计算资源呢?这就是互学习模型的核心思想,如下图所示,互学习模型通过KL散度loss来吸收其他模型的结构优势,部署的时候只需要部署一个模型即可,不增加计算资源。

模型互学习框架图

实验中,我们利用表现最好的两个模型ResNet152和Inception V4进行互学习,实际部署采用ResNet152进行检索。实验结果对比如下,两者的互学习模型检索精度要比单独的ResNet152检索精度提升2个点。

ResNet152 vs ResNet152*(互学习之后的模型)

评测结果

互学习除了增加模型训练时间,对模型上线不增加任何负担,但是精度能够较为显著的增加。

■ 3.3.2 局部显著性擦除算法: 破坏局部纹理

通过上述互学习策略来提升模型的检索性能后,我们发现仍然存在一个问题,就是深度学习模型会过分关注图像的纹理区域,而忽视物体的形状。如何让模型在关注纹理的同时,也关注下物体的形状信息呢?

我们采用局部显著性擦除技术来破坏原图的纹理,迫使模型来关注物体的形状。所谓擦除,就是去除掉一部分有用的、具有判别的信息,希望网络依靠剩余信息也可以进行精准预测,这样就自然提高了网络提取更全面特征的能力。擦除一般分为两种方式,一个是对原始图片进行擦除,最常见的有Random Erasing、Grid Mask、 Cutout等,常用于训练时的数据增强;另一个是对特征图进行擦除,类似dropout的策略,是一种正则化的方法。如下图所示:

特征随机擦除框架图

在得到的特征图上面,使用随机生成的mask掩码,对特征图进行随机擦除。通过实验对比可以看到,局部显著性擦除能够有效的提升模型的检索精度。

随机擦除机制评测结果

■ 3.3.3 平衡采样策略、Finetune学习微调

在传统的分类和识别任务中,训练数据的分布往往都受到了人工的均衡,即不同类别的样本数量无明显差异。一个均衡的数据集大大简化了对算法鲁棒性的要求,也一定程度上保障了所得模型的可靠性。不过随着类别的逐渐增加,维持各个类别之间均衡就将带来指数增长的采集成本。在自然情况下,数据往往都会呈现如下图所示相同的长尾分布。直接利用长尾数据来训练的分类和识别系统,往往会对头部数据过拟合,从而在预测时忽略尾部的类别。如何有效的利用不均衡的长尾数据,来训练出均衡的分类器就是我们所关心的问题。

植物数据的长尾分布

长尾分布的最简单的两类基本方法是重采样(re-sampling)和重加权(re-weighting)。这类方法本质都是利用已知的数据集分布,在学习过程中对数据分布进行暴力的hacking,即反向加权,强化尾部类别的学习,抵消长尾效应。

采用均衡采样和微调策略检索精度结果

我们在训练的时候对图片进行均衡采样,同时训练结束后在少数的植物物种类目上进行微调,该方法也可以有效的提高我们算法识别的精度。

■ 3.3.4 更多的实验结果分析

我们还对比了更多的策略,加入商品的数据/多任务学习/检索之后重排序等,训练时候结合随机擦除,小样本学习,测试的时候基于检索特征得分和分类得分加权的结果最优;多任务学习在数据集相似,domain差异较小的情况下有助于模型的提升,差异较大的话反而较差。

3.4 垂类中台并行化建设

为了在扩展其他垂类时我们的效率更高,在做植物垂类扩展时,我们把每一块都解耦出来,然后尽可能的并行化,使用多机进行处理,如下图所示

垂类中台并行化

其中离线调度系统可以参考 微信扫一扫识物——离线系统篇这篇文章有更详细的介绍,分布式训练可以参考从0到1——微信扫一扫识物分布式训练这篇文章。

其他垂类扩展时间

基于上面的中台,我们在拓展其他垂类的时候,时间大大缩短。

日常类目识图展示

总结与展望

目前扫一扫识花除了扫一扫的识物入口,也支持了聊天会话长按识别、朋友圈长按识别,未来希望更好地优化我们的模型和策略,持续对外输出我们的识物能力。接下来,我们会推出扫一扫识物之动物、红酒、汽车、菜品、logo等系列文章,更多关于扫一扫的技术文章可以到微信扫一扫技术系列文集查看了解。

参考文献

[1] Deep Learning for Fine-Grained Image Analysis: A Survey. 2019

[2] A Survey on Deep Learning-based Fine-Grained Object Classification and Semantic Segmentation. 2017

[3] Destruction and Construction Learning for Fine-grained Image Recognition. CVPR,2019

[4] Weakly Supervised Complementary Parts Models for Fine-Grained Image Classification From the Bottom Up. CVPR,2019

[5] Centralized Ranking Loss with Weakly Supervised Localization for Fine-Grained Object Retrieval. IJCAI,2018

[6] Batch DropBlock Network for Person Re-identification and Beyond. ICCV 2019

[7] https://scikit-learn.org/stable/modules/clustering.html

[8] ImageNet Classification with Deep Convolutional Neural Networks. NIPS 2012

[9] Deep Residual Learning for Image Recognition. CVPR 2016

[10] Going Deeper with Convolutions. CVPR 2015

[11] Densely Connected Convolutional Networks. CVPR 2017

[12] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning. CVPR 2016

[13] EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. PMLR 2019

[14] Bilinear CNN Models for Fine-grained Visual Recognition. ICCV 2015

[15] Part-based R-CNNs for Fine-grained Category Detection. CVPR 2014

[16] Recurrent Attention Convolutional Neural Network. CVPR 2017

[17] http://km.oa.com/knowledge/5372

[18] http://km.oa.com/group/24938/articles/show/401817

[19] http://km.oa.com/group/24938/articles/show/421861

[20] http://km.oa.com/group/24938/articles/show/418868

CVPR和Transformer资料下载

后台回复:CVPR2021,即可下载CVPR 2021论文和代码开源的论文合集

后台回复:Transformer综述,即可下载最新的两篇Transformer综述PDF

CVer-目标检测交流群成立

扫码添加CVer助手,可申请加入CVer-目标检测 微信交流群,方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

▲长按加小助手微信,进交流群

▲点击上方卡片,关注CVer公众号

整理不易,请给CVer点赞和在看

一文看尽微信AI团队打造扫一扫植物识别利器相关推荐

  1. 新手必看:微信运营团队组建怎么做?

    微信的火热程度,使人们意识到微信运营的重要性,尤其是企业借助微信公众平台营销就需要打造一支高能的微信运营团队,那么微信运营团队组建怎么做,下面一起来看下吧. 第一.微信运营团队组建架构 如果要想组建一 ...

  2. 微信小程序利用百度api达成植物识别

    看完本文你可学会: 如何使用百度智能云 如何在微信小程序中去接入百度api,达成植物识别的效果 如何使用百度智能云? 官网:https://cloud.baidu.com 进入官网,在用户中心下选择图 ...

  3. 一文看尽谷歌AI全年重大研究突破,Jeff Dean执笔,全程干货

    本文经AI新媒体量子位(公众号ID:qbitai )授权转载,转载请联系出处 本文约一万字,建议阅读10+分钟. 学术和应用两开花,开源和新技术同步推进. 刚刚,Jeff Dean代表Google A ...

  4. 一文看懂微信公开课Pro,2022年微信将迎来什么变化?

    1月6日上午,2022微信公开课Pro在广州举行.就在三天前,微信刚刚发布了8.0.18(2040)内测版本,据了解,该版本虽然变动不大,但安装包体积大小再创新高,达到了234MB. 这款由腾讯公司于 ...

  5. 中美AI争高下的秘诀!一文看尽中国AI计算力发展

    https://www.toutiao.com/a6674559215056454148/ 21世纪以来,信息技术引领的第三次工业革命改变了人类的生产和生活的方式.几乎所有的人类活动都会使用信息技术或 ...

  6. 微信9年:张小龙指明方向,微信AI全面开放NLP能力

    作者 | 夕颜 责编 | 王金许 出品 | AI科技大本营(ID:rgznai100) 一年一度的微信公开课 Pro 在广州保利世贸博览馆如期举行. 一大早,同在博览馆举办的广州年货促展会参会者,夹杂 ...

  7. 微信 9 年:张小龙指路,微信 AI 全面开放 NLP 能力

    作者 | 夕颜 责编 | Elle 出品 | AI科技大本营(ID:rgznai100) 一年一度的微信公开课 Pro 在广州保利世贸博览馆如期举行. 一大早,同在博览馆举办的广州年货促展会参会者,夹 ...

  8. 微信 9 年:张小龙指明方向,微信 AI 全面开放 NLP 能力

    作者 | 夕颜 责编 | Elle 出品 | AI科技大本营(ID:rgznai100) 一年一度的微信公开课 Pro 在广州保利世贸博览馆如期举行. 一大早,同在博览馆举办的广州年货促展会参会者,夹 ...

  9. voip 论坛_微信AI全面开放各层次NLP能力!首次登上公开课主论坛

    乾明 发自 未完城 量子位 报道 | 公众号 QbitAI 微信不仅仅是微信,微信AI也不仅仅是微信的AI. 这就是微信每年最重要的官方活动--微信公开课 Pro上展现出的最新动向. 今年,微信AI首 ...

最新文章

  1. 【匹配算法】渐进一致采样 PROSAC(PROgressive SAmple Consensus)
  2. 一个客户机-服务器系统使用了卫星网络,客户机/服务器体系结构可用于局域网、广域网和WWW。这三种用途迥异的网络的一个共同特点是工作负 - 试题答案网问答...
  3. 深入理解JavaScript类数组
  4. volcanol_Linux_问题汇总系列_1_系统引导过程中到check filesystem时就无法继续引导问题解决方法。...
  5. Leetcode-13. 罗马数字转整数(C++)
  6. sql服务器网页无法连接到服务器失败,SQL2008无法连接到服务器,用户’XX’登录失败(错误18456)解决方法...
  7. django模板系统(下)
  8. syslog函数输出在哪个文件中_syslog服务详解
  9. 全球最牛逼的并发架构,抖音排第二,它排第一!
  10. 微信图片太模糊如何弄清晰?微信图片过期怎么恢复原图
  11. 基于ssm的BBS社区论坛系统
  12. 战列舰机械计算机,Goliath
  13. CTF-网络信息安全攻防学习平台(注入关)
  14. 文化与科技的交织,华为P50 Pro与一曲长城谣
  15. linux+nas+私有云软件,自建家庭私有云NAS——磁盘管理系统
  16. 可口可乐NFT战利品箱已上线OpenSea,目前出价2 WETH
  17. Android 进阶路线(思维导图),Android开发实用必备的几款插件
  18. pjsip for android,编译pjsip for Android
  19. uniapp-微信小程序 分包--详解
  20. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) C 倒序并查集

热门文章

  1. 推荐一个python库:Vaex
  2. 优于 ViT 和 MLP-Mixer 的全局滤波器:Global Filter Networks for Image Classification [NeurIPS 2021]
  3. 2022数学建模国赛B题思路分析
  4. vue中的一个子组件如何在父组件中调动另一个子组件中的方法
  5. 微信公众号运营数据分析(二):内容分析讲解
  6. c语言stl用法,C STL快速入门!学习使我快乐
  7. Flink on yarn 集群HA 配置
  8. ps 导出矢量图为svg,并上传iconfont
  9. Android 自定义相机Demo源码
  10. md5等hash算法加密解密问题