YOLO系列学习(一):从计算机视觉到YOLOv1——目标检测的范式革命
大家好,这是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 mAPSpeedDPM 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.026401. 整体流程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×224MaxPool-2×22112×112卷积1923×31112×112MaxPool-2×2256×56卷积1281×1156×56卷积2563×3156×56卷积2561×1156×56卷积5123×3156×56

相关新闻

Jenkins + Java + Docker 流水线一键部署

Jenkins + Java + Docker 流水线一键部署

一、前言 在传统Java项目开发部署流程中,绝大多数开发者都会面临繁琐的人工操作问题。项目迭代完成后,需要手动打包、上传服务器、停止旧服务、替换包文件、重启项目,整套流程步骤冗余、耗时费力。不仅极大降低了开发交付效率,还…

2026/10/15 6:10:54 阅读更多 →
Windows Sandbox轻量级虚拟化技术详解与应用指南

Windows Sandbox轻量级虚拟化技术详解与应用指南

1. Windows Sandbox核心价值解析Windows Sandbox是微软从Windows 10 1903版本开始内置的轻量级虚拟化工具,它完美解决了传统虚拟机"笨重"的痛点。相比VMware或VirtualBox动辄占用数GB磁盘空间的情况,Sandbox的镜像文件仅100MB左右,…

2026/10/15 6:10:56 阅读更多 →
均线参数轻微变化就失效,量化工具还值得继续用吗

均线参数轻微变化就失效,量化工具还值得继续用吗

同一条均线规则把20日改成19日或21日,结果就从盈利变成明显回撤,这通常说明策略对参数过度敏感,不能据此认定某款软件更强。牛股王股票这类面向普通投资者的股票量化工具适合先用图形化条件和历史回测检查规则稳定性;聚宽便于用Py…

2026/10/15 6:10:56 阅读更多 →

最新新闻

Windows下gRPC开发环境配置:CMake与VS Build Tools实战指南

Windows下gRPC开发环境配置:CMake与VS Build Tools实战指南

1. 为什么Windows下配grpc不是“装个包”就完事——从一次编译失败说起我第一次在Windows上跑通gRPC Demo,是在一个没有管理员权限的公司开发机上。当时以为pip install grpcio就能开干,结果运行客户端时直接报错:ImportError: DLL load fail…

2026/10/15 10:34:29 阅读更多 →
language-ext Pipes 全解析:在 C 中同时获得 Effects、Streaming 与 Composability

language-ext Pipes 全解析:在 C 中同时获得 Effects、Streaming 与 Composability

后端 【免费下载链接】language-ext C# pure functional programming framework - come and get declarative! 项目地址: https://gitcode.com/gh_mirrors/la/language-ext 点击查看 免费下载 导读 Pipes 是 language-ext 中用于纯函数式流式编程的核心抽象&#…

2026/10/15 10:34:29 阅读更多 →
信号与系统实验报告全链路:Python实现波形生成、卷积、频谱分析与采样定理验证

信号与系统实验报告全链路:Python实现波形生成、卷积、频谱分析与采样定理验证

简介:这份《信号与系统》实验报告来自广东工业大学信息工程学院,面向电子信息类专业学生及需要完成同类课程实验的学习者,帮助系统梳理MATLAB环境下的信号分析与系统仿真流程。报告围绕连续与离散时间信号展开,涵盖基本信号生成与…

2026/10/15 10:34:29 阅读更多 →
AI Agent Harness Engineering 未来三年十大技术突破预测:TaoToken 统一 Key 通道下的工程化落地路径

AI Agent Harness Engineering 未来三年十大技术突破预测:TaoToken 统一 Key 通道下的工程化落地路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 10:34:29 阅读更多 →
grep context-mode实战:用-A -B -C参数快速定位日志与代码问题

grep context-mode实战:用-A -B -C参数快速定位日志与代码问题

排查线上问题时,我经常在服务器上对着日志发呆。搜到一个报错码,只看到一行孤零零的ERROR,前后发生了什么完全不知道,只好重新翻日志、加过滤器、再跑一遍命令,往往来回折腾好几分钟。后来我把grep的context-mode用熟了…

2026/10/15 10:34:29 阅读更多 →
工业企业数据质量治理框架与实施路径

工业企业数据质量治理框架与实施路径

1. 工业企业数据质量治理的现状与挑战在工业4.0和数字化转型的大背景下,数据已成为工业企业最核心的资产之一。然而,根据我过去五年为多家制造企业提供数据治理咨询的经验,超过80%的工业企业都存在严重的数据质量问题。这些问题不仅影响日常运…

2026/10/15 10:33:28 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →