当前位置: 首页 > news >正文

彻底搞懂YOLOv1:R-CNN与YOLO架构的区别在哪里?

0 前言

在计算机视觉领域中,基础的任务除了目标分类之外,往前进一步就是目标检测了。在之前的文章中,我介绍过AlexNet、ResNet,其实这些模型一开始都是为了目标分类诞生的。

目标分类和检测的区别在哪里呢?假设我们有一张猫的图片,我们输入到深度学习的模型中,只期待它得到一个判断结果:是猫还是狗,或者是其他的动物。这就是目标分类。

但是目标检测在这个目标识别任务的基础上更进一步:我们不仅需要知道这张图片里是不是猫,我们还要知道它的位置在哪里。因此目标检测实质上有两个任务:定位和识别。

对于人类来说,这似乎是一件很简单的事情,但是对于计算机而言,这个任务的难度又上升了一个台阶。

YOLO是目标检测领域的经典模型,然而在YOLO之前其实就已经有前人在目标检测领域做了大量研究工作。

在正式踏入这个技术领域之前,我们不妨首先从上帝视角,来了解一下目标检测的发展历程以及经典框架,这对于开展后续的学习是大有裨益的。

1 思维导图

限于篇幅,加上叙述目标检测的发展过程,顺着这个脉络,因此我打算分两篇文章来介绍YOLOv1,有时间的话,也可以为大家介绍一下具体的代码。

今天这篇文章主要介绍的内容有三点,思维导图如下。

2 目标检测发展史简介

一般而言,我们介绍深度学习领域某个任务的发展过程,都是从两个方面来说:一个是传统方法,一个是深度学习的方法。

在以往传统的方法中,都是首先人工提取图像视觉特征,然后再将特征输入到特定的网络中,最终得到任务结果。不过一旦图像种类变得复杂并且特征不明显,那么想得到一个通用的任务模型则会非常困难,并且依赖研究者的先验知识。

当深度学习出现之后,特征提取这个费时费力的活儿就可以交给卷积神经网络了,它依赖海量的数据,从中学习出数据中通用的特征,虽然大多数特征没有办法用人类语言描述出来。

2014年,不同于传统的目标检测算法,R-CNN出现了。当时衡量目标检测效果的数据集为PASCAL VOC,R-CNN在该数据集上一鸣惊人,开启了深度学习领域结合目标检测的研究的热潮。

然而R-CNN的算法基础导致它有一个缺点:那就是速度不够快。在R-CNN的基础上,众多学者做出了改进,如Fast R-CNN和Faster R-CNN,但是依旧是遵循R-CNN原有的基础框架。

计算机视觉10年代一路狂奔,引吭高歌,在2015年,YOLO横空出世,在每秒40帧的检测速度实力碾压当时所有的目标检测模型,这也导致了YOLO框架横扫后续的目标检测领域。

目前YOLO官方发布的模型已经到了YOLOv11。

要想弄懂YOLO,我认为直接去学习YOLO的最新模型难度很大,我们不知道它改进的每一个trick巧妙在哪里,正如如果我们不懂得Transformer的原理,我们学习BERT和GPT就会比较吃力。

尽管YOLOv1已经是十年前的模型了,但是时至如今,我认为去了解它的结构和模块对于初学者而言仍然有意义,学习了YOLOv1之后,我们再去学习更新版本的模型,会更加从容,也能体会到每个版本之间的迭代差异,温故而知新。

3 R-CNN与YOLO架构区别

我们知道目标检测需要完成两个任务:定位和分类,在这个认知基础上,我们先来了解一下R-CNN的基本步骤。从上面的图中可以看出来R-CNN主要分为三步:

  • 首先从图像中提取出若干感兴趣的区域

  • 使用卷积神经网络分别处理,提取特征

  • 使用支持向量机进行分类

我们将上述三个步骤总结为关键的两步:

先提取一系列可能包含物体的候选区域,然后依次对这些区域进行特征提取和分类。

这一过程被总结为统一的范式:两阶段(two-stage)检测,本质上是先提取,后识别。包括后来Fast R-CNN以及Faster R-CNN皆是如此。

YOLO摈弃了两阶段检测的结构,采用单阶段(One-Stage)检测的模式。我们从它的名字就可以窥探一二:**YOLO(You Look Only Once)**,你只需要看一次。

YOLO的作者认为,检测(定位)和识别(分类)是可以采用一个网络完成的,不用分别进行处理,可以减少大量多余的操作,从而加快检测识别的速度。

但是需要明确的一点是,虽然YOLOv1在检测速度上胜过R-CNN,但是精度却是有所下降的,在当时业界应用中,精度和速度往往总是不能二者兼得,但是正因为YOLO检测速度的迅速,因此得到了更多研究者的青睐,使得更多的学者投身于单阶段检测的框架中。如今YOLO已经可以兼具速度和精度的要求,成为目标检测领域的主流框架。

我们再来总结对比一下二者的区别:

  • R-CNN的“两阶段”是 “先找出可能在哪(候选区域),再细看是什么(分类)” ;

  • 而YOLO的“单阶段”是 “看一眼就直接说出哪里有什么” 。

4 YOLOv1的网络结构

YOLOv1作为YOLO家族的祖先,其网络结构非常精简:通过一个端到端的卷积神经网络,直接确定目标边界框和类别。 网络结构图如下:

有点惊讶,本来我也会以为YOLOv1这么厉害,肯定是一个让人眼花缭乱的网络,结果,好像不是我们想的这么回事儿。

受到GooleNet网络结构的启发,YOLOv1的网络结构中包含24个卷积层和2个全连接层。

就是这么简单粗暴,一看网络结构,平平无奇古天乐,不就是图像分类那一套嘛,卷积激活和池化,再来个全连接层。为什么这么简单的网络结构却能完成目标检测的任务?

具体细节我们留到下篇文章,但是我们可以预先简单的探讨一下这个问题。

可以明确一点,针对一幅图像,我们要对它进行检测,需要获取到三种结果,一个是预测框的位置坐标,一个是预测的类别还有相应的概率。

因此这本质上这是一个多回归问题。

我们知道CNN不仅可以做分类,回归任务它也是高手的,因此用CNN去得到预测框的位置坐标,一个是预测的类别还有相应的概率三种数据是可行的,只不过我们的思维中,一般网络得到的结果是一种,比如我用CNN做分类得到的就是分类结果嘛,用CNN做房价预测,得到的就是房价嘛,但是它其实是可以同时预测多种数据的。这也正是它能够一次性做完所有事情的关键!

至于它的多回归具体如何是实现的,我们下篇文章来具体分析。

欢迎大家关注我的个人gzh:阿龙AI日记

http://www.rkmt.cn/news/117808.html

相关文章:

  • 个人学习25.12.17 hunsec ctf-web week4
  • 如何用Java25编译Java17的项目
  • 国密加密在JQuery大文件上传中的实现思路与代码?
  • Java 日期时间处理详解
  • 揭秘volatile关键字:让Java并发编程不再“卡壳”
  • 深入JVM(三):JVM执行引擎
  • 工业边缘节点应用:DeepSeek处理实时产线数据的低功耗配置方案
  • 【课程设计/毕业设计】基于Java+SpringBoot的公务员助学系统的微信小程序基于springboot+微信小程序的公务员助学系统小程序的设计与实现【附源码、数据库、万字文档】
  • 供应链区块链 App 开发:从溯源逻辑到智能合约编写的流程
  • 快速幂算法的基础和扩展
  • 35、Linux 常见问题解答与技术要点解析
  • 36、LPI认证计划与Linux基础技能解析
  • Flutter 跨平台开发深度指南:从入门到原理全解析
  • Github Copilot 实战: 使用 Copilot AI + Blazor 编一个五子棋游戏
  • 探索逆合成孔径雷达稀疏成像:短孔径与压缩感知的奇妙融合
  • 小程序毕设项目:基于springboot+微信小程序的公务员助学系统小程序的设计与实现(源码+文档,讲解、 调试运行,定制等)
  • 技术成果的价值量化方法
  • 汇编语言全接触-33.RichEdit 控件基础知识
  • 【光照】[PBR][镜面反射]实现方法解析
  • 汇编语言全接触-32.多文档界面(MDI)
  • 《ZeroTier教程》02-使用docker部署自建PLANET和controller 二次开发ztncui控制面板
  • 西门子1500吉利(柯马)汽车SICAR项目程序源码分享
  • UNION和UNION ALL的区别是什么?
  • 从“十五五”规划建议看智慧医疗重点发展方向
  • 2025 Autel MaxiFlash JVCI+ J2534 ECU Programmer | IM608/Pro/Pro II ISO 22900 RP1210 Compliance
  • DAY27 pipeline管道
  • springboot框架对接物联网,配置TCP协议依赖,与设备通信,让TCP变的如此简单
  • 软件测试环境搭建全流程指南
  • 中国储能第一股赴美IPO,但工厂也得搬过去
  • Model Context Protocol(MCP)简介以及简单示例代码测试(.net8)