大模型赋能智能垃圾分类听起来像是一个很“未来”的命题但当我真正把多模态大模型塞进垃圾桶后端的识别系统里才发现这件事的难点不在模型本身而在工程化落地的一堆细节里。大模型确实能看懂“沾了油的纸盒不该扔进可回收物”这种上下文但要让它在摄像头视角、强反光、脏污遮挡的真实环境里稳定输出需要靠数据、推理加速和硬件联动的组合拳。这篇文章就是我做完一整套软硬件联调后的经验记录适合正在做智能垃圾分类、智能硬件识别或边缘AI落地的人参考。我去年在某园区做了一套智能分类垃圾桶试点核心逻辑并不复杂垃圾桶上方装摄像头用户投放垃圾时自动拍一张照片系统识别出垃圾类别后控制桶门打开同时通过屏幕和语音告诉用户应该扔进哪个桶。看起来就是一个“图像识别控制”的小项目但真正把传统视觉方案换成大模型之后整个系统的容错能力、可解释性和可迭代性都有了本质变化。下面把从数据准备、模型微调到现场部署的完整过程拆开讲重点说那些文档里不会写、但实际一定会踩的坑。1. 项目背景与整体思路1.1 为什么想到用大模型做垃圾分类在做这套系统之前我们用的是传统卷积神经网络做分类准确率在干净的摆拍图上还行一放到真实垃圾桶的投放口就露馅光照一变、角度一偏、垃圾袋半遮住物品结果就乱跳。最头疼的是垃圾分类本身带有强烈的“规则感”比如牛奶盒要压扁、易拉罐要清洗、碎玻璃要包裹后才能投放这些规则不是单纯的视觉特征而是需要“看图后做出判断”的推理。传统分类模型只能回答“这是什么”回答不了“这个能不能回收、该走哪个流程”。大模型的优势恰好在这里。以视觉语言模型为例它既能看图片也能理解文字规则可以把《垃圾分类管理条例》里的那些“例外情况”直接写进提示词里让模型在识别的同时完成规则判断。这么做有一个直接好处规则变了不需要重新训练模型改提示词就行。比如某地突然规定“外卖盒必须清洗后回收”只需要更新系统提示词不需要重新采集数据。对垃圾分类这种政策频繁调整的场景来说这个灵活性太值钱了。1.2 这个项目要解决的核心问题我们去园区调研时用户反馈最多的不是“不知道垃圾该扔哪”而是“知道规则但不想花时间分辨”。所以这套系统的第一目标不是单纯识别而是降低投放门槛用户只要把垃圾拿到摄像头下方系统自动识别、自动开桶、自动播报。传统刷卡开门或者按键开门模式都需要用户主动选择桶识别错了还得重新投放体验很差。另一个核心问题在于有害垃圾的误判。园区里有一个专门的红色有害垃圾桶但以往经常被扔进普通垃圾因为大家不知道纽扣电池、过期药品、废灯管属于有害垃圾。传统模型对这些长尾品类召回率非常低原因很简单训练数据里少而且外观差异大。大模型靠着在海量通用数据上学到的世界知识能够把“一个没见过牌子的纽扣电池”和“有害垃圾”关联起来。这点让我决定不用传统方案作为主识别链路而是把它降级成前置过滤防止漏掉真正需要兜底的场景。1.3 技术选型时的关键判断第一关是选大模型架构。我们的输入是摄像头拍的静态图输出需要是“类别置信度投放建议”这种场景最合适的是多模态视觉语言模型而不是纯文本大模型。考虑到部署成本和端侧算力我一开始就放弃了API调用方案原因有两个一是园区网络不稳定识别请求延迟不可控二是每月的调用量会非常大按次计费不划算。所以选了开源的可商用多模态模型参数规模控制在10B以内方便做量化部署。第二关是识别链路设计。大模型不是万能的如果直接把整张画面丢给它让它做目标检测再加分类延迟会高到没法用。我们的做法是先用轻量目标检测模型从摄像头画面里裁剪出垃圾区域再把裁好的小图交给大模型做细粒度分类。这个“检测分类”的两级结构既保留了检测模型的实时性又用大模型解决了传统分类模型搞不定的语义问题是整个系统的核心思路。2. 数据是第一关垃圾图片数据集的采集与标注2.1 垃圾分类数据集的特殊之处做过分类任务的人都知道垃圾数据集是个标准的长尾分布。塑料瓶、易拉罐、废纸这些常见物品随便拍拍就有几千张但纽扣电池、温度计、X光片这种有害垃圾能凑满100张都费劲。更麻烦的是同一类垃圾在不同状态下外观差异极大一个压扁的易拉罐和一个完好的易拉罐传统模型可能把它们当成两类一张脏兮兮的餐巾纸和一张干净的白纸在视觉上接近但在垃圾分类规则里一个属于厨余垃圾一个属于可回收物。数据里必须涵盖这些“状态差异”否则模型永远学不会。除了状态还有环境。垃圾桶的摄像头通常是斜向下安装的视角不是平视而是俯视加顶光塑料袋反光、灯光频闪、手的遮挡都是常态。如果只用干净的实拍图训练部署后会发现模型在真实投放时频繁抖动。我后来统计了一下现场误判案例里大概有四成是“环境干扰导致的识别漂移”而不是垃圾本身长得多像。所以数据采集策略必须围绕“现场长什么样”来设计而不是围绕“网上图长什么样”。2.2 数据采集、清洗与增强的实操记录我们第一批数据来自三块园区之前积累的投放点历史截图、开源垃圾数据集、自己组织拍摄的模拟投放视频。历史截图最真实但隐私合规要处理好所有人脸和快递单信息必须脱敏后再进训练集开源数据质量参差不齐有大量网上找来的“白底商品图”和现场俯拍视角差距很大筛选时直接丢掉自己拍的模拟数据又太像“摆拍”干净、完整、光线均匀能补足物体细节但对环境鲁棒性帮助有限。清洗流程比采集还耗时。我会写一个简单的去重脚本先按感知哈希把重复图去掉再过滤掉分辨率低于640x640的图最后人工扫一遍明显错图。特别注意一个问题很多人会用纸箱、饮料瓶、“垃圾”关键词去网上抓图但抓回来的图里有很多不是垃圾投放场景而是产品展示图。这类图比例一旦过高模型会把“干净整齐的商品展示”和垃圾混淆部署时会倾向于把现场垃圾识别成商品。所以清洗时除了去掉低质量图片每一类还要控制“商品图”的占比最好不超过20%。数据增强方面除了常规的旋转、缩放、色彩抖动我强烈建议加三类专用增强随机加入暗角模拟垃圾桶内光线不均、随机模拟塑料反光条、随机叠加半透明薄膜模拟垃圾袋遮挡。这三种增强对提升现场通过率的效果肉眼可见。关键逻辑是让模型见过“看不清的垃圾”它才敢于在真实看不清楚时给出合理判断而不是死磕一个错误的低置信度结果。2.3 标注规范制定与质量检查垃圾分类标注的核心是类别体系怎么定。我们没有直接按“可回收/有害/厨余/其他”四级去标因为某些物体跨类别特性很强沾了油的纸盒算其他垃圾但干净纸盒是可回收物。如果标签体系里没有“受污染的纸盒”这一条标注员就会产生分歧。所以我们把标签拆成两级一级是投放类别二级是物品细类加“状态描述”比如“可回收物-纸盒-干净”“其他垃圾-纸盒-有油污”。模型输出时同时带细类和状态后续控制逻辑就能根据状态判断是否开门。标注工作我们采用“大模型预标注人工校对”的方式先用训练好的旧版大模型对图片做一轮预测标注员只需要确认或修改速度能提升三倍。但质检才是重点每个批次抽20%的图重点看容易混淆的组合例如陶瓷碗和玻璃碗、塑料膜和纸张、厨余垃圾中的骨头和贝壳。如果发现抽检一致率低于95%整批退回重新标。不要只看总体准确率一定要看混淆矩阵。一开始我们的误标集中在“外卖盒”上有人按“纸类可回收”标有人按“受污染其他垃圾”标就是因为规则没有提前讲清楚。后来在规则里加上“未清洗含有食物残渣的餐盒一律标其他垃圾”分歧立刻降下来了。3. 大模型微调从“什么都能答”变成“懂垃圾分类”3.1 直接拿通用大模型用效果行不行我先做了零样本测试不微调直接让开源视觉语言模型看垃圾图片写一个很详细的提示词包括各类垃圾的定义、例子和判断规则。测试结果很意外常见垃圾类别比如塑料瓶、易拉罐、废纸识别准确率能达到85%以上对规则的理解也比预期好。但它有两个致命问题第一对“易混淆物品”的边界把握不稳同一张碎玻璃图片换一种灯光拍就能从可回收物跳到有害垃圾第二输出格式特别不稳定有时候给大段文字有时候给一段JSON还有时候答非所问。生产环境里没法接受这种不确定性。所以结论是通用模型必须微调但不是为了让它“懂分类”——它本身已经懂分类了微调是为了让输出变得可控、稳定、贴合我们的分类体系。换句话说我们不是在教模型认垃圾而是在教模型“用我们规定的格式、我们定义的类别来回答”。3.2 微调方案LoRA、数据配比与训练参数我们选择了参数高效的LoRA方案。视觉语言模型太大全参数微调需要八张卡跑好几个小时而且很容易过拟合到训练集。LoRA相当于在模型原本的权重旁边加了一个小规模的“旋钮矩阵”只训练这个旋钮原始权重不动。这样训练速度快、显存占用低还能在多个细分任务之间切换模型头不用重复存储完整模型。参数配置可以参考我的实际设置秩rank选择16缩放系数alpha选择32量化后基础模型以4bit加载这样单张专业显卡就能训练。学习率从1e-4开始用一个带预热和余弦衰减的调度器批次大小设为8梯度累积到等效32的批次规模。训练轮数不能太多3轮左右就够多了模型会把通用知识忘掉。关键技巧是在数据集里掺入约5%的通用对话数据像语文作业里的“复习题”一样防止模型只记得垃圾而忘了怎么说话。这个配比我们试过直接不掺结果微调后模型对正常的用户问候都开始胡言乱语把它修回来费了不少功夫。训练样本量方面常见类别每类准备800到1000张图长尾的有害垃圾品类至少准备200到300张然后用增强扩到600张。整体样本量控制在2万到3万条“图文样本”比较合适。这里的图文样本不是一张图配一句话而是“图用户问题标准回答”的三元组比如图是一张叠好的纸箱问题是“这是什么垃圾”回答是“可回收物-纸类-干净可以直接投放”。3.3 提示词设计让模型输出稳定、可解析的结果微调只是第一步部署时的提示词还要仔细设计。我们的做法是把垃圾分类规则、桶号、输出JSON格式定义全部塞进系统提示词温度参数设为0关闭随机性。用户侧提示词就用固定的一句话比如“请识别图中物品并按给定格式输出分类结果”。这样做的目的是让推理过程尽量确定不搞“创作”式回答。为了让结果可直接驱动硬件我们要求模型只输出一个JSON对象不要输出任何解释。格式大致是这样的{ category: 可回收物, subcategory: 纸箱, status: 干净, confidence: 0.96, action: green, reason: 瓦楞纸箱表面无明显油污和胶带残留 }如果模型输出的JSON解析失败我们有一个重试机制把解析失败的回话拼进下一轮对话提醒“你刚才的输出不是合法JSON请重新输出严格JSON格式”一般最多重试两次就能恢复。注意不要在提示词里写“如果无法判断就回答不知道”因为大模型在低置信度时倾向“蒙一个”我们改成另一种策略允许输出“类别不可判定”但必须同时给出置信度低于0.6。系统看到这种结果就走“人工复核”流程而不是让桶门随机开一个。这个机制大大降低了有害垃圾被误放进普通垃圾桶的概率。4. 系统实现与部署识别逻辑、加速与硬件联动4.1 端侧和云侧的职责划分系统部署分为三层。第一层是摄像头和边缘盒子负责抓拍、人脸脱敏、目标检测和初级分类第二层是中心服务器部署微调后的大模型第三层是垃圾桶单机控制器接受识别结果并执行开锁。这样做的好处是简单物品在边缘直接出结果延迟可以压到300毫秒内疑难物品才把图片传到中心大模型延迟一两秒用户也能接受。边缘盒子上跑的目标检测模型负责把垃圾从画面里抠出来。检测模型只做“框出垃圾区域”这件事不做分类分类交给大模型。这样设计的一个隐藏好处是边缘检测模型可以持续收集大模型标好的结果作为新训练数据定期蒸馏更新让边缘侧承担越来越多的简单分类任务。实际运行一个月后边缘侧直接处置的比例从60%上升到了80%中心服务压力大幅降低。4.2 推理加速与模型压缩大模型部署最怕延迟。我们的服务器上没有特别顶级的显卡所以必须把模型压缩到4bit量化。量化会把模型的权重从16位浮点数压成4位整数显存占用直接降低75%推理速度也快了不少。代价是精度会掉一点不过垃圾分类场景里1%到2%的精度损失可以接受而且我们微调时已经做了量化感知相关处理最终效果损失很小。推理服务端还要做两件容易被忽略的事动态批处理和结果缓存。动态批处理是指多个识别请求同时到达时把它们的图片打包成一个批次送入模型显卡一次推理处理多张图吞吐量提升非常明显。结果缓存则是针对重复投放场景——同一个用户短时间内反复扔同一种垃圾摄像头拍出来的图高度相似。我们把图文特征做简单哈希设置五分钟内相同哈希直接返回上次结果高峰期省了大约15%的推理量。4.3 垃圾分类桶的硬件联动与多模态交互识别结果确定后控制器根据“action”字段里的桶号打开对应的舱门。这里有一个必须注意的点硬件一定要等识别结果稳定再动作不要图片一进就立刻开。我们在最早的原型机上踩过坑模型已经输出“其他垃圾”了控制板却因为之前的一帧空画面提前开了可回收桶。后来加了状态锁在识别完成前按住所有执行器并且在摄像头前加了一段约半秒的“投放稳定等待”用连续两帧检测结果一致才触发识别效果直接稳定了很多。语音交互也很有意思。除了视觉识别我们还接入了简单的语音输入用户可以直接说“电池扔哪个”语音转文字后文本和摄像头图片一起送入大模型模型输出结果并驱动语音播报。这种多模态交互在老年人使用场景下非常受欢迎因为不用纠结屏幕上的一堆按钮直接说就行。注意语音输入和图片输入不是简单的拼接需要在微调样本里加入“文本图片”的配对数据模型才学得会同时参考两种信息。5. 实测效果与问题排查实录5.1 现场测试效果指标比传统方案好多少我们选了园区三个垃圾投放点连续跑了两周统计了四类指标的对比粗分类准确率、细分类准确率、有害垃圾召回率、端到端投放通过率。粗分类指的是分对“可回收/厨余/有害/其他”四大类细分类指的是正确识别出具体物品名称。指标传统CNN方案大模型方案粗分类准确率87.2%94.1%细分类准确率71.5%88.3%有害垃圾召回率62.4%93.6%端到端通过率76.8%89.5%大模型方案提升最大的是有害垃圾召回率从六成出头拉到九成以上。这说明模型在海量预训练中积累的“世界知识”确实发挥了作用哪怕没见过某种新牌子的充电宝也能根据“电池”“锂电池”这些视觉特征判断出危险性。但细分类准确率并没有想象中那么高88.3%说明还有不少误判主要集中在玻璃瓶和陶瓷碗、塑料盒和纸质盒这种“材质近似”的品类上。另一个客观现象是大模型方案在“拒答”上表现得更好。传统模型哪怕很犹豫也会硬给一个类别而大模型在训练引导下学会了输出“无法判定”相当于主动把控制权交还给系统。实际数据里约有6%的请求被判定为低置信度其中三分之一由人工复查确认另外三分之二其实可以正确识别这说明阈值还有调优空间。5.2 高频问题的排查过程与解决办法第一个高频问题是“油污纸盒被分到可回收物”。用户拿外卖纸盒来丢时模型总是自信地把纸盒归为可回收物但按照当地条例粘了食物残渣的纸盒要算其他垃圾。我们排查后发现问题不在模型而在数据里“干净纸盒”和“脏纸盒”的数量差距太大模型把“纸盒”这个视觉特征优先于“油污”学习。解决办法是专门扩充了2000张带油污、带残渣的纸盒图片并且在标注体系中把“受污染纸盒”单列为一类训练时明确让模型关注表面光泽和残渣信息。第二个高频问题是夜间识别效果差。投放点到了晚上八九点灯光偏黄且闪烁图片整体偏暗识别置信度普遍下滑。一开始以为是模型问题后来发现是摄像头自动增益在作怪画面整体过曝或拖影。我们给摄像机设置了固定曝光时间加了一个近红外补光灯并在训练集里混合了30%的暗光和低色温图片夜间准确率才回到正常水平。第三个问题是推理延迟不稳定。中心服务器空闲时单图识别大约1.2秒并发一上来却能飙到4秒用户会明显感觉“桶门反应慢”。排查下来是推理框架的显存碎片和批处理策略没配合好并发请求没有等够一个批次就挨个推理导致效率极低。后来我们设置了一个小等待窗口让50毫秒内积压的请求一起进入动态批次同时开了显存池化延迟中位数直接降到了900毫秒左右。5.3 部署过程中必须注意的避坑清单摄像头安装角度一定要模拟真实投放视角。很多原型机用平视图训练模型上线后才发现垃圾桶的摄像头是俯视的识别效果打对折。识别结果必须和硬件动作加互锁。如果桶门控制信号和识别逻辑没有状态同步空手晃动、风吹垃圾都会误触发开门一定要做“连续有效帧”确认。定期抓取新数据回流训练。垃圾种类跟着季节变端午前后粽叶粽盒多、春节后礼盒多、秋季落叶多模型需要持续增量训练才能保持效果。注意隐私遮挡。摄像头会拍到人脸、快递单、药品包装等敏感信息图像必须在上传前完成脱敏否则数据合规上会出大问题。别把所有类别交给大模型。像可回收物里的金属罐传统检测模型已经很准了没必要让大模型处理反而增加延迟和成本。按类别分流性价比更高。6. 我踩过的坑和后续可以扩展的方向6.1 上线后准确率下降的教训我们踩得最深的一个坑是“上线第一周效果很好第二周开始明显变差”。起初以为是模型不稳定后来调了日志才发现投放行为变了第一周大多是园区物业人员试用投放物相对规范第二周居民开始使用经常整袋垃圾直接丢进投放口摄像头拍到的不再是单一物品而是复杂的混合垃圾堆。我们训练的模型从没见过“一堆混合垃圾”只能硬从里面找一个最显眼的物品来识别结果自然一塌糊涂。解决方法是专门采集混合垃圾和高遮挡场景的数据并把识别策略从“识别一个物品”改成“识别主体物品次要物品列表”。大模型特别适合这个改动因为可以把图里所有可疑物品都列出来然后由控制逻辑决定按哪个类别执行。这相当于把“单选题”改成“多选题再求并集”对用户的误投放容忍度高了很多。经过这个教训我养成了一个习惯任何识别系统上线前都要准备一套“现场开放环境”测试数据不要只用干净的标准样本验收。6.2 比分类更远的应用识别之外的价值大模型在垃圾分类项目里真正的价值不是分类而是把垃圾这个“低价值物品”变成了“可交互的数据入口”。后面我打算把识别系统升级成一个“可回收物价值评估器”通过大模型识别材质、品牌、破损程度甚至用手持摄像头扫一下饮料瓶直接估算回收价格引导用户主动分类投放。另外大模型也适合做垃圾分类的知识问答助手。社区里经常有阿姨问“过期口红是什么垃圾”“龙虾壳是不是厨余”这些东西长得像、类别冷门纯靠视觉识别很容易翻车。如果能接一个本地知识库把条文和常见问题存进去大模型结合视觉和检索生成准确回答投放点可以彻底摆脱贴纸质指南的尴尬。大模型赋能的智能垃圾分类现在只是开了个头后续把识别结果和回收体系打通才是更大的金矿。