第2章:目标检测基础

2.1 目标检测与目标跟踪的关系

很多人刚开始接触视觉时,会把检测和跟踪搞混。我当年也犯过这个错——以为跟踪就是检测的连续版本。其实没那么简单。

目标检测,说白了就是在一张图里找出「有没有目标」和「目标在哪儿」。它不关心上一帧发生了什么,每张图都是独立处理的。

目标跟踪呢?它更像个「盯梢」任务。给定第一帧的目标位置,后续帧里持续锁定它。跟踪会利用时序信息——目标不会突然消失,也不会瞬移。

举个例子你就明白了:

  • 检测:你走进会议室,扫一眼,看到张三坐在第三排靠窗位置。
  • 跟踪:你盯着张三,他站起来、走到白板前、转身——你的视线一直跟着他。

检测是跟踪的基础。没有检测结果,跟踪就无从开始。但跟踪反过来也能辅助检测——比如目标被遮挡时,跟踪可以预测它的大概位置。

核心关系:检测提供「初始化」和「重定位」,跟踪提供「持续锁定」和「预测」。两者配合,才能应对复杂环境。

我在项目中遇到过一种典型场景:无人机跟踪地面车辆。车辆经过树荫下时,检测器完全失效了。但跟踪算法靠着运动预测,硬是撑过了那几帧。嗯,这就是跟踪的价值。

2.2 常用目标检测算法简介

现在主流的检测算法,基本可以分成两派:两阶段和单阶段。我一个个说。

2.2.1 Faster R-CNN

这是两阶段检测的代表。第一阶段先找出可能包含目标的区域(候选框),第二阶段再对这些区域做精细分类和位置修正。

你想想看,这就像先拿望远镜扫一遍,发现可疑目标后,再用显微镜仔细看。精度确实高,但速度嘛...在嵌入式设备上跑,帧率往往只有个位数。

我个人习惯是:如果对精度要求极高、硬件算力充足,才会考虑Faster R-CNN。比如工业质检场景,一张图看几秒都行。

2.2.2 SSD

SSD是单阶段检测的早期代表。它直接在特征图上预测边界框和类别,一步到位,不需要候选区域提取。

速度比Faster R-CNN快不少,但小目标检测能力偏弱。为什么?因为浅层特征图分辨率高但语义信息不足,深层特征图语义丰富但分辨率低。小目标在深层特征图上几乎「消失」了。

我记得有一次做行人检测,SSD在远距离小目标上漏检率很高。后来换了YOLO,情况好了一些。

2.2.3 YOLO(重点)

YOLO(You Only Look Once)是目前最流行的单阶段检测器。它把检测当作回归问题——一次前向传播,直接输出边界框和类别概率。

YOLO的核心思想是:将图像分成S×S的网格,每个网格负责预测中心点落在该网格内的目标。

从YOLOv3到YOLOv8,我基本都用过。说说我的感受:

  • YOLOv3:经典,多尺度检测,小目标能力提升明显。但模型偏大。
  • YOLOv4:集成了很多trick,训练更稳定。我项目里用得最多。
  • YOLOv5:轻量、易用,社区活跃。适合快速验证。
  • YOLOv8:最新,支持实例分割,但推理速度略慢。

我的建议:嵌入式场景首选YOLOv5s或YOLOv8n。模型小、速度快,精度也够用。别一上来就上大模型,跑不动。

下面是一个简单的YOLOv5推理代码示例:

import torch

# 加载模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

# 推理
results = model('test.jpg')

# 显示结果
results.show()
results.print()

你看,就这么几行。但实际部署时,要考虑模型量化、NMS优化、输入尺寸调整等细节。这些后面章节会细讲。

2.3 检测框与跟踪框的区别

这个问题,我面试新人时经常问。很多人答不上来。

检测框:由检测算法输出,每一帧独立生成。框的位置、大小完全由当前帧的图像内容决定。

跟踪框:由跟踪算法输出,基于上一帧的框位置和运动模型预测得到。它带有「记忆」属性。

区别在哪?我列个表:

特性 检测框 跟踪框
生成方式 每帧独立检测 基于历史帧预测
计算量 大(需要完整推理) 小(只需简单计算)
稳定性 可能抖动(每帧独立) 平滑(时序滤波)
抗遮挡能力 弱(遮挡即丢失) 较强(可预测位置)
ID一致性 无(每帧重新识别) 有(保持同一ID)

实际项目中,我通常的做法是:检测框作为「锚点」,跟踪框作为「平滑输出」。检测框更新时,用跟踪框做插值滤波,避免框的剧烈跳动。

避坑指南:我曾经在一个项目中,直接用检测框作为跟踪结果,没有做任何平滑处理。结果视频播放时,框一直在抖,客户直接投诉。后来加了卡尔曼滤波,问题解决。

还有一个容易忽略的点:检测框的置信度阈值。跟踪时,如果检测框置信度太低,就不要用它来更新跟踪器。否则会把噪声引入跟踪结果。

我一般设两个阈值:

  • 高阈值(0.7):用于初始化新目标
  • 低阈值(0.3):用于更新已有跟踪目标

这样既保证了新目标的可靠性,又不会因为偶尔的漏检导致跟踪中断。

2.4 本章知识体系

下面这张图,帮你理清本章的核心逻辑:

目标检测基础 - 知识体系 检测 vs 跟踪 检测:独立定位 跟踪:持续锁定 常用检测算法 Faster R-CNN / SSD / YOLO 框的区别 检测框 vs 跟踪框 核心关系 • 检测提供初始化 • 跟踪提供持续锁定 • 两者互补,缺一不可 算法特点 • Faster R-CNN:精度高,速度慢 • SSD:速度快,小目标弱 • YOLO:速度与精度平衡 关键区别 • 检测框:独立生成 • 跟踪框:时序预测 • 跟踪框更平滑 检测是跟踪的起点,跟踪是检测的延伸

这张图把本章三个核心知识点串起来了。你仔细看,从左到右,从「关系」到「算法」再到「框的区别」,逻辑是递进的。

好了,这一章就到这里。检测是跟踪的基础,打好这个基础,后面讲跟踪算法时你才能跟得上。

可可精品资料库