区域卷积神经网络(R-CNN,SPP-Net,Fast R-CNN,Faster R-CNN)

2024-08-31 12:18

本文主要是介绍区域卷积神经网络(R-CNN,SPP-Net,Fast R-CNN,Faster R-CNN),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 模型进化史

检测框架可分为两类:

  • 两级式检测框架,包含一个用于区域提议的预处理步骤,使得整体流程是两级式的,如R-CNN系列
  • 单级式检测框架,即无区域提议的框架,这是一种单独提出的方法,不会将检测提议分开,使得整个流程是单级式的,如YOLO系列

2 传统的目标检测

2.1 三个阶段
  • 区域选择利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域。
  • 特征提取:提取候选区域相关的视觉特征。比如人脸检测常用的Harr特征;行人检测常用的HOG特征等。由于目标的形态多样性,光照变化多样性,背景多样性等因素使得设计一个鲁棒的特征并不是那么容易,然而提取特征的好坏直接影响到分类的准确性。
  • 分类器:利用分类器进行识别,比如常用的SVM模型
2.2 经典方法—DPM
  • 传统的目标检测中,多尺度形变部件模型DPM(Deformable Part Model)表现比较优秀,连续获得VOC(Visual Object Class)2007到2009的检测冠军
  • DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。
  • DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。
2.3 主要问题
  • 基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余。
  • 手工设计的特征对于多样性的变化鲁棒性差

3 R-CNN

3.1 检测流程
  • selective search(选择性搜索)算法在图像中提取2000个左右的侯选框
  • 把所有候选框缩放(wrap)成固定大小(227×227),并进行归一化后输入CNN(AlexNet)网络,提取特征
  • 将提取到的CNN特征,fc7特征SVM来分类conv5特征线性回归来微调边框位置与大小,其中每个类别单独训练一个边框回归器
  • 非极大值值抑制(NMS)来滤除IOU较大的区域
3.2 模块划分
3.3 性能评价
  • True Positive(TP):IOU ≥ \geq 0.5,即判断正确的样本
  • False Positive(FP):IOU &lt; &lt; < 0.5,即判断错误的样本
  • False Negative(FN):遗漏的GT区域
  • 准确率(Precision):TP/(TP+FP),即算法找到的正样本的正确率(不考虑未找出的正样本)
  • 召回率(Recall):TP/(TP+FN),即算法找回正样本的比例(不考虑识别错误的样本)
  • mAP:所有类别的平均精度(AP)和除以类别数
3.4 问题
  • 训练时间长(84h):Fine-tune(18h)+特征提取(63h)+SVM/Bbox训练(3h)
  • 测试时间长:VGG一张图片耗时47s
  • 占用磁盘空间大:卷积出来的特征数据还需要单独保存

4 SPP-Net

4.1 网络结构
4.2 主要贡献
  • 结合空间金字塔池化(SPP)方法实现CNNs的对尺度输入
    一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,而这些预处理会造成数据的丢失或几何的失真。SPP-Net将金字塔思想加入到CNN,替换掉conv5中pooling层,实现了数据的多尺度输入。在卷积层和全连接层之间加入了SPP layer,此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。
  • 只对原图提取一次卷积特征
    在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。所以SPP Net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个候选框上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。节省了大量的计算时间,比R-CNN有一百倍左右的提速。
4.3 问题
  • 继承R-CNN的剩余问题
    1.需要存储大量特征
    2.复杂的多阶段训练
    3.训练时间仍然很长(25.5h):特征提取减少到5.5h
  • 带来新的问题
    SPP层之前所有conv参数不能fine-tune,而对于一个新的任务,有必要对卷积层也进行微调。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还需要目标的位置信息

5 Fast R-CNN

5.1 网络结构

基础网络为VGG-16

5.2 检测流程
  • 特征提取:以整张图片为输入利用CNN得到图片的特征层;
  • region proposal:通过Selective Search等方法从原始图片提取区域候选框,并把这些候选框一一投影到最后的特征层;
  • 区域归一化:针对特征层上的每个区域候选框进行RoI Pooling操作,得到固定大小的特征表示;
  • 分类与回归:然后再通过两个全连接层,分别用softmax做多目标分类,用回归模型进行边框位置与大小微调。
5.3 主要贡献
  • 感兴趣池化层(ROI pooling layer)替换SPP-Net中的SPP层,使得conv层参数可以进行fine-tune
  • 用softmax替代SVM分类,采用多任务损失函数(Multi-task loss),将分类loss和回归loss统一,不用再保存提取特征,减小存储压力,可以实现“end-to-end”的全参数训练
5.4 性能
  • 相比于R-CNN,SPP-Net,速度显著提高
  • mAP比R-CNN略有提高(注:SPP-Net的mAP下降了3%)
5.5 问题
  • 选择性搜索提取候选框的方法非常耗时

6 Faster R-CNN (RPN+Fast R-CNN)

6.1 主要贡献
  • 为解决Fast R-CNN的候选框提取的耗时问题,引用RPN网络来代替SS操作(将RPN网络放在最后一个conv层后面),得到量少质优的约300个候选框
6.2 RPN结构
  • RPN网络的前五层借用的是ZF网络,输出大小为 13 ∗ 13 ∗ 256 13*13*256 1313256
  • 采用 3 ∗ 3 ∗ 256 3*3*256 33256的256个卷积核,intermediate层输出256维的向量
  • k=9(3种scales和3种aspect_ratio),所以cls layer就是18( 2 ∗ 9 : 2 2*9:2 29:2对应前景和背景)个输出节点了,那么在256-d和cls layer之间使用一个 1 ∗ 1 ∗ 256 ∗ 18 1*1*256*18 1125618的卷积核,就可以得到cls layer;reg layer的输出是36( 4 ∗ 9 : 4 4*9:4 494对应x,y,w,h)个,所以对应的卷积核是 1 ∗ 1 ∗ 256 ∗ 36 1*1*256*36 1125636,这样就可以得到reg layer的输出了。
6.3 检测流程
  • 特征提取:同Fast R-CNN;
  • region proposal:在最终的卷积特征层上通过RPN,每张图片大约300个建议窗口。
  • 区域归一化:同fast R-CNN;RoI pooling层 。
  • 分类与回归:进行目标分类,并做边框回归。 利用SoftMax Loss和Smooth L1 Loss对分类概率和边框回归(Bounding Box Regression)联合训练。为了让RPN的网络和Fast R-CNN网络实现卷积层的权值共享,其训练方法比较复杂
6.4 性能
  • Faster R-CNN在保证精度不下降的情况下,速度显著提高。

7 算法结构对比

在这里插入图片描述

8 参考

https://blog.csdn.net/Angela_qin/article/details/80975050
https://www.cnblogs.com/skyfsm/p/6806246.html

这篇关于区域卷积神经网络(R-CNN,SPP-Net,Fast R-CNN,Faster R-CNN)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123882

相关文章

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

深度学习实战:如何利用CNN实现人脸识别考勤系统

1. 何为CNN及其在人脸识别中的应用 卷积神经网络(CNN)是深度学习中的核心技术之一,擅长处理图像数据。CNN通过卷积层提取图像的局部特征,在人脸识别领域尤其适用。CNN的多个层次可以逐步提取面部的特征,最终实现精确的身份识别。对于考勤系统而言,CNN可以自动从摄像头捕捉的视频流中检测并识别出员工的面部。 我们在该项目中采用了 RetinaFace 模型,它基于CNN的结构实现高效、精准的

机器学习之监督学习(三)神经网络

机器学习之监督学习(三)神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一:TensorFlow搭建神经网络 4. 反向传播梯度下降 Back Propagation Gradient Descent模块二:激活函数 activ

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术,特别是利用卷积神经网络(Convolutional Neural Networks, CNNs)中的ResNeXt50架构,实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型,还能够在PyQt5框架下提供一个直观的图形用户界面(GUI),使得医生或患者能够方便地上传舌象照片并获取分析结果。 技术栈 深度学习框架:采用PyTorch或其他

.NET 自定义过滤器 - ActionFilterAttribute

这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误,并返回一个 BadRequest 响应。 代码片段: /// <summary>/// 验证 ModelState 是否有效/// </