目标检测算法分类

article/2025/8/24 18:46:20

目标检测算法分类:

1、两步走的目标检测:先找出候选的一些区域,再对区域进行调整分类

                                      代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN

2、端到端的目标检测:采用一个网络一步到位,输入图片,输出有哪些物体,物体在什么位置

                                       代表:YOLO、SSD

目标检测的任务:

分类原理:

        如下是一张CNN组成图,输入一张图片,经过其中卷积、激活、池化相关层,最后加入全连接层达到分类概率的效果。

 分类的损失与优化:

        在训练的时候需要计算每个样本的损失,那么CNN做分类的时候使用softmax函数计算结果,损失为交叉熵损失

         对于目标检测来说不仅仅是分类这样简单的一个图片输出一个结果,而且还需要输出图片中目标的位置信息,所以从分类到检测,如下图标记了过程:

检测的任务:

分类:

        N个类别

        输入:图片

        输出:类别标签

        评估指标:Accuracy

定位:

        N个类别

        输入:图片

        输出:物体的位置坐标

        主要评估指标:IOU

        其中我们得出来的(x,y,w,h)有一个专业的名词,叫做bounding box(bbox) 

物体位置:

x,y,w,h:x,y:物体的中心点位置,以及中心点距离物体两边的长款

xmin,ymin,xmax,ymax:物体位置的左上角、右下角坐标

目标定位的简单实现思路:

        在分类的时候我们直接输出各个类别的概率,如果加上定位的话,我们可以考虑在 网络的最后输出加上位置信息。(增加一段全连接输出4个位置,做损失计算)

回归位置:

增加一个全连接层,即为FC1、FC2

FC1:作为类别的输出

FC2:作为这个物体位置数值的输出

         假设有10个类别,输出[p1,p2,p3,...,p10],然后输出这一个对象的四个位置信息[x,y,w,h]。同理要知道网络输出什么,如果衡量整个网络的损失

        对于分类的概率,还是使用交叉熵损失

        位置信息具体的数值,可使用MSE均方误差损失(L2损失)

如下所示:

两种Bounding box名称:

在目标检测当中,对bbox主要由两种类别。

        Ground-truth bounding box:图片当中真实标记的框

        Predicted bounding box:预测的时候标记的框

一般在目标检测当中,我们预测的框可能有多个,真实框也有很多个。

目标检测-Overfeat模型

滑动窗口:

目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。

        为了在不同观察距离处检测不同的目标类型,使用不同大小和宽高比的窗口

 注:这样就编程每张子图偏输出类别以及位置,变成分类问题。

但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,有些物体适应框不一样

         所以需要提前设定K个窗口,每个窗口滑动提取M个,总共K*M个图片,通常会直接将图像变形转换成固定大小的图像,变形图像块被输入CNN分类器中,提取特征后,我们使用一些分类器识别类别和该边界框的另一个线性回归器。

Overfeat模型总结:

        这种方法类似一种暴力穷举的方法,会消耗大量的计算力量,并且由于窗口大小问题可能会造成效果不佳,但是提供了一种解决目标检测问题的思路。

R-CNN:

        不使用暴力方法,而是用候选区域方法(region propasal method),创建目标检测的区域改变了图像领域实现五团体检测模型思路,R-CNN是以深度神经网络为基础的物体检测的模型。

(但是对于多个目标的情况,就不能以固定个数输出物体的位置值)

 步骤(以AlexNet网络为基准)

1、找出图片中可能存在目标的候选区域region proposal

2、将候选区域调整为适应AlexNet网络的输入图像的大小227*227,通过CNN对候选区域提取特征向量,2000个建议框的CNN特征组合成网络Alex*Net最终输出:2000*4096维矩阵

3、将2000*4096维特征经过SVM分类器(20种分类,SVM是二分类器,则有20个SVM),获得2000*20种类别矩阵。

4、分别对2000*20维矩阵中进行非极大值抑制(NMS:non-maximum suppression)提出重叠建议框,得到与目标物体最高的一些建议框

5、修正bbox,对bbox做回归微调

CNN网络提取特征:

在候选区域的基础上提取出更高级、更抽象的特征,这些高级特征是作为下一步的分类器、回归的输入数据。

 提取这些特征将会保存在磁盘中(这些提取的特征才是真正的要训练的数据)

特征向量训练分类器SVM:

1、假设一张图片的2000个候选区域,那么提取出来的就是2000*4096这样的特征向量(R-CNN当中默认CNN层输出4096特征向量)

2、R-CNN选用SVM进行二分类。假设检测20个分类,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样得出[2000,20]的得分矩阵,如下图所示

每个SVM分类器做的事情,判断2000个候选区域是某类别,还是背景

非极大抑制(NMS):

目的:筛选候选区域,目标是一个物体只保留一个最优的框,来抑制那些冗余的候选框

迭代过程:

1、对于所有的2000个候选区域得分进行概率筛选,0.5

2、剩余的候选框

                假设图片真实物体个数为2(N),筛选之后候选框为5(P),计算N中每个物体位置与所有P的交并比loU计算,得到P中每个候选框对应loU最高的N中一个

                如下图,A,C候选框对应左边车辆,B,D,E对应右边车辆

 

 假如现在滑动窗口有:A、B、C、D、E5个候选框

        第一轮:对于右边车辆,假设B是得分最高的,与B的loU>0.5删除。现在与B计算loU,DE结果>0.5,剔除DE,B作为一个预测结果。

        第二轮:对于左边车辆,AC中,A的得分最高,与A计算loU,C的结果>0.5,剔除C,A作为一个结果

最终结果为在这个5个中检测出了两个目标为A和B

SS算法得到的物体位置已经固定了,但是我们筛选出的位置不一定就真的特别准确,需要对A和B进行最后的修正

修正候选区域:

        那么通过非最大一直筛选出来的候选框就不一定非常准确怎么办?R-CNN提供了这样的方法,建立了一个bbox regressor

        回归用于筛选候选区域,使之回归于ground-truth,默认认为这两个框之间是线性关系,因为在最后筛选出来的候选区域和ground-truth很接近了。

修正过程(线性回归)

 

 

IoU交并比:

 IoU(交并比)

        两个区域的重叠程度overlap:候选区域和标定区域的IoU值

 通常Correct:类别正确且IoU>0.5

平均精确率:

训练样本的标记:候选框(如RCNN2000个)标记

        1、每个ground-truth box有着最高的IoU的anchor标记为正样本

        2、剩下的anchor/anchors与任何ground-truth box的IoU大于0.7记为正样本,IoU小于0.3,记为负样本

        定义:多个分类任务的AP的平均值

                mAP=所有类别的AP之和/类别约总个数

                注:PR曲线,而AP就是这个曲线下的面积(ROC与AUC)

方法步骤:

        1、对于其中一个类别C,首先将算法输出的所有C类别的预测框,按预测的分数confidence排序(RCNN中就是SVM的输出分数)

        2、设定不同的k值,选择top k个预测框,计算FP和TP,计算Precision和AP

        3、将得到的N个类别的AP取平均,即得到AP;AP是针对单一类别的,mAP是将所有类别的AP求和,再取平均

首先回顾精确率和召回率:

        左边一整个矩行中的表示ground truth之中为1的(即为正确的)数据

        右边一整个矩行中的数表示ground truh之中为0的数据

        精度precision的计算是用检测正确的数据个数/总的检测个数

 

 RCNN的缺点:

1、训练阶段多:步骤繁琐:微调网络+训练SVM+训练边框回归器

2、训练耗时:占用磁盘空间大:5000张图像产生几百G的特征文件(VOC数据集的检测结果,因为SVM的存在)

3、处理速度慢:使用GPU,VGG16模型处理一张图像需要47s

4、图像形状变化:候选区要经过crop/warp进行固定大小,无法保证图片变形

SPPNet:

SPPNet主要存在两点改进地方,提出了SPP层

        减少卷积计算

 

 映射:

        原始图片经过CNN变成feature map,原始图片通过选择性搜索(SS)得到了候选区域(Region of Interest),现在需要将基于原始图片的候选区域映射到feature map中特征向量。映射过程图参考如下:

 整个映射过程有具体的公式,如下

假设(x',y')(x',y')表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么他们之间有如下转换关系,这种映射关心与网络结构有关:(x,y)=(S*x',S*y'),即

左上角的点:x'=[x/S]+1

右下角的点:x'=[x/S]-1

其中S就是CNN中所有的strides的乘机,包含了池化、卷积的stride。

Fast R-CNN:

改进地方:提出一个Rol pooling,然后整合整个模型,把CNN、Rolpooling、分类器、bbox回归几个模块整个一起训练

 步骤:

1、首先将整个图片输入到一个基础卷积网络,得到整张图的fearure map

2、将选择性搜索算法的结果region proposal(Rol)映射到feature map中

3、Rol pooling layer提取一个固定长度的特征向量,每个特征会输入到一系列全连接层,得到一个Rol特征向量(此步骤是对每一个候选区域都会进行同样的操作)

        其中一个是传统softmax层进行分类,输出类别有K个类别加上“背景”类

        另一个是bounding box regressor

Rol pooling:

        首先Rol pooling只是一个简单版本的SPP,目的是为了减少计算时间并得出固定长度的向量。

 Rol池使用最大池化将任何有效的Rol区域内的特征转换成具有H*W的固定空间范围的小feature map,其中H和W是超参数它们独立于任何特定的Rol。

R-CNN、SPPNet、Fast R-CNN效果对比:

 

 


http://chatgpt.dhexx.cn/article/u4O3qwV9.shtml

相关文章

目标检测算法

目标检测算法 一、目标检测算法二、目标检测算法存在的问题三、目标检测算法的基本流程四、传统的目标检测算法1.Viola-Jones(VJ人脸检测算法)2.HOG SVM(行人检测,使用Opencv实现)3.DPM(物体检测&#xff…

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 转自:七月在线实验室 一、目标检测常见算法 object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。所以,object detection要解…

目标检测算法总结

一、基于候选区域的目标检测器 滑动窗口检测器 根据滑动窗口从图像中剪切图像块,把图像块处理成固定大小。随后输入CNN分类器中,提取特征。最后使用SVM分类器识别种类,并且用线性回归器得到边框。 选择性搜索selective search 首先将每个…

万字长文详解目标检测算法,超大超全(2022最新)

摘要 1 概述 2 目标检测回顾 2.1 two-stage 2.2 one-stage 3 目标检测配方 3.1 基础概念 3.1.1 损失函数 3.1.2 Anchor-based 和 Keypoint-based 3.1.3 NMS 3.2 目标检测中的挑战 4 目标检测中的Head 4.1 ThunderNet 4.2 You Only Look Once(YOLO) 4.3 Single Sh…

常见经典目标检测算法

1、目标检测基本概念 1.1 什么是目标检测 目标检测(Object Dectection)的任务是找出图像中所有感兴趣的目标(物体),确定他们的类别和位置。 1.2 目标检测要解决的核心问题 除图像分类外,目标检测要解决的核心问题是&#xff1a…

目标检测的各种算法总结

这里是引用腾讯云博客文章:一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 文章目录 一、目标检测常见算法二、传统的目标检测算法2.1 从图像识别的任务说起2.2 物体检测(Object Detection) 三、候选区域/窗 深度…

【NLP】预训练模型——GPT1

背景 废话不多说,先把三篇论文链接放出来:GPT1:Improving Language Understanding by Generative Pre-Training、GPT2:Language Models are Unsupervised Multitask Learners、GPT3:Language Models are Few-Shot Learners。李沐老师也在B站上放了介绍G…

ResNet50修改网络适应灰度图片并加载预训练模型

此博文是修改https://blog.csdn.net/jiacong_wang/article/details/105631229 这位大大的博文而成的,自己根据自己的情况稍微加了点东西 要修改的地方有4处 1.修改网络第一层,把3通道改为1 法一:直接在定义网络的地方修改 self.conv1 nn.…

TD-LTE R8 预编码学习笔记

预编码: MIMO系统中,当发射端通过某种方式获得一定的CSI(瞬时值,短期或中长期统计信息),就能通过一定的预处理方式对各个数据流加载的功率,速率乃至发射方向进行优化,并通过预处理在…

Task2-基于MobileaNet的预训练模型优化

##项目背景 mobilenet_v2_0.75_224 预训练模型是基于224224的训练集图片训练而来,需要通过imagenet 100M数据集把模型训练成适用于448448的预训练模型 ##思考的问题 1、预训练模型怎么使用和导入 2、如何在服务器上训练 3、如何把训练集弄出来 4、如何评价训练效果…

波束形成 基于对角加载的稳健自适应波束形成

前言 本人刚刚入门阵列信号处理的波束形成方向,因此仿真过程中可能会出现错误,如果诸位大佬发现仿真过程中有错误,请不吝指出谢谢。 对角加载(Diagonal Loading, DL)是一种比较常用的提高Capon波束形成器鲁棒性的方法,通过在样本协…

Unity大场景数据加载及优化方案

前段时间,有几个虚拟仿真公司跟我请教关于大地形的加载优化问题,它们使用的引擎都是自己研发的,引擎对于开发者来说,大同小异,它们的基本构造是一样的,关键是在于解决问题的方法,正是基于这个前…

预训练模型

目录 一、BERT1、贡献1.1 MLM任务1.2 NSP任务 2、实验细节 二、ALBERT1、贡献1.1 词向量分解1.2 层参数共享1.3 SOP任务 三、 ERNIE1、贡献2、实验细节2.1 语料2.2 MLM任务2.3 DLM任务 四、DistilBERT1、贡献2、实验细节 五、RoBERTa1、贡献2、实验细节2.1 动态mask2.2 去掉NSP…

改动模型后,加载部分预训练权重文件

加载部分预训练权重文件 最近在做姿态估计相关内容,需要将Hrnet模型修改,Hrnet是基于coco数据集训练的,coco数据集是17个关节点,而我需要的是15个关节点,在将数据集标好训练之后,发现由于数据量比较小&…

Pointer 0x0, not in getPreloadedDrawables android 系统资源预加载

Android系统在启动的时候,会对一些系统资源进行预加载。这样不仅使得应用程序在需要时可以快速地访问这些资源,还使得这些资源能够在不同应用程序之间进行共享。在硬件加速渲染环境中,这些预加载资源还有进一步优化的空间。Android系统提供了…

OpenCV | 基本矩阵操作

起因 在2013年1月份发行的OpenCV 2.4.4中,对Java的支持也正式发布。同时也有支持Python。 环境配置 这里的环境配置十分简单,在这里,操作系统64位,所以选这个,将里面的opencv_java342.dll负责到你本地下载的JDK的bin目录下,和JDK下的JRE目录下的bin目录下。 我使用的…

Android应用程序UI硬件加速渲染的预加载资源地图集服务(Asset Atlas Service)分析

我们知道,Android系统在启动的时候,会对一些系统资源进行预加载。这样不仅使得应用程序在需要时可以快速地访问这些资源,还使得这些资源能够在不同应用程序之间进行共享。在硬件加速渲染环境中,这些预加载资源还有进一步优化的空间…

预训练词嵌入

作者|ARAVIND PAI 编译|VK 来源|Analytics Vidhya 概述 理解预训练词嵌入的重要性 了解两种流行的预训练词嵌入类型:Word2Vec和GloVe 预训练词嵌入与从头学习嵌入的性能比较 介绍 我们如何让机器理解文本数据?我们知道机器非常擅长处理和处理数字数据,但如果我们向它们提供…

【论文整理】风格迁移中格拉姆矩阵(Gram Matrix)的使用

Gram矩阵在风格迁移中的使用 1、格拉姆矩阵的定义2、风格迁移的任务描述3、格拉姆矩阵的使用方法3、实现过程4、总结5、参考文献 1、格拉姆矩阵的定义 1) 什么是格拉姆矩阵: 在内积空间中,一组向量[v1, v2, … , vn]的格拉姆矩阵&#xff0…

Tensorflow加载Vgg预训练模型

很多深度神经网络模型需要加载预训练过的Vgg参数,比如说:风格迁移、目标检测、图像标注等计算机视觉中常见的任务。那么到底如何加载Vgg模型呢?Vgg文件的参数到底有何意义呢?加载后的模型该如何使用呢?本文将以Vgg19为…