机器学习知识经验分享之三:基于卷积神经网络的经典目标检测算法

news2025/8/4 4:20:17

文章目录

  • 前言
  • 一、一阶段目标检测算法
    • 1.YOLO系列算法
    • 2.SSD检测算法
    • 3. RetinaNet检测算法
  • 二、两阶段目标检测算法
    • 1.Faster R-CNN检测算法
    • 2.Mask R-CNN检测算法
    • 3.Cascade R-CNN检测算法
  • 总结


前言

本系列文章将对机器学习知识进行分享总结。便于大家从理论层面了解人工智能基础原理,从而更好的运用算法发论文写作以及实际应用。关注即免费获取大量人工智能学习资料。


目前,深度学习被视为未来技术的趋势,并且在目标检测中起着重要的作用,新兴的基于卷积神经网络的目标检测算法可以粗略地分为两类。一种是一阶段的目标检测算法,可以在没有提案的情况下执行目标检测,例如YOLO v1-v3,单发多框检测器(Single-Shot Mulibox Detector, SSD)。另一个是两阶段的目标检测算法,它生成提案,然后对这些提案进行预测,例如R-CNN, Fast R-CNN, Faster R-CNN。

一、一阶段目标检测算法

1.YOLO系列算法

Redmon等人提出了YOLO算法,将目标检测问题转换为定位目标框和计算类别概率的回归问题。YOLO将目标检测视为回归问题,并将整个图像在空间上划分为固定数量的网格单元。每个单元均被视为一个提案来检测一个或多个目标。在原始实现中,每个单元都被认为包含(最多)两个对象的中心。对于每个单元格,进行的预测包括以下信息:该位置是否有目标,边界框坐标和大小(宽度和高度)以及目标的类别。整个框架是一个单一的网络,它省略了可以以端到端的方式进行优化的提案生成步骤。YOLO算法采用全卷积网络来提取特征,然后使用全连接层来得到预测值。网络结构参考GoogleNet模型,包含24个卷积层和2个全连接层。接着作者在YOLO的基础上,引入anchor, 利用k-means算法聚类来获得先验框,提出了YOLOv2,其中采用新设计的Darknet-19来作为骨干网络提取特征;接着在YOLOv2的基础上提出YOLOv3改进算法,它借鉴ResNet残差网络结构,使得网络深度更深,得到新的骨干网络Darknet-53,共53个卷积层;借鉴FPN特征金字塔,在网络后面三个台阶处,使用FPN结构,小尺寸上采样结合大尺寸特征图,以此来提升对小目标检测的性能。
在这里插入图片描述

2.SSD检测算法

SSD检测器[65]是由Liu等人提出的另外一种One-Stage检测器网络,如图2-10
所示。其网络使用多尺度特征图来针对不同尺度的目标。SSD同样采用YOLO中
的回归思想,直接对生成图像中目标的位置和类别做预测。在网络设计上,该方
法使用卷积层来得到预测值,取代了YOLO网络中的全连接网络。类似Faster
R-CNN中anchors实现的思想,对于每幅特征图划分为固定数目个特征图单元
(Feature Map Cells),其中每个特征图单元中生成多个固定尺寸的默认图(Default
Map),之后依据每个默认图在特征图单元中的特征信息来预测边框偏置(Offset)
以及图像分类预测值。通过网络结构设计,该网络抛去了Region Proposal部分,
从而实现了One-Stage检测,提高了检测速度,同时保持了检测器较优的检测精度。
在这里插入图片描述

3. RetinaNet检测算法

RetinaNet属于深度学习中的一阶段目标检测器,它可以看做是由 FPN和Focal Loss 组成的。一阶段检测器由于不生成提案来过滤简单的负样本,因此前景和背景之间的类别不平衡导致一阶段检测器进行分类的精度不高。Lin等人提出了一种一阶段检测器RetinaNet,它以更灵活的方式解决了类不平衡问题。RetinaNet的结构表示如图所示。RetinaNet使用聚焦损失(Focal Loss)对简单的分类样本赋予更小的权值,而对不易分类的样本赋予更大的权值来解决该问题。此外,它还使用特征金字塔网络来检测不同层级的特征图上的多尺度目标。 通过对类别样本不平衡问题的解决,RetinaNet获得了速度-精度更优的平衡,既拥有一阶段网络检测速度的优势,也获得了接近两阶段网络的检测精度。
在这里插入图片描述

二、两阶段目标检测算法

1.Faster R-CNN检测算法

2014年,Girshick提出的R-CNN方法首次将卷积神经网络应用于目标检测中,相比传统的目标检测方法取得了突破性的进展,推动了深度学习在目标检测上的研究。R-CNN算法分为四个步骤:1)采用Selective Search算法在图像上提取一千至两千个候选区域;2)由于全连接层的输入必须为固定尺寸的特征图,所以利用Selective Search算法提取出的候选区域需要将候选区域图片压缩成固定尺寸,再将提取出的候选区域作为卷积神经网络(CNN)的输入后输出区域的特征输入全连接层;3)使用SVM分类器对卷积神经网络所提取的候选区域的特征进行分类,根据该区域的特征判断是否存在目标以及所属的类别;4)使用非极大值抑制对窗口具体位置进行回归,修正选框位置。但是由于R-CNN对候选区域的特征提取与分类是对每一个候选区域生成图片所进行的,这样极大地减慢了目标检测的速度。而SSPNet[70]的出现解决了这个缺陷。SPPNet使用空间金字塔池化(Spatial Pyramid Pooling)将特征图变成固定的长度,然后将特征和原始图像中的候选区域建立映射关系,那么在对图像提取特征之后能通过该映射关系找出图像候选区域相对应的特征。不仅如此,它通过多个不同尺寸的池化层将特征变成相同的维度,从而将得到的固定长度的特征作为全连接层的输入。在此基础上,Girshick结合R-CNN与SSPNet的优点,提出了Fast R-CNN。
Fast R-CNN采用RoI pooling层使每个建议窗口生成固定尺寸的特征图。不仅如此,Fast R-CNN采用Softmax层代替SVM作为分类器对候选区进行判断,所以特征提取与分类器可以分别进行训练,提高了检测的速度与精度。 Ren等人对Fast R-CNN进一步改进,并提出了Faster R-CNN[68]。在Fast RCNN中,仍旧采用Selective Search方法生成大量的候选窗口,这类方法不仅缺乏检测的精度,更影响了检测的速度。而Faster RCNN中采用RPN结构生成候选窗口,同时采用anchor的机制来生成多尺度的候选窗口以适应对不同大小目标的检测。至此,Faster RCNN将目标检测过程中的候选区域产生、特征提取等过程都交由卷积神经网络完成,大大增强了检测的精度与提高了检测速度,Faster RCNN具体结构如图所示。
在这里插入图片描述

2.Mask R-CNN检测算法

Mask R-CNN是对Faster R-CNN的扩展,主要用于目标检测任务和实例分割任务,如今它已经成为实例分割任务的基线。Mask R-CNN具体结构如图所示,它根据提案并行预测边界框和分割蒙版。 Mask R-CNN在原有的分类分支和边界框分支上并行地增加了一个掩码分支。掩码分支是一个小型全卷积网络(FCN)并被应用于每个感兴趣区域(RoI),以像素到像素的方式预测实例掩码。具体来说,掩码分支通过四个卷积层和一个反卷积层从每个提案中生成小特征图。另外,Mask R-CNN将RoI Align替换原有的RoI Pooling,解决特征图和原始图像上的RoI不对准问题。
在这里插入图片描述

3.Cascade R-CNN检测算法

2018年蔡兆伟等人基于Faster R-CNN提出了新的方法Cascade R-CNN,并取得了可喜的结果,如图所示。Cascade R-CNN的成功可以归结为两个关键方面:(1)逐步完善预测;(2)训练分布的自适应处理。Cascade R-CNN通过多阈值级联机构,解决了传统单个网络设置阈值时对于高阈值正样本数量不够以及低阈值对于高IoU区域修正效果降低之间的矛盾。Cascade R-CNN算法的前半部分同Faster RCNN,是将一张原始的输入图像经过一个主干网络(卷积层),之后由RPN通过映射关系,生成一系列的可能存在目标的候选窗口,这时先将这些候选区域经过阈值为0.5的检测网络H1(此时正样本数量足够,可以保证模型不会过拟合,保障了准确率),将回归器修正后的新的候选区域重采样后再送入阈值为0.6的检测网络H2,之后再将H2(阈值为0.6的检测子网络)输出的新的区域位置送入阈值为0.7的检测网络H3进行修正,最
后H3得到的类别以及位置就是最终整个网络的输出结果,从而大大提高了位置的
准确性。
在这里插入图片描述

总结

本文介绍了基于卷积神经网络的经典目标检测算法,后续将持续进行分享更新机器学习相关知识。关注即免费获取大量人工智能学习资料。

参考文献:苏 浩. 基于深度学习的遥感图像目标检测方法[D].本文仅用于学术分享,侵权联系删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件被人后台篡改了收款码属于入侵吗?

最近很多做平台的小伙伴,碰到了同样的问题,就是软件程序后台被恶意篡改收款二维码 这个问题出现在平台主身上无疑是雪上加霜,第一时间找到了小蚁君,分析了一下当时的情况,先安装了小蚁的入侵检测系统,显示…

计算机毕业设计之java+ssm协同办公系统

项目介绍 本公司文档协同办公管理系统采用SSM(SpringSpringMVCMyBatis)框架开发,主要包括系统用户管理模块、用户信息模块、文件信息管理、个人事务管理、资料信息管理、登录模块、和退出模块等多个模块. 本系统主要包含了等系统用户管理、用户信息管理…

webpack5 PWA解决Web App 项目网络离线情况没法访问情况

为什么 开发 Web App 项目,项目一旦处于网络离线情况,就没法访问了。 我们希望给项目提供离线体验。 是什么 渐进式网络应用程序(progressive web application - PWA):是一种可以提供类似于 native app(原生应用程序) 体验的 Web App 的技术。…

Go语言中操作Redis

Redis介绍 Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。 除此之外,通过复制、持久化和客户端分片等特性,我们可以很方便地将Redis扩展成一个能够包…

Word控件Spire.Doc 【图像形状】教程(5) 如何在 C# 中将文本环绕在图像周围

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

frp篇---frp-notify + Gotify 实现 FRP 用户上线通知

frp-notify Gotify 实现 FRP 用户上线通知1. 安装frp_notify2. Gotify 配置3. frp-notify 配置启动 frp_notify开机自启动1. 安装frp_notify 一个专注于消息通知的 frp server manager plugin 实现,让你对进入 frps 的连接了如指掌,不再裸奔。 项目链…

SSM之Spring注解式缓存Redis

目录 Sprig整合Redis 导入相关pom依赖 添加对应的的配置文件 IEDA安装lombok插件 引入外部多文件 applicationContext.xml的整合配置文件 redis注解式缓存 Cacheable 测试类注解 Cacheable 的测试代码 CachePut CachePut测试代码 CacheEvict CacheEvict测试代码 Spr…

如何考察候选人 Vue 技术水平?

答对这些问题,检测你是否真正掌握了Vue 请说一下响应式数据的原理 默认 Vue 在初始化数据时,会给 data 中的属性使用 Object.defineProperty 重新定义所有属性,当页面到对应属性时,会进行依赖收集(收集当前组件中的 watcher)如果…

论文阅读【8】Conditional Random Fields: An Introduction

1.概述 1.1 论文相关 这篇论文是介绍一个经典模型,条件随机场(CRF)。在很多领域中都存在序列标注任务,例如生物信息识别,计算机语言学和语音识别任务,其中自然语言处理中的词性标注任何和命名实体识别任务…

JS 数据结构:链表

单链表 每个节点中只包含一个指针域的链表称为单链表。 头结点—其指针域指向表中第一个结点的指针(头结点不是必须的,只是习惯上加上头结点,而头结点的数据域一般记录的是该链表的相关数据,如:链表长度)…

Redis-Linux中安装Redis、命令操作Redis

目录 一、Redis简介 NoSQL与SQL的区别 二、Linux上安装redis 上传并解压redis.gz 进入 redis的解压目录,执行命令 make ​编辑 修改redis为守护进程 们测试一下能否远程连接RedisDesktopManager客户端 开放6379端口 授权,允许远程连接 三、redis命…

小程序上新(2022.10.13~11.14)

20221101 【官方公告】境外主体小程序补充信息存储地区通知20221103 小程序基础库 2.27.1 更新 新增 框架 新增 xr-fame 能力,kanata 更新 详情新增 组件 map 组件新增 bindrendersuccess 属性 详情 (官方文档还查不到这个)新增 API 新增 wx.getRendererUserAgen…

tep时隔8个月迎来重大全新升级

tep此次更新,旨在从“工具”升级为“框架”,为此做了大量的代码整洁工作,重新设计了部分功能,项目脚手架也焕然一新。 功能展示 conftest.py 脚手架生成的conftest.py只有一行代码: fixture自动加载等操作都隐藏到了te…

【学习笔记22】JavaScript数组的练习题

笔记首发 一、已知一个排序好的数组 将数字按照原有顺序插入到数组内 var arr [10, 20, 30, 40, 50];var n 11;// 1. 将n插入数组中arr.push(n);// 2. 冒泡排序for (var k 0; k < arr.length - 1; k) {for (var i 0; i < arr.length - 1 - k; i) {if (arr[i] > …

antd——使用a-tree组件实现 检索+自动展开+自定义增删改查功能——技能提升

之前写后台管理系统时&#xff0c;遇到一个下面的需求&#xff0c;下面是最终完成的效果图。 实现的功能有&#xff1a; 1. 下拉 选择不同的类型——就是一个普通的select组件&#xff0c;下面并不做介绍 2. 通过关键字可以进行tree树形结构的筛选&#xff0c;然后将筛选后的…

数据结构学习笔记——查找算法

目录前言一、查找的相关概念&#xff08;一&#xff09;内查找和外查找&#xff08;二&#xff09;静态查找和动态查找&#xff08;三&#xff09;平均查找长度二、线性查找&#xff08;一&#xff09;顺序查找1、查找思想2、算法分析3、有序表的顺序查找&#xff08;二&#x…

gitlab-runner 的安装使用(含 .gitlab-ci.yml 的简单使用)

简介 GitLab Runner 是一个开源项目&#xff0c;用于运行您的作业并将结果发送回 GitLab。它与 GitLab CI 一起使用&#xff0c;GitLab CI 是 GitLab 随附的开源持续集成服务&#xff0c;用于协调作业。 简单理解就是一个服务放在那儿&#xff0c;当你提交代码时&#xff0c;…

[附源码]java毕业设计在线课程网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

腾讯安全SOC+能力图谱正式发布,助力政企构建闭环安全运营体系

随着云计算、人工智能、5G等新兴技术的融合发展&#xff0c;数字化转型正成为企业数字经济时代的重要发展路径。然而&#xff0c;数字化转型过程中IT架构的重塑、安全产品体系化能力不足带来的安全运营挑战&#xff0c;使得企业在业务突破上面临安全瓶颈。 面对网络安全事件频…

做一个微信小程序需要多少钱?

做一个微信小程序需要多少钱&#xff1f; 如果是选择套用小程序模板&#xff0c;自建的方式的话&#xff0c;价格是在698-3498元一年的。 如果是代建小程序的话&#xff0c;需要在自建的费用上&#xff0c;再加上1500-12000元的代建费用。 下面主要给大家讲讲698-3498元这个…