Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >基于Pytorch构建Faster-RCNN网络进行目标检测(一)

基于Pytorch构建Faster-RCNN网络进行目标检测(一)

作者头像
python与大数据分析
发布于 2023-09-06 02:12:03
发布于 2023-09-06 02:12:03
1.1K0
举报

尽管R-CNN是物体检测的鼻祖,但其实最成熟投入使用的是faster-RCNN,而且在pytorch的torchvision内置了faster-RCNN模型,当然还内置了mask-RCNN,ssd等。既然已经内置了模型,而且考虑到代码的复杂度,我们也无需再重复制造轮子,但对模型本身还是需要了解一下其原理和过程。

Faster RCNN 的整体框架按照功能区分,大致分为4个模块,分别是特征提取网络backbone模块、RPN模块、RoI and RoI pooling模块和RCNN模块。

R-CNN整体框架:

一、Backbone模块:主要负责接收输入数据,并进行数据预处理和特征提取得到输入图像对应的feature maps,并传递给下一层。这部分论文中用的VGG16和ZF框架,后来又有人用Resnet。

二、RPN network模块:这一模块主要有两个功能,一方面要生成一组proposals(图像中可能是前景的区域坐标),并将其传递给RoI模块;另一方面要计算RPN网络的损失,用于更新网络的参数。

三、RoI模块:对proposals进行降采样,并按proposals的坐标提取出feature maps中的特征,并将其传入下一层。

四、RCNN network模块:这一模块主要有两个功能,一方面用多层全连接网络对RoI传入的特征进行分类和回归,以得到预测目标的位置和标签;另一方面计算RCNN的损失,用于更新网络的参数。

一、Backbone模块

我们看一下pytorch的代码

  1. import torchvision.models.detection.generalized_rcnn
  2. import torchvision.models.detection.faster_rcnn
  3. import torchvision.models.detection.mask_rcnn
  4. import torchvision.models.detection.keypoint_rcnn
  5. GeneralizedRCNN继承nn.Module
  6. FasterRCNN继承GeneralizedRCNN
  7. MaskRCNN继承FasterRCNN
  8. KeypointRCNN继承FasterRCNN
  9. import torchvision.models.detection.RetinaNet
  10. RetinaNet继承nn.Module
  11. import torchvision.models.detection.ssd
  12. import torchvision.models.detection.ssdlite
  13. SSD继承nn.Module
  14. SSDlite 更适用于移动端 APP 开发

继续往下一级

  1. Faster-RCNN目标检测,骨干网包括resnet50 fpn 和mobilenet_v3 fpn
  2. torchvision.models.detection.faster_rcnn
  3. torchvision.models.detection.fasterrcnn_resnet50_fpn
  4. torchvision.models.detection.fasterrcnn_resnet50_fpn_v2
  5. torchvision.models.detection.fasterrcnn_mobilenet_v3_large_fpn
  6. torchvision.models.detection.fasterrcnn_mobilenet_v3_large_320_fpn
  7. mask-RCNN目标检测,骨干网包括resnet50 fpn
  8. torchvision.models.detection.mask_rcnn
  9. torchvision.models.detection.maskrcnn_resnet50_fpn
  10. torchvision.models.detection.maskrcnn_resnet50_fpn_v2
  11. SSD目标检测,骨干网包括vgg16和mobilenet_v3
  12. torchvision.models.detection.ssd
  13. torchvision.models.detection.ssd300_vgg16
  14. torchvision.models.detection.ssdlite320_mobilenet_v3_large
  15. PointRCNN三维目标检测 ,骨干网包括resnet50 fpn
  16. torchvision.models.detection.keypoint_rcnn
  17. torchvision.models.detection.keypointrcnn_resnet50_fpn
  18. RetinaNet目标检测,骨干网包括resnet50 fpn
  19. torchvision.models.detection.RetinaNet
  20. torchvision.models.detection.retinanet_resnet50_fpn
  21. torchvision.models.detection.retinanet_resnet50_fpn_v2

之前我们提到过resnet、vgg16等网络,现在在这些网络后面多了个fpn,是什么意思呢?

之前我们已经知道了VGG16模型主要通过增加网络深度,提升识别准确率

之前我们已经知道了ResNet模型增加了残差网络,降低深度网络学习退化问题

FPN( Feature Pyramid Network),中文解译为特征金字塔网络

FPN是一种特征处理架构,它生成多尺度的特征图来处理目标检测中不同大小的物体。FPN在卷积神经网络后面添加额外层来融合不同分辨率的特征,这有助于提高物体检测的准确性。

FPN 的核心理念是构建一个具有多层特征金字塔形式的网络,通过跨层级连接和上采样来实现对不同大小的物体进行检测。

算法大致结构如下:一个自底向上的线路,一个自顶向下的线路,横向连接(lateral connection)。图中放大的区域就是横向连接,这里1*1的卷积核的主要作用是减少卷积核的个数,也就是减少了feature map的个数,并不改变feature map的尺寸大小。

FPN 网络结构主要由两个部分组成:底层特征提取网络和顶层特征回归网络。

1. 底层特征提取网络

底层特征提取网络通过多个卷积层来提取不同尺寸的特征图。这些特征图会在后续的处理中被上采样和合并到顶层特征金字塔中

  1. input = Input(shape=(None, None, 3))
  2. base_net = ResNet50(input)
  3. c2, c3, c4, c5 = base_net.outputs

2. 顶层特征回归网络

顶层特征回归网络是由多个卷积层组成的网络。它的输入由底层特征提取网络提取的特征图和经过上采样后的顶层特征金字塔组成,经过卷积和池化层的处理后,输出最终的目标检测结果。

其中,顶层特征金字塔是由多个 FPN 层组成的,并且各层之间通过横向连接进行信息的传递和特征的整合

  1. pyramid_features = fpn_network(c2, c3, c4, c5)

FPN 示例如下,注,此处非pytorch的代码,仅为示例。

  1. def ResNet50(input):
  2. pass
  3. def fpn_network(c2, c3, c4, c5, num_channels=256):
  4. pass
  5. input = Input(shape=(None, None, 3))
  6. base_net = ResNet50(input)
  7. c2, c3, c4, c5 = base_net.outputs
  8. pyramid_features = fpn_network(c2, c3, c4, c5)

我们回到pytorch中看一下generalized_rcnn这个基类:

  1. generalized_rcnn是个基类
  2. def __init__(self, backbone: nn.Module, rpn: nn.Module, roi_heads: nn.Module, transform: nn.Module) -> None:
  3. super().__init__()
  4. self.transform = transform
  5. self.backbone = backbone
  6. self.rpn = rpn
  7. self.roi_heads = roi_heads

从构造函数中可以看出,GeneralizedRCNN类将faster RCNN抽象成了3部分:backbone、rpn、roi_heads,外加一个对输入数据进行处理的transform。

这三部分的功能分别为:

backbone:提取图片特征,输出feature map

rpn:进行region proposal

roi_heads:对roi进行分类和回归

二、RPN模块

RPN是一个小型卷积网络,它在FPN生成的多尺度特征图上运行。RPN的主要目的是为下游的 Fast R-CNN 生成目标的候选框(Region of Interest,简称 RoI)。这是目标检测任务的第一阶段,RPN利用滑动窗口生成多个候选框,它会在不同尺度和纵横比的锚点上生成边界框。

区域生成模块,如下图的中间部分,其作用是生成较好的建议框,即Proposal,这用到了强先验的Anchor。RPN包含5个子模块:

1、Anchor生成:RPN对feature map上的每一个点都对应了9个Anchors,这9个Anchors大小宽高不同,对应到原图基本可以覆盖所有可能出现的物体。因此,有了数量庞大的Anchor,RPN接下下来的工作就是从中筛选,并调整出更好的位置,得到Proposal

2、RPN卷积网络:与上面的Anchor对应,由于feature map上每个点对应了9个Anchors,因此可以利用1×1的卷积在feature map上得到每一个Anchor的预测得分与预测偏移值

3、计算RPN loss:这一步只在训练中,将所有的Anchors与标签进行匹配,匹配程度较好的Anchors赋予整样本,较差的赋予负样本,得到分类与偏置的真值,与第二步中的预测得分与预测偏移值进行loss的计算

4、生成Proposal:利用第二步中每一个Anchor预测的得分与偏移量,可以进一步得到一组较好的Porposal,送到后续网络中

5、筛选Proposal得到RoI:在训练时,由于Proposal数量还是太多(默认是2000),需要进一步筛选Proposal得到RoI(默认数量是256)。在测试阶段,则不需要此模块,Proposal可以直接作为RoI,默认数量为300

三、Roi模块

这部分承上启下,接收卷积网络提取的feature map和RPN的RoI,输出送到RCNN网络中。由于RCNN模块使用了全连接网络,要求特征维度固定,而每一个RoI对应的特征大小各不相同,无法送入到全连接网络中,因此RoI Pooling将RoI的特征池化到固定的维度,方便送到全连接层中

四、RCNN模块

将RoI Pooling得到的特征输入全连接网络,预测每一个RoI的分类,并预测偏移量以精修边框位置,并计算损失,完成整个Faster RCNN过程。主要包含3个部分:

1、RCNN全连接网络:将得到的固定维度的RoI特征接到全连接网络中,输出为RCNN部分的预测得分与预测回归偏移量

2、计算RCNN的真值:对于筛选出的RoI,需要确定是正样本还是负样本,同时计算与对应真实物体的偏移量。在实际实现时,为实现方便,这一步往往与RPN最后筛选RoI那一步放到一起

3、RCNN loss:通过RCNN的预测值与RoI部分的真值,计算分类与回归loss

目标检测过程:特征提取(ResNet50)-> FPN -> RPN -> RoI -> Fast R-CNN。首先,ResNet50提取原始图像的特征并将这些特征传递给 FPN。接着,FPN生成了多尺度的特征图以适应不同大小的物体。然后,RPN 在由特征金字塔生成的多尺度特征图上运行,生成一系列候选框。RPN的输出会作为 Fast R-CNN 的输入,利用RoI对候选框提取特征后,对结果进行分类和边框回归。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
你真的理解Faster RCNN吗?捋一捋Pytorch官方Faster RCNN代码
来源丨https://zhuanlan.zhihu.com/p/145842317
3D视觉工坊
2020/11/11
1.9K0
你真的理解Faster RCNN吗?捋一捋Pytorch官方Faster RCNN代码
目标检测模型学习笔记
比起图像分类任务的数据扩增,目标检测的难点在于,要保持边界框和发生形变的图像之间的一致性 (Consistency) 。
嵌入式视觉
2022/09/05
7150
目标检测模型学习笔记
基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测
对于一张图片,R-CNN基于selective search方法大约生成2000个候选区域,然后每个候选区域被resize成固定大小(227×227)并送入一个CNN模型中,使用AlexNet来提取图像特征,最后得到一个4096维的特征向量。然后这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。为了提升定位准确性,R-CNN最后又训练了一个边界框回归模型。训练样本为(P,G),其中P=(Px,Py,Pw,Ph)为候选区域,而G=(Gx,Gy,Gw,Gh)为真实框的位置和大小。G的选择是与P的IoU最大的真实框,回归器的目标值定义为:
机器学习AI算法工程
2019/10/29
3K0
基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测
基于深度学习的目标检测算法面试必备(RCNN~YOLOv5)
目标检测算法主要包括:【两阶段】目标检测算法、【多阶段】目标检测算法、【单阶段】目标检测算法
AI算法与图像处理
2021/05/07
3.7K0
一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)
作者灯会为21届中部985研究生,凭借自己整理的面经,去年在腾讯优图暑期实习,七月份将入职百度cv算法工程师。在去年灰飞烟灭的算法求职季中,经过30+场不同公司以及不同部门的面试中积累出了CV总复习系列,此为目标检测篇。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
AIWalker
2021/07/05
9510
一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)
深度学习Pytorch检测实战 - Notes - 第4章 两阶经典检测器:Faster RCNN
RCNN全称为Regions with CNN Features,是将深度学习应用到物体检测领域的经典之作,并凭借卷积网络出色的特征提取能力,大幅度提升了物体检测的效果。而随后基于RCNN的Fast RCNN及Faster RCNN将物体检测问题进一步优化,在实现方式、速度、精度上均有了大幅度提升。
肉松
2020/07/27
1.1K0
深度学习Pytorch检测实战 - Notes - 第4章 两阶经典检测器:Faster RCNN
目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)
目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)
Minerva
2020/05/25
1.2K0
目标检测 RCNN, SPPNet, Fast RCNN, Faster RCNN 总结
RCNN CVPR 2014 Rich feature hierarchies for accurate object detection and semantic segmentation https://github.com/rbgirshick/rcnn
用户1148525
2019/05/26
1K0
深度学习目标检测算法——Faster-Rcnn
本文介绍了Faster R-CNN目标检测算法及其在COCO数据集上的实验结果。文章首先介绍了Faster R-CNN的背景知识,包括其检测速度、精度等方面的优势。然后详细介绍了Faster R-CNN的网络结构,包括Region Proposal Network(RPN)、Convolutional Layer等关键组件。接着,文章分析了RPN的两种训练方式:联合训练和交替训练。最后,文章给出了Faster R-CNN在COCO数据集上的实验结果,并与Selective Search方法进行了对比,结果表明,Faster R-CNN在物体检测任务上具有显著的优势。","query": "介绍了哪些内容
码科智能
2018/01/02
1.2K0
深度学习目标检测算法——Faster-Rcnn
目标检测资源总结
blog.csdn.net/l7H9JA4/article/details/79620247
用户3578099
2019/08/15
8600
从RCNN到SSD,这应该是最全的一份目标检测算法盘点
选自 Medium 作者:Jonathan Hui 机器之心编译 目标检测是很多计算机视觉任务的基础,不论我们需要实现图像与文字的交互还是需要识别精细类别,它都提供了可靠的信息。本文对目标检测进行了整体回顾,第一部分从RCNN开始介绍基于候选区域的目标检测器,包括Fast R-CNN、Faster R-CNN 和 FPN等。第二部分则重点讨论了包括YOLO、SSD和RetinaNet等在内的单次检测器,它们都是目前最为优秀的方法。 机器之心之前已经讨论过非常多的目标检测算法,对计算机视觉感兴趣的读者也可以结
机器之心
2018/05/08
1.3K0
从RCNN到SSD,这应该是最全的一份目标检测算法盘点
使用Faster-Rcnn进行目标检测
本文介绍了一种用于目标检测的Faster R-CNN网络及其训练方法。该网络由Region Proposal Network(RPN)和Fast R-CNN两部分组成,旨在提高目标检测的速度和准确性。RPN用于生成候选区域,而Fast R-CNN则用于分类和边界框回归。通过交替训练和联合训练,该网络能够快速准确地检测出图像中的目标。
GavinZhou
2018/01/02
1.1K0
使用Faster-Rcnn进行目标检测
MMDetection框架下的常见目标检测与分割模型综述与实践指南
MMDetection是一个基于PyTorch的开源框架,是一个目标检测工具箱,包含了丰富的目标检测、实例分割、全景分割算法以及相关的组件和模块,支持多种经典和现代模型,如ResNet、VGG、EfficientNet等。它还集成了单阶段和两阶段检测器,如YOLO、SSD、Faster R-CNN等,并提供了模块化设计,简化了模型组合、调整和优化的流程。框架还包括数据处理、模型训练、验证和测试的集成解决方案,并附有详细的文档和示例。MMDetection 由 7 个主要部分组成,apis、structures、datasets、models、engine、evaluation 和 visualization。
CoovallyAIHub
2025/01/10
3580
MMDetection框架下的常见目标检测与分割模型综述与实践指南
R-FCN、Mask RCNN、YoLo、SSD、FPN、RetinaNet…你都掌握了吗?一文总结目标识别必备经典模型(二)
 机器之心专栏 本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。 本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。 本文将分 3 期进行连载,共介绍 17 个在目标检测任务上曾取得 SOTA 的经典模型。 第 1 期:R-CNN、SPP-Net、Fast R-CNN、Faster R-C
机器之心
2023/03/29
1.1K0
R-FCN、Mask RCNN、YoLo、SSD、FPN、RetinaNet…你都掌握了吗?一文总结目标识别必备经典模型(二)
入门分享 | 12篇深度学习目标检测必读论文
本文梳理了目标检测领域2013年至2019年的12篇必读论文,为希望学习相关知识的新手提供了很好的入门路径。同时,作者还提供了一个附加论文列表。作为拓展阅读的内容,它们或为目标检测提供了新的视角,或用更强大的功能扩展了这个领域。
AI算法修炼营
2020/08/25
3.8K0
入门分享 | 12篇深度学习目标检测必读论文
基于faster-rcnn的目标物体检测_传统的目标检测算法
本文是继RCNN[1],fast RCNN[2]之后,目标检测界的领军人物Ross Girshick团队在2015年的又一力作。简单网络目标检测速度达到17fps,在PASCAL VOC上准确率为59.9%;复杂网络达到5fps,准确率78.8%。
全栈程序员站长
2022/11/04
4780
【个人整理】faster-RCNN的背景、结构以及大致实现架构(一)
前言:faster-RCNN是区域卷积神经网络(RCNN系列)的第三篇文章,是为了解决select search方法找寻region proposal速度太慢的问题而提出来的,整个faster-RCNN的大致框架依然是沿袭了fast-RCNN的基本能结构,只不过在region proposal的产生上面应用了专门的技术手段——区域推荐网络(region proposal network,即RPN),这是整个faster最难以理解的地方,本文也将以他为重点进行说明。鉴于篇幅较长,本次系列文章将分为3篇来说明:
小草AI
2019/06/02
6.6K0
fasterrcnn详解_faster RCNN
paper:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks Tensorflow-faster r-cnn github:Tensorflow Faster RCNN for Object Detection
全栈程序员站长
2022/11/10
9730
fasterrcnn详解_faster RCNN
CVPR2019目标检测方法进展综述
四期飞跃计划还剩最后一个名额,联系小编,获取你的专属算法工程师学习计划(联系小编SIGAI_NO2)
SIGAI学习与实践平台
2019/03/19
5K0
CVPR2019目标检测方法进展综述
一文读懂Faster RCNN
来源:信息网络工程研究中心 本文约7500字,建议阅读10+分钟 本文从四个切入点为你介绍Faster R-CNN网络。 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方
数据派THU
2023/03/29
9780
一文读懂Faster RCNN
推荐阅读
相关推荐
你真的理解Faster RCNN吗?捋一捋Pytorch官方Faster RCNN代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文