人工智能实验7—YOLO
一、主要知识点总结
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. 自动处理数据增强
填空题
-
香蕉数据集中,一张图像的标签格式为
[0.0, 0.2, 0.3, 0.7, 0.8],其中0.0表示 类别(香蕉),0.2表示 xmin,0.8表示 ymax。 -
YOLO标签中的
x_center和width都是相对于 图像宽度 归一化的。 -
计算IoU时,为了防止分母为0,通常加上一个很小的数如 1e-6。
-
在NMS算法中,首先按照 置信度(score) 对候选框降序排序。
-
使用
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)/2y_center = (ymin + ymax)/2width = xmax - xminheight = ymax - ymin
YOLO → D2L:xmin = x_center - width/2ymin = y_center - height/2xmax = x_center + width/2ymax = 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(可能生成多目标样本)。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)