常见经典目标检测算法

article/2025/8/24 18:41:34

1、目标检测基本概念

1.1 什么是目标检测

目标检测(Object Dectection)的任务是找出图像中所有感兴趣的目标(物体),确定他们的类别和位置。

在这里插入图片描述

1.2 目标检测要解决的核心问题

除图像分类外,目标检测要解决的核心问题是:
1.目标可能出现在图像的任何位置。
2.目标有各种不同的大小。
3.目标可能有各种不同的形状。

1.3 目标检测算法分类

  • Two stage目标检测算法
    先进行区域生成(region proposal,RP)(一个可能包含待检测物体的预选框),再通过卷积神经网络进行样本分类。
    任务:特征提取->生成RP->分类/定位回归。
    常见Two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN和R-FCN等。
  • One stage 目标检测算法
    不用RP,直接在网络中提取特征来预测物体分类和位置。
    任务:特征提取->分类/定位回归。
    常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv3、SSD和RetinaNet等。
    在这里插入图片描述

1.4 应用领域

  • 人脸检测
  • 行人检测
  • 车辆检测
  • 道路检测
  • 障碍物检测
  • 等等

2、Two stage 目标检测算法

2.1 R-CNN

2.1.1 R-CNN 创新点

  • 使⽤CNN(ConvNet)对 region proposals 计算 feature vectors。从经验驱动特征(SIFT、HOG)到数据驱动特征(CNN feature map),提⾼特征对样本的表⽰能⼒。
  • 采⽤⼤样本下(ILSVRC)有监督预训练和⼩样本(PASCAL)微调(fine-tuning)的⽅法解决⼩样本难以训练甚⾄过拟合等问题。

注:ILSVRC其实就是众所周知的ImageNet的挑战赛,数据量极⼤;PASCAL数据集(包含⽬标检测和图像分割等),相对较⼩。

2.1.2 R-CNN 介绍

R-CNN作为R-CNN系列的第⼀代算法,其实没有过多的使⽤“深度学习”思想,⽽是将“深度学习”和传统的“计算机视觉”的知识相结合。⽐如R-CNN pipeline中的第⼆步和第四步其实就属于传统的“计算机视觉”技术。使⽤selective search提取region proposals,使⽤SVM实现分类。
在这里插入图片描述

  1. 预训练模型。选择一个预训练模型(pre-trained)神经网络(如AlexNet、VGG)。

  2. 重新训练全连接层使用需要检测的目标重新训练(re-train)最后全连接层(connected layer)。

  3. 提取prosals并计算CNN特征。利用选择性搜索(Slective Search)算法提取所有prosals(大约2000幅images),调整(resize/warp)它们固定大小,以满足CNN输入,然后将feature map保存到本地磁盘。在这里插入图片描述

  4. 训练SVM。利用feature map训练SVM来对目标和背景进行分类(每个类一个二进制SVM)。

  5. 边界框回归(Bounding boxes Regression)。训练将输出一些校正因子的线性回归分类器。在这里插入图片描述

2.1.3 R-CNN实验结果

R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的⽬标检测算法。
在这里插入图片描述

2.2 Fast R-CNN

2.2.1 Fast R-CNN有哪些创新点?

  1. 只对整幅图像进行一次特征提取。
  2. RoI pooling层替换最后⼀层的max pooling层,同时引⼊建议框数据,提取相应建议框特征。
  3. Fast R-CNN⽹络末尾采⽤并⾏的不同的全连接层,可同时输出分类结果和窗⼝回归结果, 实现了end-to-end的多任务训练【建议框提取除外】,也不需要额外的特征存储空间【RCNN中的特征需要保持到本地,来供SVMBounding-box regression进⾏训练】。
  4. 采⽤SVD对Fast R-CNN⽹络末尾并⾏的全连接层进⾏分解,减少计算复杂度,加快检测速度。

2.2.2 Fast R-CNN 介绍

Fast R-CNN是基于R-CNN和SPPnets进⾏的改进。SPPnets,其创新点在于计算整幅图像的the shared feature map,然后根据object proposal在shared feature map上映射到对应的feature vector(就是不⽤重复计算feature map了)。当然,SPPnets也有缺点:和R-CNN⼀样,训练是多阶段(multiple-stage pipeline)的,速度还是不够"快",特征还要保存到本地磁盘中。

将候选区域直接应⽤于特征图,并使⽤RoI池化将其转化为固定⼤⼩的特征图块。以下是Fast R-CNN的流程图
在这里插入图片描述

2.2.3 RoI Pooling 层详解

因为Fast R-CNN使⽤全连接层,所以应⽤RoI Pooling将不同⼤⼩的ROI转换为固定⼤⼩。
RoI Pooling 是Pooling层的⼀种,⽽且是针对RoI的Pooling,其特点是输⼊特征图尺⼨不固定,但是输出特征图尺⼨固定(如7x7)

  • 什么是RoI呢?
    RoI是Region of Interest的简写,⼀般是指图像上的区域框,但这⾥指的是由Selective Search提取的候选框。
  1. 提取候选框在这里插入图片描述
    往往经过RPN后输出的不⽌⼀个矩形框,所以这⾥我们是对多个RoI进⾏Pooling。
  2. RoI Pooling的输入
    输⼊有两部分组成:
    1. 特征图(feature map):指的是上⾯所⽰的特征图,在Fast RCNN中,它位于RoI Pooling
      之前,在Faster RCNN中,它是与RPN共享那个特征图,通常我们常常称之
      为“share_conv”;
    2. RoIs,其表⽰所有RoI的N*5的矩阵。其中N表⽰RoI的数量,第⼀列表⽰图像index,其余四
      列表⽰其余的左上⾓和右下⾓坐标。

在Fast RCNN中,指的是Selective Search的输出;在Faster RCNN中指的是RPN的输出,⼀堆矩形候选框,形状为1x5x1x1(4个坐标+索引index),其中值得注意的是:坐标的参考系不是针对feature map这张图的,⽽是针对原图的(神经⽹络最开始的输⼊)。其实关于ROI的坐标理解⼀直很混乱,到底是根据谁的坐标来。其实很好理解,我们已知原图的⼤⼩和由Selective Search算法提取的候选框坐标,那么根据"映射关系"可以得出特征图(featurwe map)的⼤⼩和候选框在feature map上的映射坐标。⾄于如何计算,其实就是⽐值问题,下⾯会介绍。所以这⾥把ROI理解为原图上各个候选框(region proposals),也是可以的。

2.2.4 RoI 的具体操作

  1. 根据输入image,将ROI映射到feature map 对应位置
    注:映射规则比较简单,就是把各个坐标除以“输入图片与feature map的大小的比值”,得到了feature map上的box坐标。
    2.将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同)
    3.对每个sections进行max pooling操作。

这样我们就可以从不同大小的方框得到固定大小的相应的feature maps。值得⼀提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。RoI Pooling 最大的好处就在于极大地提高了处理速度。

2.2.5 ROI Pooling的输出

输出是batch个vector,其中batch的值等于ROI的个数,vector的大小为channelwh;ROI Pooling的过程就是将一个个大小不同的box矩形框,都映射成大小固定(w*h)的矩形框。
ROI Pooling 示例
在这里插入图片描述

2.3 Faster R-CNN

2.3.1 Faster R-CNN有哪些创新点?

Fast R-CNN依赖于外部候选区域⽅法,如选择性搜索。但这些算法在CPU上运⾏且速度很慢。在测试中,Fast R-CNN需要2.3秒来进⾏预测,其中2秒⽤于⽣成2000个ROI。Faster R-CNN采用与Fast R-CNN相同的设计,只是它⽤内部深层⽹络代替了候选区域⽅法。新的候选区域⽹络(RPN)在⽣成ROI时效率更⾼,并且以每幅图像10毫秒的速度运行。
Faster R-CNN流程图在这里插入图片描述
候选区域⽹络(RPN)将第⼀个卷积网络的输出特征图作为输⼊。它在特征图上滑动⼀个3×3的卷积核,以使用卷积⽹络(如下所示的ZF网络)构建与类别⽆关的候选区域。其他深度⽹络(如VGG或ResNet)可⽤于更全⾯的特征提取,但这需要以速度为代价。ZF网络最后会输出256个值,它们将馈送到两个独立的全连接层,以预测边界框和两个objectness分数,这两个objectness分数度量了边界框是否包含⽬标。我们其实可以使⽤回归器计算单个objectness分数,但为简洁起⻅,Faster R-CNN使⽤只有两个类别的分类器:即带有⽬标的类别和不带有⽬标的类别。
在这里插入图片描述


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

相关文章

目标检测的各种算法总结

这里是引用腾讯云博客文章:一文读懂目标检测: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为…

混淆矩阵、准确率、F1和召回率的具体实现及混淆矩阵的可视化

utils专栏不会细讲概念性的内容,偏向实际使用,如有问题,欢迎留言。如果对你有帮助就点个赞哈,也不搞什么粉丝可见有的没的,有帮助点个赞就ok 1、混淆矩阵、准确率、F1和召回率的计算 混淆矩阵 对于混淆矩阵的计算…

预编码技术

预编码的基本原理 TD-LTE下行传输采用了MIMO-OFDM的物理层构架,通过最多4个发射天线并行传输多个(最多4个)数据流,能够有效地提高峰值传输速率。LTE的物理层处理过程中,预编码是其核心功能模块,物理下行共…

pytorch 计算混淆矩阵

混淆矩阵是评估模型结果的一种指标 用来判断分类模型的好坏 预测对了 为对角线 还可以通过矩阵的上下角发现哪些容易出错 从这个 矩阵出发 可以得到 acc ! precision recall 特异度? 目标检测01笔记AP mAP recall precision是什么 查全率是什么 查准率…

Code::Blocks 相关

文库上的使用教程 http://blog.csdn.net/JGood/article/details/5252119 使用手册 http://blog.csdn.net/liquanhai/article/details/6618300 一.Code::blocks Code::blocks集成开发环境是一个支持编译、链接、调试许多种语言的IDE,支持VS6.0到VS200…

mysql8 sql_mode去掉only_full_group_by

1.查询版本与sqlmode: select version(), sql_mode; 2.修改sqlmode,执行下面两句代码: set global sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION;set session sql_modeSTRICT_TRANS_TABLES,NO_…