打造万物识别之利器!微信扫一扫植物识别篇技术解析
导语
冬去春来日渐暖,柳絮萌芽草生根。立春已过,又到了户外踏青赏花的季节。再过段时间,公园、郊外、路边各种鲜花都会渐次开放,大家踏春的时候都会拍一些好看的照片,发一些朋友圈,写一些花语。市场上也出现了不少识花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
END
备注:目标检测
目标检测交流群
2D、3D目标检测等最新资讯,若已为CV君其他账号好友请直接私信。
我爱计算机视觉
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net
在看,让更多人看到
打造万物识别之利器!微信扫一扫植物识别篇技术解析相关推荐
- 微信小程序之植物识别demo(百度开发接口)
一.最终效果 二.代码参考 xxx.wxml代码 <image style="width:100%; height: 300px; " src=&qu ...
- 开放原子读书会第4期:物联网核心技术漫谈——万物数字化的利器
点击开放原子关注我们 开放原子读书会将于 2021 年 11 月 4 日迎来第 4 期的聚会.本期读书会将与资深物联网技术专家一起聚焦<物联网:万物数字化的利器>,从一线专家的视角解读物联 ...
- 2022年全球及中国植物识别应用程序行业头部企业市场占有率及排名调研报告
本文调研和分析全球植物识别应用程序发展现状及未来趋势,核心内容如下: (1)全球市场植物识别应用程序总体规模,按收入进行了统计分析,历史数据2017-2021年,预测数据2022至2028年. (2) ...
- 干货分享:教你快速拍照植物识别
我们平时会在花丛中或者是马路旁看到一些很好看的植物,但是却又不认识它的名字,想要了解它就只能进行拍照识别了,那你们知道拍照植物识别怎么操作吗?今天我就来教大家如何快速识别植物,让我们看到植物随时都可以 ...
- 一文看尽微信AI团队打造扫一扫植物识别利器
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 本文转载自:微信AI 导语 冬去春来日渐暖,柳絮萌芽草生根.立春已过,又到了户外踏青赏花的季节.再过段时间, ...
- 【微信小程序系列:二】小程序常用功能:跳转地图、扫一扫、人脸识别、拍照、拨打电话、调整屏幕亮度、文字可复制、监听截屏...
一.先言: (- ̄▽ ̄)-,hello,微信小程序系列第二篇,介绍下小程序里的前端常用功能api,可以快速copy使用~ 二.文字可复制: 小程序页面里的文字默认是没有长按复制功能的,需要套个标签来实 ...
- 微信扫一扫识物的技术揭秘:抠图与检索
作者:冉辰,腾讯 WXG 后台开发工程师 微信扫一扫识物是典型的"离线写,在线读"的业务,业务数据的存储和检索库的构建都是在离线环节完成.我们通过爬虫系统收录了小程序生态下的商品图 ...
- 微信「扫一扫识物」 的背后技术揭秘
作者:breezecheng,腾讯 WXG 应用研究员 微信扫码已经深入人心, 微信扫物 12.23 日 ios 版本正式上线,从识别特定编码形态的图片(二维码/小程序码/条形码/扫翻译),到精准识别 ...
- 微信支付(扫码支付)微信公众平台开发教程(6)
简介 Senparc.Weixin SDK 是由盛派网络(Senparc)团队自主研发的针对微信各模块的 开发套(C#SDK), 已全面支持微信公众号.微信支付.企业号.开放平台.JSSDK.摇一摇周 ...
- 微信扫物上线,全面揭秘扫一扫背后的识物技术!
导语| 12月23 日,微信扫物 iOS 版本正式上线.从识别特定编码形态的图片,到精准识别自然场景中商品图片,有哪些难点需要去克服? 扫物以图片作为媒介,聚合微信内部有价值的生态内容如电商,百科, ...
最新文章
- pyinstaller打包教程及错误RuntimeError: Unable to open ./shape_predictor_68_face_landmarks.dat
- mysql存储过程-汇总学习
- android客户端访问服务端tomcat
- Instruments--CoreAnimation页面性能调试
- poj 2288(状态压缩dp + TSP问题)
- 2017年内容安全十大事件盘点
- C语言字符串字母移位
- String大小转换函数
- python dll注入 网络_python – 检测反射型DLL注入
- React之初始化state
- 架构语言ArchiMate - ArchiMate提供的基本视角(Viewpoints)介绍一
- aftershokz蓝牙搜不到_iphone xr黑屏无法开机怎么办?iphonexr蓝牙连不上怎么办?
- 微pe工具箱 系统安装教程_微PE工具箱 V2.0正式版(附安装系统教程)
- Win11软件兼容性怎么样?
- 【0304】密码分类
- Python爬取QQ音乐并下载
- ZZULIOJ-1007鸡兔同笼
- 同步时钟、异步时钟----概念解析
- B860AV2.1盒子刷机
- 自建ipa下载服务器的方法(最简单,使用在线工具)