目标检测理论知识

目标检测

1.基本概念

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

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

(1)分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。

(2)定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。

(3)检测-Detection:解决“在哪里?是什么?”的问题,即定位出这个目标的位置并且知道目标物是什么。

(4)分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。

所以,目标检测是一个分类、回归问题的叠加。

2. 目标检测的核心问题

(1)分类问题:即图片(或某个区域)中的图像属于哪个类别。

(2)定位问题:目标可能出现在图像的任何位置。

(3)大小问题:目标有各种不同的大小。

(4)形状问题:目标可能有各种不同的形状。

3. 目标检测算法分类

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

1)Tow Stage
先进行区域生成,该区域称之为region proposal(简称RP,一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。

任务流程:特征提取 --> 生成RP --> 分类/定位回归。

常见tow stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。

2)One Stage
不用RP,直接在网络中提取特征来预测物体分类和位置。

任务流程:特征提取–> 分类/定位回归。

常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。

目标检测原理

目标检测分为两大系列——RCNN系列和YOLO系列,RCNN系列是基于区域检测的代表性算法,YOLO是基于区域提取的代表性算法,另外还有著名的SSD是基于前两个系列的改进。

1. 候选区域产生

很多目标检测技术都会涉及候选框(bounding boxes)的生成,物体候选框获取当前主要使用图像分割与区域生长技术。区域生长(合并)主要由于检测图像中存在的物体具有局部区域相似性(颜色、纹理等)。目标识别与图像分割技术的发展进一步推动有效提取图像中信息。

1)滑动窗口
通过滑窗法流程图可以很清晰理解其主要思路:首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到的物体。
滑窗法简单易于理解,但是不同窗口大小进行图像全局搜索导致效率低下,而且设计窗口大小时候还需要考虑物体的长宽比。所以,对于实时性要求较高的分类器,不推荐使用滑窗法

2)选择性搜索
① 什么是选择性搜索
滑窗法类似穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的。学者们自然而然想到只对图像中最有可能包含物体的区域进行搜索以此来提高计算效率。选择搜索(selective search,简称SS)方法是当下最为熟知的图像bounding boxes提取算法,由Koen E.A于2011年提出。
选择搜索算法的主要思想:图像中物体可能存在的区域应该是有某些相似性或者连续性区域的。因此,选择搜索基于上面这一想法采用子区域合并的方法进行提取bounding boxes。首先,对输入图像进行分割算法产生许多小的子区域。其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常所说的候选框。

② 选择搜索流程
step0:生成区域集R
step1:计算区域集R里每个相邻区域的相似度S={s1, s2,…}
step2:找出相似度最高的两个区域,将其合并为新集,添加进R
step3:从S中移除所有与step2中有关的子集
step4:计算新集与所有子集的相似度
step5:跳至step2,直至S为空
③ 选择搜索优点
计算效率优于滑窗法
由于采用子区域合并策略,所以可以包含各种大小的疑似物体框
合并区域相似的指标多样性,提高了检测物体的概率 


2. 数据表示

经过标记后的样本数据如下所示:

预测输出可以表示为:


​其中Pc为输出结果的置信概率,bx,by,bw,bh为边框坐标,C1,C2,C3属于某个类别的概率。通过预测结果、实际结果,构建损失函数。损失函数包含了分类、回归两部分组成。

3. 效果评估

使用IoU(Intersection over Union,交并比)来判断模型的好坏。所谓交并比,是指预测边框、实际边框交集和并集的比率,一般约定0.5为一个可以接收的值。

4. 非极大值抑制

预测结果中,可能多个预测结果间存在重叠部分,需要保留交并比最大的、去掉非最大的预测结果,这就是非极大值抑制(Non-Maximum Suppression,简写作NMS)。如下图所示,对同一个物体预测结果包含三个概率0.8/0.9/0.95,经过非极大值抑制后,仅保留概率最大的预测结果。

R-CNN

算法流程

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

1.候选区域的生成

利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。 

2.对每个候选区域,使用深度网络提取特征

将2000候选区域缩放到227*227pixel,接着将候选区域事先训练好的AlexNet CNN网络获取4096维的特征得到2000*4096维矩阵。 

3.特征送入每一类的SVM分类器,判断类别

将2000*4096维特征与20个SVM组成的权值矩阵4096*20相乘,获得2000*20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000*20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

 在这个图中,2000*4096中4096代表每一个候选框经过CNN网络输出的特征向量,一共有2000个候选框,即为2000*4096;中间部分为SVM权值矩阵,每一列代表一个类别的权值向量,一共有20个,即为4096*20。

4.非极大值抑制剔除重叠建议框

 

5.使用回归器精细修正候选框位置

对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中的剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最好的bounding box。 

如图,黄色框P表示建议框Region Proposal,绿色窗G表示实际框Ground Truth,红色窗G^代表Region Proposal进行线性回归后的预测窗口,可以用最小二乘解决的线性回归问题。

RCNN存在的问题:

(1)测试速度慢

测试一张图片约53s(CPU)。用Selective Search算法提取候选框用时约2s,一张图像内候选框之间存在大量重叠,提取特征冗余。

(2)训练速度慢

过程极其繁琐

(3)训练所需空间大

对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOCO7训练集上的5

k图像上提取的特征需要数百GB的存储空间。 

FastR-CNN

定义

Fast R-CNN是基于R-CNN和SPPnets进行的改进。SPPnets,其创新点在于只进行一次图像特征提取(而不是每个候选区域计算一次),然后根据算法,将候选区域特征图映射到整张图片特征图中。

 流程

使用selective search生成region proposal,大约2000个左右区域候选框(joint training)缩放图片的scale得到图片金字塔,FP得到conv5的特征金字塔(joint training)对于每个scale的每个ROI,求取映射关系,在conv5中剪裁出对应的patch。并用一个单层的SSP layer来统一到一样的尺度(对于AlexNet是6*6)(joint training) 继续经过两个全连接得到特征,这特征又分别共享到两个新的全连接,连接上两个优化目标。第一个优化目标是分类,使用softmax,第二个优化目标是bbox regression,使用了一个平滑的L1-loss测试时需要加上NMS处理:利用窗口得分分别对每一类物体进行非极大值抑制提出重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口


改进

和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在VGG16上,Fast RCNN训练速度是RCNN的9倍,测试速度是RCNN的213倍;训练速度是SPP-net的3倍,测试速度是SPP-net的3倍
Fast RCNN在PASCAL VOC 2007上准确率相差无几,约在66~67%之间
加入RoI Pooling,采用一个神经网络对全图提取特征
在网络中加入了多任务函数边框回归,实现了端到端的训练


 缺点

依旧采用selective search提取region proposal(耗时2~3秒,特征提取耗时0.32秒)
无法满足实时应用,没有真正实现端到端训练测试
利用了GPU,但是region proposal方法是在CPU上实现的  

FasterR-CNN

同样使用VGG16作为网络的backbone,与RCNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%。

算法流程

整体流程

四步

  • Conv Layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的卷积/激活/池化层提取图像的特征,形成一个特征图,用于后续的RPN层和全连接层。
  • Region Proposal Networks(RPN)。RPN网络用于生成候选区域,该层通过softmax判断锚点(anchors)属于前景还是背景,在利用bounding box regression(包围边框回归)获得精确的候选区域。
  • RoI Pooling。该层收集输入的特征图和候选区域,综合这些信息提取候选区特征图(proposal feature maps),送入后续全连接层判定目标的类别。
  • Classification。利用取候选区特征图计算所属类别,并再次使用边框回归算法获得边框最终的精确位置。

Anchors

Anchors(锚点)指由一组矩阵,每个矩阵对应不同的检测尺度大小。如下矩阵

其中每行4个值(x 1 , y 1 , x 2 , y 2),对应矩形框左上角、右下角相对于中心点的偏移量。9个矩形共有三种形状,即1:1, 1:2, 2:1,即进行多尺度检测。

例如,一张800*600的原始图片,经过VGG下采样后(生成特征矩阵)16倍大小,大小变为50*38,每个点设置9个anchor,则总数为:

ceil(800 / 16) * ceil(600 / 16) * 9 = 50 * 38 * 9 = 17100

Bounding box regression

物体识别完成后,通过一种方式对外围框进行调整,使得和目标物体更加接近。

损失函数

对一个图像的损失函数,是一个分类损失函数与回归损失函数的叠加:

  • i是一个mini-batch中anchor的索引
  • pi 是anchor i 为目标的预测概率
  • ground truth标签pi*就是1,如果anchor为负,pi* 就是0
  • ti是一个向量,表示预测的包围盒的4个参数化坐标
  • Ncls是与正anchor对应的ground truth的坐标向量
  • Nreg为anchor位置的数量(大约2400),λ=10

分类损失函数:

 位置损失函数:

其中

 改进


在VOC2007测试集测试mAP达到73.2%,目标检测速度可达5帧/秒
提出Region Proposal Network(RPN),取代selective search,生成待检测区域,时间从2秒缩减到了10毫秒
真正实现了一个完全的End-To-End的CNN目标检测模型
共享RPN与Fast RCNN的特征


 缺点


还是无法达到实时检测目标
获取region proposal, 再对每个proposal分类计算量还是较大


版权声明:本文为CSDN博主「YEGE学AI算法」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yegeli/article/details/109861867

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搜索二叉树

单纯的二叉树,并不能体现出优秀的存储和查找能力,但是对二叉树附加一些规则, 就能让二叉树成为很高效的存储和查找的一种数据结构,所以今天会介绍,基于二 叉树和一些附加规则的树——搜索二叉树1.搜索二叉树 搜索二叉…

WINCC7.5-根据时间跨度选择趋势

yyyy-MM-dd hh:mm:ss “yyyy”:表示四位数的年份,例如:2022。 “MM”:表示两位数的月份,从01到12。 “dd”:表示两位数的日期,从01到31。 “hh”:表示12小时制的小时数,从…

maven之父子工程版本控制案例实战,及拓展groupId和artifactId的含义

<parent>标签 用于父子工程项目&#xff0c;什么是父子工程&#xff1f; 顾名思义&#xff0c;maven父子项目是一个有一个父项目&#xff0c;父项目下面又有很多子项目的maven工程&#xff0c;当然&#xff0c;子项目下面还可以添加子项目&#xff0c;从而形成一个树形…

第4天:基础入门-30余种加密编码进制amp;Webamp;数据库amp;系统amp;代码amp;参数值

第4天&#xff1a;基础入门-30余种加密编码进制&Web&数据库&系统&代码&参数值 一、知识点 1. 存储密码加密-Web&数据库&系统2. 传输数据编码-各类组合传输参数值3. 代码特性加密-JS&PHP&NET&JAVA4. 数据显示编码-字符串数据显示编码二…

Android APT的使用

Apt 介绍 APT(Annotation Processing Tool)是一种处理注释的工具,它对源代码文件进行检测找出其中的 Annotation&#xff0c;根据注解自动生成代码。 Annotation 处理器在处理 Annotation 时可以根据源文件中的 Annotation 生成额外的源文件和其它的文件(文件具体内容由 Annot…

c++实现策略模式

前言 看了一会儿大话设计模式&#xff0c;我感觉平常的话&#xff0c;策略模式还挺常用的&#xff0c;记录一下。个人理解策略模式&#xff0c;就是抽象一个算法&#xff0c;然后你可以有很多不同的实现&#xff0c;这些实现去重写抽象算法的虚方法。然后在一个上下文类中有一…

win10pycharm和anaconda安装和环境配置教程

windows10 64位操作系统下系统运行环境安装配置说明 下载和安装Anaconda&#xff0c;链接https://www.anaconda.com/download 下载完后&#xff0c;双击exe文件 将anaconda自动弹出的窗口全部关掉即可&#xff0c;然后配置高级系统变量 根据自己的路径&#xff0c;配置…

C++ Qt QLineEdit如何响应回车事件

在Qt开发中,回车键的处理很常见,本篇博客介绍在QLineEdit里回车键的处理方法,例如下面的界面: QLineEdit回车键的处理有方式,一是链接returnPressed信号,二是用事件过滤。下面分别介绍这两种方式。 一、returnPressed信号 可以查看QLineEdit的头文件声明,有如下信号:…

量化交易Copula建模应对市场低迷

一、简介 传统上,我们依靠相关矩阵来理解资产间的动态。然而,正如过去的市场崩盘所表明的那样,当风暴袭来时,许多模型都会陷入混乱。突然之间,相关性似乎趋于一致,而多样化这一经常被吹捧的风险管理口号似乎并没有提供什么庇护。 这种出乎意料的同步,即资产在经济低迷时…

服务器带宽忽然暴增,不停的触发告警

问题&#xff1a; 线上环境&#xff0c;服务器的外网下行带宽达到某个阈值&#xff0c;触发告警&#xff0c;查了下服务器的带宽监控信息&#xff0c;是从某个时间开始突然串上去的&#xff0c;然后监控图形非常有规律&#xff0c;都是每秒达到顶峰后&#xff0c;又立马下去了…

新一代构建工具Vite-xyphf

一、什么vite? vite:是一款思维比较前卫而且先进的构建工具,他解决了一些webpack解决不了的问题——在开发环境下可以实现按需编译&#xff0c;加快了开发速度。而在生产环境下&#xff0c;它使用Rollup进行打包&#xff0c;提供更好的tree-shaking、代码压缩和性能优化&…

基于tpshop开发多商户源码支持手机端+商家+门店 +分销+淘宝数据导入+APP+可视化编辑

tpshop多商户源码,tpshop商城源码,tpshop b2b2c源码-支持手机端商家门店 分销淘宝数据导入APP可视化编辑 tpshop商城源码算是 thinkphp框架里做的比较早 比较好的源码了&#xff0c;写法简明 友好面向程序猿。 这是一款前几年的版本 虽然后台看着好了些&#xff0c;丝毫不影响…

云安全与容器安全: 探讨在云环境和容器化应用中如何保护数据和工作负载的安全。

在当今数字化时代&#xff0c;云计算和容器化应用已经成为了企业业务的主要组成部分。这两项技术的普及&#xff0c;极大地提高了开发和部署的效率&#xff0c;但也带来了新的安全挑战。在本文中&#xff0c;我们将探讨云安全和容器安全的重要性&#xff0c;以及如何有效地保护…

2023-macOS下安装anaconda,终端自动会出现(base)字样,如何取消

2023-macOS下安装anaconda&#xff0c;终端自动会出现(base)字样&#xff0c;如何取消 安装后&#xff0c;我们再打开终端&#xff0c;就会自动出现了&#xff08;base&#xff09; 就会出现这样子的&#xff0c;让人头大&#xff0c; 所以我们要解决它 具体原因是 安装了anac…

外网远程登录之 NAT server

案例&#xff1a; 外网远程登录内网SW&#xff1a; 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1&#xff0c; 用户名和密码是&#xff1a;HCIE/hehe 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1&#xff0c; 用户名和密码是&#xff1a;HCI…

Centos下用nodejs实现一个简单的web服务器

WebRTC是音视频直播中最常用的一个框架&#xff0c;在使用的过程中&#xff0c;我们就需要实现一个服务器端。本文以nodejs实现一个服务器为例&#xff0c;讲述一下在centos下如何用nodejs实现一个简单的web服务器。 一、安装nodejs 在linux环境下安装nodejs有多重方式&#x…

C/C++奇数求和 2021年3月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C奇数求和 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C奇数求和 2021年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 计算非负整数 m 到 n&#xff08;包括m 和 n &#xff…

CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局

一、概述 操作系统是计算机系统的核心软件&#xff0c;它管理和控制着计算机的硬件和软件资源&#xff0c;为用户和应用程序提供了一个统一、高效、安全的运行环境。操作系统的发展历史也是计算机技术的发展历史的重要组成部分&#xff0c;它见证了计算机从单机到网络&#xf…

2、NLP文本预处理技术:词干提取和词形还原

一、说明 在上一篇文章中&#xff0c;我们解释了文本预处理的重要性&#xff0c;并解释了一些文本预处理技术。在本文中&#xff0c;我们将介绍词干提取和词形还原主题。 词干提取和词形还原是两种文本预处理技术&#xff0c;用于将单词还原为其基本形式或词根形式。这些技术的…

Linux 命令速查

Network ping ping -c 3 -i 0.01 127.0.0.1 # -c 指定次数 # -i 指定时间间隔 日志 一般存放位置&#xff1a; /var/log&#xff0c;包含&#xff1a;系统连接日志 进程统计 错误日志 常见日志文件说明 日志功能access-logweb服务访问日志acct/pacct用户命令btmp记录失…
最新文章