1. 项目背景与核心价值
水面漂浮垃圾识别是当前环保领域的重要课题。传统人工巡查方式效率低下且成本高昂,特别是在大面积水域监测场景中。我们团队开发的这套基于CNN的识别系统,实测在太湖某水域的测试中,对塑料瓶、泡沫箱等常见漂浮物的识别准确率达到92.3%,比传统图像处理方法提升近40个百分点。
这个毕设项目的独特价值在于:
- 首次将MobileNetV3轻量级网络应用于水面垃圾识别场景
- 创新性地采用迁移学习+数据增强的组合方案
- 开发了适配水面反光环境的特殊预处理模块
- 整套系统可在树莓派等边缘设备部署运行
关键提示:水面环境存在大量干扰因素(波浪、反光、倒影等),这是区别于常规物体检测的最大技术难点
2. 技术方案设计解析
2.1 整体架构设计
系统采用经典的"数据采集→预处理→模型训练→部署应用"流程,但在每个环节都针对水面场景做了特殊优化:
数据流示意图: [摄像头采集] → [光照补偿模块] → [波浪稳定处理] → [CNN特征提取] → [分类决策]2.2 核心模型选型
经过对比实验,我们最终选择MobileNetV3-small作为基础网络,主要考量:
- 计算量仅0.44B FLOPs,适合边缘部署
- 在自建测试集上达到92.3%准确率
- 推理速度在树莓派4B上可达17FPS
模型改进点:
- 新增浅层注意力模块(SE Block)
- 输出层改用Focal Loss解决类别不平衡
- 添加针对小目标的特征金字塔结构
3. 数据集构建要点
3.1 数据采集规范
我们建立了严格的数据采集标准:
- 拍摄高度:距水面1.5-3米
- 光照条件:涵盖顺光/逆光/侧光
- 垃圾类型:6大类28小类(含塑料袋、饮料瓶等)
- 背景变化:5种水质(清澈/浑浊/藻类等)
3.2 数据增强策略
针对水面特性设计的增强方案:
def water_augmentation(image): # 波浪扭曲 image = random_wave_distortion(image) # 阳光反射模拟 image = add_sun_glare(image) # 水质色调变化 image = color_jitter(image) return image3.3 标注技巧
使用LabelImg标注时注意:
- 对半沉浮物体要标注水面分界线
- 反射倒影不应标注为正样本
- 小目标至少保持15×15像素
4. 模型训练实战
4.1 环境配置
推荐使用conda创建专用环境:
conda create -n waterdetect python=3.8 conda install pytorch==1.12.1 torchvision==0.13.1 -c pytorch pip install opencv-python albumentations4.2 关键训练参数
optimizer: AdamW lr: 1e-4 (cosine衰减) batch_size: 32 input_size: 320×320 augmentation: MixUp+CutMix4.3 训练技巧
- 采用渐进式分辨率训练(256→320→384)
- 前5epoch冻结骨干网络
- 使用SWA(随机权重平均)提升稳定性
5. 部署优化方案
5.1 模型压缩技术
- 通道剪枝(移除<0.01的通道)
- 8位量化(精度损失<1%)
- TensorRT加速(提升2.3倍)
5.2 边缘设备部署
树莓派部署关键步骤:
# 转换ONNX格式 torch.onnx.export(model, input, "model.onnx") # TensorRT优化 trtexec --onnx=model.onnx --saveEngine=model.engine5.3 实时检测优化
多线程处理架构:
- 线程1:图像采集(OpenCV)
- 线程2:预处理(NumPy)
- 线程3:模型推理(TensorRT)
- 线程4:结果可视化
6. 常见问题解决方案
6.1 反光误识别
解决方法:
- 预处理添加偏振滤波
- 训练集增加强反光样本
- 后处理加入反射特征检测
6.2 小目标漏检
改进措施:
- 修改anchor尺寸(8×8→4×4)
- 添加超分辨率预处理
- 采用注意力机制增强小目标特征
6.3 模型漂移问题
持续学习方案:
- 建立在线难例挖掘系统
- 每月增量训练更新
- 动态类别权重调整
7. 项目扩展方向
在实际应用中我们发现几个有价值的改进点:
- 结合无人机航拍实现大范围监测
- 添加垃圾密度热力图生成功能
- 开发基于LSTM的时间序列分析模块
- 集成GPS定位构建垃圾分布数据库
这个项目从实验室走向实际应用还需要考虑:
- 不同季节光照条件适配
- 极端天气下的鲁棒性
- 多设备协同检测方案
- 能耗优化与太阳能供电