1. 项目背景与核心需求
河道污染治理一直是城市环境管理中的难点痛点。传统人工巡检方式存在效率低、覆盖范围有限、危险区域难以抵达等问题。我们团队在实际工作中发现,塑料带、饮料瓶等漂浮垃圾占河道污染源的63%以上,这些目标具有体积小、分布散、形态多变的特点。
无人机巡检为解决这一问题提供了新思路。但普通航拍图像中,小目标垃圾的识别准确率往往不足40%。经过半年多的实地测试,我们最终确定采用YOLOv8模型为核心,构建了一套适用于河道场景的轻量化识别系统。这套系统在测试集上实现了塑料带87.2%、瓶子91.5%的识别准确率,误报率控制在3%以下。
2. 技术方案选型与优化
2.1 模型架构选择
对比测试了Faster R-CNN、SSD和YOLO系列模型后,选择YOLOv8n(nano版本)作为基础架构,主要基于三点考量:
- 计算效率:无人机端需要实时处理,YOLOv8n在Jetson Xavier NX上可达32FPS
- 小目标检测:引入SPPF模块和PANet结构,对小目标更友好
- 部署便利:支持ONNX导出和TensorRT加速
模型改进要点:
- 将原Head部分的C2f模块替换为轻量化的Ghost模块
- 新增小目标检测层(160x160尺度)
- 采用SIoU损失函数替代CIoU
2.2 数据采集与标注规范
建立了一套标准化的数据采集流程:
- 飞行参数:高度30-50米,速度5m/s,重叠率70%
- 拍摄规范:晴天10:00-14:00,分辨率3840x2160
- 特殊场景:包含水面反光、阴影、波浪等干扰情况
标注规范特别规定:
- 塑料带:标注完整展开形态,最小接受20x20像素
- 瓶子:标注瓶身主体,忽略瓶盖
- 困难样本:至少3人交叉验证
最终构建的数据集包含:
- 正样本:塑料带5421个,瓶子6873个
- 负样本:水面干扰物3285个
- 数据增强:采用Mosaic9增强策略
3. 系统实现关键细节
3.1 无人机端部署优化
在DJI M300RTK上部署时遇到的主要挑战是内存限制。我们的解决方案:
- 模型量化:FP32转INT8,体积减小4倍
- 图像分块:2048x2048分块处理
- 动态推理:根据GPU温度自动调整batch size
核心参数配置:
python复制# yolov8_export.py
model.export(format='onnx',
dynamic=True,
simplify=True,
opset=12,
imgsz=[640,640])
3.2 业务逻辑处理
设计了三阶段过滤机制:
- 初筛:置信度>0.5的检测框
- 去重:基于GIS坐标的NMS(阈值0.4)
- 验证:时序连续性检查(连续3帧出现)
空间定位采用RTK+视觉SLAM融合定位,平面误差<0.3m。每个污染点记录以下元数据:
- 经纬度(WGS84坐标系)
- 污染类型及置信度
- 时间戳与图像序列号
- 估算面积(基于像素尺度换算)
4. 实际应用中的问题与解决
4.1 典型误检场景分析
在三个月试运行期间,主要出现以下误检情况:
- 水面反光(占误检的42%)
- 鸟类倒影(23%)
- 漂浮树叶(18%)
改进措施:
- 增加光谱特征判断:塑料在近红外波段反射率>65%
- 运动特征分析:垃圾移动轨迹更随机
- 多帧验证:设置最小持续时长阈值
4.2 性能优化记录
从v1.0到v1.3版本的演进:
- 推理速度:从18FPS提升到32FPS
- 内存占用:从2.1GB降低到1.4GB
- 准确率变化:
版本 塑料带AP 瓶子AP 误报率 v1.0 0.782 0.841 8.7% v1.2 0.831 0.883 5.2% v1.3 0.872 0.915 2.8%
关键优化点:
- 引入TensorRT的polygraphy自动调优
- 改用CUDA Graph减少kernel启动开销
- 实现异步的DMA数据传输
5. 工程实施经验总结
5.1 数据采集的教训
初期采集的2000张图像因以下问题报废:
- 时间不统一导致光照差异大
- 缺少高度变化(全部50米拍摄)
- 未考虑季节因素(冬季水面结冰)
改进后的采集方案:
- 分春夏秋冬四季采集
- 高度梯度:30/40/50米各1/3
- 包含晨昏时段样本(占10%)
5.2 模型训练技巧
发现有效的trick组合:
- 学习率策略:Cosine退火+ warmup 3epoch
- 优化器:AdamW(weight_decay=0.05)
- 正样本分配:TaskAlignedAssigner
- 损失权重:分类:检测:置信度=0.5:0.7:1.0
典型训练参数:
yaml复制# hyp.yaml
lr0: 0.01
lrf: 0.01
momentum: 0.937
weight_decay: 0.0005
warmup_epochs: 3
warmup_momentum: 0.8
box: 0.7
cls: 0.3
dfl: 1.5
5.3 部署避坑指南
遇到的典型问题及解决方案:
- Jetson上OpenCV冲突:
bash复制sudo apt purge libopencv* pip install opencv-python-headless - TensorRT精度异常:
在导出时添加--int8 --calib=calib_images/ - 内存泄漏排查:
使用py-spy top --pid <PID>定位问题
这套系统目前已部署在3个城市的河道巡检中,累计识别污染点1257处,相比人工巡检效率提升8倍。在实际使用中发现,模型对半沉没状态的瓶子识别率仍有提升空间,下一步计划加入侧扫声呐数据融合。
