总结各种物体检测算法

article/2025/10/16 8:58:24

第一,覆盖所有基于区域的目标检测算法,包括:Fast RCNN, Faster-RCNN, Mask RCNN, R-FCN, FPN.

第二, 介绍SSD算法(single shoot detectors)

第三,介绍所有算法的表现和实现细节。

Part1 我们从基于区域的物体检测器中学到了什么?Part2 我们从SSD中学习到什么?Part3如何选择设计思路以及目标检测趋势

首先介绍滑动窗口检测器 sliding-windows detectors,(在基于anchor机制的RPN网络中使用滑动窗口和此处的滑动窗口作用不一样,后面会介绍)

最先使用物体检测器时,是使用暴力遍历所有方块(这些方块就是靠滑动窗口从左到右,从上到下使用分类算法判断这个窗口内的东西是不是我们想要的内容)。为了检测各种距离下的不同物体类型,我们使用不同大小的窗口和不同比率。

每滑动一次分出这部分的patch块,我们变形每个块到固定大小再输入到多个分类器。然而,我们训练不同的分类器来处理变形的图像是不会影响分类精度的。变形的图像块输入到CNN网络中来提取4096个特征图。然后使用SVM(one vs all)来识别类别以及使用另外的线性回归器来收紧bounding box.

伪代码:

for window in windows:patch = get_patch(image, window)results = detector(patch)

再介绍一下windows框框选择的算法:selective search(SS)

代替了原始暴力方法,我们使用一种提议区域方法 (SS) 来生成感兴趣区域(regions of interest ROI). 在SS方法中,开始时我们以每个独立的像素作为自己的组,然后,计算每个组的纹理并结合两个最相近的像素到一个组。但为了避免出现平凡解(只有一个区域),我们首先更倾向于首先聚集更小的组。我们一直合并这些小组直到该合并的小组都合并完了,在下面第二行的蓝色矩形框展示了处理过程中产生的所有可能的ROI 区域。绿色方框是我们想要检测的目标物体。


RCNN:

鼻祖RCNN,利用提议区域方法来生成大约2000个ROI。这些区域变形到规定大小图像并“喂到”训练好的CNN网络中。得到图像的feature maps后连接到全连接层来分类物体,并缩小其boundary box(by regressor)。




ROIs = region_proposal(image)
for ROI in ROIs:patch = get_patch(image, ROI)results = detectors(patch)

Boundary box Regressor:

区域提议方法是密集计算型(很明显看出来每张图片要提出2000个区域再输入到CNN中,在分类、回归,计算量太大),为了加速过程,我们经常挑一些计算不复杂的区域提议方法来生成ROI ,然后输入到一个线性回归模型(使用全连接层,全连接层也就是线性回归模型Wx + b)来进一步限定boundary box.

Fast RCNN

原RCNN需要很多的提议来更精确,但是其中有很多是重叠的。RCNN在训练和推断过程中都是很慢,当我们有2000个提议时每个提议区域块都需要单独地输出到CNN网络,也就是我们重复2000次特征提取过程。

在CNN中的特征图表示在更加密集的空间中的空间特征。我们思考能不能使用feature map来代替原图检测物体呢?



这就是Fast RCNN的创新点:不去从每个图像块中提取特征,而是使用一个特征提取器(一个CNN网络)来为整个图像提取特征。然后我们在特征图上应用区域提议方法。例如FastRCNN 选择从VGG16架构的conv5得到的featuremap中,来生成ROI区域,然后结合对应的特征图来构成物体检测的块。我们将生成的块变形到规定大小,使用ROIpooling 操作并将块输入到全连接网络用来分类和定位。



伪代码如下:

feature_maps = process(image):
ROIs = region_proposal(feature_maps)
for ROI in ROIs:patch = roi_pooling(feature_maps, ROI)results = detector(patch)

FastRCNN 使用多任务损失(multi-task loss)来计算总损失。

介绍下ROI pooling,和max/ average pooling的性质类似,目的是降维,便于管理,减少网络参数和运算次数(间接控制过拟合),是网络对输入图像的微小变换、失真、和平移更鲁棒(因为取的是最大值或者平均值),还能得到尺度不变的图像(无论物体在图像的哪个地方都可以检测)

但是ROI pooling主要是为了变形那些ROI区域到一个固定大小块。

具体流程(将8*8的feature map转换到2*2大小):下面四张图右上角表示我们使用ROI(蓝色)感兴趣的框框框定featuremap.

左下:我们分离ROI区域到目标维度。例如想要2*2 的目标区域,我们将ROI划分成4个小节具有相同或相似的大小。

右下:找到每个小节上最大的值放入到目标块上,就得到了我们变形的特征图。


总结:fast RCNN的贡献在于将原来分散的模块,统一到一个网络当中,并使用图像输入到CNN的特征图来提取特征块,网络只需要训练一次,推断也很快,并使用ROI pooling得到目标大小的块。 

接下来就是Faster RCNN:

Fast RCNN 的主要缺点还是在于需要一个外部的区域提议算法类似SS。然而,这些算法在CPU上很慢,在测试时FastRcnn处理每张图片需要2.3秒,其中2秒都是用来生成2000个ROI。

那么Faster RCNN就是为了避免这个问题而应运而生, Faster 和Fast的结构几乎一致,除了Faster使用一个内部网络RPN来代替原来的SS区域提议方法。RPN在生成ROI时比ss快10ms。其实也没快多少(所以还有继续做文章,例如简历一个稀疏表达方法,来约束众多的提议区域,还有使用NMS非极大值抑制)。




RPN网络以卷积网络的特征图输出作为输入。使用3*3filters在特征图上滑动来生成不可知类别的提议,使用一个类似ZF网络的卷积网络。其他网络如VGG or ResNet 可以被用来更全面的特征提取。ZF网络输出256个值,并将其输入到两个分离的全连接层来预测一个boundary box 和2个物体打分。这个物体打分衡量这个box中是否包含物体(前景和背景)。我们可以使用一个回归器来计算单个物体分数但是太简单了,Faster使用一个分类器具有两个可能的类别:一个是有物体,一个没有物体(背景类别)。


对特征图上每个定位,RPN生成K个猜测,因此RPN输出4*K个坐标(包括左下角的xy, 还有框框的height,width)还有2*k(前景和背景类别)的打分在每个定位上。

下面图例显示了8*8的特征图,使用3*3的卷积核,输出总共8*8*3(k = 3)个ROI感兴趣区域。右边的图显示了在每个定位上生成的3中提议。


我们得到3个猜测并且允许之后更精确我们的猜想。当我们只需要一个是正确的时候,若初始的猜测很不一样的话我们将更好的抛弃。因此Faster 不能生成随机的boundary box 提议。而是去预测一个抵消补偿offset(不是很懂???)deltaX, deltaY, 和一些参考的box的左上角相关 称为anchors(这个也不是很懂,我经常看到的是一群点,先做个聚类,聚类中心称为anchor,图像中的anchor是个啥,还需要看看源码去,留坑),但是这些补偿值的约束下,我们猜测一定程度上和anchor相关。


为了预测每个位置的k个预测,我们需要k个锚点,其锚点在每个位置的中心。每个预测关联这一个特定的锚点,但不同的定位共享相同的锚点形状。


这些锚点都是很仔细的预筛选后,所以他们多种多样的,覆盖了实际生活中不同尺度和比例的物体形状。这个知道初始训练使用更好的猜测并允许每个预测在一个特定形状中确定下来。这种策略使得训练更稳定和简单。

Faster使用很多锚点。部署了9个锚点框:3中不同尺度,三种不同比率。ZF网络提取256特征,每个位置使用9个锚点,生成2*9个物体打分和4*9的坐标。



其实Anchor也称为先验或者是默认的boundary boxes。



http://chatgpt.dhexx.cn/article/1rWxTwaX.shtml

相关文章

深度学习和目标检测系列教程 13-300:YOLO 物体检测算法

Author:Runsen YOLO,是目前速度更快的物体检测算法之一。虽然它不再是最准确的物体检测算法,但当您需要实时检测时,它是一个非常好的选择,而不会损失太多的准确性。 YOLO 框架 在本篇博客中,我将介绍 YO…

3D物体检测(一)

title: 3D物体检测(一) date: 2020-02-21 16:40:40 categories: 3D物体检测 tags:3D物体检测点云 总结一下在bilibili上看到的基于点云场景的三维物体检测算法及应用,有兴趣的也可以去看看这个视频。 这一部分主要总结一下,结合雷达点云数据和相机采集的二维图像数…

OpenCV-Python视频分析(移动物体检测,物体追踪)

1.概述 该文章介绍OpenCV-Python中关于视频分析的两个主要内容,分别为: 🐟背景差分法移动物体检测🐟Meanshift和Camshift算法物体追踪 PS:视频分析还要一个重要的内容:光流法运动轨迹绘制,在…

百度EasyDL物体检测在安卓上测试

EasyDL:EasyDL定制化模型 1.创建模型。 2.创建数据集,上传图片。 3.标注图片 。 4.训练数据 5.发布模型 6.APP部署测试 7.APP上测试

基于OpenCV实战:动态物体检测

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达最近,闭路电视安全系统运行着多种算法来确保安全,例如面部识别,物体检测,盗窃检测,火灾警报等。我们在运动检测…

【opencv学习】【运动物体检测】

今天学习运动物体检测 一:帧差法 捕获摄像头的运动的手 import cv2 import numpy as np# 如果我们想捕获一些运动的物体,每一帧图像中,不动的部分称之为背景,运动的物体称之为前景 # 假如我们的视频捕捉窗口是不动的,…

K210物体检测(利用Maixpy、在线模型训练、串口通信)

无论从性能还是价格上,K210都给我带来了很多惊喜。搭载了Maixpy的K210开发非常便利,加上Maixhub的加持,使得K210的生态更加完善。Maixpy完全兼容openmv,在拥有openmv的基础上,短时间内就可以上手K210。 目录 前言一、烧…

小样本物体检测

Few-shot Object Detection via Feature Reweighting(MetaYOLO) 出发点:不同属性以不同的权重组合,可以定义一个类别,所以检测特征是否属于某一类,只要检测特征对属性的响应度就可以。特征 —> 属性 —…

自动驾驶:MOD 移动物体检测概述

MOD全称为Moving Object Detection,中文“移动物体检测”。主要的作用是泊车时,周围有人或物体经过探测区域被检测到给驾驶员声音和视觉提醒。 以NISSAN MOD为例说明下基于环视相机的MOD系统: nissan 官网:​​​​​​Moving O…

UGUI射线检测与普通物体检测

UGUI物体检测与普通物体检测有所不同(UGUI射线检测已经被封装好): 1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂上Canvas这个组件(当挂上Graphic Raycaster时Canvas也会自动挂上)。 Ig…

多物体检测 RCNN

基于R-CNN的物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187029 作者:hjimce 一、相关理论 本篇博文主要讲解2014年CVPR上的经典paper:《Rich feature hierarchies for Accurate Object Detection and Segmentation》…

自动驾驶感知——激光雷达物体检测算法

文章目录 1. 基于激光雷达的物体检测1.1 物体检测的输入与输出1.2 点云数据库1.3 激光雷达物体检测算法1.3.1 点视图1.3.1.1 PointNet1.3.1.2 PointNet1.3.1.3 Point-RCNN1.3.1.4 3D-SSD1.3.1.5 总结和对比 1.3.2 俯视图1.3.2.1 VoxelNet1.3.2.2 SECOND1.3.2.3 PIXOR1.3.2.4 AF…

物体检测之YOLO系列

业界对于目标检测的热度只增不减,但目前的框架也难于逾越RCNN系列、SSD、YOLO系列这三座大山,很多新的方法也是在此基础上做一些改进,所以有必要做一些整理,方便自己后续查看,这里先对YOLO系列做一些整理。没看过文章的…

物体检测难点 (多尺度检测, 遮挡与拥挤)

目录 多尺度检测降低下采样率与空洞卷积Anchor 设计多尺度训练 (Multi Scale Training,MST)特征融合尺度归一化: SNIP (Scale Normalization for Image Pyramids)Image Classification at Multiple ScalesData Variation or Correct Scale?Object Detection on an …

点云物体检测简介

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 本文由知乎作者Leon Wu授权转载,不得擅自二次转载。原文链接:https://zhuanlan.zhihu.com/p/81474133 深度学习的开始 人类的大脑是一个神秘的器官,它由无数的神经细胞组成…

物体检测

计算机视觉中目标检测、跟踪、识别是最基本的几个task,尤其又以检测最为重要和基础。同时基本上所有的检测任务都需要在给出物体的bounding box之后,给出物体的类别(也就是给识别物体),所以文章中不区分检测和识别任务…

实时3D物体检测

谷歌发布的MediaPipe Objectron,是一个可以实时检测3D物体检测的模型框架,先在2D图像上检测物体,然后估算出3D坐标。 尽管目前2D物体检测已经相对成熟,但3D检测仍然是个挑战性的问题,主要是缺少大量有效的数据用于训练…

物体检测实战:使用 OpenCV 进行 YOLO 对象检测

使用 OpenCV 进行 YOLO 对象检测 本文将教你如何使用YOLOV3对象检测器、OpenCV和Python实现对图像和视频流的检测。用到的文件有yolov3.weights、yolov3.cfg、coco.names,这三个文件的github链接如下: GitHub - pjreddie/darknet: Convolutional Neura…

传统物体检测

传统物体检测 1. 特征2. 模板匹配3. 颜色直方图4. 空间分拣5. 梯度特征6. HOG 特征7. 特征融合8. 搭建分类器8.1 数据标注8.2 数据预处理8.3 训练分类器8.4 交叉验证 9. 滑动窗口9.1 多尺度窗口9.2 Hog子采样窗口搜索(Hog Sub-sampling Window Search) 10. Multiple Detections…

计算机视觉之旅-进阶-物体检测

1. 物体检测概念 计算机视觉中的物体检测是指在图像中检测和定位特定目标对象,它是计算机视觉中一个基本而又重要的问题。 物体检测的目的就是在输入图像中检测所关心的目标对象,并给出其边界框和类别信息。典型的输出包括: - 边界框:表示目标对象在图像中的位置和大小。常用…