“酒”一直在我们中华民族的传统文化中占据着不可或缺的位置,更有“无酒不成席、无酒不成礼”之说。而当今“全球酒坛”百花齐放,成千上万的酒品琳琅满目,我们如何了解这些酒的特点和它们身后的故事呢?“百瓶App”的产品研发团队就敏锐的发现了这一独特的需求,力争为“酒圈”的消费者提供更贴心、人性化的体验,并通过百度飞桨开源深度学习平台的助力,完成了“百瓶App”中的“扫酒标识酒”的功能,让各类酒友都变成识酒达人。
“扫酒标识酒”基于百度飞桨的AI技术方案
“扫酒标识酒”功能主要用到图像分类的技术,百度飞桨作为源于产业实践的开源深度学习平台,在图像分类方面同样有着极其丰富的AI解决方案资源。
其中飞桨图像分类套件PaddleClas提供了丰富的图像分类模型资源,覆盖ResNet_vd、MobileNetV3等23种系列的分类网络结构以及对应的117个分类预训练模型,用户可根据自己的需求,针对不同场景选择相应的模型进行训练使用。在本项目中,考虑识酒功能需要在移动端APP上部署,因此我们采用了参数量和计算量较少的MobileNetV2模型。同时采用飞桨轻量化推理引擎Paddle Lite实现移动端轻量化部署和高效预测,最终在测试数据上达到了超过97%的识别准确率。
案例实现过程详尽回放
1. 数据集收集
数据集总共包含114个品牌,每个品牌独立为一个类别。其中训练集中每个类别有250张左右的图像,验证集中每个类别有50张左右的图像。为满足真实场景的多样性,数据集中同类别图像的酒瓶摆放方向、光线、酒标出镜程度等略有不同。
2. 训练集聚类
在对训练集进行分析后,我们发现由于数据采集方式较为单一,导致训练集中同一类别下的图像重复度较高,如果直接训练将花费较长时间,且容易带来模型过拟合的问题。因此我们采用K-means聚类方法对训练集进行聚类,在每个类中随机抽取一张作为此类的代表,训练过程如下图所示。最终训练集中,每个类别下的样本数据减少为原来的1/5,聚类后的数据集仅保留了差异较为明显的样本。
图1 训练集聚类过程
3. 数据预处理
在真实应用场景中,被拍摄的酒瓶往往会受到光线、摆放角度、入镜大小等因素的影响,会与训练集存在一定的差异,通过数据增强来提高模型的泛化能力,是十分必要的。数据增强主要为5个步骤,具体如下:
-
以50%的概率进行随机旋转(旋转范围为0-30度);
-
对上一步中图像进行随机裁剪;
-
将上一步中裁剪后的图像调整大小到224*224分辨率(分辨率大小可根据实际数据集适当调整);
-
对上一步中结果进行随机颜色扰动,随机颜色扰动由图2中四种扰动方式构成,以50%的概率按照“明亮度->对比度->色相->平衡度”的顺序进行颜色扰动,剩余50%的概率按照“明亮度->色相->平衡度->对比度”的顺序进行颜色扰动;
-
对上一步中结果以50%的概率进行左右翻转;
图2 随机颜色扰动
在进行图像增强操作后,为了更好地适配飞桨所提供的预训练模型,对当前的图像进行减均值除以方差的操作。
4. 模型训练
基于模型最终的实际使用场景,我们采用MobileNetV2模型作为分类模型,它可以看做是一种MobileNetV1和ResNet的结合,在MobileNetV1引入深度可分离卷积降低计算量和参数量的基础上,引入了ResNet的残差结构(bottleneck),精度相对于MobileNetV1有较大提升,图3对比了3种模型的子结构。
图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)
最终单张图片在不同硬件环境中推理耗时如下表所示:
案例结果展示
训练后的模型成功部署于“百瓶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