首页 > 其他分享 >Fast R-CNN网络结构、框架原理详解

Fast R-CNN网络结构、框架原理详解

时间:2024-07-22 12:25:51浏览次数:12  
标签:候选 边界 回归 Fast 损失 CNN 网络结构

一、Fast R-CNN简介

Fast R-CNN是一种基于区域卷积网络 ( Region-based Convolutional Network ) 的快速目标检测方法。是R-CNN作者Ross Girshick继R-CNN 之后的又一力作,原文链接。与R-CNN相同,Fast R-CNN同样使用VGG16作为网络的backbone,FastR-CNN训练非常深的VGG16网络比R-CNN快9倍,在测试时快213倍,并且在pascalVOC2012上实现了更高的mAP。与SPPnet相比,FastR-CNN训练VGG16 3×的速度更快,测试速度更快10×,而且更准确。

Fast R-CNN architecture

二、 Fast R-CNN 详解

1.Fast R-CNN处理过程

1) Fast R-CNN将整张图片和一组建议框(object proposals)作为输入,通过几个卷积层和最大池化层处理整张图像,得到卷积特征图(conv feature map)

2)对于每个建议框,通过RoI pooling layer 为每个object proposal来提取在feature map上对应的特征,并使得输出都具有相同size的特征图。

3)将每个特征图输入到一系列的全连接层(FCs)中, 把这些特征综合起来。

4)将综合起来的特征,通过概率分类器(FC layer+softmax)和边界框回归器(FC layer+bbox regressor)输出。

2、Fast R-CNN的重要知识

1)object proposals(建议框或候选区域)的生成

与R-CNN一样,利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

但是,Fast R-CNN与R-CNN不同的是,这些生成出来的候选区域不需要每一个都丢到卷积神经网络里面提取特征,而且只需要在特征图上映射便可,见下一个步骤。

2)投影特征图获得相应的特征矩阵

Fast-RCNN没有像RCNN一样,其不限制输入的图像的尺寸,其将整张图像送入网络,得到了一个特征图。紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算,简洁了不少的时间。

 

但是这其中涉及训练数据正负样本采样的问题。不过Fast R-CNN与Faster R-CNN处理得不同,也可以不用太过的在意。

        在Fast R-CNN中,并不适用SS算法提供的所有的候选区域,SS算法会差不多得到2000个候选框,但是训练的过程中其实只需要使用其中的一部分就可以了,Fast R-CNN中好像只挑选了其中的64个。其中还是分为正样本与负样本,正样本指的是在候选框中确实存在所需检测目标的样本;而负样本指的是候选框中没有所需检测的目标,也就是只有背景。

        当数据不平衡时,数据会有所偏向。如果全部只有正样本,那么网络就会有很大的一个概率认为候选区域是我们需要的一个检测目标,这样就会有问题,所以存在正负样品。正样本的定义为候选框与真实的目标边界框的iou大于0.5;负样本的定义为候选框与所有真实的目标边界框的iou值最大的区间为0.1-0.5。重点是其实没有完全适应SS算法提供的所以的边界框。

3)RoI pooling layer

RoI max pooling 的原理:

将 h×w RoI 窗口划分为大小近似为 h/H × w/W 大小的子窗口的 H×W 网格 ;然后将每个子窗口的中的值最大化(max-pooliing) 作为对应对应网格的输出 ;RoI pooling layer 是 SPP-Net 的特例,它只有一个金字塔层 。

有了训练样本之后,将训练样本的候选框通过ROI Pooling层缩放到统一的尺寸。

ROI Pooling层的具体做法是,将候选框所框选的训练样本,这是一个比较抽象的特征信息。将其划分为77,也就是49等份。划分之后,对每一个区域做一个最大池化下采样操作,也就是MaxPooling操作。如此对49等分的候选区域操作,便得到了一个77的特征矩阵。

也就是说,无论候选区域的特征矩阵是怎么样的尺寸,都被缩放到一个77的大小,这样就可以不去限制输入图像的尺寸了。因为,作进一步的工作的是输入图像的候选区域,而候选区域总是能被缩放为77的尺寸的,所以也就和输入图像的尺寸无关。

在R-CNN当中,其使用的卷积神经网络要求输入是227*227大小,但是Fast R-CNN就不需要考虑这个因素。

4)展平特征图利用全连接层得到预测结果。

         概率分类器

输出N+1个类别的概率(N为检测目标的种类, 1为背景)共N+1个节点。

其中的第0个节点表示的背景的概率。剩下的20个是其他所需检测的类别概率。这个概率是经过softmax处理之后的,是满足一个概率分布的,其和为1.而既然现在是需要预测21个类别的概率,所以目标概率预测的全连接层为21个节点。

        边界框回归器

输出对应N+1个类别的候选边界框回归参数(d x , d y , d w , d h )。需要注意,这是每一个类别都有这4个参数。所以共(N+1)x4个节点。

也就是4个4个为一组,一组为一个边界框回归参数。那么如何根据回归参数得到最后的预测边界框?对应着每个类别的候选边界框回归参数(d x , d y , d w , d h)。

 

Px,Py,Pw,Ph 分别为候选框的中心x,y坐标,以及宽高
Gx,Gy,Gw,Gh 分别为最终预测的边界框中心x,y坐标,以及宽高

4)Fast R-CNN损失函数

由于最后是两个不同的输出,所以就有了多任务损失(multi-task loss) ,分别输出概率分布和回归偏移。其损失函数如下。

其中真实目标边界框回归参数的计算公式为:

其中对于分类损失:

其中对于边界框回归损失:

注意,这个损失是由4个部分组成的。分别对应着我们回归参数 x 的smoothL1的回归损失,回归参数 y 的smoothL1的回归损失,回归参数 w 的smoothL1的回归损失与最后的回归参数 h 的smoothL1的回归损失。

  • tu对应边界框回归器预测的对应类别u的回归参数(tux,tuy,tuw,tuh)
  • v对应真实目标的边界框回归参数(vx,vy,vw,vh)

而具体的smoothL1损失的计算公式为:

λ 是一个平衡系数,用于平衡分类损失与边界框回归损失。

[u ≥ 1] 是艾佛森括号,也可以理解为一个计算公式。当u满足条件是,公式的值为1;而当u不满足条件时,也就是u<1时,也就是u=0时,(u为类别的标签),此时类别标签为背景,公式的值为0.

u代表了目标的真是标签,u ≥ 1表示候选区域确实属于所需检测的某一个类别当中,也就是对应着正样本。当u=0时,此时候选区域对应着为背景,不属于所需检测的某一个类别当中。那既然是背景,就没有边界框回归损失这一项了。

也就是Fast R-CNN的总损失 = 分类损失 + 边界框回归损失然后对其进行反向传播就可以训练Fast R-CNN网络了。

三、Fast R-CNN总结(Conclusion)

Fast R-CNN还是很优雅的,把整个过程集成为一个single-stage pipeline,但是还是有一个小问题的,它的region proposal还是单独做计算的,还是没有实现真正的一体化呀。

参考资料:目标检测算法——Fast R-CNN_目标检测_Clichong-GitCode 开源社区 (csdn.net)

标签:候选,边界,回归,Fast,损失,CNN,网络结构
From: https://blog.csdn.net/qq_52191127/article/details/140601997

相关文章

  • 【机器学习】FastGPT 知识库搜索测试功能解析
    本文以FastGPT知识库的搜索测试功能为入口,分析FastGPT的知识检索流程。一、搜索功能介绍1.1整体介绍搜索测试功能包含三种类型:语义检索、全文检索、混合检索。语义检索:使用向量进行文本相关性查询,即调用向量数据库根据向量的相似性检索;全文检索:使用传统的全文检索,适......
  • com.alibaba.fastjson.JSONObject cannot be cast to xxx
    问题描述:通过redis读取的缓存对象用Object去接,因为我们已经知道他具体是什么类型了,所以接来的对象直接转换,报了上述错误。这里其实我们已经对该实体类完成了序列化与反序列化。 publicclassLoginUserimplementsSerializableLoginUserloginUser=redisCache.getCache......
  • FastAPI 依赖
    """依赖:如公用的子函数目的:提高代码的复用率"""0 fromfastapiimportDepends1函数作为依赖 2类作为依赖  3子依赖的创建和调用 4路径参数中使用依赖 5py文件公共依赖 6全局依赖 ......
  • 如何在 FastAPI 测试中处理 datetime.now() 等外部依赖项?
    我有一些现有的FastAPI测试不再通过,因为一些内部服务器逻辑已经更改,现在依赖于datetime.now()返回的值。这是一个外部依赖项。通常,为了处理外部依赖项,我们会编写外部依赖项的模拟实现,并找到一种方法将其注入到正在测试的代码中。我不确定这是否是像日期时间依......
  • Maskrcnn学习笔记--个人向
    论文名称:MaskR-CNN论文下载地址:https://arxiv.org/abs/1703.06870在阅读本篇博文之前需要掌握FasterR-CNN、FPN以及FCN相关知识。FasterR-CNN视频讲解:FasterRCNN_哔哩哔哩_bilibiliFPN视频讲解:1.1.2FPN结构详解_哔哩哔哩_bilibiliFCN视频讲解:FCN网络结构详解(语义分割......
  • 基于卷积神经网络(CNNs)的无监督多模态子空间聚类方法
    基于卷积神经网络(CNNs)的无监督多模态子空间聚类方法引言基于卷积神经网络(CNNs)的无监督多模态子空间聚类方法是一种前沿技术,专门设计用于处理来自不同模态(如图像、文本、音频等)的高维数据,旨在自动学习表示并聚类这些数据,而无需任何标记信息。这种方法利用CNNs的特征提取能......
  • fastchat vs vLLM
    vLLMhttps://github.com/vllm-project/vllmhttps://docs.vllm.ai/en/latest/推理和服务,但是更加偏向推理。 vLLMisafastandeasy-to-uselibraryforLLMinferenceandserving.vLLMisfastwith:State-of-the-artservingthroughputEfficientmanagementofat......
  • fast-in
    黑马笔记地址:https://b11et3un53m.feishu.cn/wiki/MWQIw4Zvhil0I5ktPHwcoqZdnec1docker命令命令说明dockerpull拉取镜像dockerpush推送镜像到DockerRegistrydockerimages查看本地镜像dockerrmi删除本地镜像dockerrun创建并运行容器(不能重复创......
  • 基于 CNN(二维卷积Conv2D)+LSTM 实现股票多变量时间序列预测(PyTorch版)
    前言系列专栏:【深度学习:算法项目实战】✨︎涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记忆......
  • OpenAI 发布 GPT-4o mini;FasterLivePortrait 支持实时表情转移丨 RTE 开发者日报
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个......