一、主要知识点总结

1. 目标检测数据集格式

  • 香蕉数据集:1000张训练图 + 100张验证图,每张一个香蕉(类别0),图像尺寸256×256。

  • 标签格式(D2L方式)[class, xmin, ymin, xmax, ymax],坐标归一化到[0,1]。

  • YOLO格式[class, x_center, y_center, width, height],坐标归一化。

  • 转换关系

    • x_center = (xmin + xmax)/2

    • width = xmax - xmin

2. YOLO模型与训练

  • 使用 ultralytics.YOLO 库,加载预训练权重 yolov8n.pt

  • 配置文件 data.yaml 指定:nc=1(类别数)、names=['banana']

  • 训练参数:epochs=10, imgsz=256, batch=16, device='cuda'

  • 数据增强:mosaic(马赛克)、随机翻转、色彩抖动等。

3. 评估指标

指标 含义
IoU(交并比) 预测框与真实框重叠面积 / 并集面积,取值范围[0,1]
精确率(Precision) TP/(TP+FP)
召回率(Recall) TP/(TP+FN)
mAP50 IoU阈值0.5时的平均精度(所有类别)
mAP50-95 多个IoU阈值(0.5~0.95步长0.05)的mAP平均值,更严格

4. 非极大值抑制(NMS)

  • 作用:去除重叠的冗余预测框,保留置信度最高的框。

  • 步骤:按置信度排序 → 选择最高分框 → 移除与其IoU大于阈值的其他框 → 重复。

  • 参数iou_threshold(常用0.5)。

5. 迁移学习与微调

  • 预训练模型:在COCO(80类)上训练,可检测常见物体(包括香蕉),但对我们的小尺寸香蕉数据集可能效果不佳。

  • 微调:在预训练基础上用香蕉数据集继续训练,调整最后输出层(nc=1),显著提升特定类别检测精度。

  • 实验对比:预训练模型在COCO图上能检测到人、球等,但在香蕉图上可能漏检或误检;微调后模型能准确检测香蕉(甚至一张图中的多个香蕉)。

6. 手写实现核心算法

  • IoU计算:交集面积 / 并集面积,加极小值防止除零。

  • NMS实现:迭代保留最高分框,剔除与其IoU大于阈值的其他框。


二、考试复习题(含例题)

选择题

1. 在目标检测中,如果一个预测框与真实框的IoU为0.35,通常被认为:
A. 优秀检测
B. 有效检测(若阈值设为0.5)
C. 无效检测 ✅
D. 完美匹配

2. YOLO格式的标签文件中,一行“0 0.5 0.5 0.4 0.6”表示:
A. 类别0,中心点(0.5,0.5),宽0.4,高0.6 ✅
B. 类别0,左上角(0.5,0.5),右下角(0.4,0.6)
C. 类别0,xmin=0.5, ymin=0.5, xmax=0.4, ymax=0.6
D. 格式错误

3. 以下哪个指标对目标检测模型的性能要求最严格?
A. Precision
B. Recall
C. mAP50
D. mAP50-95 ✅

4. 非极大值抑制(NMS)中,如果IoU阈值设置得太高(例如0.9),可能导致:
A. 保留过多重叠框 ✅
B. 漏掉很多正确框
C. 计算速度变慢
D. 精确率下降

5. 在迁移学习中,使用预训练模型微调的主要好处是:
A. 不需要标注数据
B. 可以任意修改网络结构
C. 加速收敛并提高小数据集性能 ✅
D. 自动处理数据增强


填空题

  1. 香蕉数据集中,一张图像的标签格式为 [0.0, 0.2, 0.3, 0.7, 0.8],其中0.0表示 类别(香蕉),0.2表示 xmin,0.8表示 ymax

  2. YOLO标签中的 x_center 和 width 都是相对于 图像宽度 归一化的。

  3. 计算IoU时,为了防止分母为0,通常加上一个很小的数如 1e-6

  4. 在NMS算法中,首先按照 置信度(score) 对候选框降序排序。

  5. 使用 ultralytics.YOLO('yolov8n.pt') 加载的是在 COCO 数据集上预训练的模型。


简答题

1. 简述YOLO格式标签(class, x_center, y_center, width, height)与D2L格式(class, xmin, ymin, xmax, ymax)的转换公式。

设图像宽W,高H,归一化坐标:
D2L → YOLO:
x_center = (xmin + xmax)/2
y_center = (ymin + ymax)/2
width = xmax - xmin
height = ymax - ymin
YOLO → D2L:
xmin = x_center - width/2
ymin = y_center - height/2
xmax = x_center + width/2
ymax = y_center + height/2

2. 什么是非极大值抑制(NMS)?为什么目标检测中需要它?

NMS用于去除大量重叠的预测框,保留每个物体最可靠的唯一框。因为目标检测模型常对同一物体产生多个高置信度预测框,NMS通过比较IoU,只保留置信度最高的框,消除冗余。

3. 说明mAP50和mAP50-95的区别,哪个更能反映模型的精确定位能力?

mAP50 表示IoU阈值≥0.5时计算的平均精度,要求较低;mAP50-95 计算多个IoU阈值(0.5,0.55,…,0.95)下的mAP平均值,要求框与真实框非常贴合。因此 mAP50-95 更能反映模型的精确定位能力。

4. 在实验中,预训练模型在香蕉图片上可能检测不到香蕉,而微调后可以。请解释原因。

预训练模型在COCO数据集上训练,虽然COCO包含香蕉类别,但香蕉图片的尺寸、背景、角度等分布与COCO不同,且模型参数冻结了部分层,可能无法适应小尺寸香蕉。微调时,模型在香蕉数据集上继续更新权重,学习到当前数据的特有特征,因此能准确检测。

5. 训练损失下降但验证损失上升,说明什么问题?应如何应对?

说明模型过拟合(在训练集上过度学习,泛化能力差)。应对方法:增加数据增强、降低模型复杂度、增加Dropout、早停、增大验证集比例等。


计算/代码题

1. IoU计算:给定两个框 A=[10,20,50,60],B=[30,40,70,80],求IoU。

交集:x1=30, y1=40, x2=50, y2=60 → 宽=20, 高=20 → 面积=400
A面积=(50-10)*(60-20)=40*40=1600
B面积=(70-30)*(80-40)=40*40=1600
并集=1600+1600-400=2800
IoU=400/2800≈0.1429

2. NMS手工模拟:有三个框,置信度和IoU如下:
框1 score0.9,框2 score0.8,框1与框2 IoU=0.6;框3 score0.7,与框1 IoU=0.4,与框2 IoU=0.5。
设IoU阈值=0.5,写出NMS保留的框索引。

排序:[框1(0.9), 框2(0.8), 框3(0.7)]
保留框1,移除与框1 IoU≥0.5的框2(0.6>0.5移除),框3与框1 IoU=0.4<0.5保留。
下一轮,保留框3(无剩余框)。
最终保留 [框1, 框3]。

3. 补全YOLO数据集转换代码(已知D2L标签cls, xmin, ymin, xmax, ymax

python

x_center = (xmin + xmax) / 2
y_center = (ymin + ymax) / 2
width = xmax - xmin
height = ymax - ymin
# 写入文件
f.write(f"{cls} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}")

分析题

题目:训练YOLOv8检测香蕉,epoch=10后得到结果:

  • mAP50=0.995,mAP50-95=0.922

  • 精确率=0.998,召回率=1.000

(1)评价模型性能。
(2)如果实际部署时发现一张图片中有多个香蕉,但模型只检测出一个,可能的原因是什么?如何改进?

参考答案
(1)模型性能极好,几乎完美检测香蕉(召回率100%,精确率接近100%),且定位精度高(mAP50-95>0.92)。
(2)可能原因:训练数据中每张图只有一个香蕉(数据集特点),模型未学习多目标。改进方法:收集包含多个香蕉的图片并标注;调整NMS阈值(降低)可能保留更多框;检查数据增强中是否启用了mosaic(可能生成多目标样本)。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐