目标检测概述

1.是什么?

目标检测是计算机视觉领域的核心问题之一,其任务就是找出图像中所有感兴趣的目标,确定他们的类别和位置。由于各类不同物体有不同的外观,姿态,以及不同程度的遮挡,加上成像是光照等因素的干扰,目标检测一直以来是一个很有挑战性的问题。

目标检测任务主要可以分为四个小任务:

(1)分类classification:给定一张图像,要知道里面包含什么类别的目标。

(2)定位location:给定这个目标在图像中的位置。

(3)检测detection:定位出目标的位置并判断这个目标的类别。

(4)分割segmentation:确定每个像素属于哪个目标或者场景。

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

2.发展历程

目标检测的发展可以划分为两个周期:

(1)传统目标检测算法(1998-2014):传统目标检测算法主要基于手工提取特征,具体步骤可概括为:选取感兴趣区域->对可能包含物体的区域进行特征分类->对提取的特征进行检测。虽然传统目标检测算法经过了十余年的发展,但是其识别效果并没有较大改善且运算量大,此处不再详细介绍。

(2)基于深度学习的目标检测算法(2014-):该方法主要分为Anchor-based的Two Stage和One Stage和Anchor-free两种思路

a)Two Stage:先预设一个区域,该区域称为Region Proposal,即一个可能包含待检测物体的预选框(简称RP),再通过卷积神经网络进行样本分类计算。该算法的流程是:特征提取 -> 生成RP -> 分类/回归定位。常见的Two Stage算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、R-FCN等,其特点是检测精度高,但是检测速度不如One Stage方法高。

b)One Stage:直接在网络中提取特征值来分类目标和定位。该算法的流程是:特征提取 -> 分类/回归定位。常见的One Stage算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、YOLOv5、SSD、RetinaNet等,其特点是检测速度快,但是精度没有Two Stage方法高。

c)Anchor-free:该方法通过确定关键点的方式来完成检测,大大减少了网络超参数的数量。

3.基础知识

3.1概述

 无论使用传统方法还是深度学习的方法来完成目标检测任务,一定要遵循三个步骤:检测窗口的选择+图像特征提取+分类器设计

3.1.1 候选框提取


候选区域(Region proposal),就是预先找出图中目标可能出现的位置,通过利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口的情况下保持较高的召回率。

Region Proposal方法比传统的滑动窗口方法获取的质量要更高。比较常用的Region Proposal方法有:SelectiveSearch(SS,选择性搜索)、Edge Boxes(EB)

边框回归(Bounding Box Regression):是对Region Proposal进行纠正的线性回归算法,目的是为了让Region Proposal提取到的窗口与目标窗口(Ground Truth)更加吻合。

候选框如何产生: 其实物体候选框获取当前主要使用图像分割与区域生长技术。区域生长(合并)主要由于检测图像中存在的物体具有局部区域相似性(颜色、纹理等)。目标识别与图像分割技术的发展进一步推动有效提取图像中信息。滑窗法作为一种经典的物体检测方法,不同大小的窗口在图像上进行滑动时候,进行卷积运算后的结果与已经训练好的分类器判别存在物体的概率。选择性搜索(Selective Search)是主要运用图像分割技术来进行物体检测。

滑窗法:

首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到的物体。

滑窗法简单易于理解,但是不同窗口大小进行图像全局搜索导致效率低下,而且设计窗口大小时候还需要考虑物体的长宽比。所以,对于实时性要求较高的分类器,不推荐使用滑窗法。

选择搜索:

滑窗法类似于穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的,这样搜索的效率就很低。

选择搜索算法观点:图像中物体可能存在的区域应该是有某些相似性或者连续性的,因此选择搜索采用子区域合并的方法进行提取边界框bounding box。

首先,对输入图像进行分割并产生许多子区域,其次,根据这些子区域之间的相似性(颜色、纹理、大小等)进行区域合并,由小变大,不断迭代并合并,每次迭代过程中对这些合并的子区域做外切矩形,这些子区域的外切矩形就是通常说的候选框。

自下而上,也就是从像素级开始检测,慢慢融合到比较大的位置。scale1 就是最小尺度上分割成很多小的区域(super pixel,超像素),把特征距离近的(如颜色比较像)的都融合到一起,产生比较大的区域。scale2 就是中间尺度上的分割和融合,能得到更大的区域,scale3同理。最后就产生了目标框。

选择性搜索的优点:

计算效率高于滑窗法
由于采用子区域合并策略,故可以包含各自大小的疑似物体框
合并区域相似的指标多样性,提高了检测物体的概率


3.1..2 特征提取


在选定候选区域之后,我们需要提取图像的特征来进行表达,传统的有监督的方法和以CNN为代表的无监督特征学习方法都可以派上用场。常见的传统特征有Haar特征、LBP、HOG等。这些特征都是研究人员通过长时间的学术研究和实际项目验证得来的,虽然在比较简单的任务中可以取得很好的结果,但是设计成本很高,而且面对复杂任务时鲁棒性远远不够。

3.1.3 分类器


常常被使用的分类器包含Adaboost,SVM,Decision Tree等。在很多时候单一的分类器可能并不能满足我们的要求,如今使用深度学习来完成各项任务,尤其是参加各类比赛的时候,一定会使用不同的模型不同的输入进行Ensemble。比如我们常见的使用不同的裁剪子区域进行预测,或者使用不同的基准模型进行预测,最后取平均概率等。

3.2 目标检测性能评估参数


3.2.1 Ground Truth

对于任何算法,度量总是需要与数据的真实值(ground truth)进行比较,对于物体检测问题,GT 包括图像,图像的目标类别及 图像中每个目标的边界框。对于下图,3组数字定义的GT表示了其真实值,包括起始点(左上角)的坐标(X,Y)、宽度、高度、类别。

3.2.2 IoU(交并比)

实际中如何判定预测框的正确性呢,首先需要知道每个检测的正确性,测定一个给定的边框的正确性的度量标准是IoU(交并比),也称检测评价函数。

我们使用IoU来确定检测是否正确需要一个阈值,最常用的是0.5,即如果IoU>0.5,则认为是真实的检测(true detection),否则认为是错误的检测(false detection)。

Precision(准确率/查准率P)和Recall(召回率/查全率R)

一般来说,P和R是不可兼得的,召回率越高,准确率越低。

TP:实际为正,且被预测为正的实例
FP:实际为负,但被预测为正的实例
TN:实际为负,且被预测为负的实例
FN:实际为正,但被预测为负的实例


3.2.3 PR曲线

一般来说我们希望这两个P和R都是越高越好,然而没有这么好的事情,两者是矛盾体,要根据不同的情况来选取好的平衡点才可以。根据学习器的预测结果对样本进行排序,排在前面的就被认为是最可能为正例的样本,然后按此顺序依次吧样本喂给学习器,我们把每次的准确率和召回率描出来就会得到一个P-R曲线(称为P-R图)。

如何评价P-R曲线:

1)如果一个曲线被另一个曲线包围,那么被包围的曲线更差些
2)两者有重叠,那就是判断曲线下面积的大小,但不太容易估算
3)找平衡点,就是找到准确率=召回率的点
4)F1度量,F 1 = 2 P R / ( P + R ) F1=2PR/(P+R)F1=2PR/(P+R)

AP(Average Precision)平均精度

AP通常用于计算平均的检测精度,用于衡量检测器在每个类别上的性能好坏。

3.2.4 mAP(mean Average Precision)平均精度的均值

mAP更多用于评价多目标的检测器性能,衡量检测器在所有类别上的性能好坏,即得到每个类别的AP值后再取所有类别的平均值。假设N个样本中有M个positive的正例,那么我们就会得到M个recall值(1/M,2/M,3/M…M/M),对于每个recall值r,我们可以计算出对应r’>r的最大的precision值,然后对这M个precision 值取平均即得到最后的AP值。计算过程如下表所示:

计算过程:

1)计算所有测试样本的confidence score,每一类的confidence score保存到一个文件中,假设有20个测试样本,每个的id和score及真值GT如下:

mAP(mean Average Precision)表示平均精度均值,该参数是PASCAL VOC 比赛中所明确的衡量标准,其含义是输出的结果是一个ranked list, 其中元素包含了类别、框的信息,以及置信度(confidence),置信度用来进行排序,比方说我给出一个框,说我有99%的信心这里有一个猫,结果这里没有,相比我给出一个框,说我有10%的信心这里有一个猫,结果也没有,这两个框的惩罚(penalty)和奖励(reward)不能一样的。因为99%信心说有,结果没有,那就说明这个系统很有问题。反之,假如我给出一个框,99%的信心说有一个猫,然后真有猫,相比10%信心说有猫,结果也是有猫,这两个框也不一样。也就是越“靠谱”,reward越大。所以我们根据confidence进行排序之后,就应该给排名靠前的结果,也就是confidence比较大的一些更大的权重。

3.2.5. NMS(非极大值抑制)

其目的是为了清除多余的框,找到最佳的物体检测的位置。

 

红色框是可能的检测结果,如何从红色的框中选择最好的最接近的框,就使用NMS来确定最准确的位置。

每个红色的框都会有一个得分,保留得分最大的框。

一般都会使用NMS对生成的大量候选框进行后处理,去除冗余的候选框,得到最佳检测,上图中,每个b-box都会有4个坐标值和1个前景/背景得分,如果是100类的目标检测模型,输出向量为5+100=105。

NMS算法过程:根据候选框的类别分类概率做排序,假设有4个b-box,其置信度A>B>C>D
先标记最大概率框A是算法要保留的b-box
从A 开始,分别计算与其他框的交并比,和阈值t做比较,如果大于阈值,则舍弃,假设D被舍弃
从BC中,选择概率最大的B标记为保留,然后判读C和B的重叠度,如果超过,则舍弃
一直重复进行,标记完所有要保留的框

NMS是保证每个目标只保留一个预测的b-box,一般的NMS,对于某个类别c,将所有预测的b-box根据得分做一个降序排列,从最大的框开始计算该框与其他框的IoU,若IoU大于阈值t,则舍弃,说明重合度太高,重复进行最终保留一个。

缺点:

NMS算法中的最大问题就是它将相邻检测框的分数均强制归零(既将重叠部分大于重叠阈值Nt的检测框移除)。在这种情况下,如果一个真实物体在重叠区域出现,则将导致对该物体的检测失败并降低了算法的平均检测率(average precision, AP)。
NMS的阈值也不太容易确定,设置过小会出现误删,设置过高又容易增大误检。
NMS一般只能使用CPU计算,无法使用GPU计算。
NMS保留-得分最高的预测框,并将与当前框重叠大于阈值的候选框看做冗余,

hard mining:在一个mini-batch里边,容易让分类器混淆的实例,就会标记成hard mining(难以区分的),用到下一轮训练中。
 

参考:

【目标检测】1、基础内容

目标检测的基本概念与原理

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FL Studio21.2演示版下载

FL Studio 21.2 带有 stem 分离和 FL Cloud,这是一项专为 FL Studio 打造的具有里程碑意义的新服务。其他新功能包括 FL Studio Fruity Edition 的 Audio Clips(音频剪辑)和一个新的模拟建模合成器 Kepler。 为庆祝 FL Studio 21.2 的发布&am…

【C语言】指针那些事(上)

C语言系列 文章目录 文章目录 一. 字符指针 一.(1 ) 数组创建空间的地址和指针指向的地址 二. 指针数组 二.(1)指针数组模拟一个二维数组 ​ 三. 数组指针 三.(1)数组指针到底有什么用 对一维数组没有什么用 二.(…

React-表单受控绑定和获取Dom元素

一、表单受控组件 1.声明一个react状态 说明&#xff1a;useState const [value,setValue]useState("") 2.核心绑定流程 2.1绑定react状态 <div><input value{value}type"text"></input> 2.2绑定onChange事件 说明&#xff1a;e.…

Java工具库——Commons IO的50个常用方法

工具库介绍 Commons IO&#xff08;Apache Commons IO&#xff09;是一个广泛用于 Java 开发的开源工具库&#xff0c;由Apache软件基金会维护和支持。这个库旨在简化文件和流操作&#xff0c;提供了各种实用工具类和方法&#xff0c;以便更轻松地进行输入输出操作。以下是 Com…

python:使用Scikit-image对遥感影像进行傅里叶变换特征提取(fourier)

作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行傅里叶变换特征提取(fourier),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 傅里叶变换特征提取是一种数学工具,用于将图像中的细节、纹理和边缘信息以不同频率的方式呈现…

关爱通分享丨三大步九小步—重构管理价值链,驱动福利进阶

企业人才素质不断提升&#xff0c;对生活品质和精神层面的追求越来越高&#xff0c;也倒推企业不断改善管理、健全福利制度&#xff0c;激发员工的积极性和创造力。企业成本激增&#xff0c;但预期价值未能完全实现&#xff0c;为此&#xff0c;笔者在价值驱动管理理念的基础上…

PostgreSQL 基础知识

执行环境&#xff1a; psql 1. 创建一个表格 CREATE TABLE customers ( customer_id serial PRIMARY KEY,firstname VARCHAR(100) NOT NULL,lastname VARCHAR(100) NOT NULL,username VARCHAR(50) UNIQUE NOT NULL,password VARCHAR(50) NOT NULL,email VARCHAR(255) UNIQUE …

FreeRTOS 中断管理介绍和实操

目录 中断定义 中断优先级 相关注意 中断相关函数 1.队列 2.信号量 3.事件标志组 4.任务通知 5.软件定时器 中断管理实操 中断定义 中断是指在程序执行的过程中&#xff0c;突然发生了某种事件&#xff0c;需要立即停止当前正在执行的程序&#xff0c;并转而处理这个…

内网穿透工具之NATAPP(一)

使用工具前&#xff0c;有必要了解一下什么是内网穿透吧&#xff01; 内网穿透简单来说就是将内网外网通过natapp隧道打通,让内网的数据让外网可以获取。比如常用的办公室软件等&#xff0c;一般在办公室或家里&#xff0c;通过拨号上网&#xff0c;这样办公软件只有在本地的局…

手写RPC框架

文章目录 什么是RPC框架RPC框架中的关键点通信协议序列化协议动态代理和反射 目前已有的RPC框架手写RPC框架介绍项目框架项目执行流程项目启动 什么是RPC框架 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;, 简单来说遵循RPC协议的就是RPC框架. …

基于小安派AiPi-Eye-S1的Nes游戏机

1.作品展示 作品功能可见以下B站视频 外壳可以使用灰太狼大佬提供的外壳STL文件。在嘉立创三维猴上打印&#xff08;外壳12元快递6元&#xff09;。 外壳从以下的帖子中获取&#xff1a; 模型分享 2.作品说明 2.1 硬件部分 硬件上使用到了AiPi-Eye-S1开发板以及3.5寸 240*3…

rust学习——智能指针

智能指针 在各个编程语言中&#xff0c;指针的概念几乎都是相同的&#xff1a;指针是一个包含了内存地址的变量&#xff0c;该内存地址引用或者指向了另外的数据。 在 Rust 中&#xff0c;最常见的指针类型是引用&#xff0c;引用通过 & 符号表示。不同于其它语言&#xf…

【Redis】Docker部署Redis数据库

Docker部署Redis数据库 1. Redis介绍2. CentOS 7 安装 & Docker 配置3. 拉取Redis 镜像、创建容器3.1 配置Docker镜像源3.2 拉取Redis 镜像3.3 容器创建 1. Redis介绍 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用…

新一代AI技术,引领医疗智能革新共筑未来医疗生态

加快推进数字化转型&#xff0c;是我国抢抓新一轮科技革命和产业变革机遇的必然选择&#xff0c;数字化转型已不是“选择题”&#xff0c;而是关乎生存和长远发展的“必修课”。在此目标下&#xff0c;公共服务领域迎来深刻变革&#xff0c;医院也不例外&#xff0c;数字经济的…

力扣每日一题73:矩阵置零

题目描述&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2…

MySQL 5.7限制general_log日志大小

背景 需求&#xff1a; 在MySQL 5.7.41中开启general_log 并限制其大小&#xff0c;避免快速增长占用硬盘空间。 解决&#xff1a; 通过定时任务&#xff0c;执行简单的脚本&#xff0c;判断general_log 日志的大小&#xff0c;实现对通用查询日志的“每日备份”或“每日清…

基于群居蜘蛛算法的无人机航迹规划

基于群居蜘蛛算法的无人机航迹规划 文章目录 基于群居蜘蛛算法的无人机航迹规划1.群居蜘蛛搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用群居蜘蛛算法来优化无人机航迹规划。 …

如何使用 Docker 搭建 Jenkins 环境?从安装到精通

不少兄弟搭 jenkins 环境有问题&#xff0c;有的同学用 window, 有的同学用 mac&#xff0c; 有的同学用 linux。 还有的同学公司用 window, 家里用 mac&#xff0c;搭个环境头发掉了一地。。。 这回我们用 docker 去搭建 jenkins 环境&#xff0c;不管你是用的是什么系统&…

一文5000字从0到1使用Jmeter实现轻量级的接口自动化测试(图文并茂)

接口测试虽然作为版本的一环&#xff0c;但是也是有一套完整的体系&#xff0c;有接口的功能测试、性能测试、安全测试&#xff1b;同时&#xff0c;由于接口的特性&#xff0c;接口的自动化低成本高收益的&#xff0c;使用一些开源工具或一些轻量级的方法&#xff0c;在测试用…

【PointNet—论文笔记分享】

第一个直接基于原始点云数据进行分割、分类的模型&#xff0c;之前都是基于多视图或者体素的方式。 论文: PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation代码: TensorFlow版 Pytorch版 基本模型架构&#xff1a; 分别对每个点进行特征提取…