打造万物识别之利器!微信扫一扫植物识别篇技术解析

导语

冬去春来日渐暖,柳絮萌芽草生根。立春已过,又到了户外踏青赏花的季节。再过段时间,公园、郊外、路边各种鲜花都会渐次开放,大家踏春的时候都会拍一些好看的照片,发一些朋友圈,写一些花语。市场上也出现了不少识花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

在看,让更多人看到  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值