目标检测算法分类

2023-11-09

目标检测算法分类:

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效果对比:

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测算法分类 的相关文章

随机推荐

  • easyx图形库-----贴图技巧之透明贴图与位运算(与运算、或运算、异或运算)

    目录 位运算 1 与运算 2 或运算 3 异或运算 2 图形库颜色位运算与透明贴图实现 相关操作码 透明贴图的实现 我们都知道电脑的系统处理方式都是以二进制去处理的 每一个数据的背后都是二进制数字0跟1表示 那么这一期我就来介绍怎么去利用二
  • MFC 菜单 menu

    在网上看了怎样制作一个菜单 往往说的内容很多 但自己还是没看懂 今天看了一个公司前人写的一个程序 原来这么简单 给大家分享一下 就用一个基于对话框的MFC程序为例吧 首先 新建一个菜单 点击resource Dialog 右击insert
  • 视觉SLAM实践入门——(20)视觉里程计之直接法

    多层直接法的过程 1 读图 随机取点并计算深度 2 创建图像金字塔 相机内参也需要缩放 并计算对应点的像素坐标 3 应用单层直接法 使用G N L M等方法 或者使用g2o ceres库 进行优化 源码中有一些地方会引起段错误 修改方法见下
  • 嵌入式单片机基础篇(三十一)之Stm32F103与WiFi模块ESP8266 Station模式控制LED灯程序

    Stm32F103与WiFi模块ESP8266 Station模式控制LED灯程序 include stm32f10x h include string h include stdio h unsigned char UARTbuff 10
  • 富文本编辑器wangEditor的使用(即学即用)

    介绍 wangEditor 是一款基于JavaScript和CSS开发的Web富文本编辑器 其具有轻量级 简洁 易用的特点 当然 市面上有许多别的富文本编辑器 各有特点 本文专注于介绍wangEditor这一款富文本编辑器 首先明确一点 什
  • (三)目标检测之 R-CNN系列

    目标检测之 R CNN系列 前言 R CNN系列 一 R CNN https arxiv org abs 1311 2524 二 Fast R CNN https arxiv org abs 1504 08083 三 Faster R CN
  • 调用关卡蓝图上的接口函数

    本片博客实现的是不同蓝图之间用接口实现通信 下面用附上新建蓝图接口的大体步骤和实现的蓝图逻辑 新建蓝图接口 在蓝图接口里面新建函数 在关卡蓝图里面实现函数 如下图所示 然后在控件蓝图里面调用该接口 具体实现如下图
  • 加快android编译速度

    一 修改运行内存 进入项目 菜单栏 help Edit Custom VM Option Paste Image png 添加或修改为 Xms2048m Xmx2048m XX MaxPermSize 2048m XX ReservedCo
  • 数据可视化实例阅读分析

    一 任务要求 从教材或网络上找一个可视化实例 简要分析该实例 要求 1 根据可视化图反推出该图所依据的数据表并绘出 指出表中各列数据的属性 即类型 N O Q型 5分 2 找出可视化图形中的所有视觉变量 3分 3 分析从数据属性到视觉变量的
  • 使用haproxy 配置rabbitmq消息队列主从

    1 创建haproxy的配置文件 sudo vi etc haproxy ha rabbit conf 2 配置前向业务访问frontend 前置代理 bind 0 0 0 0 5672 绑定0 0 0 0的5672端口 mode tcp
  • 博物馆(展览馆)RFID信息化建设管理方案

    项目概述 基于博物馆 展览馆 RFID信息化建设管理方案 博物馆是征集 典藏 陈列和研究代表自然和人类文化遗产的实物的场所 并对那些有科学性 历史性或艺术价值的物品进行分类 为公众提供知识 教育和欣赏的文化教育机构 建筑物 地点或社会公共机
  • openresty ngx_lua定时任务

    openresty ngx lua定时任务 ngx timer every https github com openresty lua nginx module ngxtimerevery ngx timer at https githu
  • No implementation found for void java接口不能跳转到实现类

    No implementation found for void 前两天idea还是好的 现在就是不能跳转到impl实现类 总是提示no implementation found for void 后来通过百度发现 其实是idea的缓存在作
  • 【知识学习】马氏距离 Mahalanobis Distance

    目录 1 协方差的意义 2 马氏距离 2 1 概述 2 2 公式 2 3 实际意义 2 4 局限性 2 4 1 协方差矩阵必须满秩 不平衡数据少数类一般都不是 2 4 2 不能处理非线性流形 manifold 的问题 线性流形和非线性流形
  • JSON.parseArray报错

    JSON parseArray报错 com alibaba fastjson JSONException syntax error expect actual error pos 1 fastjson version 1 2 47 解决方案
  • 在JavaScript中确认字符串结尾的两种方法

    In this article I ll explain how to solve freeCodeCamp s Confirm the Ending challenge This involves checking whether a s
  • 有趣的xss靶场

    最近发现一个在线xss靶场 挺有趣的 靶场只有12关卡 上面还写了服务区原代码 对于想入门xss的小伙伴可以试着玩一玩 结果只要实现弹窗结果为1即可 链接在这里 https xss haozi me 0x00 server code fun
  • C++基础知识 - 异常处理机制

    异常处理的基本思想 C 的异常处理机制使得异常的引发和异常的处理不必在同一个函数中 这样底层的函数可以着重解决具体问题 而不必过多的考虑异常的处理 上层调用者可以再适当的位置设计对不同类型异常的处理 异常是专门针对抽象编程中的一系列错误进行
  • 代码审查最佳实践

    代码审查是一种出色的软件工具 您绝对应该使用它来提高代码质量 但是像其他任何工具一样 有时可能会误用它 这就是为什么我提出了一些最佳做法来指导您查看同行代码的原因 代码审查不是测试 代码审查是开发人员对开发人员的业务 它不涉及任何测试 代码
  • 目标检测算法分类

    目标检测算法分类 1 两步走的目标检测 先找出候选的一些区域 再对区域进行调整分类 代表 R CNN SPP net Fast R CNN Faster R CNN 2 端到端的目标检测 采用一个网络一步到位 输入图片 输出有哪些物体 物体