深度学习500问——Chapter08:目标检测(1)

news2024/11/15 8:38:15

文章目录

8.1 基本概念

8.1.1 什么是目标检测

8.1.2 目标检测要解决的核心问题

8.1.3 目标检测算法分类

8.1.4 目标检测有哪些应用

8.2 Two Stage 目标检测算法

8.2.1 R-CNN

8.2.2 Fast R-CNN

8.2.3 Faster R-CNN


8.1 基本概念

8.1.1 什么是目标检测

目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。

计算机视觉中关于图像识别有四大类任务:

  • 分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。
  • 定位-Location:解决“在哪里?”的问题,即定位出这个目标的位置。
  • 检测-Detection:解决“是什么?在哪里?”的问题,即定位出这个目标的位置并且知道目标物是什么。
  • 分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标或场景”的问题。

8.1.2 目标检测要解决的核心问题

除了图像分类之外,目标检测要解决的核心问题是:

  • 目标可能出现在图像的任何位置。
  • 目标有各种不同的大小。
  • 目标可能有各种不同的形状。

8.1.3 目标检测算法分类

基于深度学习的目标检测算法主要分为两类:

1、Two stage 目标检测算法

  • 先进行区域生成(region proposal,RP)(一个有可能包含待检测的预选框),再通过卷积神经网络进行样本分类。
  • 任务:特征提取→生成RP→分类/定位回归
  • 常见的two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R C-NN和R-FCN等。

2、One stage 目标检测算法

  • 不用RP,直接在网络中提取特征来预测物体分类和位置。
  • 任务:特征提取→分类/定位回归
  • 常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。

8.1.4 目标检测有哪些应用

目标检测具有巨大的实用价值和应用前景。应用领域包括人脸检测、行人检测、车辆检测、飞机航拍或卫星图像中道路的检测、车载摄像机图像中的障碍物检测、医学影响在的病灶检测等。还有在安防领域中,可以实现比如安全帽、安全带等动态检测,移动侦测、区域入侵检测、物品看护等功能。

8.2 Two Stage 目标检测算法

8.2.1 R-CNN

R-CNN有哪些创新点

  1. 使用CNN(ConvNet)对region proposal 计算 feature vectors。从经验驱动特征(SIFT、HOG)到数据驱动特征(CNN feature map),提高特征对样本的表示能力。
  2. 采用大样本下(ILSVRC)有监督预训练和小样本(PASCAL)微调(fine-tuning)的方法解决小样本难训练甚至过拟合等问题。

注:ILSVRC其实就是众所周知的ImageNet的挑战赛,数据量极大;PASCAL数据集(包含目标检测和图像分割等),相对较小。

R-CNN 介绍

R-CNN作为R-CNN的系列的第一代算法,其实没有过多的使用“深度学习”的思想,而是将“深度学习”和传统的“计算机视觉”的知识相结合。比如R-CNN pipeline中的第二步和第四步其实就属于传统的“计算机视觉”技术。使用selective search提取region proposals,使用SVM实现分类。

原论文中R-CNN pipeline只有4个步骤,光看上图无法深刻理解R-CNN的处理机制,下面结合图示补充相应文字:

1. 预训练模型。选择一个预训练(pre-trained)神经网络(如AlexNet、VGG)。

2. 重新训练全连接层。使用需要检测的目标重新训练(re-train)最后全连接层(connected layer)。

3. 提取proposals并计算CNN特征,利用选择搜索(Selective Search)算法提取所有proposals(大约2000幅images),调整(resize/wrap)它们成固定大小,以满足CNN输入要求(因为全连接层的限制),然后将feature map保存到本地磁盘。

4. 训练SVM。利用feature map训练SVM来对目标和背景进行分类(每一个类一个二进制SVM)。

5. 边界框回归(Bounding boxes Regression)。训练将输出一些校正因子的线性回归分类器。

R-CNN实验结果

R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的目标检测算法。

8.2.2 Fast R-CNN

Fast R-CNN有哪些创新点

  1. 只对整幅图像进行一次特征提取,避免R-CNN的冗余特征。
  2. 用Rol pooling层替换最后一层的max pooling层,同时引入建议框数据,提取相应建议框特征。
  3. Fast R-CNN网络末尾采用并行的不同的全连接层,可同时输出分类结果和窗口回归结果,实现了end-to-end的多任务训练(建议框提取除外),也不需要额外的特征存储空间(R-CNN中的特征相需要保存到本地,来供SVM和Bounding-box regression进行训练)。
  4. 采用SVD对Fast R-CNN网络末尾并行的全连接层进行分解,减少计算复杂度,加快检测速度。

Fast R-CNN 介绍

Fast R-CNN 是基于R-CNN和SPPnets进行的改进。SPPnets,其创新点在于计算整幅图像的the shared feature map,然后根据object proposal在shared feature map上映射到对应的feature vector(就是不用重复计算feature map)了。当然,SPPnets也有缺点:和R-CNN一样,训练是多阶段(multiple-stage pipeline)的,速度还是不够“快”,特征还要保存到本地磁盘中。

将候选区域直接应用于特征图,并使用Rol pooling将其转化为固定大小的特征图块。以下是Fast R-CNN的流程图:

Rol Pooling 层详解

因为Fast R-CNN使用全连接层,所以应用Rol Pooling将不同大小的ROI转换为固定大小。

Rol Pooling 是Pooling是一种,而且是针对Rol的Pooling,其特点是输入特征图尺寸不固定,但是输出特征图尺寸固定(如7x7).

什么是 Rol 呢

Rol是Region of Interest的简写,一般是指图像上的区域框,但这里指的是由Selective Search提取的候选框。

往往经过RPN后输出的不止一个矩形框,所以这里我们是对多个Rol进行Pooling。

Rol Pooling 的输入

输入有两部分组成:

  1. 特征图(feature map):指的是上面所示的特征图,在Fast RCNN中,它位于Rol Pooling之前,在Faster RCNN中,它是与RPN共享那个特征图,通常我们常常称之为“share_conv”;
  2. Rols:其表示所有的Rol的 N*5 的矩阵。其中N表示Rol的数量,第一列表示图像index,其余四列表示其余的左上角和右下角坐标。

在Faster RCNN中,指的是Selective Search的输出;在Faster RCNN中指的是RPN的输出,一堆矩形候选框,形状为 1x5x1x1 (4个坐标 + 索引index),其中值得注意的是:坐标的参考系不是针对feature map这张图的,而是针对原图的(神经网络最开始的输入)。其实关于ROI的坐标理解一直很混乱,到底是根据谁的坐标来。其实很好理解,我们已知原图的大小和由Selective Search算法提取的候选框坐标,那么根据“映射关系”可以得出特征图(feature map)的大小和候选框在feature map上的映射坐标。至于如何计算,其实就是比值问题,下面会介绍。所以这里把ROI理解为原图上 各个候选框(region proposal),也是可以的。

注:说句题外话,由Selective Search 算法提取的一系列可能含有object的bounding box,这些通常称为region proposals 或者 region of interest(ROI)。

Rol 的具体操作

1. 根据输入image,将ROI映射到feature map对应位置

注:映射规则比较简单,就是把各个坐标除以“输入图片与feature map的大小的比值”,得到了feature map上的box坐标。

2. 将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同)。

3. 对每个sections进行 max pooling 操作。

这样我们就i可以从不同大小的方框得到固定大小的相应的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。Rol Pooling最大的好处就在于极大地提高了处理速度。

Rol Pooling 的输出

输出是batch个vector,其中batch的值等于Rol的个数,vector的大小为channel * w * h;Rol Pooling的过程就是将一个大小不同的box矩形框,都映射成大小固定(w * h)的矩形框。

Rol Pooling 的示例

8.2.3 Faster R-CNN

Faster R-CNN 有哪些创新点

Fast R-CNN依赖于外部候选区域方法,如选择性搜索。但这些算法在CPU上运行且速度很慢。在测试中,Fast R-CNN需要2.3秒来进行预测,其中2秒用于生成2000个ROI。Faster R-CNN采用与Fast R-CNN相同的设计,只是它用内部深层网络代替了候选区域方法。新的候选区域网络(RPN)在生成ROI时效率更高,并且以每幅图像10毫秒的速度运行。

Faster R-CNN的流程图

候选区域网络

候选区域网络(RPN)将第一个卷积网络的输出特征图作为输入。它在特征图上滑动一个 3x3的卷积核,以使用卷积网络(如下所示的ZF网络)构建与类别无关的候选区域。其他深度网络(如VGG或ResNet)可用于更全面的特征提取,但这需要以速度为代价。

ZF网络最后会输出256个值,它们将馈送到两个独立的全连接层,以预测边界框和两个objectness分数,这两个objectness分数度量了边界框是否包含目标。

我们其实可以使用回归器计算单个objectness分数,但为简洁起见,Faster R-CNN使用只有两个类别的分类器:即带有目标的类别和不带有目标的类别。

对于特征图中的每一个位置,RPN会做k次预测。因此,RPN将输出 4xk 个坐标和每个位置 2xk 个得分。

下图展示了 8x8的特征图,且有一个 3x3 的卷积核执行运算,它最后输出 8x8x3 个ROI(其中k=3)。下图(右)展示了单个位置的3个候选区域。

假设最好涵盖不同的形状和大小。因此,Faster R-CNN不会创建随机边界框。相反,它会预测一些与左上角名为锚点的参考框相关的偏移量(如x,y)。我们限制这些偏移量的值,因为我们的猜想仍然类似于锚点。

要对每个位置进行k个预测,我们需要以每个位置为中心的k个锚点。每个预测与特定锚点相关联,但不同位置共享相同形状的锚点。

这些锚点是精心挑选的,因此它们是多样的,且覆盖具有不同比例和宽高比的现实目标。这使得我们可以用更好的猜想来指导初始训练,并允许每个预测专门用于特定的形状。该策略使早期训练更加稳定和简便。

Faster R-CNN使用更多的锚点

它部署9个锚点框:3个不同宽高比的3个不同大小的锚点(Anchor)框。每一个位置使用9个锚点,每个位置会生成 2x9 个 objectness分数的 4x9 个坐标。

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

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

相关文章

HCIP的学习(8)

OSPF数据报文 OSPF头部信息(公共固定) 版本:OSPF版本,在IPv4网络中版本字段恒定为数值2(v1属于实验室版本,v3属于IPv6)类型:代表具体是哪一种报文,按照1~5排序&#xff…

从MySQL5.7平滑升级到MySQL8.0的最佳实践分享

一、前言 升级需求:将5.7.35升级到8.0.27, 升级方式 in-place升级【关闭现有版本MySQL,将二进制或包替换成新版本并在现有数据目录上启动MySQL并执行升级任务的方式,称为in-place升级】 原版本 5.7.35 CentOS Linux release 7.9.2009 新版本…

常见的登录验证方式

目录 一、CookieSession登录 二、Tokencookie 三、单点登录(Single Sign On——一次登录,全线通用) 四、Oauth2.0 一、CookieSession登录 HTTP是一种无状态的协议,客户端每次发送请求时,首先要和服务端创建一个连接…

TMS320F280049 EPWM模块--功率拓扑中的应用(9)

三相交错DC-DC转换器 下图为示意框图。右侧为电路示意图,可以看到用了3路epwm,每路epwm的A/B两端口分别控制一个开关管。左侧为epwm配置示意图,可以看到epwm1在ctrzero时产生同步信号输出,然后同步到epwm2和3。epwm1/2/3的相位分…

【C++】C++11 lambda表达式

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 C11引入『 lambda表…

maven3.9+下载安装

maven介绍 Maven 是一个项目管理和理解工具,它基于项目对象模型(POM)概念。Maven 可以帮助开发者定义项目结构、依赖关系、构建过程以及其他任务。它主要用于 Java 项目,但也可以用于其他类型的项目。Maven 的主要目标是简化构建…

传感器展会现场直击!道合顺传感邀您共鉴气体传感器前沿技术

4月14日,#深圳国际传感器#与应用技术展览会在深圳会展中心(福田)如期举办。道合顺传感亮相本届大会并展示了对气体传感器的探索和最新研究成果,获得了传感器业内的广泛关注。 多年来,道合顺传感依托于雄厚的研发实力&a…

京东jd商品详情数据接口丨店铺所有商品接口丨评论接口丨京东API接口

京东(JD)作为中国的主要电商平台之一,提供了丰富的API接口供商家和开发者使用,以便获取商品详情、店铺所有商品以及评论等数据。使用这些接口时,你需要先成为京东的商家或开发者,并在京东开放平台注册账号&…

一个令人惊艳的图片高清化重绘神器:SUPIR来了!

今天给大家分享一个将模糊图片还原为照片级高清图像的AI项目:SUPIR。这个项目以尖端的大规模人工智能革新图像恢复技术,通过文本驱动、智能修复,将AI技术与创新思维相结合,赋予每张图像全新的生命力。这个项目的修复能力本质上是一…

Python 实战人工智能数学基础:图像处理应用

1.背景介绍 在许多计算机视觉任务中,图像处理占据了很重要的角色,尤其是在目标检测、特征提取、分类、跟踪等计算机视觉任务中。图像处理是一个复杂的过程,涉及到图像的采集、分析、存储、显示等环节。本文将讨论基于Python实现的图像处理的…

Solana主网使用自定义的RPC进行转账

1、引言 如果用 browser 连接主网的 RPC server 会收到 error code 403 message 為 Access forbidden, contact your app developer or supportrpcpool.com. 错误,因为主网的 RPC server 会检查 HTTP Header 如果判断出來是 browser 就会报告 403 錯誤。 要解決这…

2024年第十五届蓝桥杯C/C++B组复盘(持续更新)

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 试题A:握手问题问题描述思路 试题B:小球反弹问题描述思路…

函数与结构体

P2415 集合求和 题目描述 给定一个集合 s(集合元素数量≤30),求出此集合所有子集元素之和。 输入格式 集合中的元素(元素≤1000) 输出格式 s 所有子集元素之和。 输入输出样例 输入 2 3 输出 10 说明/提示【样…

Flutter - flutter_gen 资源管理

引言: 在开发 Flutter 应用时,我们经常需要使用各种静态资源,如图片、字体和音频等。如何有效地管理和加载这些资源呢?本篇博客将以图片为例带你解密 Flutter 项目中是如何管理资源地。 assets 加载资源 具体文件名引入 在工程…

软件杯 深度学习卷积神经网络的花卉识别

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…

L1-041 寻找250

对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。 输入格式: 输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。 输出格式: 在一行中输出第一次…

postman接口测试(入门到精通)

下载: postman官方地址 测试外部接口:测试被测系统和外部系统之间的接口。(只需要测试正例即可) 测试内部接口: 1.内部接口只提供给内部系统使用。(只需要测试正例即可) 2.内部接口提供给外…

Gradle 实战 - 插件-ApiHug准备-工具篇-015

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

Unity 人形骨骼动画模型嘴巴张开

最近搞Daz3D玩,导入后挂上动画模型嘴巴张开,其丑无比。 Google了一下,得知原因是Unity没有对下巴那根骨骼做控制,动画系统就会把它放到默认的位置,嘴巴就张开了。找到了3种解决办法。 1.移除动画中对下巴这个骨骼的转…

【深度学习】YOLO-World: Real-Time Open-Vocabulary Object Detection,目标检测

介绍一个酷炫的目标检测方式: 论文:https://arxiv.org/abs/2401.17270 代码:https://github.com/AILab-CVC/YOLO-World 文章目录 摘要Introduction第2章 相关工作2.1 传统目标检测2.2 开放词汇目标检测 第3章 方法3.1 预训练公式&#xff1a…