ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

垃圾分类 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 可接受);又小:模型 ≤20MB

3.1.2 关键技术:迁移学习

迁移学习(Transfer Learning)是一种机器学习技术,它利用在一个任务上训练好的模型来解决另一个相关任务。

迁移学习的优势

  • 快速训练:不需要从零开始训练,可以快速获得好效果
  • 数据需求少:即使数据量较少,也能获得较好的性能
  • 计算资源少:可以使用预训练模型,减少计算资源需求

MobileNetV2

  • 轻量级卷积神经网络
  • 适合移动端和边缘设备
  • 在ImageNet上预训练,特征提取能力强
  • 模型小(约8MB),推理速度快

3.2 阶段2:数据工程

新的阶段划分把「数据获取」「数据分析」合并为 数据工程,主要任务如下:

  1. 下载与校验:train/test/validation,O/R 目录
  2. 探索:分布、样本、是否不平衡
  3. 预处理:验证集划分、数据增强、ImageDataGenerator
  4. 类别权重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
返回列表