目标检测基础概念

发布时间:2026/5/25 18:30:07

目标检测基础概念 目标检测mAP 是目标检测领域最核心、最常用的评价指标。要理解它需要拆开来看。mAPmean Average Precision平均精度均值这是一个有点绕的概念但可以用一个简单的类比帮你理解1、一个直观的理解方式搜索引擎想象在百度搜索特斯拉汽车。搜索引擎会返回一页页的结果相当于模型的预测框。你知道哪些网页是真正关于特斯拉汽车的相当于真实标签 Ground Truth。mAP 就是在衡量这个搜索引擎即你的模型到底有多懂你它同时考核两个方面准不准返回的结果里有多少是真正有用的这叫做精度全不全所有有用的结果被搜出来多少这叫做召回率2、核心概念拆解要计算 mAP需要先理解几个基础概念A. IoU (Intersection over Union交并比)这是判断框得准不准的尺子。公式模型画的框 与 真实物体的框 的交集面积 ÷ 并集面积。含义如果 IoU 0.5通常认为模型检测到了这个物体。如果 IoU 0.75说明框得非常精准。IoU 1说明两个框完全重合。B. Precision (精度) 和 Recall (召回率)假设一张图里有 5 个真的人模型检测出了 10 个框其中 4 个是对的真正例6 个是错的假正例即误检。难点在于这俩指标是矛盾的。如果你框得特别保守只出确凿无疑的框Precision 高但 Recall 低漏检多。如果你框得特别激进看着像人就框Recall 高但 Precision 低误检多。3、什么是 AP (Average Precision平均精度)为了综合衡量模型在不同保守程度下的表现科学家们想出了一个办法画一条 Precision-Recall 曲线然后计算曲线下的面积。调整模型的置信度阈值比如从 0.9 降到 0.5模型会逐渐输出越来越多的框。每调整一次就能算出一对 (Recall, Precision)。把这些点连成线线下面的面积就是 AP。AP 值越高说明模型在既准又全之间平衡得越好。AP 是针对某一个特定类别计算的比如人这一类或者猫这一类。4、什么是 mAP (mean Average Precision)mAP 就是把所有类别的 AP 值加起来取平均值。如果你的模型要检测人、猫、狗三类你分别算出 AP(人)、AP(猫)、AP(狗)。mAP(AP(人)AP(猫)AP(狗))÷35、在 YOLO 中常见的 mAP 变体在 YOLO 的训练日志里你经常会看到两个不同的 mAP 指标指标 含义 关注点mAP0.5 当 IoU 阈值设为 0.5 时计算出的 mAP。 宽松标准。只要大概框住物体就算对。这反映模型是否能找到物体。mAP0.5:0.95 这是 COCO 标准。计算 IoU 阈值从 0.5 到 0.95步长 0.05即 0.5, 0.55, …, 0.95的10个不同 mAP 的平均值。 严格标准。不仅要求找到物体还要求框得非常准。这是学术界和工业界最看重的指标。6、实战解读假设你训练了两个 YOLO 模型模型 AmAP0.5 95%mAP0.5:0.95 50%模型 BmAP0.5 90%mAP0.5:0.95 85%解读在宽松标准下A 比 B 强 (95% 90%)说明 A 基本不会漏掉物体。但在严格标准下B 远胜于 A (85% 50%)。这意味着模型 A 虽然找到了物体但框的位置不太准可能偏大或偏小而模型 B 不仅找到了还框得严丝合缝。总结AP衡量模型在某一个类别上的综合性能准全。mAP衡量模型在所有类别上的平均综合性能。在 YOLO 里mAP 越高通常意味着模型越好。7、YOLO检测这是一个非常核心且实用的问题。那个数字通常被称为置信度Confidence Score但它其实包含了两个层面的信息。简单来说这个数字表示模型有多大的把握认为这个框里真的有东西以及它觉得这个东西和自己认为的类别有多像。为了让你彻底看懂这个数字的含义我们可以把这个概率拆解成两部分来看1双重含义的乘积在 YOLO 的内部逻辑里框上的最终得分是通过下面这个公式算出来的最终得分Objectness物体性× Class Probability类别概率这意味着你看到的那个数字比如 0.85实际上是模型问了自己两个问题后的综合打分第一问这个框里真的有物体吗物体性分数含义这个框的正中间是否覆盖了一个物体的中心还是说它框住的只是一片杂乱的背景比如天空、草地、墙上的纹理作用这是 YOLO 防止误检的关键。如果这个值很低比如 0.1说明模型也觉得这里可能啥也没有只是随便框一下。第二问这个物体属于这一类吗类别概率含义如果框里确实有东西那这个东西是人的概率有多大是猫的概率有多大作用这是 YOLO 进行分类判断的依据。YOLO 会计算所有类别如人、车、狗的概率然后取最高的那个。2实战举例假设你训练了一个能检测猫和狗的 YOLO 模型现在给了一张图场景 A一只猫模型判断框中心确实有物体物体性 0.95。模型判断这个东西像猫的概率是 0.98像狗的概率是 0.01。最终分数 0.95×0.98 0.93。显示框上写着猫 0.93。场景 B一团像猫的乌云模型判断这个形状有点像猫但不太确定是不是真的有实体物体性 0.40。模型判断如果非要说是什么它像猫的概率是 0.90因为乌云没有狗的轮廓。最终分数 0.40×0.90 0.36。显示框上可能显示猫 0.36。如果你设置了阈值 0.5这个框会被过滤掉不显示如果阈值设为 0.3它就会显示出来但你知道这是个低分预测很可能错了。3为什么是一个数字而不是两个你可能会问为什么不把这两个数字都显示出来因为在大多数应用场景比如自动驾驶、安防监控中用户只关心最终结果。模型把有没有物体和是什么物体打包成一个最终的信心指数用户只需要根据这个数字决定是否采信模型的判断。4这个数字的用途过滤在 YOLO 输出结果后开发者通常会设置一个置信度阈值阈值 0.5只有分数 0.5 的框才显示。这样画面干净误检少但可能漏掉一些模糊的目标。阈值 0.3更多框会显示出来能找出更多目标但也会出现一些误检比如把影子当成狗。总结你看到的那个框上的概率数字是 YOLO 经过深思熟虑后给你的最终信心指数。它综合了这里真的有东西吗这个东西确实是我认为的那类东西吗所以当你看到狗 0.92时可以理解为模型有 92% 的把握认定这个框的位置存在一个物体并且这个物体就是狗。5标注图片与推理输入图片的尺寸尺度问题先说结论你的所有标注图片是 1920×1080 没有任何问题也不要求摄像头/推理分辨率必须是 1920×1080。在 YOLOv5 里有两个关键点需要分开看训练 / 验证阶段1920×1080 是怎么用的你的原图是 1920×1080标签是 YOLO 格式归一化到 [0,1] 的 x_center, y_center, w, h。在 train.py / val.py 里所有图像在送入网络前都会被 resize 到 --imgsz默认 640图像会做 letterbox缩放 填充到 (imgsz×imgsz)比如 640×640。标签中的坐标会同步缩放/变换到新尺寸。所以原始分辨率是 1920×1080 没问题模型训练时本来就是“任意原图 → 统一缩放到 imgsz”。换句话说训练/验证时你用 1920×1080 原图和用 1280×720 或 2560×1440从流程上是等价的都会被缩放到同一个网络输入尺寸。实时摄像头推理分辨率是否必须 1920×1080不必须只是“更接近训练数据分布”一般会更稳但不是硬性条件摄像头原始输出比如 1280×720 或 1920×1080→ OpenCV 读进来后detect.py 也会按 --imgsz 再做一次缩放 / letterbox 到例如 640×640然后送进模型推理最后再把检测框从 640×640 映射回原始分辨率的图像上画框。也就是说训练数据 1920×1080 推理时摄像头 1280×720 可以正常用只是视角/比例和训练集差别大可能略影响效果。训练数据 1920×1080 推理时摄像头 1920×1080 分布更接近直觉上更好但仍然会缩放到 --imgsz 做推理。你如果很在意一致性可以按前面说的两步做用 v4l2-ctl 把 /dev/video0 设成 1920x1080 MJPG。python detect.py --source 0 --imgsz 640 或 --imgsz 1280 做推理。3. 真正需要担心的不是“原图分辨率”而是“标注是否匹配原图尺寸”只要满足标注时用的原图就是现在磁盘上的那批 1920×1080 图片.txt 里是 YOLO 规范归一化坐标或与脚本要求一致那么训练 / 验证OKval.py 对这批 1920×1080 图评估OKdetect.py 对实时图像任何分辨率推理也 OK如果你担心“因为推理时缩放到 640×6401920×1080 的信息会丢很多”那可以考虑适当增大 --imgsz比如python detect.py --weights yolov5s.pt --source 0 --imgsz 1280但这只是推理速度 / 精度的权衡不会影响你现在标注是 1920×1080 这件事本身。

相关新闻