项目复盘
YOLO-FD 病鱼检测与分割的本地复现、实验和论文整理
一次完整的病鱼检测与分割复现实验:环境适配、推理验证、阈值扫描、消融、ONNX 部署、论文材料和停止规则都留下了证据。
先补充完整背景
YOLO-FD 的重点不是结果包装,而是本地项目已经完成了从环境配置、预训练权重推理、验证集评估、阈值扫描、分割基线、ONNX 导出、离线告警链路到论文材料整理的一整套流程。
真正需要诚实表达的是另一件事:我们把链路跑通了,也做了很多严谨实验,但后续架构改动和调参没有稳定证明自己能超过接手时的强基准。因此它不适合包装成“模型效果大幅提升”的成果,更适合写成一次有数据、有排查、有停止规则的计算机视觉实验复盘。
跑通的工程链路
项目最先卡在工程环境,而不是模型想法。为了在本地 Windows 和新显卡环境下跑通 YOLO-FD,我处理了多类兼容问题:
- 梳理
requirements.txt,移除过旧的torchvision、protobuf强约束。 - 用轻量
ConvModule替代项目里对mmcv的强依赖,避开 Windows 编译问题。 - 适配 PyTorch 2.6 之后
torch.load(weights_only=True)的安全加载变化。 - 修掉源码里硬编码
.to("cuda")、device="cuda"的位置,让推理可以跟随实际设备运行。 - 成功加载
yolo-fd.pt,对demo/v1.mp4完整推理并生成结果。
这部分的价值不是“跑了一次命令”,而是把一个论文开源项目从依赖冲突、设备假设和版本变化里救出来,形成可复现实验环境。
实验和数据
后续实验不是盲目调参,而是围绕验证集、阈值、基线、部署形态和错误样本做了一组可追踪检查。
关键结果包括:
- 原始
yolo-fd.pt验证基线约为mAP50=0.9327、mAP50-95=0.7602、mIoU=0.4996。 - 阈值扫描中,
conf=0.05 / iou=0.50一组达到约mAP50=0.9359、mAP50-95=0.7799。 - 固定置信度验证中记录到约
mAP50-95=0.7823的结果。 - YOLOv8n-seg 与 YOLO11n-seg 分割基线在同类设置下明显低于 YOLO-FD 验证基线。
- ONNX 导出成功,产物约 46 MB,ONNX checker 与 ONNX Runtime CPU 推理均通过。
- 端到端离线部署基准覆盖 letterbox 预处理、ONNX Runtime 原始推理、NMS 和语义 mask 后处理,平均约 191 ms/frame,约 5.2 FPS。
- 离线告警 smoke test 在 145 张验证帧上记录到
precision=1.0000、recall=0.9929,但这只代表验证帧离线链路,不等于生产系统。
这些数据说明:项目链路是完整的,实验也是有记录的;同时也说明我们没有把验证帧 smoke test 扩大解释成真实生产部署。
架构尝试
为了改善小病灶检测,我尝试过几类结构和训练策略:
- 引入 P2 小目标检测头,希望保留更高分辨率特征。
- 加入 CBAM、ContextAggregation 等注意力和上下文模块,试图抑制水下背景噪声。
- 尝试 NWD Loss,降低小目标 IoU 对像素偏差的敏感度。
- 记录 PCGrad、不确定性权重、多任务训练、冻结/解冻策略、数据增强强度等变量。
- 使用 LLM 辅助做多轮超参数尝试,再用人工复盘纠正“冻结导致知识真空”等问题。
这里最大的教训是:复杂结构不一定带来稳定提升。加入太多模块后,预训练权重只能部分加载,新层需要从头学习;在数据规模有限、病灶很小、背景复杂的情况下,模型容量和训练难度很容易反过来吞掉收益。
论文和材料
这个项目还沉淀了论文相关材料,不只是代码实验:
- 多版论文 DOCX/PDF,包括普通论文版、全面修订版、文本格式审校版和结构语言优化版。
- 数据集统计、尺度统计、错误样本、边界 mask 错误、hard case 子集等 CSV 材料。
- 论文图表、部署告警示例、推理基准、分割质量评估和实验总结。
- 答辩材料计划和论文内容扩充任务手册。
这些材料让 YOLO-FD 更像一次完整的科研/工程训练,而不是一次随手失败的模型尝试。
复盘结论
YOLO-FD 的公开表达应该是:本地复现和实验链路完整、数据记录充分、论文材料完整;但在“是否显著超过原始强基准”这件事上要克制。
我从这个项目里真正拿到的能力,是把开源论文代码落到本机、修通环境、建立评估、做阈值和基线对照、验证部署形态、整理论文材料,并在证据不足时停止把它包装成效果突破。