YOLO+DeepSeek:智慧城市垃圾分类检测系统实战解析

发布时间:2026/10/19 4:21:04
YOLO+DeepSeek:智慧城市垃圾分类检测系统实战解析 垃圾分类这活儿摄像头盯着看已经不算新鲜但难点从来不在“看”而在“看完怎么定”。我最近这阵子一直在折腾一套基于深度学习YOLO目标检测算法和大模型DeepSeek的垃圾分类检测系统目标场景是智慧城市垃圾分拣说白了就是先让机器判断画面里有哪些垃圾、分别在哪里再让大模型去决定这些东西到底该归入哪个桶、后续怎么处置。这套框架既能做成智能回收箱的视觉核心也能当分拣线上机械臂的“眼睛”还能塞进巡检车随车相机做路面垃圾自动上报。这篇文章把框架选型、数据准备、YOLO训练、大模型接入、部署形态和踩坑经历都摊开讲一遍适合正在做类似“目标检测大模型”组合项目的开发者参考。1. 先把问题边界理清楚为什么单靠视觉模型会卡壳1.1 YOLO擅长的是“看到”不是“决定”YOLO这类目标检测算法的定位很明确在图像里找出目标物体用边界框框住然后给它打一个预定义类别标签。它强就强在快、稳、能跑在边缘设备上一帧画面几十毫秒就能出结果这非常适合实时摄像头场景。但放到垃圾分类这个场景里你会发现一个尴尬的问题检测出来“这是一瓶饮料”距离“这瓶饮料该进哪个桶”还有一大截距离。一瓶饮料的瓶子可能是PET塑料也可能是玻璃还可能是一个伪装成饮料瓶的金属罐。外观看起来几乎一样处置规则完全不同YOLO在训练时不可能把所有“材质差异”都学进去。它看到的是形状、颜色、纹理而材料属性不是纯视觉信息很多时候得靠经验推断。我刚开始做的时候也犯过同样的错想着把分类细分成几十类让YOLO直接输出“可回收物”“有害垃圾”“厨余垃圾”这类最终标签。训练完一测单张干净场景的准确率还凑合一到真实小区垃圾箱门口就露馅揉成一团的广告纸被识别成“纸”但它上面有大量油渍按当地分类规定应该算其他垃圾一个裂了一条缝的陶瓷碗看着像可回收的瓷器但碎陶瓷在大多数城市并不按可回收物处理。这些场景里YOLO的“视觉标签”并没错错的是我们指望视觉标签直接等于处置结论。1.2 垃圾场景真正的麻烦在于“语义判断”垃圾识别区别于普通物体检测最大的特点在于处理结论往往由“物品状态”而非“物体类别”决定。同样是一个矿泉水瓶瓶内还有残留液体的需要先倒掉再回收瓶身被严重污染甚至发臭的按部分地方的分类规则就不再是干净的回收物。人的判断过程其实是先识别出“这是个塑料瓶”再结合“瓶内有没有液体、脏不脏、是不是和其他垃圾混在一起”这些状态信息最终得出投放结论。这就产生了两类知识的分工一类是“识别知识”也就是判断眼前是瓶子、纸张还是果皮YOLO就可以做得很好另一类是“决策知识”也就是结合状态、场景、规则来推断最终分类这是目标检测模型不擅长的事情。训练数据里可以塞入各种脏瓶子的样本让模型记住“脏瓶子长这样”但同类样本是无穷无尽的今天有被泥土糊住的瓶子明天就有被油漆盖住的纸箱后天可能是半个埋在土里的塑料袋。视觉类别的长尾效应靠堆数据永远填不满。大模型在这时候的价值就体现出来了。它不需要精确画出目标位置也不需要实时跑在每帧画面里它只需要把YOLO给出的检测结果当成“眼睛看到的证据”再结合场景描述和本地分类规则做出推理。换句话说YOLO负责把像素变成结构化线索大模型负责把结构化线索变成处置建议。这套组合避开了“让检测模型干语义推理”的死路也避开了“让大模型逐帧识别图片”的天价成本开销。1.3 我做这套系统的整体判断综合下来我的结论是项目不能做成“一个YOLO模型扛到底”也别做成“把视频直接扔给多模态大模型”。前者处理不了状态语义后者在智慧城市场景里无论是成本还是延迟都扛不住。更合理的路径是两段式前端目标检测做候选框筛选和特征结构化后端大模型做决策兜底和边缘案例解释。系统里80%的场景靠YOLO规则就能闭环剩下20%的疑难杂症才需要走大模型接口。这样既保证了实时性也保留了推理能力。2. 整体架构YOLO负责看大模型负责定2.1 一条图像从摄像头到处置结论的完整链路我这套系统在试点里跑通的时候链路大致分成七步每一步各干各的活互不抢戏。第一步是视频接入。摄像头通过RTSP协议把画面推给边缘盒子不管是监控枪机还是回收箱内部短焦相机统一走同一个接入层。边缘盒子里面先跑一个抽帧模块默认每秒处理两到三帧防止画面静止时做无意义的重复计算。如果检测到画面有较大变化比如有人走近投递口就临时提高抽帧频率。第二步是图像预处理。把原始帧统一缩放和归一化输入尺寸固定为640乘640颜色空间转成YOLO需要的RGB格式。这个小步骤看着不起眼但它直接影响推理精度很多现场特效问题都是这里出的摄像头默认输出是横屏16比9直接resize成640x640会把物体压变形所以我在预处理里先做等比缩放再补灰条填成方形而不是硬拉伸。第三步是YOLO推理。这一步只做目标检测不掺杂任何业务逻辑。模型输出的原始结果包括边界框坐标、类别编号、置信度。我在项目里用的是YOLOv8架构的权重导出成ONNX以后再转TensorRT部署在边缘盒子GPU上单帧推理耗时大概二十毫秒上下完全能满足实时要求。第四步是后处理。非极大值抑制是必做的把重叠框收敛掉再根据置信度阈值筛掉明显误检。这一步结束之后画面里哪些位置有垃圾、属于哪个中间类别、模型有多确定这些信息就全部落实了。第五步是规则引擎。我提前把各地分类规则做成了一张配置表规则引擎会先根据YOLO类别和置信度做快速判断。置信度足够高的直接映射成最终四分类结果这一单不进大模型。只有规则引擎觉得“拿不准”的才会走到下一步。第六步是大模型调用。系统把当前帧的结构化检测结果、设备所在场景、本地分类规则整理成一段上下文发给DeepSeek接口让它对疑难目标做一次带理由的决策返回JSON格式的结果。第七步是结果落库和响应。无论哪条路径产生了结论都会写入结果表同时通过网络推送到回收箱控制板、分拣线PLC或者管理后台。如果是人工巡检场景还会附带一张裁剪出来的目标图片和一个“置信度”标注方便复核。这七步拆开之后每一块都能单独调试比如YOLO换权重不影响规则引擎DeepSeek换模型不影响检测链路。这种松耦合结构在试点阶段帮我省了很多事。2.2 双阈值调度高置信直接出低置信才问大模型系统里最重要的一个设计决策是“什么时候该调用大模型”。我最后用的是双阈值加冲突检测的策略不是一刀切。YOLO输出的置信度天生是一个很好的调度信号。我在配置里设了两个阈值高阈值是0.85低阈值是0.55。置信度达到0.85以上的检测框直接采用YOLO类别对应的最终处置建议不进大模型置信度在0.55到0.85之间的检测框先用规则引擎查本地映射关系只有规则映射不出来或者映射结果和相邻目标冲突的才发起大模型调用置信度低于0.55的检测框基本可以认为是可疑目标系统会先把目标裁剪出来单独记录再连同整张画面一起送入大模型让它结合周围物品来判断那到底是什么。还有一个值得提的触发条件是“多目标类别冲突”。比如同一帧画面里出现了一个饮料瓶和一节电池瓶子置信度高、电池置信度中等规则引擎能分别判断但人眼一看就知道这属于混合垃圾不应该用同一个处置动作。我把这种场景也定义为低置信决策送入大模型让它给出分拣建议避免机器在流水线上用一个吸盘把两种东西一起抓走。实际跑下来这个调度策略把大模型调用占比控制在全部检测帧的15%左右大量重复出现的正常垃圾走YOLO加规则就够了。成本可控响应也更稳定屏幕上给市民的反馈基本在一秒内出来。2.3 数据结构与缓存设计链路跑通以后如果不做数据结构设计后续排查会非常痛苦。我在结果表里存了这几样核心字段设备ID、时间戳、请求帧号、边界框坐标、YOLO类别、置信度、调度来源、最终分类、决策理由、大模型响应原文、耗时。来源字段特别重要它标记了这一条结果是“yolo_direct”“rule_mapping”还是“llm”后面复盘准确率和调阈值时全靠它。另外我加了张结果缓存表。大模型调用并不便宜而且很多重复场景根本不需要反复推理。同一设备同一个摄像头在半小时内出现同样类别的低置信目标我直接用之前缓存过的最终分类只在理由里标注“依据缓存”。这里缓存键用的是设备ID加检测类别的组合而不是图片本身操作上更简单也不容易误伤不同场景下的同类垃圾。3. YOLO模型训练从数据集到可部署识别器3.1 数据集的来源、类别设计和标注规范我最早想直接用公开垃圾分类数据集后来发现公开数据能满足场景覆盖但自己对现场环境没底。最后采用的是公开数据加自采数据的混合方案自采数据占了三成左右全部来自目标投放点的实际效果。类别设计上我踩了一个重要过的坑不要直接按最终四分类去标注YOLO数据集。四分类是“可回收物、有害垃圾、厨余垃圾、其他垃圾”这类标签抽象度太高同一个“其他垃圾”标签下面可能是一块脏抹布、一个破陶瓷杯、一片用过卫生纸视觉特征完全不统一。模型学这种标签会越学越糊涂。我改成标注18个“中间类别”比如饮料塑料瓶、玻璃瓶、金属罐、纸箱、纸张、塑料袋、厨余残渣、织物、电池、过期药品、陶瓷碎片等等每个中间类别对应到后续的规则映射。中间类别和最终分类之间用配置表解耦换一个城市的分类规则只需要改配置表不用重新训练模型。标注规范也要提前定死。我在项目里要求边界框尽量贴着物体边缘遮挡超过百分之六十的物体不标同一张图里多个同类目标能分开就分开标实在重叠严重才合并轻度脏污、破损的物体都要正常标这是模型在现场能不能扛住的关键。标注完还要做一轮抽检抽检比例不低于百分之十否则同一张图被不同标注员贴上两个不同类别的概率会高到让你怀疑人生。3.2 模型规格怎么选YOLOv8n还是YOLOv8m模型选型这件事我盘点过三档方案按边缘盒子还是服务器分两种情况看。模型规格参数量推理速度特性适用位置我的选型建议YOLOv8n最小边缘端最快十几毫秒级别小区垃圾箱、巡检车边缘盒子先拿它做POC确认流程能跑通YOLOv8s中边缘端稍慢但精度更好带GPU的回收箱、分拣线工位现场场景复杂时往上提一档YOLOv8m较大边缘端吃力适合服务器集中处理机房、批量巡检图片离线分析追求准确率且不在乎设备成本时用我自己的路线是先上YOLOv8n把demo跑通观察哪些类别容易混淆、哪些场景漏检严重然后用YOLOv8s在同样的数据集上训练做正式版本。正式版本部署时再转成TensorRT用半精度推理降低延迟。有人会觉得直接上大模型稳妥但边缘盒子的显存和算力摆在那里越快越稳。在训练参数上我固定用640输入尺寸批量大小按显卡显存尽量调大训练轮数先给两百轮同时打开早停防止过拟合。数据增强这块我加了mosaic、轻微旋转、饱和度抖动、亮度抖动和随机仿射。特别有用的一项是在训练集中加入大量夜间低照度模拟图因为很多回收箱摄像头在傍晚和雨天效果很差模型如果只在明亮日光下训练现场一换场景就崩。3.3 训练后必须做的现场适配模型在实验集上漂亮没有任何意义现场摄像头一拍才是真正的考试。我第一次部署时遇到一个很典型的坑小区回收箱用的是广角短焦相机画面里的物体比训练集中的小很多结果模型对稍远位置的小垃圾几乎全部漏检。后来把训练图像按现场相机分辨率做了一次随机下采样让模型习惯小目标的尺寸同时把推理输入从640加大到800漏检情况明显改善。还有就是类别不均衡。电池、过期药品这类有害垃圾样本量很少模型会倾向于把它们预测成背景或者相似外观的普通物品。我的做法是给少样本类别提高权重同时用根本后的数据增强扩展这类样本的形态别让模型只认识“崭新电池”的照片沾满灰尘的、生锈的、被压扁的也要有。效果在有害垃圾分类上提升很显著漏检率降了一截。模型训练阶段最耗费时间不是训练本身而是反复“标数据、训练、现场测、发现新漏检、补数据”的循环。每轮循环之后记下新样本的采集位置和时间能帮你逐渐摸清现场垃圾分布的规律后续做规则引擎时心里才有底。4. 接入DeepSeek把最后一棒接到位4.1 决策层为什么用DeepSeek信号检测之后我只会在两种情况下把问题交出去一是YOLO置信度处于灰色区间二是有多目标冲突。这时候后台决策层就轮到DeepSeek出手。选择DeepSeek是综合了几个现实因素的。第一是成本项目里垃圾检测量不是每天几百次而是成千上万次如果所有低置信样本都走商用多模态大模型费用撑不住。DeepSeek接口的文本处理成本相对低而且支持结构化输出直接返回JSON省了让模型说一大堆再解析的麻烦。第二是中文语境能力垃圾分类规则和处置建议都是用中文重的模型对“沾了油的纸箱”“有残留的饮料瓶”这类描述理解得比较到位能生成让人看得懂的理由。第三是它在文本决策上有足够的推理能力不要求它看懂图片只需要咀嚼文字线索就能给结论这正好匹配我这个系统“只传结构化信息不传原图”的设计对带宽和隐私也更友好。不过要说明白如果哪一天你决定直接把裁剪出来的垃圾图片发过去做视觉推理那就要换成支持视觉的多模态模型。我这边坚持传文本有两个原因一是推理速度更快二是所有决策依据都写在文本里未来审计和复盘容易得多。视觉判断这种活就留给YOLO不要两头捞。4.2 提示词模板与调用方式提示词是这个项目里被低估的一个工作项。我一开始随便写了一句“请判断这个是什么垃圾”效果一团糟模型经常自创分类。后来把模板改成了固定结构情况才稳定下来。下面是我就用的提示词骨架你是智慧城市垃圾分拣系统的决策引擎。系统会给你当前设备环境和目标检测结果请你根据本地垃圾分类规则给出最终处置建议。 本地规则配置 - 可回收物塑料瓶、纸箱、金属罐、玻璃瓶等干净无污损物品 - 厨余垃圾剩菜剩饭、果皮、茶渣等易腐生物质 - 有害垃圾电池、过期药品、灯管等危险废弃物 - 其他垃圾受污染纸类、陶瓷碎片、用过卫生用品等 目标检测结果 [检测目标1] 类别塑料瓶置信度0.78备注瓶内看见残液 [检测目标2] 类别电池置信度0.66备注表面锈蚀严重 请逐一对目标输出最终分类只输出JSON数组字段为name、final_category、reason。final_category必须取自上面四个种类reason不超过20个字。代码调用侧我用的是Python异步请求超时设成三秒最多重试两次避免大模型慢响应把主链路堵住。温度参数调到0让它只做精确定性不要发挥。模型返回的JSON我还会做一层校验。final_category必须出现在白名单里reason不能为空name需要跟输入目标对得上。任何一项不满足这条结果就视为失败走规则引擎的默认映射兜底而不会信一个大模型花钱买来的错误答案。4.3 一次调用失败不代表系统失败大模型接口毕竟是外部依赖网络波动、服务拥堵都可能发生。不能因为一次超时就让整个回收箱停摆。我设计了三级降级策略第一级DeepSeek返回正常直接采用第二级超时或解析失败回退到YOLO高置信类别映射虽然可能少一点语义判断但至少能给出处置方向第三级连YOLO置信度都不够那就返回“待人工复核”把图片和检测结果存进待处理队列同时通知后台管理员。降级逻辑用独立模块管理跟主流程解耦线上运维轻松很多。另外要留意重复调用。同一个设备对着同一个投放口一天内出现几十个同类低置信目标如果每次都调大模型既慢又烧钱。我在缓存表里加了期限策略一个设备在十五分钟内对同一检测类别的低置信结果直接复用上次的大模型结论。缓存命中率大概能到百分之四十成本砍了一大截。5. 智慧城市里的三种落地形态5.1 智能回收箱引导投放比自动分拣更重要小区里最常见的落地形态就是智能回收箱。箱体投递口上方安装一个近场相机居民靠近并打开投递口时相机抓拍投入的物品系统快速判断然后打开对应仓门。置信度高的直接自动落桶置信度不高时屏幕上会显示“根据AI识别这看起来像是污染纸类建议投其他垃圾是否继续”让居民确认或手动纠正。这种场景对准确率的容忍度比分拣线高一些因为人要参与闭环但绝不能露出明显的低级错误。大模型在这里的价值更多是生成一句平易近人的提示语而不是机器冷冰冰地显示“类别其他垃圾”。我用DeepSeek返回的reason字段直接拼进提示语比如“瓶内有残留液体请倒空后再投放”居民普遍反馈比单纯开合仓门更友好。这个细节也是转人工复核量下降的一个重要原因。5.2 分拣流水线实时坐标比语义推理更吃紧中转站的机械臂分拣场景跟回收箱是两回事。皮带上废品连续移动机械臂需要在几百毫秒内决定抓不抓、抓到哪里。这个场景主要靠YOLO的实时定位大模型根本来不及下场。我这里把置信度阈值调高到0.9只有高置信目标才触发机械臂动作低置信目标一律先分流到滞留区。滞留区的目标会拍一张慢速特写后台异步调用DeepSeek做二次判断。也就是说大模型不抢机械臂的实时决策权而是做“离线复核和误判分析”。试运行一段时间后我用这些复核数据统计出哪些类别的实时置信度总是偏低再把对应类别的样本加进训练集回炉让YOLO逐步提升。这个“异步大模型复盘”机制比分拣线硬等API响应高效得多。5.3 巡检车和人工上报移动场景下的语义报告另一种落地形态是移动巡检车车顶装相机沿街拍摄系统识别路面垃圾并自动生成事件工单。车上边缘盒子跑YOLO发现马路牙子边上有散落物就把目标框、场景位、坐标时间存下来等车辆回到有稳定网络的位置再由后台批量调DeepSeek生成处理建议。这个场景特别适合大模型发挥因为它生成的内容不只是“可回收物”一个标签而是一条完整的工作说明比如“路边发现一个金属罐建议清理并回收可能伴随附近垃圾桶满溢”。管理者直接拿到能转派任务的工单描述比一张孤立照片有效得多。5.4 不同城市分类规则不一致的适配问题做智慧城市项目一定绕不过一个问题各地对垃圾分类的定义细节不完全一样。一个城市认为是可回收物的陶瓷碗另一个城市可能按其他垃圾处理。这个矛盾我在设计初期就考虑了系统里有一张“中间类别到桶类”的映射表同一个YOLO中间类别在不同设备配置下会映射成不同结果。中间类别城市A规则城市B规则塑料饮料瓶可回收物可回收垃圾脏污塑料袋其他垃圾其他垃圾陶瓷碎片可回收物单独投放点其他垃圾映射表稳定之后DeepSeek的提示词也把本地规则配置作为上下文注入。模型不自己猜规则它只根据给它的配置做决策。这也避免了大模型在不同城市之间乱编标准真正做到了“一套视觉模型多套决策规则”。6. 踩坑记录与排查速查表6.1 我踩过的几个坑第一个坑是标注不一致。项目刚开始找了几个人同时标数据没有统一规范同一张“沾了泥的纸箱”有人标“纸箱”有人标“脏纸”还有人直接标“其他垃圾”。YOLO训练出来以后这两个标签互相干扰模型预测结果在两类之间反复横跳。后来我把所有标注员集中起来做了半天规则培训又加了抽检差一点就把这个隐患带进线上。第二个坑是置信度阈值调得太激进。一开始觉得既然有大模型兜底YOLO置信度阈值干脆调到0.5以下把所有可疑目标都送大模型。结果API调用量大爆炸高频时段排队严重延迟从几百毫秒涨到几秒回收箱屏幕转圈。把阈值回调到0.55之后低置信目标数量减少了约六成系统负担回归正常。第三个坑是夜间识别。夜间的白色垃圾袋在红外补光下反光严重YOLO把墙面照射光斑误检成垃圾。这个问题靠换相机解决不了我最后是在训练集里加入大量红外补光图像同时在后处理里加了“目标不能紧贴图像边缘”的规则误检才降下来。第四个坑是大模型的“一本正经胡说八道”。有一次它把“金属罐”判成“有害垃圾”理由是“金属罐可能含有工业残留”虽然语义上能自圆其说但基层工人只会觉得很荒谬。后来我在提示词里加了严重约束要求它只依据规则配置判断不补充规则之外的潜在风险同时加了输出白名单校验不合法就直接降级。第五个坑是外部接口抖动。DeepSeek接口连续超时那会儿我的系统因为没有降级逻辑回收箱一直卡在“等待AI判断”状态。第二天我立刻补了三级降级和重试机制从此这类问题再没有影响过主线流程。6.2 排查速查表症状可能原因快速排查解决手段YOLO漏检严重目标在画面里偏小保存一帧原图看目标尺寸是否小于训练尺寸的代表调大输入分辨率或在训练中加入随机下采样夜间误检增多红外反光干扰记录误检帧的时刻和画面亮度扩充红外夜间样本加边缘位置过滤大模型返回分类不在白名单提示词约束不够查看模型原始输出文本加枚举白名单校验失败降级API频繁超时网络波动或并发过高看请求监控和超时日志加异步队列、指数退避重试、缓存复用同一目标出现多个框NMS阈值太低查看后处理输出调高NMS的IoU阈值到0.5左右规则引擎映射结果和当地规定不符映射表配置错误检查配置表该中间类别对应项修正映射重新发布配置模型在换摄像头后精度下降图像色彩和尺寸分布差异大对比两个摄像头的截图像素分布用现场数据增强或微调一个小批次6.3 整体效果与简单成本账试点跑了一阵之后我这套系统在置信度大于0.85的样本上YOLO直接决策占比大约在八成左右低置信样本送大模型之后最终分类准确率比单纯用YOLO类别映射高出来不少整体误判率大概降了六个百分点。成本端每天几千次检测里真正走大模型调用的只占一小部分配合缓存之后日均接口费用完全可以忽略大头反而花在边缘盒子和标注人工上。最后再分享一点个人体会整套系统第一次联调跑通的时候我盯着屏幕上那条“塑料瓶 0.78置信度 瓶内有残留 建议倒空后再投放”的记录看了很久最大的感触是这套系统里没有哪个环节是真正完美的。YOLO会漏检DeepSeek会偶尔超出预期地解释规则引擎也挡不住各地条例的分歧。真正让系统稳住的是每个环节之间留出的“兜底缝隙”检测置信度不够有规则接住规则判断不了有大模型接住大模型失败有降级策略接住。分层兜底比任何单点优化都重要。做这种“目标检测大模型”组合项目我现在的习惯是把每一次大模型调用都留痕定期回看那些“模型给了新理由”的记录。很多你以为需要加训练样本的问题最后只是提示词描述不清或规则映射表缺了一行而已。让视觉模型和大模型各自干自己擅长的事少掺和对方这个思路放到你手头的同类项目里大概率也能少走不少弯路。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询