news 2026/5/29 2:02:11

基于深度学习网络的美食识别系统matlab仿真及带GUI界面

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于深度学习网络的美食识别系统matlab仿真及带GUI界面

基于深度学习网络的美食识别系统matlab仿真,带GUI界面

最近在折腾一个好玩的项目——用Matlab搞了个能识别美食的深度学习系统。这玩意儿不仅支持常见的炸鸡披萨寿司分类,还带了个能拖拽图片的GUI界面,实测发现对着外卖拍张照准确率居然有八成以上。咱们这就来拆解这个有意思的小工具。

先说说数据这事儿。我从Food-101数据集里挑了炸鸡、寿司、披萨三类各1000张图片,用Matlab的imageDatastructure直接撸了个数据管道:

imds = imageDatastore('food_dataset',... 'IncludeSubfolders',true,... 'LabelSource','foldernames'); [trainImgs,testImgs] = splitEachLabel(imds,0.8,'randomized');

这里有个坑要注意,文件夹命名必须和类别名称完全一致。曾经因为文件夹名多了个下划线,让模型把"pizza"认成新类别,排查了俩小时才发现问题。

网络结构方面,咱们整了个轻量化的CNN。考虑到美食图片颜色特征重要,第一层卷积核特意设大了点:

layers = [ imageInputLayer([224 224 3]) convolution2dLayer(7,16,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(5,32,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(3) softmaxLayer classificationLayer];

这个结构在GTX 1060上跑起来,迭代一次大概3秒左右。如果显卡不太行的话,可以把32改成16,亲测准确率只会掉2个点左右。

训练参数设置是门玄学。经过多次尝试,下面这个配置收敛最快:

options = trainingOptions('sgdm',... 'InitialLearnRate',0.001,... 'MaxEpochs',15,... 'Shuffle','every-epoch',... 'ValidationData',testImgs,... 'VerboseFrequency',50);

注意学习率千万别超过0.005,否则直接梯度爆炸。有次手抖多按个零,loss值直接飙到NaN,训练了个寂寞。

GUI界面用App Designer拖控件搞定。核心是那个"识别"按钮的回调函数:

function RecognizeButtonPushed(app, ~) img = imread(app.ImagePath); % 读取用户上传的图片 processedImg = imresize(img,[224 224]); % 强制统一尺寸 label = classify(app.net, processedImg); % 调用训练好的模型 app.PredictionLabel.Text = char(label); % 显示结果 % 显示概率分布 scores = predict(app.net, processedImg); bar(app.UIAxes, scores); app.UIAxes.XTickLabels = {'炸鸡','寿司','披萨'}; end

这里有个骚操作——预测时不仅显示类别,还把置信度用柱状图画出来。实测发现当三个类别概率都在0.3左右时,多半是拍到混合食材了。

测试时遇到个搞笑情况:拿康师傅红烧牛肉面的包装图测试,系统坚定地认为是披萨。后来发现是因为包装上的大块牛肉和芝士颜色接近披萨,这启示我们需要加入更多"非实物"的训练样本。

要提升准确率,可以试试这几个trick:

  1. 在数据增强里加上随机遮挡
augmenter = imageDataAugmenter('RandXlation',[-20 20],... 'RandYReflection',true);
  1. 改用迁移学习,加载预训练的ResNet50:
net = resnet50; lgraph = layerGraph(net); newFCLayer = fullyConnectedLayer(3,'Name','new_fc'); lgraph = replaceLayer(lgraph,'fc1000',newFCLayer);
  1. 加入温度作为特征(比如热成像图),不过这个需要特殊传感器支持

现在的系统还有个彩蛋:连续识别出三次炸鸡后,界面会自动弹出"热量警告"的弹窗。毕竟做技术的,也得关心用户健康不是?(笑)

完整代码已经打包放在Github上,需要的小伙伴可以直接clone下来试试。下次打算加入语音播报功能,让AI用东北话报菜名,那画面想想就有意思...

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 11:26:26

实战笔记】用SMART200玩转四台三菱变频器

西门子smart 200 rtu方式通讯四台三菱E700变频器资料 硬件:smart plc.三菱E700变频器,mcgs触摸屏(电脑仿真也可) 功能:指针写法,通过modbus rtu方式,实现对E700变频器通讯控制和监控。 有正反转,停止&…

作者头像 李华
网站建设 2026/5/26 0:15:56

京东商品视频API开发指南

一、摘要 京东商品视频API为开发者提供了获取京东平台商品视频信息的能力,支持通过商品ID查询对应的视频数据,包括视频地址、封面图、时长等信息。该API对于电商应用开发、商品展示优化以及用户体验提升具有重要意义。二、接口概述 1.接口基本信息 接口地…

作者头像 李华
网站建设 2026/5/28 14:59:57

30、文件系统管理与文件比较实用指南

文件系统管理与文件比较实用指南 在计算机系统的日常管理与维护中,对文件系统空间的有效管理以及文件内容的精确比较是至关重要的操作。下面将为你详细介绍一些常用的工具和命令,帮助你更好地完成这些任务。 1. 文件系统空间信息查看 在文件系统中,inode 表的大小在文件系…

作者头像 李华
网站建设 2026/5/22 5:25:11

生成Sigma点

自适应迭代无迹卡尔曼滤波算法AIUKF 锂离子电池SOC估计 递推最小二乘法辩识电池参数 具有良好的鲁棒性,初值误差为30%,仍能快速收敛 采用马里兰大学公开数据集 DST工况估计锂离子电池的荷电状态(SOC)是个头疼的问题,电…

作者头像 李华
网站建设 2026/5/28 15:53:16

基于三菱PLC和组态王的三层电梯控制组态设计程序 带解释的梯形图程序,接线图原理图图纸,io分配

基于三菱PLC和组态王的三层电梯控制组态设计程序 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面三层电梯控制系统这玩意儿,搞工控的兄弟应该都不陌生。今天咱们来拆解一套基于三菱FX3U和组态王的实装方案,重点…

作者头像 李华