Avatar
Mama Cup · Task 2 · Computer Vision

YOLOv8
缺陷检测

妈妈杯大数据挑战赛参赛项目。从零学习 YOLO 原理,基于 YOLOv8s 搭建工业缺陷检测系统,识别金属表面凹陷、破洞、锈蚀三类缺陷,最终撰写竞赛论文完成闭环。

YOLOv8s Anchor-Free mAP50 80.3% 3 Classes
3713
Annotated
Samples
100
Training
Epochs
80.3
mAP50
Score
3
Defect
Classes
The Problem

三缺一不可:凹陷 · 破洞 · 锈蚀

工业场景中,金属板材和管线表面缺陷直接影响安全性与产品良率。赛题要求设计模型同时定位缺陷位置并判定类别——典型的 multi-class object detection 任务,而非简单的图像分类。

Dent 凹陷
Hole 破洞
Rusty 锈蚀
psychology

Why YOLOv8s?

调研 YOLO 系列 v1→v8 的技术演进后锁定 v8s。三个决定因素: ① Anchor-Free 检测头无需预设 anchor 尺寸——工业缺陷形状多变,预设锚框反而限制泛化; ② C2f 模块(CSP Bottleneck + ELAN)在精度-速度权衡上超越前代 C3; ③ Ultralytics 训练框架提供开箱即用的 Mosaic/混合精度/自动优化器,将精力集中到数据质量与超参调优。

"YOLO 的核心哲学——You Only Look Once——不只是工程优化,更是认知范式的转变:将检测重新定义为回归问题,单次前向传播即输出所有边界框与类别。这与 R-CNN 系列的 two-stage proposal→classify 形成了根本性的路线分歧。"

Architecture

YOLOv8 解剖:Backbone · Neck · Head

01

Backbone · 特征提取

C2f + SPPF 构建多尺度特征金字塔

C2f 模块是 YOLOv8 的关键创新:将 CSP Bottleneck 的输出切分——一半直通、一半经 N 个 Bottleneck 处理后拼接。相比 v5 的 C3,梯度路径更丰富,轻量级特征复用效率更高。

SPPF(Spatial Pyramid Pooling Fast)用 3 个级联 5×5 MaxPool 替代 SPP 的并行多尺度池化,计算量减半但感受野等效。最终输出 P3(×8)、P4(×16)、P5(×32) 三个尺度特征图。

02

Neck · 双向特征融合

PAN-FPN:自上而下的语义注入 + 自下而上的定位回传

FPN 路径(上采样 + 拼接):将 P5 的高层语义逐层向上传递,让小特征图(P3)也能感知全局上下文——对大面积锈蚀的识别至关重要。

PAN 路径(下采样 + 拼接):将低层定位信息回传给高层,弥补 FPN 单向传递导致的浅层细节丢失——对小型凹陷的精准定位不可或缺。

03

Head · Anchor-Free 解耦检测

CIoU + DFL 双重损失,分类与回归分道扬镳

Anchor-Free是 v8 最激进的设计决策。不再手工预设锚框尺寸和比例,网络直接回归 bbox 中心点到四边距离。这对工业缺陷检测尤为关键——缺陷形状从近圆形(破洞)到细长形(划痕),固定锚框无法覆盖所有形态。

Decoupled Head将分类和回归任务拆为两个独立卷积分支。分类关注"这是什么",回归关注"这在哪"——两者的特征偏好天然冲突(纹理 vs 边缘),解耦后各取所需。CIoU Loss同时优化重叠面积+中心距+长宽比,DFL将边框回归概率化。

Training Pipeline

从标注到收敛:完整训练管道

dataset

数据工程

3713 张标注图片,VOC 格式存储。编写 Dataset_partitioning.py 脚本自动解析 XML 标注文件,按 8:2 随机切分训练/验证集,生成路径列表 txt。

you.yaml 中定义 nc=3, names=['Dent','Hole','Rusty']。10 种数据增强同时开启——Mosaic 拼接、Random Augment、HSV 抖动、翻转、平移、缩放、Random Erasing。数据增强在此不是锦上添花,而是小样本训练的生存前提

tune

训练配置

Pretrainedyolov8s.pt(COCO 预训练 → 迁移学习)
Epochs100 · Batch 32 · Image Size 640×640
OptimizerAuto(自适应 SGD/AdamW)· lr₀=0.01 · momentum=0.937 · weight_decay=5e⁻⁴
SchedulerWarmup 3 epochs · Cosine LR off(线性衰减)· close_mosaic=10
HardwareNVIDIA GPU (device=0) · AMP 混合精度 · cache=true 预加载
Key TuningMosaic 前 10 epoch 后关闭(防止后期退化)· warmup 避免 loss 震荡 · weight_decay 正则化
Results

实验数据看板

80.3%
mAP50
77.1%
Precision
74.3%
Recall

类别差异分析

三类缺陷检测效果分化显著:大面积锈蚀和明显破洞的 AP 超过 0.85,但微小凹陷的漏检率偏高。凹陷仅表现为微小几何形变,在 640×640 的输入分辨率下特征不够显著——这是工业缺陷检测的经典难题。论文中重点讨论了数据增强策略对这一偏差的缓解效果:Mosaic 将 4 张图拼接成 1 张,强行打破目标中心偏置,对小目标召回有立竿见影的提升。

description

竞赛论文

100 epoch 训练完成后,撰写完整竞赛论文——问题建模 → 方法选择 → 实验设计 → 结果分析四章结构,特别讨论了 Anchor-Based 到 Anchor-Free 的技术路线演进。

Key Insights

三件事,彻底改变了我对计算机视觉的理解

compare_arrows

Classification
→ Detection

从 LeNet/ResNet 的图像分类(单图→单标签)到 YOLO 的目标检测(单图→数百个预测框),不是"更难的分类",而是从 single-output 到 multi-output dense prediction 的范式跃迁。每个格子预测 B 个框×(4 坐标+1 置信度+C 类别),输出维度暴涨。亲手实现这个转变,才真正理解了为什么目标检测是 CV 领域最具挑战性的任务之一。

auto_awesome

Data Aug
is Regularization

10 种增强同时开启——在分类任务中属于过拟合标志,在检测中却是标准操作。因为检测模型的天然偏置是"目标总在图片中心",Mosaic 拼接强行打破这个空间偏置。更微妙的是 close_mosaic=10 这个超参:一直开着 Mosaic,后期在正常尺寸图片上反而退化——因为模型从未见过"纯净"的图片分布。这个发现来自逐 epoch 对比验证集的 PR 曲线,而非读完论文就能预料到。

edit_note

Writing
Drives Understanding

竞赛要求提交正式论文,这迫使回答"为什么 YOLOv8s 而非 YOLOv8n?""为什么 Anchor-Free 优于 Anchor-Based?"——当你必须用学术语言解释方法选择时,自然会去读 C2f vs C3 的架构差异源码,而非停留在"大家都这么用"的层次。写作反向推动了理解——这是我在这场比赛中学到的最重要的一课。

trophy

妈妈杯大数据挑战赛 · Task 2

从数据标注到模型训练,从超参调优到论文撰写——一次完整的目标检测竞赛实战。

arrow_back Back to Works