YOLO系列学习(一):从计算机视觉到YOLOv1——目标检测的范式革命
2026/7/18 3:48:11 网站建设 项目流程

大家好,这是YOLO系列学习的第一篇文章。从今天开始,我们一起从头梳理目标检测领域最经典的算法系列——YOLO。如果你也对计算机视觉感兴趣,欢迎跟着我的节奏一起深入学习。


一、计算机视觉与目标检测概述

1. 什么是计算机视觉

你有没有想过,手机是怎么识别相册里的人脸的?自动驾驶汽车是怎么“看到”路上的行人和车辆的?医院的CT影像,又是怎么辅助医生发现早期病变的?

这些背后,都是同一个技术领域在发力——计算机视觉(Computer Vision)

简单来说,计算机视觉就是让计算机像人一样“看懂”图像和视频。它试图从数字图像或视频中提取有用的信息,理解其中的内容。

计算机视觉有三大核心任务,我们可以用三个简单的问题来概括:

任务问题例子
图像分类这张图片里“是什么”?区分猫和狗
目标检测图片里的物体“在哪里”,以及“是什么”?找出图中的所有人和车,并用框标出位置
图像分割图片中每个像素“是什么”?精确分割出每个物体的轮廓

这三个任务的难度是递进的:分类只需要判断整体,检测需要定位+分类,分割则需要精确到每个像素。

目标检测处在中间位置,但它的应用场景却最为广泛——医疗成像、工业检测、自动驾驶、安防监控、智能交通,几乎所有和视觉相关的领域都离不开目标检测。

2. 目标检测要解决什么问题

目标检测 是一项涉及识别图像或视频流中对象位置和类别的任务。

目标检测器的输出是一组包围图像中对象的边界框,以及每个框的类别标签和置信度分数。当你需要在场景中识别感兴趣的对象,但不需要知道对象的精确位置或确切形状时,目标检测是一个很好的选择。

看起来很简单,但实际做起来远没有这么轻松。

3. 目标检测的技术挑战

目标检测之所以难,主要因为以下几个问题:

第一,目标数量不确定。一张图可能什么都没有,也可能密密麻麻全是物体。你不知道会遇到什么情况。

第二,目标尺度差异大。同样是“人”,近景的人可能占据图像的一半,远景的人可能只是一个小点。模型需要同时处理这种巨大的尺度差异。

第三,目标可能重叠和遮挡。真实场景中,物体很少孤立存在。行人会被车辆挡住,车辆会互相遮挡。模型需要能识别出被遮挡的物体。

第四,定位和分类要同时做好。你不仅要知道“这是人”,还要精确地框出他的位置。这两个任务相互关联,但优化目标不同,很难同时做好。

这些挑战,让目标检测成为计算机视觉领域最具挑战性的任务之一。


二、目标检测算法的演进——YOLO登场前的时代

1. 传统方法时代

在深度学习兴起之前,目标检测主要依靠手工特征。当时的主流范式是:

滑动窗口扫描 → 手工提取特征 → 分类器判断

你可以想象一下这个过程:用一个固定大小的窗口在图像上从左到右、从上到下滑动,每个位置提取特征,然后用分类器判断这个窗口里有没有目标。

代表性的方法有:

  • Viola-Jones检测器:用Haar特征和AdaBoost算法,是最早实现实时人脸检测的方法之一。
  • HOG+SVM:方向梯度直方图(HOG)提取特征,支持向量机(SVM)分类,在行人检测上取得了不错的效果。
  • DPM(可变形部件模型):把物体分解成多个部件,分别检测后组合起来,能处理一定程度的变形。

这些方法的共同问题是什么?手工特征的表达能力有限。人类设计的特征很难捕捉到图像的复杂模式。而且滑动窗口的计算量巨大——一张图要扫描几千个窗口,每个窗口都要提取特征、做分类,速度慢得可怜。

2. 深度学习革命:R-CNN系列

2014年,一篇名为《Rich feature hierarchies for accurate object detection and semantic segmentation》的论文改变了一切。这就是R-CNN

R-CNN的核心思想很简单:用卷积神经网络(CNN)来提取特征,而不是手工设计特征。具体流程是:

  • 生成候选区域:用选择性搜索(Selective Search)算法从图像中找出约2000个可能包含物体的区域。
  • 提取特征:把每个候选区域缩放到固定大小,送入CNN提取特征。
  • 分类和回归:用SVM对每个区域进行分类,用线性回归器微调边界框位置。

这个方法在精度上取得了巨大突破,但有一个致命问题——太慢了。每张图要处理2000个候选区域,每个区域都要单独跑一遍CNN,一张图需要几十秒才能完成检测。这显然无法用于实际场景。

接下来的改进顺理成章:能不能让不同候选区域共享CNN的特征计算?

2015年,Fast R-CNN问世。它的关键创新是RoI Pooling——先对整张图做一次CNN提取特征,得到特征图,然后直接在特征图上对每个候选区域提取固定大小的特征。这样就避免了重复计算,速度提升了一个数量级。

但Fast R-CNN仍然依赖选择性搜索来生成候选区域,这一步本身就很慢。能不能把候选区域的生成也交给神经网络?

2016年,Faster R-CNN给出了答案。它引入了RPN(区域提议网络),用一个轻量级的网络直接在特征图上预测候选区域。这样整个流程就实现了端到端训练,速度又提升了一大截。

3. 两阶段方法的困境

R-CNN系列代表了目标检测的**两阶段(Two-Stage)**范式:

第一阶段:生成候选区域(找可能有目标的区域) 第二阶段:对每个区域进行分类和边界框回归(确定是什么、在哪里)

这种方法的优点是精度高,但缺点也很明显——速度慢。Faster R-CNN在GPU上的检测速度大约是5帧/秒(FPS),离实时检测(通常需要至少30FPS)还有很大差距。

这时候,一个关键问题出现了:能不能只看一次(Look Once)就完成检测?

为什么非要分两步走?能不能设计一个网络,输入一张图,直接输出所有目标的位置和类别?

这个看似简单的想法,催生了目标检测领域的另一个重要范式——**单阶段(One-Stage)**检测。而YOLO,就是这个范式的开创者。


三、YOLO横空出世——核心思想

1. YOLO的基本信息

2016年,CVPR(计算机视觉领域顶级会议)上,一篇名为《You Only Look Once: Unified, Real-Time Object Detection》的论文引起了轰动。

作者是Joseph Redmon等人。这篇论文提出的方法,就是我们今天要重点讲的YOLO

YOLO这个名字很有意思——You Only Look Once,翻译过来就是“只看一次”。这个名字完美地概括了它的核心思想。

2. YOLO的核心思想——范式革命

YOLO的革命性在于,它将目标检测重新定义为一个回归问题

传统的两阶段方法把检测看作分类问题:先找候选区域,再判断每个区域里是什么。

YOLO则完全不同:它用一个神经网络,对输入图像做一次前向传播,直接回归出所有目标的边界框和类别概率。

对比一下:

传统/两阶段方法: 看很多次 → 找到目标位置 → 判断目标类别 YOLO(单阶段): 看一眼 → 直接输出所有目标的位置和类别

就像你看一眼房间,瞬间就能知道里面有几个人、几张桌子、几把椅子,以及它们各自在什么位置。你不需要先逐个区域搜索,再逐个判断。

3. YOLO vs 两阶段方法的核心差异

对比维度两阶段方法(R-CNN系列)YOLO(单阶段)
检测流程先提议区域→再分类回归一步到位,端到端
速度慢(5fps)快(45fps)
精度略低
核心思想分类问题回归问题
视野局部视野(只看候选区域)全局视野(看整张图)

YOLO的全局视野是它的一大优势。因为它处理的是整张图,所以能利用上下文信息,不容易把背景误检为目标。而两阶段方法只关注候选区域,容易受背景干扰。

4. 目标检测算法速度比较

Pascal 2007 mAPSpeed
DPM v533.7.07FPS (14 s/img)
R-CNN66.0.05 FPS (20 s/img)
Fast R-CNN70.0.5FPS (2 s/img)
Faster R-CNN73.27 FPS (140 ms/img)
YOLO63.445 FPS (22 ms/img)

四、YOLOv1技术详解

  • 发布时间:2015 年 6 月
  • 论文:https://arxiv.org/abs/1506.02640

1. 整体流程

YOLOv1预测过程如图所示

  • 输入图片(任意尺寸)
  • 缩放到448×448
  • 送入CNN网络
  • 输出7×7×30的张量
  • NMS后处理
  • 输出最终检测结果

看起来很简单,但每个环节都有精心设计的细节。让我们一步步拆解。

2. 核心机制:网格划分

这是YOLO最核心的设计之一。

YOLOv1会把输入图像划分为一个S×S的网格。在原始论文中,S=7,也就是把图像分成7×7=49个网格。

每个网格负责检测什么?中心点落在该格子内的目标

比如,如果一个物体的中心点落在第25个网格里,那么第25个网格就负责预测这个物体。

每个网格会预测什么?

  • B个边界框:在YOLOv1中,B=2。每个边界框预测5个值:x, y, w, h, confidence(中心坐标、宽高、置信度)。
  • C个类别概率:在PASCAL VOC数据集上,C=20,表示20个类别。

所以,整个网络的输出张量维度是:

S × S × (B × 5 + C) = 7 × 7 × 30

让我们再细化一下每个边界框的5个预测值:

  • x, y:边界框中心相对于网格左上角的坐标(归一化到0-1之间)
  • w, h:边界框的宽度和高度(相对于整张图像的宽度和高度,归一化到0-1之间)
  • confidence:这个边界框包含目标的置信度,计算公式是:Pr(Object) × IoU(pred, truth)

这里的IoU(Intersection over Union)是预测框和真实框的交并比,表示预测框和真实框的重合程度。

3. 网络结构

YOLOv1的网络结构借鉴了GoogLeNet(也就是Inception v1)的设计思想,但做了简化。

原始GoogLeNet用的是Inception模块,而YOLOv1用更简单的1×1卷积 + 3×3卷积的组合来替代。

网络的整体结构是:

输入:448 × 448 × 3 ↓ 卷积层 × 24(交替使用1×1和3×3卷积) ↓ 全连接层 × 2 ↓ 输出:7 × 7 × 30

具体的网络配置如下表所示:

<
类型滤波器数量大小步长输出尺寸
卷积647×72224×224
MaxPool-2×22112×112
卷积1923×31112×112
MaxPool-2×2256×56
卷积1281×1156×56
卷积2563×3156×56
卷积2561×1156×56
卷积5123×3156×56

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询