我用飞桨做了一个菜品图像识别系统
Posted 飞桨PaddlePaddle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我用飞桨做了一个菜品图像识别系统相关的知识,希望对你有一定的参考价值。
【飞桨开发者说】:贝史涛,浙江理工大学本科生,2019中国高校计算机大赛-人工智能创意赛二等奖获得者
随着信息技术的发展,我国餐饮建设也发生了很大变化。目前食堂大多以人工为主,推行一卡通消费,即自助选菜然后人工结算,这与以往使用饭票或现金结算相比,省去了找零的麻烦,在效率上有一定的提升。人工结算之所以效率低下,是因为食堂工作人员需要首先识别菜品种类,然后对应每种菜品价格,最后口头累计消费数额并打卡,同时在计算金额的过程中也可能会出错。
这整一过程不仅需要较长时间,而且准确率也难以保证。
近年来,在快餐式食堂领域也出现了通过RFID芯片、碗盘颜色识别等技术实现的机器结算。但是,随着顾客数量的日益增长,这已不能满足他们在就餐高峰期对结算速度的需求。通过调研分析,我们发现尽管目前市场上已出现RFID芯片、碗盘颜色的智能识别方式,但仍存在成本高、灵活度低等问题,菜品图像识别相较于它们有着巨大优势。
与此同时,以深度学习为代表的人工智能技术飞速发展。与以往不同的是,这次人工智能不仅在学术界备受关注,在工业界也备受推崇。以“深度学习”为关键词搜索国家自然科学金委近年资助项目,发现基金委资助和立项的“深度学习”相关的课题数量呈逐年快速上升趋势,如下图所示。由于本轮人工智能可落地性非常强,可快速为行业应用赋能,所以在工业、商业、金融等各领域亦备受追捧,目前正快速应被推广应用到各个领域。
在此背景下,世界知名公司纷纷推出深度学习框架,在美国,Google推出TensorFlow,Facebook推出Pytorch,在国内,百度推出了飞桨。作为集深度学习核心框架、基础模型库、端到端开发套件、工具组件和服务平台于一体的开源深度学习平台。在深度学习框架上,我们选择了飞桨。
基于飞桨模型,并借助百度AI Studio开发平台以及平台提供的Tesla V100 GPU算力,我们开发了基于深度学习的菜品识别模型,开发了移动端、后端应用系统,并通过软硬件结合的形式进行部署。
在下文中,我们将为大家解析此过程。
我们首先对托盘中的图像进行分割检测,将分离出来的图像再进行菜品图像识别。
霍夫变换
盛载菜品食物的碗盘器具基本是圆形的,因此对餐盘图像去噪后用霍夫圆变换实现对菜品碗盘位置的检测,实现碗盘分离。
霍夫变换是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。通过OpenCV中的霍夫圆变换,先识别出在菜品托盘识别台上俯视拍摄的照片,经过OpenCV的处理和霍夫圆变换,根据摄像头像素对霍夫圆参数进行调整,根据菜盘(这里统一为类圆形厨具)形状,最终取得效果如图。
数据集准备及处理
菜品识别通过飞桨实现,起初对每样菜品拍摄一张俯视图。菜品识别的实质就是图像分类。因此,每个分类只有一个训练图片是肯定不够的。而多张重复的拍摄则会导致效率低下,延长处理时间。基于上述情况,团队通过图像增广处理来扩大每一分类的菜品的数据集,也减少了在实际环境下光线等环境因素对识别效果的影响。菜品图像来源自就近校园餐厅食堂。(
该模型是针对某个食堂中的所有菜品而训练的模型,并非在所有食堂中通用
)
经过旋转处理、亮度处理、色度处理、对比度处理、锐度处理以及图像弹性扭曲处理后,使每个分类标签的数据集扩大至54张增广图像和1张原始图像共55张图片,并将这55张图片按1:10的比例划分测试集和训练集。
本次菜品共35道,共计测试集图像175张,训练集图像1750张。
(1) 旋转处理 (23张) :旋转角度α=15β(0<β<24),在旋转后通过比例计算得到边长缩放比为:
(2)亮度处理(6张):亮度系数0.6, 0.75, 0.9, 1.1, 1.25, 1.4。
(3)色度处理(6张),色度系数为0.7, 0.8, 0.9, 1.1, 1.2, 1.3。
(4)对比度处理(6张),对比度系数为0.7, 0.8, 0.9, 1.1, 1.2, 1.3。
(5)锐度处理(6张),锐度系数为0.7, 0.8, 0.9, 1.1, 1.2, 1.3。
(6)图像弹性扭曲(7张),通过Augmentor库对图像进行弹性扭曲处理。
数据集来源于通过Python爬虫得到的60000多条某区域餐厅评论,经过整理筛选过滤无效、灌水等评论最终划分好评和差评各12000条。通过预训练词向量模型和分词工具对原始数据进行分词和词向量匹配,根据常见词的使用量,在250000多个词中取出了最常用的70000个词,如果遇到在词向量中但非常用的词向量,则也置为0。输入数据最终转化为list类型,如下例。
分词:
['食堂', '异味', '很', '重', '饭', '也', '不', '好吃']
匹配:
[2882, 23056, 34, 1218, 1421, 18, 10, 1452]
配置网络
配置网络包括三个部分:网络模型、损失函数及优化函数。由于数据集较小,网络模型采用了resnet18:
https://github.com/PaddlePaddle/models/blob/develop/PaddleCV/image_classification/models/resnet_vd.py
读取图片过程中对图片进行均值处理并归一化,在basic_block中将激活函数由relu改为了leaky_relu解决Relu函数进入负区间后,导致神经元不学习的问题,训练集和测试集的准确率达99%。
https://www.paddlepaddle.org.cn/documentation/docs/zh/beginners_guide/basics/understand_sentiment/index.html
训练网络
针对个人和机构AI研究者普遍缺乏算力的现状,AI Studio平台免费提供基础版(CPU:2 Cores RAM:8GB,Disk:100GB)和高级版(GPU:Tesla V100,Video Mem:16GB;CPU:8Cores,RAM:32GB, Disk:100GB)两种运行环境。本项目模型训练过程选用GPU高级版运行环境。
训练分为三步:第一步配置好GPU训练环境;第二步用训练集进行训练;第三步保存好训练的模型。
VisualDL数据可视化
模型准确率达99%以上。
预测程序为独立代码模块,可独立运行。预测主要分为四步:
第二步:预处理预测图片。将非RGB图片进行模式转换,转为RGB模式;对预测图片进行裁剪和缩放,调整大小为[3, 224, 224];
第三步:加载预测模型并将预测图像放入模型进行预测;
在上图中的左侧图片框中显示的是菜品摄像头实时拍摄的某帧画面,托盘中有芹菜炒肉、番茄炒蛋和米饭三样菜。在后端通过霍夫圆处理后并调用模型进行预测,最终将数据返回并在移动端显示,可以从上图中的右侧移动端截图中看到结果预测正确,
该预测模型在35种菜品类别的数据集中能达到99%以上的准确度。
预测程序为独立代码模块,可独立运行。预测主要分为四步:
第二步:预处理预测文本,通过预训练词向量模型对文本进行转换,处理为索引集结果;
第三步:加载预测模型并将预测文本放入模型进行预测;
软硬件结合
系统通过软硬件结合形式完成整一流程。硬件主体由一个放置台和两个摄像头组成,通过无线路由器将设备连接在同一测试网络下。本设备中使用的是海康威视网络摄像头。
在实物图中,位于上方的摄像头用于人脸识别,下方的摄像头用于识别托盘中的菜品并计价。在实际情况中,对菜品识别成功并计价后,下方摄像头停止识别,人脸识别摄像头开始检测人脸,识别并支付成功后,菜品摄像头继续识别,等待下一位用户的到来。
市场分析
在社会节奏加快,高校或企业食堂用餐高峰更加集中以及外卖行业盛行的三重压力下,食堂对效率更高的结算系统的需求愈加突出。在此环境下,智能识别,智能结算一体化系统应运而生。
针对用户属于社会高水平教育接受者的现实,该项目适当拓展产业链,开发与消费者距离更短的终端APP以提高利润空间。
由于市场上同质产品较少,市场空白较多,因此该项目隐藏着巨大的发展空间。并且作为行业的先驱者,基于项目客户粘性大的优势,迅速占领市场后,可以较好地维持活跃用户数量。
客户分析
高校食堂下课时间集中,该系统不仅可以增加结账速度,还可以在识别菜品的情况下,分析师生口味,推出套餐活动。另外,在高校,利用学生老师对高科技敏感度,可以加强营销优势。
与高校食堂相似,员工午休时间集中,企业食堂需要更加注重工作效率,且企业食堂人员较为固定,在支付系统中使用的人脸识别可以较好地被使用。
市场竞争,餐厅菜色的频繁性改变和各种减价优惠的不定期更新,导致识别菜盘颜色不再适用于餐厅加快结账速度。不仅是个体经营,该项目还能将数据加以整合,形成较为完整的前端数据,因此适用于快餐类连锁式餐厅。
想与更多的深度学习开发者交流,请加入飞桨官方 QQ 群:
703252161
。
如果您想详细了解更多飞桨的相关内容,请参阅以下网站:
https://www.paddlepaddle.org.cn/
https://github.com/PaddlePaddle
以上是关于我用飞桨做了一个菜品图像识别系统的主要内容,如果未能解决你的问题,请参考以下文章
基于飞桨PPYOLO的滑块验证码图像识别!
百度飞桨学习——七日打卡作业五人识别
百度飞桨PaddleClas图像识别开源应用扫盲课笔记
人工智能系列(14)——图像识别
做了个色情图片识别系统
做了个色情图片识别系统