ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

垃圾分类 CV 六阶段实战:从需求说明书到反馈飞轮,准确率之后还有部署与监控

垃圾分类 CV 六阶段实战:从需求说明书到反馈飞轮,准确率之后还有部署与监控 1. 引言走一遍 AI 学习之路 —— AI实例系列说明系列I中的“垃圾识别分类”一文中使用计算机视觉创建一个简单的工具,将垃圾分类为有机垃圾或可回收垃圾,以简化垃圾管理流程。本文可以理解为是对上一篇的优化:改进了项目的6阶段,并且对“部署应用”和“监控迭代”阶段进行了完善。 适合:AI 项目入门、想把「训个模型」升级成「可交付闭环」的读者 技术栈:Python / TensorFlow·Keras / MobileNetV2 迁移学习 / Jupyter Widgets 案例定位:**图像二分类**(Organic / Recyclable)+ 课堂级部署与监控,不是工业分拣产线2. 概述很多人做图像分类,停在「准确率好看」。本案例刻意把培训统一的六阶段填进一个可运行的垃圾分类 Notebook:阶段本案例落点需求定义准确率≥90%、响应≤2秒、模型≤20MB数据工程Kaggle 数据 + 探索/增强/类别权重算法建模MobileNetV2 + ImageNet,主线冻结骨干评估验证准确率 + 混淆矩阵 / P·R·F1部署发布Jupyter 上传预测监控迭代对/错反馈落盘 → 可选纠错微调系统流程:图片 → 缩放归一化 → MobileNetV2 特征 → Dense(sigmoid) → Organic / Recyclable →(部署)人工点对/错 → feedback.csv →(可选)回流微调3. AI项目周期6个阶段详解3.1 阶段1:需求定义3.1.1 问题定义大多数垃圾最终进入填埋场,导致环境污染。因此,我们希望使用计算机视觉创建一个简单的工具,将垃圾分类为有机垃圾(Organic)或可回收垃圾(Recyclable),以简化垃圾管理流程。项目目标:这三条直接指向:轻量网络 + 迁移学习(MobileNetV2),而不是从零训巨型 CNN。使用计算机视觉将垃圾分类为有机垃圾和可回收垃圾不是「做一个聪明分拣机」,而是可验收说明书又准:准确率 ≥90%;又快:≤2 秒/张(普通 CPU 可接受);又小:模型 ≤20MB3.1.2 关键技术:迁移学习迁移学习(Transfer Learning)是一种机器学习技术,它利用在一个任务上训练好的模型来解决另一个相关任务。迁移学习的优势:快速训练:不需要从零开始训练,可以快速获得好效果数据需求少:即使数据量较少,也能获得较好的性能计算资源少:可以使用预训练模型,减少计算资源需求MobileNetV2:轻量级卷积神经网络适合移动端和边缘设备在ImageNet上预训练,特征提取能力强模型小(约8MB),推理速度快3.2 阶段2:数据工程新的阶段划分把「数据获取」「数据分析」合并为数据工程,主要任务如下:下载与校验:train/test/validation,O/R 目录探索:分布、样本、是否不平衡预处理:验证集划分、数据增强、ImageDataGenerator类别权重:compute_class_weight('balanced'),让少数类在损失里更「贵」3.2.1 环境准备在开始项目之前,需要安装必要的库:required_libraries = { "numpy": None, "pillow": None, "keras": None, "tensorflow": None, "tqdm": None } from utilities.utils import check_and_install check_and_install(required_libraries)3.2.2 导入软件依赖库import os import pandas as pd from PIL import Image # 路径配置 project_dir = os.getcwd() data_path = os.path.join(project_dir, "sample", "data") # 数据目录结构 train_data_path = os.path.join(data_path, "train") train_data_path_organic = os.path.join(train_data_path, "O") train_data_path_recyclable = os.path.join(train_data_path, "R") test_data_path = os.path.join(data_path, "test") test_data_path_organic = os.path.join(test_data_path, "O") test_data_path_recyclable = os.path.join(test_data_path, "R") # 统计数据量 train_o_count = len([f for f in os.listdir(train_data_path_organic) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]) train_r_count = len([f for f in os.listdir(train_data_path_recyclable) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]) print(f"训练集 - Organic: {train_o_count} 张, Recyclable: {train_r_count} 张")知识点:数据集按类别组织在子目录中(O=Organic, R=Recyclable)使用os.listdir()统计文件数量3.2.3数据说明数据集信息:数据集名称:Waste Classification Data来源:Kaggle链接:Checking your browser - reCAPTCHA许可证:CC BY-SA 4.0数据量:约25,000张图片类别:2类(Organic, Recyclable)3.2.4 数据探索和可视化# ============================================ # 阶段2:数据工程 - 数据探索和可视化 # ============================================ def explore_dataset(): """探索数据集:分布、样本展示""" print("=" * 60) print("数据分析阶段 - 数据探索") print("=" * 60) # 1. 数据分布统计 print("\n1. 数据分布统计") print("-" * 60) train_o_count = len([f for f in os.listdir(train_data_path_organic) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]) train_r_count = len([f for f in os.listdir(train_data_path_recyclable) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]) test_o_count = len([f for f in os.listdir(test_data_path_organic) if os.path.exists(test_data_path_organic) and f.lower().endswith(('.png', '.jpg', '.jpeg'))]) test_r_count = len([f for f in os.listdir(test_data_path_recyclable) if os.path.exists(test_data_path_recyclable) and f.lower().endswith(('.p
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进