UAV Feeding-device Detection & Land Segmentation Fusion
无人机投粮器检测与地块语义分割组合项目
从 4K 无人机影像、小目标检测、语义分割,到跨模型坐标融合与云端部署设计的一套完整视觉工程实践。
项目概览
该项目面向无人机鱼塘巡检场景,解决两个尺度差异明显的问题:
- 使用 YOLOv8n 在 4K 航拍图中定位面积很小的投粮器;
- 使用 SegFormer-B2 识别鱼塘、施工垃圾、临时搭建物和耕作痕迹;
- 将两套模型恢复到原图坐标系,根据检测框与鱼塘掩膜的空间关系完成业务融合;
- 输出可视化、结构化 JSON、类别面积统计和后续云端部署所需的信息。
这不是简单串联两个推理脚本。项目包含 X-AnyLabeling/COCO 数据整理、训练配置复核、单 GPU 训练、参数对照、权重导出、MMEngine 注册域切换、滑窗分割、坐标对齐、连通域过滤和批量结果审计。
核心结果
投粮器检测:历史镜像验证集
| 指标 | 最佳结果 |
|---|---|
| 最佳 epoch | 40 / 80 |
| COCO mAP50-95 | 80.8% |
| mAP50 | 98.5% |
| mAP75 | 93.7% |
| 小目标 mAP | 73.8% |
| 中目标 mAP | 89.4% |
地块分割:SegFormer-B2
| 指标/类别 | IoU |
|---|---|
| mIoU | 78.98% |
| construction debris | 46.43% |
| temporary structure | 85.31% |
| cultivation trace | 73.94% |
| fishpond | 93.45% |
组合推理
| 项目 | 结果 |
|---|---|
| 验证图片 | 205 |
| 平均处理时间 | 1.443 s/image |
| YOLO 阈值 | 0.25 |
| 保留检测框 | 1,092 |
| 位于鱼塘内 | 1,055 |
| 靠近鱼塘 | 32 |
| 未关联 | 5 |
**结果解释:**上面的 YOLO 80.8% 来自训练时的历史镜像验证划分。将 epoch-40 导出权重直接用于后来标准化的 205 张 COCO 验证集时,正式评估得到 mAP=0,并观察到检测框尺度异常。这说明当前“导出权重—数据版本”存在不匹配。组合可视化证明了双框架加载、坐标恢复和空间融合流程能够运行,但不能据此宣称当前检测权重已经达到生产可用。详见 已知问题。
技术路线
flowchart LR
A["4K UAV image"] --> B["YOLOv8n<br/>feeding-device detection"]
A --> C["SegFormer-B2<br/>5-class segmentation"]
B --> D["Restore boxes to original pixels"]
C --> E["Sliding-window merge<br/>and mask restoration"]
E --> F["Debris connected-component filter"]
D --> G["Fishpond spatial association"]
E --> G
F --> H["Visualization + JSON + statistics"]
G --> H
组合逻辑保留 YOLO 的全图检测,不先用鱼塘掩膜裁剪输入,避免边缘投粮器被漏掉。检测完成后再根据框中心点判断 inside_fishpond,并使用 120 px 距离作为 near_fishpond 回退规则。
数据集
当前仓库保留标准化 COCO 标注,不公开原始航拍图片。
| 划分 | 图片数 | 标注框数 |
|---|---|---|
| train | 822 | 3,857 |
| validation | 205 | 1,017 |
| total | 1,027 | 4,874 |
检测类别只有 feeding_device。原图仍保存在受控服务器数据目录,防止大文件和项目素材被无意公开。详细格式见 数据集说明。
仓库内容
.
├─ assets/ # README 展示图与训练曲线
├─ checkpoints/ # YOLO/SegFormer 权重,使用 Git LFS
├─ configs/
│ ├─ yolo/ # 正式训练配置与组合验证配置
│ └─ segformer/ # SegFormer 配置继承链
├─ dataset/annotations/ # COCO train/validation 标注
├─ docs/ # 架构、实验、复现、限制和成果说明
├─ logs/
│ ├─ training/ # YOLO 原始训练输出
│ ├─ tuning/ # 参数对照日志
│ └─ segformer/ # SegFormer 最优实验日志
├─ results/
│ ├─ fusion/ # 融合预测、统计和代表性可视化
│ └─ metrics/ # 从原始日志提取的结构化指标
├─ scripts/
│ ├─ analysis/ # 指标提取与制品校验
│ ├─ visualization/ # 成果图生成
│ ├─ segformer/ # 分割运行与垃圾过滤
│ └─ server/ # 训练、导出、预标注、组合推理脚本
└─ metadata/ # 文件体积和 SHA-256 清单
快速阅读
快速运行
服务器采用 DJI 定制 MMYOLO 与 MMSegmentation 环境。先按 复现说明准备依赖和数据,再执行:
# YOLO 训练 bash scripts/server/run_feeding_xany_mirror_train.sh # SegFormer + YOLO 组合验证 bash scripts/server/run_feeding_combo_val_20260722.sh
组合脚本的重要推理参数:
YOLO score threshold: 0.25
near fishpond distance: 120 px
SegFormer test mode: 1024×1024 sliding crop, stride 768
construction debris min area: configurable connected-component threshold
工程亮点
- 针对 4K 航拍小目标设计 960×960 输入、单类别检测和镜像数据微调流程;
- 通过训练日志而不是最终 epoch 选择最佳权重,识别 epoch 40 后的轻微过拟合;
- 在同一进程内切换
mmyolo与mmseg默认注册域,解决两个 OpenMMLab 框架的 registry 冲突; - 将检测框和分割掩膜统一恢复到原图像素坐标,再执行空间关联;
- 使用后处理连通域面积过滤小型施工垃圾,不改变训练权重和原始 mIoU;
- 对数据版本与导出权重不匹配的问题保留原始证据,避免用“视觉上看起来正常”替代正式评估;
- 为权重、配置、日志和结果建立 SHA-256 清单,便于长期回溯。
使用边界
本仓库用于项目成果保存、技术展示和实验复现。原始航拍图像可能包含项目现场信息,因此未纳入普通 Git 历史。仓库当前设为 Private;如需公开,应再次检查原始日志、COCO 文件名和可视化图片中的现场信息。
