餐饮后厨的出餐口是整个门店里节奏最快、也最容易出问题的地方。一份菜从灶台到传菜员手里往往只有几秒钟的窗口期而就是这几秒决定了顾客拿到的是不是一份合格的出品。我做过几年餐饮数字化的项目也帮不少连锁品牌搭过视觉检测系统说实话出餐口这个场景比很多人想象的要难——它不是实验室里跑个模型那么简单油污、蒸汽、反光、遮挡、菜品形态千变万化任何一个环节没考虑到系统上线当天就会被打回原形。这篇内容我想把出餐口AI视觉质检这件事从头到尾拆开讲清楚它到底解决什么问题、核心技术栈怎么选、目标检测和实例分割各自适合什么环节、多模态大模型能补上哪些传统CV搞不定的坑以及我在实际部署中踩过的那些坑。不管你是刚接触计算机视觉的学生还是正在评估落地方案的工程负责人都能从里面找到能直接用的东西。1. 出餐口质检到底在检什么需求拆解先于模型选型很多人一上来就问用YOLO还是用分割这个问题问早了。真正该先问的是出餐口这个场景质检的判定标准是什么标准不清楚模型再强也是白搭。1.1 从人眼质检反推机器判定项我习惯的做法是先蹲在出餐口看三天。看传菜员和厨师长到底在盯什么。总结下来人工质检其实在同时判断四类东西有没有该有的主料、配菜、餐具、标签是不是都在。比如一份套餐该有三样小菜结果只放了两样。对不对菜品和订单是不是匹配。A桌点的宫保鸡丁出餐口端出来的是辣子鸡这就是错配。够不够分量是否达标。肉片数量、汤汁高度、配菜比例这些是有标准的。好不好卖相是否合格。有没有焦糊、有没有异物、摆盘是否散乱、颜色是否正常。这四类里有没有和对不对是离散判断适合用目标检测够不够和好不好是连续判断往往需要分割甚至多模态模型来辅助。把判定项拆到这个粒度后面选模型才有依据。1.2 为什么不能只做一个合格/不合格二分类我见过有团队图省事直接训一个二分类模型输出合格或不合格。上线一周就崩了。原因很简单二分类只告诉你结果不告诉你原因。厨师长收到不合格提示但不知道是少放了配菜还是摆盘歪了没法针对性整改。而且二分类的标注成本极高——你得让标注员对每一张图做整体判断主观性大一致性差。正确的做法是结构化输出模型返回一个检测结果列表每个元素包含类别、位置、置信度。上层业务逻辑再根据这些结构化结果去比对订单、比对标准配方最终给出缺了什么、多了什么、哪里不对的具体结论。这样既方便追溯也方便后续迭代。1.3 出餐口场景的五个硬约束在动手之前必须把场景约束摸清楚这些约束直接决定技术方案约束项具体情况对方案的影响光照后厨顶灯偏黄、有蒸汽、有反光需要数据增强覆盖必要时补光源遮挡传菜员手部、餐盘堆叠检测框容易被截断需容忍部分遮挡速度出餐高峰每分钟十几份单帧推理必须控制在100ms内角度摄像头固定俯拍或斜拍训练数据必须同角度采集品类菜单可能每周更新模型要支持快速增类这五条里速度和品类更新是最容易被低估的。很多demo在实验室跑得好好的一到高峰期就卡顿很多模型训完就固定了菜单一换就得重训运维成本极高。后面讲选型时会重点说怎么应对这两点。2. 目标检测与实例分割的分工别用一个模型硬扛所有活出餐口质检不是单一任务它是一串任务的组合。我的经验是用目标检测做粗筛用实例分割做精判两者配合而不是指望一个模型包打天下。2.1 目标检测负责有没有、对不对目标检测的输出是边界框加类别天然适合回答画面里有哪些东西、分别在哪。在出餐口它主要承担三件事菜品识别识别出餐盘里是哪个菜品和订单做比对。这一步用YOLO系列就很合适速度快、精度够。配件清点数一数小菜、餐具、标签的数量。检测框数量直接就是计数结果。异物初筛把可能出现的异物如包装袋、头发团作为一类目标检测出来触发人工复核。YOLO系列之所以在这个环节吃香核心原因是它的单阶段检测架构把速度做到了极致。以YOLOv11为例nano版本在普通GPU上单帧推理可以压到10ms以内small版本也就20ms左右完全能满足出餐口的速度要求。而且Ultralytics这套框架的工程化做得很好训练、导出、部署一条龙对新手友好。2.2 实例分割负责够不够、好不好目标检测给的是矩形框但很多质检项需要像素级的轮廓。比如汤汁在碗里的液面高度需要分割出汤汁区域才能算面积占比摆盘的散乱程度需要分割出每个食材的轮廓才能算分布焦糊区域的面积占比需要分割出焦糊像素才能量化。这些用检测框做不了必须上实例分割。YOLO的seg版本如YOLOv11-seg在检测头之外加了一个掩码分支能同时输出框和掩码速度和检测版接近是性价比很高的选择。如果对掩码精度要求极高可以考虑Mask R-CNN这类两阶段方案但速度会慢不少出餐口场景要慎重。2.3 一个实际的组合架构我在一个连锁快餐项目里用的架构是这样的摄像头帧 → 预处理去噪、白平衡 → YOLOv11检测菜品配件异物 → 对主菜区域裁剪 → YOLOv11-seg分割汤汁、主料、配菜 → 结构化结果 → 业务规则引擎比对订单、比对标准 → 输出质检结论这里有个关键设计分割只在检测到的主菜区域上做而不是对整帧做分割。这样既省算力又避免了背景干扰。实测下来整条链路在单张RTX 3060上能跑到30FPS以上完全够用。提示不要一上来就全帧分割。先检测定位再局部精判是出餐口场景最务实的做法。3. 从零搭一套检测环境YOLOv11配置的完整路径既然检测是主力环境配置就是绕不开的第一关。我见过太多人卡在环境上这里给一条我验证过多次的路径纯小白也能跟着走。3.1 硬件与系统的最低门槛先说结论没有GPU也能跑但训练会很痛苦。如果只是推理CPU也能凑合如果要训练自己的数据集建议至少一张8GB显存的NVIDIA显卡。用途最低配置推荐配置推理CPU 4核 8GB内存GPU 6GB显存训练GPU 8GB显存GPU 12GB以上显存数据标注普通办公机双屏更高效系统方面Ubuntu和Windows都行。Ubuntu在依赖管理上更省心Windows对新手更友好。我一般推荐新手先用Windows跑通再迁到Ubuntu做生产部署。3.2 环境安装的实操步骤用conda建一个独立环境避免污染系统Pythonconda create -n yolo11 python3.10 -y conda activate yolo11然后装PyTorch。这里有个坑一定要去PyTorch官网查对应CUDA版本的安装命令不要直接pip install torch否则很可能装成CPU版。假设是CUDA 12.1pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121接着装Ultralyticspip install ultralytics验证是否装好from ultralytics import YOLO model YOLO(yolo11n.pt) results model(test.jpg) print(results[0].boxes)能打印出检测框信息环境就算通了。3.3 数据集准备出餐口数据的采集要点环境通了接下来是数据。出餐口的数据采集有几个讲究同角度采集摄像头装哪就用那个角度拍。不要用网上的菜品图凑数角度一变模型就废。覆盖全时段早中晚的光照不一样都要采。蒸汽大的时段也要采。覆盖全品类每个菜品至少200张稀有菜品可以少一些但要保证有。负样本要有空盘、半成品、传菜员手部遮挡的画面都要作为负样本或困难样本收进来。标注用LabelImg或Roboflow都行。检测任务标框分割任务标多边形。标注规范要提前定好比如菜品边缘以可见轮廓为准被遮挡部分不外推否则不同标注员标出来的框差异很大。3.4 训练与调参的实战经验数据准备好按YOLO的目录结构组织dataset/ images/ train/ val/ labels/ train/ val/写一个data.yamlpath: ./dataset train: images/train val: images/val names: 0: dish_main 1: dish_side 2: tableware 3: foreign_object然后开训yolo detect train datadata.yaml modelyolo11s.pt epochs100 imgsz640 batch16几个调参经验imgsz不要盲目调大。640是性价比最高的调到1280速度会掉一半除非小目标特别多。epochs看验证曲线定。一般50到150之间早停patience设20就行。学习率用默认的。YOLO的默认学习率策略已经很成熟新手不要乱改。数据增强适度。出餐口场景建议开mosaic和HSV增强但不要开太猛的旋转因为摄像头角度是固定的。训练完看混淆矩阵和PR曲线重点看漏检和误检哪个更严重。出餐口场景里漏检该检的没检出来比误检更致命因为漏检意味着不合格品流出去了。所以调阈值时宁可稍微降低置信度阈值也要把召回率拉上去。4. 多模态大模型能补哪些传统CV的坑传统CV方案跑通之后你会发现有些问题它天生解决不了。这时候多模态大模型就该上场了。4.1 传统CV的三个天花板第一开放类别识别。菜单每周上新传统检测模型每加一个类就得重新标注、重新训练。而多模态大模型可以用文本描述直接识别新菜品比如识别画面中是否有红烧类菜品不需要重新训练。第二复杂语义判断。什么叫摆盘散乱什么叫卖相不好这些是语义层面的判断检测框和掩码给不出答案。多模态大模型可以结合图像和文本提示给出摆盘较散乱主料分布不均这样的描述性结论。第三长尾异常。异物、焦糊、错配这些异常样本少、形态多传统模型很难覆盖全。多模态大模型凭借预训练知识对没见过的异常也有一定的识别能力。4.2 多模态大模型在质检链路里的位置我的建议是把多模态大模型放在复核环节而不是主链路。原因很简单它推理慢、成本高不适合对每一帧都跑。合理的做法是主链路用YOLO做快速检测和分割输出结构化结果当结构化结果触发疑似异常时把对应区域裁剪出来送给多模态大模型做二次判断大模型返回自然语言结论作为最终质检意见的一部分。这样既保证了速度又用上了大模型的语义能力。实测下来触发复核的比例大概在5%到10%成本完全可控。4.3 提示词设计的几个要点多模态大模型的输出质量很大程度取决于提示词。我在质检场景里总结了几条给明确的判定维度。不要问这份菜合格吗要问请从主料是否齐全、摆盘是否整齐、是否有异物三个维度判断。要求结构化输出。让它返回JSON格式方便程序解析。给参照标准。把标准菜品的描述写进提示词让它对比判断。限制输出长度。质检结论要简短不要让它长篇大论。一个实际用的提示词模板你是出餐口质检员。请对比标准出品和当前出品从以下维度判断 1. 主料是否齐全 2. 配菜数量是否达标 3. 摆盘是否整齐 4. 是否存在异物或焦糊 请以JSON格式返回字段包括pass(布尔)、issues(问题列表)、confidence(置信度)。5. 部署上线后的真实坑从实验室到出餐口的距离模型训好了demo跑通了不代表能上线。出餐口的真实环境会教你做人。这一节讲讲我踩过的坑。5.1 蒸汽和油污对镜头的持续影响后厨的蒸汽会在镜头前凝结成水雾油污会慢慢糊住镜头。刚装上的时候画面清晰跑一周就模糊了。解决方案镜头加装防雾加热片保持镜面温度高于环境露点定期自动擦拭用微型雨刷或气吹软件层面做清晰度检测画面模糊到阈值就报警提示清洁。这一条是纯工程问题但如果不解决再好的模型也白搭。5.2 高峰期算力争抢出餐高峰期多路摄像头同时推流算力会不够。我的做法是动态抽帧。高峰期降低检测频率比如从每秒10帧降到每秒3帧因为出餐动作本身有停顿不需要那么高的帧率。分级推理。先用轻量模型快速筛可疑的再送大模型。边缘部署。把推理放在门店本地的小主机上不要全部回传云端既省带宽又降延迟。5.3 误报的处理策略上线初期误报一定多。这时候不要急着调模型先做误报归因误报类型典型原因处理方式遮挡误报手部遮挡导致漏检增加遮挡样本或加时序判断光照误报反光导致误检补光或加偏振片相似菜品误报两类菜品外观接近增加区分性特征或加辅助判断阈值误报置信度阈值设置不当用验证集重新标定阈值我一般会要求系统记录每一次误报的原始图像每周做一次归因分析针对性补数据。这样迭代两三周误报率能降一个数量级。5.4 和现有系统的对接质检系统不是孤立的它要和点单系统、后厨显示系统打通。对接时注意订单匹配质检结果要和具体订单绑定需要从点单系统拿到订单号。时序对齐出餐动作和订单完成时间要对齐避免张冠李戴。异常闭环质检不合格时要能触发后厨返工流程而不是只弹个提示。这些是业务逻辑但往往比模型本身更影响落地效果。6. 给不同阶段读者的上手建议最后按基础不同给几条实在的建议。6.1 纯小白先跑通再优化如果你刚接触计算机视觉不要一上来就搞出餐口这么复杂的场景。建议路径先用YOLO官方示例跑通推理感受一下检测是什么找一个公开的菜品数据集训一个简单的检测模型自己拍几十张照片标注、训练、验证走完整个流程再考虑出餐口这种多约束场景。计算机视觉的学习路线核心是动手。看十篇教程不如自己训一个模型。6.2 有基础重点补工程能力如果你已经会训模型那瓶颈往往在工程。建议重点补数据工程怎么高效采集、标注、管理数据部署优化模型量化、TensorRT加速、边缘部署业务理解深入理解质检场景的真实需求而不是只盯着指标。6.3 做项目的学生选题要接地气如果是做计算机视觉大作业出餐口质检是个不错的选题因为它有真实场景、有明确指标、有落地价值。但要注意数据集要自己采不要用网上的通用数据集指标要全面不能只看mAP还要看速度和误报率最好能做一个简单的演示界面让评委直观看到效果。我个人在实际项目中的体会是出餐口AI视觉质检这件事技术只是其中一半另一半是对餐饮场景的理解。模型再准如果不解决蒸汽、油污、算力、业务对接这些实际问题系统就是空中楼阁。真正能跑起来的方案往往是那些看起来不那么先进、但每个环节都考虑到了真实约束的方案。如果你正在做类似的项目建议多去现场蹲几天比在实验室调参有用得多。