“酒”一直在咱们中华民族的传统文化中占据着不可或缺的位置,更有“无酒不成席、无酒不成礼”之说。而当今“全球酒坛”百花齐放,成千上万的酒品琳琅满目,咱们如何了解这些酒的特色和它们身后的故事呢?“百瓶App”的产品研发团队就敏锐的发现了这一独特的需求,力争为“酒圈”的消费者提供更贴心、人性化的体验,并经过百度飞桨开源深度学习平台的助力,完成了“百瓶App”中的“扫酒标识酒”的功能,让各种酒友都变成识酒达人。git
下载安装命令
## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle
## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
“扫酒标识酒”基于百度飞桨的AI技术方案
“扫酒标识酒”功能主要用到图像分类的技术,百度飞桨做为源于产业实践的开源深度学习平台,在图像分类方面一样有着极其丰富的AI解决方案资源。github
其中飞桨图像分类套件PaddleClas提供了丰富的图像分类模型资源,覆盖ResNet_vd、MobileNetV3等23种系列的分类网络结构以及对应的117个分类预训练模型,用户可根据本身的需求,针对不一样场景选择相应的模型进行训练使用。在本项目中,考虑识酒功能须要在移动端APP上部署,所以咱们采用了参数量和计算量较少的MobileNetV2模型。同时采用飞桨轻量化推理引擎Paddle Lite实现移动端轻量化部署和高效预测,最终在测试数据上达到了超过97%的识别准确率。网络
案例实现过程详尽回放
1. 数据集收集框架
数据集总共包含114个品牌,每一个品牌独立为一个类别。其中训练集中每一个类别有250张左右的图像,验证集中每一个类别有50张左右的图像。为知足真实场景的多样性,数据集中同类别图像的酒瓶摆放方向、光线、酒标出镜程度等略有不一样。性能
2. 训练集聚类学习
在对训练集进行分析后,咱们发现因为数据采集方式较为单一,致使训练集中同一类别下的图像重复度较高,若是直接训练将花费较长时间,且容易带来模型过拟合的问题。所以咱们采用K-means聚类方法对训练集进行聚类,在每一个类中随机抽取一张做为此类的表明,训练过程以下图所示。最终训练集中,每一个类别下的样本数据减小为原来的1/5,聚类后的数据集仅保留了差别较为明显的样本。测试
图1 训练集聚类过程fetch
3. 数据预处理优化
在真实应用场景中,被拍摄的酒瓶每每会受到光线、摆放角度、入镜大小等因素的影响,会与训练集存在必定的差别,经过数据加强来提升模型的泛化能力,是十分必要的。数据加强主要为5个步骤,具体以下:spa
-
以50%的几率进行随机旋转(旋转范围为0-30度);
-
对上一步中图像进行随机裁剪;
-
将上一步中裁剪后的图像调整大小到224*224分辨率(分辨率大小可根据实际数据集适当调整);
-
对上一步中结果进行随机颜色扰动,随机颜色扰动由图2中四种扰动方式构成,以50%的几率按照“明亮度->对比度->色相->平衡度”的顺序进行颜色扰动,剩余50%的几率按照“明亮度->色相->平衡度->对比度”的顺序进行颜色扰动;
-
对上一步中结果以50%的几率进行左右翻转;
图2 随机颜色扰动
在进行图像加强操做后,为了更好地适配飞桨所提供的预训练模型,对当前的图像进行减均值除以方差的操做。
4. 模型训练
基于模型最终的实际使用场景,咱们采用MobileNetV2模型做为分类模型,它能够看作是一种MobileNetV1和ResNet的结合,在MobileNetV1引入深度可分离卷积下降计算量和参数量的基础上,引入了ResNet的残差结构(bottleneck),精度相对于MobileNetV1有较大提高,图3对比了3种模型的子结构。
图3 MobileNetV一、MobileNetV二、ResNet子结构对比
最终,在学习率策略为piecewise decay、学习率为0.002五、批大小为6四、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、relu六、softmax这几个Operator的推理库;对于优化后的模型,Paddle Lite将执行阶段和计算图优化阶段实现良好的解耦拆分,移动端直接部署无任何第三方依赖的执行阶段。(Paddle-Lite提供了在各个平台上模型的部署的示例代码:
https://github.com/PaddlePaddle/Paddle-Lite-Demo)
最终单张图片在不一样硬件环境中推理耗时以下表所示:
案例结果展现
训练后的模型成功部署于“百瓶App”,支持了App中的“扫酒标识酒”功能。如图4所示,打开App中的拍照功能,拍摄想识别的酒标,便可快速识别出对应的酒,并把酒的相关信息和评论信息推送出来。
图4 “百瓶App”识别结果
结语
飞桨提供了涵盖丰富模型资源的图像分类套件PaddleClas,针对不一样的任务有不一样的适配模型,用户可根据本身的需求,针对不一样场景灵活选择相应的模型;而且经过飞桨轻量化推理引擎Paddle Lite,可灵活的实现移动端或嵌入端的轻量化高效预测。“百瓶App”的“扫酒标识酒”功能是飞桨落地企业AI项目的又一力做,填补了移动端智能识酒领域的空白,让人人秒变“识酒达人”,感兴趣的快来试一试吧。
相关资源
下载安装命令
## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle
## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
Github:
https://github.com/PaddlePaddle/PaddleClas
Gitee:
https://gitee.com/paddlepaddle/PaddleClas
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