【目标检测】入门基础原理学一遍就够了吧

news2024/11/16 23:50:09

我菜就爱学

在这里插入图片描述

文章目录

    • 目标检测实战
      • 1 目标检测简介
        • 1.1 目标检测分类
        • 1.2 检测的任务
        • 1.3 目标定位实现的思路
        • 1.4 两种bbox名称解释
      • 2 R-CNN
        • 2.1 目标检测-Overfeat模型
        • 2.2 目标检测-R-CNN模型
          • 2.2.1 候选区域(ROI)
          • 2.2.2 CNN网络提取特征
          • 2.2.3 特征向量训练分类器SVM
          • 2.2.4 非极大抑制(NMS)
          • 2.2.5 修正候选区域
        • 2.3 检测的评价指标
          • 2.3.1 平均精确率-map :类别考虑
        • 总结
      • 3 改进 - SPPNet
        • 3.1 提出SPP层,减少卷积计算
        • 3.2 映射
        • 3.3 spatial pyramid pooling(SSP)
      • 4 Fast R-CNN
        • 4.1 RoI pooling
        • 4.2 多任务损失 - Multi-task loss
        • 4.3 R-CNN 、SPPNet、Fast R-CNN 效果对比
      • 5 Faster R-CNN
        • 5.1 整体架构
        • 5.2 RPN
        • 5.3 anchosr生成的数目
        • 5.4 经过Proposal层
        • 5.5 ROI Pooling
        • 5.6 全连接层
      • 6 YOLO
        • 6.1 结构
        • 6.2 流程处理
      • 我想说:


目标检测实战

1 目标检测简介

1.1 目标检测分类

  • 两步走的目标检测:先进行区域推荐,而后再进行目标分类。R-CNN、SPP-net、

    说明:先对图像里面是物体的对象进行画框,然后对框内的对象进行目标检测

  • 端到端的目标检测:采用一个网络一步到位。YOLO、SSD

1.2 检测的任务

分类:

  • N个类别
  • 输入:图片
  • 输出:类别标签、物体的位置坐标
  • 评估指标:IOU

预测返回得出物体位置:bounding box(bbox):

  • x,y,w,h :x,y物体的中心点坐标,已经中心的距离物体两边的长宽
  • xmin,ymain,xmax,ymax:物体位置的左上角、右下角坐标

1.3 目标定位实现的思路

说明:分类的时候直接输出各个类别的概率,如果再加上定位,就在网络的最后输出层加上位置信息。如下:增加一个全连接层,即为FC1、FC2。FC1:作为类别的输出。FC2:作为这物体位置数值的输出。预测位置和目标值位置都是坐标,可以用MSE均方误差计算损失值。

在这里插入图片描述

1.4 两种bbox名称解释

  • GTbbox:图片真实目标位置
  • Predicted boundingh box :预测的时候标记的框位置
  • 分类定位:图片只有一个物体需要检测
  • 目标检测:图片中多个物体检测

2 R-CNN

说明:对于多个目标情况,不能以固定个数输出物体的位置值。如上FC1、FC2

2.1 目标检测-Overfeat模型

1)原始目标检测的暴力算法是从左到右,从上到下滑动窗口,利用分类识别目标。

说明:为了在不同观察距离处检测不同的目标类型,使用若干个不同大小和宽高比的窗口。这样就变成每张子图片输出类别以及位置,变成分类的问题。但是,滑动窗户需要初始设定一个固定大小的窗口。即需要提前设定k个窗口,每个窗口滑动提取M个,总共K * M个图片,直接将图像变形转换成固定大小的图像,变形图像块被输入CNN分类器中。

在这里插入图片描述

2.2 目标检测-R-CNN模型

说明:不使用暴力的方法,而是选用候选区域方法。

在这里插入图片描述

步骤(以AlexNet网络为准):

  • 对于一张图片,找出默认2000个候选区域,每个候选区域都resize成固定大小
  • 2000个候选区域做大小变换,输入AlexNet当中,得到特征向量。[2000,4096]->4096全连接层
  • 经过20个类别的SVM分类器,对于2000个候选区域做判断,预测出候选区域中所含物体的属于每个类的概率值,得到[2000,20]得分矩阵。
  • 对于2000个候选区域做NMS,取出不好的、重叠度高的一些候选区域,得到剩下分数高,结果好的框
  • 训练了一个边界框回归模型,修正候选框bbox(bbox的回顾微调)
2.2.1 候选区域(ROI)

选择性搜索:首先将每个像素作为一组。然后计算每一组的纹理,并将两个最接近的组结合起来。如下图所示:

在这里插入图片描述

得出的每一个候选框再做图像识别处理。selectiveSearch 在一张图片上提取约2000个候选区域,但是长宽不固定,不能直接输入alexNet。需要对这些候选区域做大小变换

2.2.2 CNN网络提取特征

在候选区域的基础上提取更高级、更抽象的特征,这些高级特征是作为下一步的分类器、回归的输入数据。提取的特征会保存在磁盘(保存磁盘会处理比较慢)上,便于SVM分类。

在这里插入图片描述

2.2.3 特征向量训练分类器SVM
  • 假设一张图片的2000候选区域,提取出来就是2000 x 4098特征向量。
  • R-CNN选用SVM进行分类,假设检测20个类别,就会提供20个不同分类的SVM分类器。每个分类器都会对2000个候选区域的特征向量 分别判断一次,得出[2000,20]个得分矩阵。
    在这里插入图片描述在这里插入图片描述
2.2.4 非极大抑制(NMS)

1)目的

筛选候选区域,目标是一个物体只保留一个最优的框,来抑制哪些冗余的候选框。思想是搜素局部最大值。

2)迭代过程

  • 对于所有的2000个候选区域得分进行概率筛选,假设小于0.5的抛出

  • 剩余的候选框

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

    • 如下图所示:每个边框都有他的概率,我们选出概率最高的边框进行高亮显示,然后NMS对剩下的矩形进行逐一扫描对比,所有跟这个高亮边框有很高的的交并比(下面解释),高度重叠的其他预测框都会被抑制。比如右边那个车辆,我们得到0.9的高亮框,因为0.6和0.7的两个高亮框跟0.9的这个IOU最高,因此我们要一直0.6和0.7的这两个高亮框使其变暗。左边汽车的处理方法同。然后经过NMS的处理,我们可以得到如下图所示的效果,即每个车辆身上只有一个预测框。
      在这里插入图片描述

3)IoU的理解

说明:两个区域的重叠程度overlap:候选区域和标定区域的IoU值。值区间[0,1]。然后设定阈值,阈值用来删除重叠较大的边界框

在这里插入图片描述
4)非极大值抑制的流程如下:

  • 根据置信度得分进行排序
  • 选择置信度最高的比边界框添加到最终输出列表中,将其从边界框列表中删除
  • 计算所有边界框的面积,计算置信度最高的边界框与其它候选框的IoU。
  • 删除IoU大于阈值的边界框
  • 重复上述过程,直至边界框列表为空。
2.2.5 修正候选区域

让候选框标注更准确,修正原理的位置。回归操作 用于修正筛选后的候选区域,使之回归ground-truth,默认认为这两个框是线性关系。根据下图:得到的候选区域跟参数重新计算一个预测值,然后和真实值计算得到损失函数,不断训练优化。

在这里插入图片描述

2.3 检测的评价指标

2.3.1 平均精确率-map :类别考虑

训练样本标记:候选框标记

  • 每个ground-truth box有着最高的IoU的anchor标记为正样本
  • 剩下的anchors与任何ground-truth box的IoU大于0.7为正样本,IoU小于0.3为负样本

定义:

mAP = 所有类别的AP之和/类别的总个数:AP1+AP2+…+AP20=mAP

方法步骤:(对于每个类别计算AP[AUC]的值)

  • 对于猫类别:候选框预测是猫类别的概率做一个排序,得到候选框排序列表(8个)
  • 对于猫当中候选排序列表(8个)进行AUC计算
  • 最终得到20个类别,20个AP相加求平均

总结

缺点:

  • 训练阶段多:步骤繁琐:微调网络+训练SVM+训练边框回归器
  • 训练耗时:占用磁盘空间大:5000张图片产生几百G的特征文件
  • 处理速度慢:vgg16模型处理一张图片花费17 s
  • 图像形状变化:候选区域要经过crop/warp进行固定大小,无法保证图片不变形

3 改进 - SPPNet

说明:SPP-Net是一种可以不用考虑图像大小,输出图像固定长度网络结构,并且可以做到在图像变形情况下表现稳定。

3.1 提出SPP层,减少卷积计算

说明:SPPNet把全图塞给CNN得到全图的feature map;让SS(选择性搜索)得到候选区域直接映射特征向量中对应的位置;映射过来的特征向量,经过SPP层(空间金字塔变换层),输出固定大小的候选区域特征向量。

在这里插入图片描述

3.2 映射

说明:原始图片经过CNN变成feature map,原始图片通过选择性搜索(SS)得到候选区域。映射过程如下:假设(x’,y’)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,转换关系如下:

  • 左上角的点:x’=[x/S]+1
  • 左上角的点:x’=[x/S]-1
  • S就是CNN中所有的strides的乘积,包含池化、卷积的步长。

在这里插入图片描述

3.3 spatial pyramid pooling(SSP)

说明:通过spatial pyramid pooling将特征图转换成固定大小的特征向量。补充:卷积层的参数和输入大小无关,它仅仅是一个卷积核在图像上滑动,不管输入图像多大都没关系,只是对不同大小的图片卷积出不同大小的特征图,但是全连接层的参数就和输入图像大小有关,因为它要把输入的所有像素点连接起来,需要指定输入层神经元个数和输出层神经元个数,所以需要规定输入的feature的大小。

示例:假设输入是224 x 224的图像,对于conv出来之后输出是13 x 13 x 256,其中某个映射的候选框假设为12 * 10 *256.

  • SPP网络层会把每一个候选区域(相近像素结合的区域)分成 1*1 、2 * 2、4 * 4三张子图。对于每个子图的每个区域分别做最大池化,得出的特征再连接到一起就是(16+4+1) x 256 = 5376结果。接着给全连接层做进一步处理。也就是说如下黑色图片代表卷积之后的特征图,然后利用上面的分块把图片分成16+4+1=21种不同的块。对于这21种不同的块,每块用最大池化提取一个特征,也就是取每个块的最大值,最后得到21维的向量。

在这里插入图片描述

缺点:

  • 训练依旧很慢,特征需要写入磁盘
  • 依旧分阶段训练网络,网络之间不统一训练。
  • 接下来,Fast R-CNN ,提出RoI pooling,然后整合整个模型,把CNN、Rolpooing、分类器、bbox回归几个模块整合在一起

Fast R-CNN 作为端到端网络的开始,整体优化目标函数。因为之前特征提取CNN的训练和SVM分类器的训练在时间上是先后顺序,两者的训练方式独立。

4 Fast R-CNN

步骤:

  • 首先:将整个图片输入到一个基础卷积网络,得到整张图的feature map
  • 将选择性搜索算法的结果RoI映射到feature map中
  • RoI pooling layer提取一个固定长度的特征向量,每个特征会输入到一系列全连接层,得到一个RoI特征向量(每一个候选区域做同样操作)
    • 传统softmax层进行分类,输出类别有k个类别加上背景类(不使用SVM了,不需要磁盘)
    • bounding box regressor

在这里插入图片描述

4.1 RoI pooling

说明:为了减少计算时间并且得出固定长度的向量,使用一种4 x 4 =16空间的盒子。其他的跟上面SPP差不多。

4.2 多任务损失 - Multi-task loss

两个loss损失函数相加做反向梯度运算

  • 对于分类loss:是一个N+1路的softmax输出,其中N是类别的个数,1是背景,使用交叉熵损失。
  • 对于回归loss:候选区域的位置,是一个4 * N路输出的regressor,也就是说对于每个类别都会训练一个单独的regressor,使用平均绝对误差(MAE)损失即L1损失。

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

在这里插入图片描述

5 Faster R-CNN

参考大佬链接

5.1 整体架构

  • conv layers:即特征提取网络,用于提取特征。通过一组conv+relu+pooling层来提取图像的feature maps,用于后续的RPN层和取proposal。
  • RPN(Region Proposal Network):即区域候选网络,该网络替代了之前RCNN版本的Selective Search(SS选择性搜索区域),用于生成候选框。这里任务有两部分,一个是分类:判断所有预设anchor是属于positive还是negative(anchor内是否有目标,二分类,也就是上面提到的跟IoU的阈值对比,大于阈值为正样本,否则为负样本);还有一个bounding box regression:修正anchors得到较为准确的proposals。因此,RPN网络相当于提前做了一部分检测,即判断是否有目标(具体什么类别这里不判),以及修正anchor使框的更准一些。
  • RoI Pooling:即兴趣域池化(SPP net中的空间金字塔池化),用于收集RPN生成的proposals(每个框的坐标),并从(1)中的feature maps中提取出来(从对应位置扣出来),生成proposals feature maps送入后续全连接层继续做分类(具体是哪一类别)和回归。
  • Classification and Regression:利用proposals feature maps计算出具体类别,同时再做一次bounding box regression获得检测框最终的精确位置。
    在这里插入图片描述

5.2 RPN

相对于Fast-R-CNN,该网络模型多了一个RPN层。
在这里插入图片描述
上层:主要是用于网络检测,一共18维(作者给的默认anchors=9,然后上层网络判断目标是否是背景,置信度多少即29=18),也就是anchors获得positive和negative分类。
下层:主要用于回归分析,调节参数,也是中心坐标(x,y)还有到边缘的宽和高的偏移量,也就是4
9=36维。
Proposal:负责综合positive anchors和对应的bbox偏移量获取的proposals。同时剔除太小和超出边界的proposal

5.3 anchosr生成的数目

论文中介绍,base_anchors=[0,0,15,15]生成9个anchors坐标如下:负数坐标会被舍弃

[[-84.,-40.,99.,55.]
[-176.,-88.,191,103.]
[-360.,-184.,375.,199.]
[-56.,-56.,77.,77.]
[-120.,-120.,135.,135.]
[-120.,-120.,135.,135.]
[-120.,-120.,135.,135.]
[-120.,-120.,135.,135.]
[-120.,-120.,135.,135.]]

那么原图输入是800 x 600,VGG下采样是16倍,feature map每个点 设置9个anchors,则一共有(800/16)x (600/16) x 9=17100
在这里插入图片描述

5.4 经过Proposal层

  • 生成anchors,对所有的anchors做bbox层回归
  • 按照输入的positive softmax scores 由大到小排序anchors,提取前N个anchors,即提取修正位置之后的positive anchors
  • 限定超出图像边界的positive anchors,防止下一层的roi pooling时超出图像边界
  • 剔除尺寸非常小的positive anchors
  • 对剩下的positive anchors进行NMS
  • 最后留下大约2000个anchors,然后提取前N个box进行下一层

5.5 ROI Pooling

  • 输入的是上一层产生的特征图(300个region proposal box)
  • 遍历每一个region proposal,将其坐标值缩小16倍,这样原图(1000600)基础上产生的region proposal映射到6040的特征图上,在feature map上确定一个区域。
  • 在feature map上确定的区域,然后将这个区域划分77,即49个相同大小的区域,对于每个区域使用maxpooling方式从中选取最大的像素点作为输出,这样就生成77的feature map
  • 300个遍历完之后,会生成很多feature map作为下一层全连接层的输入。

5.6 全连接层

在这里插入图片描述

  • 通过全连接和softmax对region proposal进行具体类别的分类
  • 再次对region proposal 进行bbox,获取高精度的box,也是最终的坐标。

6 YOLO

6.1 结构

说明:一个网络搞定一切,GooglNet + 4个卷积 +2个全连接层

在这里插入图片描述

6.2 流程处理

1)原始图片resize到448 x 448的大小,经过前面卷积网络之后,将图片输出成一个7 x 7 x 30结构

2)将图片分成7 x 7 的单元格,这里Up主用3 x 3 的图代替

7*7=49个像素值,看成49个单元格。

  • 每个单元格负者一个 预测物体类别,并且直接预测物体的概率值
  • 每个单元格预测两个(默认)bbox位置,两个bbox置信度 772=98.30=(4+1+4+1+20)表示4个坐标信息,1个置信度
    • 一个bbox : xmin ,ymin,xmax,ymax,confidence 4+1 共两个bbox
    • 20:代表20个类别
    • confidence score:如果grid cell类名木有object,confidence就是0;如果有,则confidence score 就等于预测的box和ground truth的IoU乘积。

在这里插入图片描述

3)然后对于每一个网格预测两个bbox

在这里插入图片描述

4)进行NMS筛选,筛选概率以及IoU

在这里插入图片描述

我想说:

上面可能介绍的许多技术或者算法都已经过时了,当时也是为了搞清楚一张图片是如何做到多目标的检测的。博客中可能也有很多错误或者我理解错误的地方,感谢指正。博客后面部分都是大论文,我只是过一遍处理流程,具体了解想通过代码复现应该理解更深刻吧。创造不易,一键三连~~

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

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

相关文章

vue2--基于zm-tree-org实现公司部门组织架构图

1.安装zm-tree-org npm i zm-tree-org -S2.引入使用 import Vue from vue; import ZmTreeOrg from zm-tree-org; import "zm-tree-org/lib/zm-tree-org.css";Vue.use(ZmTreeOrg);3.个人需求 组织架构图中:部门可拖动更改所属部门,可增加部门…

javascript学习+Vue学习+项目开发

一 《学习JavaScript数据结构与算法》 1.ES2015的类是基于原型语法的语法糖 2.TypeScript是一个开源的、渐进式包含类型的JavaScript超集 以.ts为扩展名 以tsc命令来编译它 TypeScript允许我们给变量设置一个类型,不过写法太啰唆了。 TypeScript有一…

博客系统——项目测试报告

目录 前言 博客系统——项目介绍 1、测试计划 1.1、功能测试 1.1.1、编写测试用例 1.1.2、实际执行步骤 1.2、使用Selenium进行Web自动化测试 1.2.1、引入依赖 1.2.2、提取共性,实现代码复用 1.2.3、创建测试套件类 1.2.4、博客登录页自动化测试 1.2.5、…

SQL注入报错注入之floor()报错注入原理分析

简介 对于SQL注入的报错注入通常有三个函数需要我们掌握: extractValue(xml_frag, xpath_expr)updateXML(xml_target, xpath_expr,new_xml)floor() 对于extractValue和updateXML函数来说比较好理解,就不做解释了,这里只对floor函数的报错注…

LabVIEW网络服务安全2

LabVIEW网络服务安全2在客户端应用程序中创建签名对请求进行签名要求您具有能够从客户端的编程语言调用的MD5摘要算法以及SHA256加密摘要算法的实现。这两种算法通常都可用于大多数平台。还需要:1. 要使用的HTTP方法的字符串(“GET”、“POST”、“PUT”…

收发器上的10G网络变压器有什么特殊要求?

Hqst盈盛电子导读:那么,为了保证我们购买到正常的真正的具备POE功能的10G网络变压器,我们又要如何做呢以及如何判断呢?随着高速以太网网络传速的快速发展,10G以太网,10G网络变压器滤波器在各个领域也得到了…

基于SpringCloud的可靠消息最终一致性05:保存并发送事务消息

在有了分布式事务的解决方案、项目的需求、骨架代码和基础代码,做好了所有的准备工作之后,接下来就可以继续深入了解「核心业务」了。 在前面了解分布式事务时,可靠消息最终一致性方案的流程图是这样的: 图三十一:可靠消息最终一致性 整个的流程是: 1、业务处理服务在事务…

GLSL shader学习系列1-Hello World

这是GLSL shader系列第一篇文章,本文学习目标: 安装编辑工具编写hello world程序 安装插件 我使用VSCode编写shader代码,在VSCode上有两个好用的插件需要先装一下: Shader languages support for VS Code glsl-canvas&#xf…

优维科技实力入选《2023深圳金融业信息技术融合创新案例汇编》

日前,由深圳市金融科技协会编制的《2023深圳金融业信息技术融合创新案例汇编》于“2022中国(深圳)金融科技全球峰会”正式对外发布,共汇编近90个优秀金融技术应用实践案例,优维科技凭借在“某银行自动化运维XC改造项目…

STM32——毕设智能感应窗户

智能感应窗户 一、功能设计 以STM32F103芯片最小系统作为主控,实现自动监测、阈值设定功能和手动控制功能。 1、自动监测模式下: ① 采用温湿度传感器,实现采集当前环境的温度、湿度数值。 ② 采用光敏传感器,实现判断当前的环境…

【数据库/MySQL】MySQL三大日志提要

MySQL三大日志 mysql常用日志 错误日志查询日志慢查询日志事务日志【redo log(重做日志)、undo log(回滚日志)】二进制日志【bin log】 MySQL日志中比较重要的包括redo log(重做日志)、binlog&#xff0…

Docker 网络详解

前置网络知识 OSI七层网络模型 从下到上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 交换机:处在第二次,也就是数据链路层。作用:通过一个或者多个设备将不同子网连接在一起,相互通信&am…

Ant Design Vue 如何添加时间选择框

第一步引入 组件 import JDate from /components/jeecg/JDate使用 重点代码 <j-date<a-col :span"24/2"><a-form-item :labelCol"labelCol" :wrapperCol"wrapperCol" label"验收日期"><j-date placeholder"…

Lesson9---回归问题

9.1 机器学习基础 课程回顾 Python语言基础Numpy/Matplotlib/Pandas/Pillow应用TensorFlow2.0 低阶API 即将学习 机器学习、人工神经网络、深度学习、卷积神经网络典型模型的TensorFlow2.0实现 9.1.1 机器学习 机器学习&#xff08;Machine Learning&#xff09;&#xf…

2023年湖北七大员证书查询网站是哪里?

一、湖北七大员是哪七大员&#xff1f; 湖北七大员分别是&#xff1a;施工员、质量员、资料员、材料员、标准员、劳务员和机械员。其中施工员和质量员分为&#xff1a;市政、土建、装饰装修和设备安装四个子专业&#xff0c;其他不分。 二、湖北七大员证书查询网站是哪里&#…

Node下载阿里OSS存储文件【不知目录结构】

前言&#xff1a;前端传模型ID&#xff0c;后台根据ID去阿里OSS存储下载对应文件&#xff08;不知文件内部层级结构&#xff0c;且OSS只能单个文件下载&#xff09;&#xff0c;打包成zip字节流形式返回给前端下载。 需求分析&#xff1a; 生成OSS文件关系树Node做文件下载存…

ClickHouse 相关面试题

文章目录什么是 ClickHouse&#xff0c;它的特点是什么&#xff1f;ClickHouse的数据存储方式是什么&#xff0c;它与传统的行式存储有什么区别&#xff1f;ClickHouse 引擎ClickHouse的数据模型是什么&#xff0c;它与传统的关系型数据库的数据模型有什么区别&#xff1f;Clic…

【TVM 学习资料】TensorIR 快速入门

本篇文章译自英文文档 Blitz Course to TensorIR 作者是 Siyuan Feng。更多 TVM 中文文档可访问→TVM 中文站 TensorIR 是深度学习领域的特定语言&#xff0c;主要有两个作用&#xff1a; 在各种硬件后端转换和优化程序。自动 tensorized 程序优化的抽象。 import tvm from…

kafka(一) 的架构,各概念

Kafka架构 Kafak 总体架构图中包含多个概念&#xff1a; &#xff08;1&#xff09;ZooKeeper&#xff1a;Zookeeper负责保存broker集群元数据&#xff0c;并对控制器进行选举等操作。 &#xff08;2&#xff09;Producer&#xff1a; 生产者负责创建消息&#xff0c;将消息发…

Kafka 概述

文章目录Kafka定义消息队列消息队列应用场景缓冲/消峰 场景解耦 场景异步通信 场景消息队列两种模式点对点模式发布/订阅模式 ***kafka基础架构Kafka定义 消息队列 目前企业中比较常见的消息队列产品主要有 Kafka、ActiveMQ 、RabbitMQ 、RocketMQ 等。在大数据场景主要采用 Ka…