搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 飞桨PaddlePaddle > 用PaddleClas实现酒标识别,让你秒变“鉴酒达人”

用PaddleClas实现酒标识别,让你秒变“鉴酒达人”

飞桨PaddlePaddle 2020-05-28

“酒”一直在我们中华民族的传统文化中占据着不可或缺的位置,更有“无酒不成席、无酒不成礼”之说。而当今“全球酒坛”百花齐放,成千上万的酒品琳琅满目,我们如何了解这些酒的特点和它们身后的故事呢?“百瓶App”的产品研发团队就敏锐的发现了这一独特的需求,力争为“酒圈”的消费者提供更贴心、人性化的体验,并通过百度飞桨开源深度学习平台的助力,完成了“百瓶App”中的“扫酒标识酒”的功能,让各类酒友都变成识酒达人。



“扫酒标识酒”基于

百度飞桨的AI技术方案




“扫酒标识酒”功能主要用到图像分类的技术,百度飞桨作为源于产业实践的开源深度学习平台,在图像分类方面同样有着极其丰富的AI解决方案资源。

中飞桨图像分类套件 P addleClas 提供了丰富的图像分类模型资源 ,覆盖ResNet_vd、Mo bileNetV3等23种系列的分类网络结构以及对应的117个分类预训练模型,用户可根据自己的需求,针对不同场景选择相应的模型进行训练使用。在本项目中,考虑识酒功能需要在移动端APP上部署,因此我们采用了参数量和计算量较少的MobileNetV2模型。 同时采用飞桨轻量化推理引擎 Paddle Lite实现移动端轻量化部署和高效预测 ,最终在测试数据上达到了 超过97%的识别准确率


案例实现过程详尽回放




1. 数据集收集

数据集总共包含114个品牌,每个品牌独立为一个类别。其中训练集中每个类别有250张左右的图像,验证集中每个类别有50张左右的图像。为满足真实场景的多样性,数据集中同类别图像的酒瓶摆放方向、光线、酒标出镜程度等略有不同。

2. 训练集聚类

在对训练集进行分析后,我们发现由于数据采集方式较为单一,导致训练集中同一类别下的图像重复度较高,如果直接训练将花费较长时间,且容易带来模型过拟合的问题。因此我们采用K-means聚类方法对训练集进行聚类,在每个类中随机抽取一张作为此类的代表,训练过程如下图所示。最终训练集中,每个类别下的样本数据减少为原来的1/5,聚类后的数据集仅保留了差异较为明显的样本。

用PaddleClas实现酒标识别,让你秒变“鉴酒达人”
图1 训练集聚类过程

3. 数据预处理

在真实应用场景中,被拍摄的酒瓶往往会受到光线、摆放角度、入镜大小等因素的影响,会与训练集存在一定的差异,通过数据增强来提高模型的泛化能力,是十分必要的。数据增强主要为5个步骤,具体如下:

  1. 以50%的概率进行随机旋转(旋转范围为0-30度);

  2. 对上一步中图像进行随机裁剪;

  3. 上一步中裁剪后的图像调整大小到224*224分辨率(分辨率大小可根据实际数据集适当调整);

  4. 上一步中结果进行随机颜色扰动,随机颜色扰动由图2中四种扰动方式构成,以50%的概率按照“明亮度->对比度->色相->平衡度”的顺序进行颜色扰动,剩余50%的概率按照“明亮度->色相->平衡度->对比度”的顺序进行颜色扰动;

  5. 上一步中结果以50%的概率进行左右翻转;


用PaddleClas实现酒标识别,让你秒变“鉴酒达人”
图2 随机颜色扰动

在进行图像增强操作后,为了更好地适配飞桨所提供的预训练模型,对当前的图像进行减均值除以方差的操作。

4. 模型训练

基于模型最终的实际使用场景,我们 采用MobileNetV2模型 作为分类模型,它可以看做是一种MobileNetV1和ResNet的结合,在MobileNetV1引入深度可分离卷积降低计算量和参数量的基础上,引入了ResNet的残差结构(bottleneck),精度相对于MobileNetV1有较大提升,图3对比了3种模型的子结构。
用PaddleClas实现酒标识别,让你秒变“鉴酒达人”
图3 MobileNetV1、MobileNetV2、ResNet子结构对比

最终,在学习率策略为piecewise decay、学习率为0.0025、批大小为64、epoch为20的基础上, 分类精度可达到97%以上

5. 模型部署

移动端APP的大小和响应速度往往是评价APP性能的两个重要指标 。飞桨轻量化推理引擎Paddle Lite专门用于实现包括手机移动端在内的端侧轻量化高效预测,是一个高性能、轻量级的深度学习预测引擎。

在该项目中,Paddle Lite首先对训练获得的MobileNetV2模型进行操作融合 (Operator fusion)、存储优化 (Memory optimization)这一系列计算图优化操作,优化后模型体积大幅减小且预测速度得到大幅提升。通过操作的融合,Paddle Lite在对推理库进行剪裁后获得只包含feed、fetch、conv2d、depthwise_conv2d、 elementwise_add、fc、pool2d、relu6、softmax这几个Operator的推理库;对于优化后的模型,Paddle Lite将执行阶段和计算图优化阶段实现良好的解耦拆
分,移动端直接部署无任何第三方依赖的执行阶段。(Paddle-Lite提供了在各个平台上模型的部署的示例代码:
https://github.com/PaddlePaddle/Paddle-Lite-Demo


最终单张图片在不同硬件环境中推理耗时如下表所示:

用PaddleClas实现酒标识别,让你秒变“鉴酒达人”


案例结果展示




训练后的模型成功部署于“百瓶App”,支持了App中的“扫酒标识酒”功能。如图4所示,打开App中的拍照功能,拍摄想识别的酒标,即可快速识别出对应的酒,并把酒的相关信息和评论信息推送出来。

图4 “百瓶App”识别结果


结语




飞桨提供了涵盖丰富模型资源的图像分类套件PaddleClas,针对不同的任务有不同的适配模型,用户可根据自己的需求,针对不同场景灵活选择相应的模型;并且通过飞桨轻量化推理引擎Paddle Lite,可灵活的实现移动端或嵌入端的轻量化高效预测。“百瓶App”的“扫酒标识酒”功能是飞桨落地企业AI项目的又一力作,填补了移动端智能识酒领域的空白,让人人秒变“识酒达人”,感兴趣的快来试一试吧。


相关资源




飞桨图像分类套件PaddleClas:
Github:
https://github.com/PaddlePaddle/PaddleClas
Gitee:
https://gitee.com/paddlepaddle/PaddleClas

飞桨轻量化推理引擎Paddle Lite:
Github:
https://github.com/PaddlePaddle/Paddle-Lite
Gitee:
https://gitee.com/paddlepaddle/paddle-lite


如果您加入官方QQ群,您将遇上大批志同道合的深度学习同学。官方QQ群: 703252161

如果您想详细了解更多飞桨的相关内容,请参阅以下文档。

官网地址:
https://www.paddlepaddle.org.cn

飞桨开源框架项目地址:
GitHub:
https://github.com/PaddlePaddle/Paddle
Gitee: 
https://gitee.com/paddlepaddle/Paddle

END



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《用PaddleClas实现酒标识别,让你秒变“鉴酒达人”》的版权归原作者「飞桨PaddlePaddle」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注飞桨PaddlePaddle微信公众号

飞桨PaddlePaddle微信公众号:PaddleOpenSource

飞桨PaddlePaddle

手机扫描上方二维码即可关注飞桨PaddlePaddle微信公众号

飞桨PaddlePaddle最新文章

精品公众号随机推荐