TT Lab
博客

한국어 日本語 中文

开始
博客

博客

物体检测 2:单阶段 YOLO 家族、实时性与许可证

状态:草稿 (2026-10-13),部分实测。 网格与 AP 示例是在笔记本电脑 CPU 上直接运行得到的值(code/06_yolo_ap.py,1秒以内)。论文数值摘自原文及相关条件,硬件则以等级标出。许可证内容于 2026-10-13 在各仓库的 LICENSE 文件和官方说明中核实,不作为法律意见。 编写规则:以实测数据为准,未能测出的标记为“未实测”。

目录

1. 看一次就好

第 5 篇中的 Faster R-CNN 约为每秒 5 帧(fps)。这是因为需要提取候选区域(第 1 阶段),并对每个候选区域进行裁剪判定(第 2 阶段)。Redmon 等人的 YOLO(You Only Look Once, 2016)改变了问题:“难道不能将检测作为 单一回归问题来解决吗?”其核心思想是让图像通过网络一次,就能同时输出所有的边界框和类别。

YOLO: 그림을 S×S 격자로 나눠 한 번에 예측 선수 상자의 중심이 떨어진 칸이 그 선수를 책임진다 칸마다 내는 것 상자 B개 × (x, y, w, h, 신뢰도) 클래스 확률 C개(한 벌) v1: 7×7×(2·5+20) = 7×7×30 후보 98개 → 신뢰도 문턱 → NMS 약점: 한 칸에 중심이 몰린 작은 물체들 (새 떼, 라켓과 손, 멀리 있는 공) 뒤 세대: 여러 해상도에서 예측(v3), 앵커 없이(YOLOX), NMS 없이(v10)
图:将图像划分为 7×7 网格,物体中心点落入的格子负责该物体的 YOLO 输出结构

YOLO v1 的规则如下:

亲自动手:哪个格子负责

在 448px 的图像中,一个格子是 64px。我们将其代入乒乓球场景中进行了测试(实测)。

선수 몸 중심  (200,260) → 칸 (행 4, 열 3)
공 중심       (330,95)  → 칸 (행 1, 열 5)
라켓 중심     (215,270) → 칸 (행 4, 열 3)   ← 선수와 같은 칸

运动员和球拍的中心落在了同一个格子中。由于该格子只输出 一套类别概率,因此“人”和“球拍”会发生冲突。论文也将“一个格子只能预测有限数量的物体”列为缺点,并指出在鸟群等小物体密集出现的场景下表现较弱。

损失的设计

损失是边界框坐标、置信度和类别误差的平方和,其中有几个调整体现了“为什么”。

结果(论文)

模型 VOC 2007 mAP 速度 条件
YOLO 63.4 45fps 桌面 GPU,不使用批处理
Fast YOLO 52.7 155fps 〃

在同一篇论文的误差分析中,YOLO 的 定位误差是最大的误差类型。不过,将背景误认为物体的几率比 Fast R-CNN 要低,两者结合后在 VOC 2012 上提升到了 75.0(Fast R-CNN 单独为 71.8)。由于一次性看完整张图,上下文错误较少,但由于网格较粗,定位不够精准。

2. 谱系:锚框、多分辨率、无锚框、无 NMS

模型(年份) 改动内容 论文数值(条件)
SSD(2016) 在不同分辨率的特征图上使用默认框进行预测 SSD300 VOC 2007 74.3%, 59fps(桌面 GPU,批大小 8)
YOLOv2(2017) 引入锚框。尺寸不通过人工设定,而是通过 k-means聚类出 5 个 在 416×416 下 VOC 2007 76.8,67fps(桌面 GPU)
YOLOv3(2018) 在三个分辨率下预测(类似于 FPN),每个分辨率 3 个锚框,共 9 个 COCO AP50 57.9,51ms(608×608,桌面 GPU)对比 RetinaNet 57.5,198ms
YOLOX(2021) 无锚框,分类与定位头分离,正样本分配(SimOTA) YOLOX-L COCO 50.0 AP,68.9fps(数据中心 GPU,FP16,640×640)
YOLOv10(2024) 无 NMS:训练时同时使用多对一和一对一头,推理时仅使用一对一 v10-S 46.3 AP 2.49ms 对比 RT-DETR-R18 46.5 AP 4.58ms(推理用数据中心 GPU,TensorRT FP16)

一些设计原因如下:

3. 亲自动手:计算 AP

检测论文中的数字几乎全都是 AP(Average Precision)。假设在一个有 5 个真实球体的场景中,检测器输出了 8 个边界框。按得分从高到低排序,与真实标签的 IoU 在 0.5 以上匹配则为正确(1),否则为错误(0)(实测)。

점수 순 맞음/틀림: [1, 1, 0, 1, 0, 1, 0, 0]
재현율: [0.2, 0.4, 0.4, 0.6, 0.6, 0.8, 0.8, 0.8]
정밀도: [1.0, 1.0, 0.67, 0.75, 0.6, 0.67, 0.57, 0.5]
AP = 0.683

AP 是以召回率(查找到的真实标签比例)为横轴、精确率(输出中正确的比例)为纵轴的曲线下面积。计算时会将精确率通过“从右侧看过去的最大值”进行平滑(所有点插值)。由于 5 个真实标签只找到了 4 个,因此召回率在 0.8 处停止,之后的面积为 0。

即使是相同的 8 个边界框,如果 得分顺序改变,AP 也会发生变化。

得分顺序 AP
正确的 4 个在前面 [1,1,1,1,0,0,0,0] 0.800
原始顺序 0.683
正确的 4 个在后面 [0,0,0,0,1,1,1,1] 0.400

AP 不仅评估“是否猜对”,还评估“是否给正确的目标赋予了更高的分数”。置信度得分一团糟的检测器,即使输出相同的边界框,其 AP 也很低。这是阅读论文 AP 时需要记住的一点。

4. 什么是实时性

“实时”是一个相对的概念。如果乒乓球视频为每秒 60 帧,则处理单张图片可用时间为 16.7ms,解码、预处理、模型、后处理和判定必须全部在这个时间内完成。阅读论文中的 fps 时,必须结合条件来看。

TT Score 的找球(BlurBall)在服务器 GPU 上对单个窗口(3 帧)耗时 10.5ms(实测,TT Score 模型剖析第 2 篇)。比起“多少 fps”,用“单张图片多少 ms,包含了什么”来记录才具备可比性。

5. 许可证:AGPL 在网页服务中的含义

YOLO 这个名字被多个仓库共用。不同仓库的许可证各不相同(各 LICENSE 文件,已于 2026-10-13 核实)。

仓库 许可证
Darknet(原版 YOLO) “YOLO LICENSE” —— 实际上接近于可做任何事的公有领域条件
YOLOX(Megvii) Apache-2.0
RT-DETR(官方) Apache-2.0
Ultralytics 软件包(YOLOv8、YOLO11 等,包含 YOLO-World / YOLOE 移植) AGPL-3.0 或付费企业许可证
YOLOv10(官方,基于 Ultralytics 代码) AGPL-3.0

AGPL-3.0 是在 GPL 的基础上增加了 网络条款(第 13 条)。如果修改了程序,并允许用户通过网络与该程序进行交互,则必须向该用户提供获取修改后版本源代码的途径。即使不分发、仅在服务器上运行也会产生义务,这一点与 GPL 不同。Ultralytics 在其官方指南页面中说明,若想在不受 AGPL 公开义务约束的情况下使用(如商业产品、SaaS/API、嵌入式设备、商业使用的微调模型等),则需要企业许可证,并且其立场是训练出的模型默认也遵循 AGPL-3.0。最后这一主张(权重也受 AGPL 约束)在法律上能在多大程度上成立,本文无法判定。不过,公司持有这种主张这一事实本身就已经构成了风险因素。

TT Score 是一个网页服务。因此,在找球方面选择了代码为 MIT 的 WASB/BlurBall,在球桌方面选择了 Apache-2.0 的 SAM 2.1,而由于 AGPL 条件,YOLO 系列分割模型被排除在候选之外(TT Score 模型剖析第 1 篇)。这也是在选择模型时将许可证与准确率、速度放在同等重要地位的原因。

6. 局限性与我们的项目

下一篇文章将介绍抛弃了卷积的 Vision Transformer。

TT 寄语。 同样的八个框,仅仅改变了得分的顺序,AP 就从 0.8 变成了 0.4。自信地给正确的预测赋予高分也是一种实力。

参考文献

登录后即可点赞

评论

还没有评论。

登录后即可发表评论