【论文阅读】Faster RCNN论文详解

Faster RCNN

建议先阅读之前的RCNN和Fast RCNN后再来阅读此文

Faster RCNN PyTorch实现:https://github.com/codecat0/CV/tree/main/Object_Detection/Faster_RCNN

Faster RCNN提出了Region Proposal Network解决了Fast RCNNselective search算法提取候选框速度太慢的问题。

1. Faster RCNN初识

在这里插入图片描述

  • conv layers:通过 C N N CNN CNN提取image的feature maps。此feature maps被共享用于后续的层
  • Region Proposal Networl用于生成region proposals。该层通过softmax判断anchors属于foreground还是background,再利用bounding box regression修正anchors以获得精确的proposals
  • RoI pooling:该层收集输入的feature mapsproposals,综合这些信息后提取proposal feature maps,送入后续层进行检测
  • classifier:利用proposal feature maps计算proposal的类别,同时再次通过bounding box regression获取检测框最终的精确位置

通过上述Faster RCNN的流程介绍,我们可以知道Faster RCNN与Fast RCNN之间的区别在于提取候选区域的不同,一个是通过训练一个Region Proposal Network来生成,而另一个则是通过Selective Search算法来生成。

接下来,我会重点介绍Region Proposal Network以及其anchor

2. Faster RCNN详细网络结构

在这里插入图片描述

流程: 将一副任意大小 P × Q P \times Q P×Q的图像缩放至固定大小 M × N M \times N M×N,然后将 M × N M \times N M×N大小的图像输入网络;其中conv layers包含了13个conv层+13个relu层+4个pooling层RPN网络首先经过3x3卷积,再分别生成foreground anchorsbounding box regression偏移量,然后计算出proposals;而Roi Pooling层则利用proposals以及feature maps,提取proposal feature送入后续全连接和softmax网络作classification

2.1 conv layers

在这里插入图片描述

conv layers部分共有13个conv层,13个relu层,4个pooling层(VGG网络中最后一个max pooling前的层)

  • 所有的conv层都是: kernel_size=3 , padding=1 ,stride=1,因此conv层不改变原图大小
  • 所有的pooling层都是: kernel_size=2 ,padding=0 , stride=2pooling 层将原图缩小为原来的一半
  • 经过conv layer后,一个MxN大小的矩阵将变为(M/16)x(N/16)

2.2 Region Proposal Network

在这里插入图片描述

RPN网络分为2条线,上面一条通过softmax分类anchors获得foregroundbackground(检测目标是foreground),下面一条用于计算anchorsbounding box regression偏移量,以获得精确的proposal。最后的Proposal层则负责综合foreground anchorsbounding box regression偏移量获取proposals

2.2.1 anchors

anchor为由一个中心点,周围生成了9个矩形,其矩形的有3种不同的尺寸,每个尺寸有3种不同的比例,分别为1:1, 1:2, 2:1,这样共9个不同的矩形,如下图左上角所示。

RPN遍历conv layers生成的feature mapsfeature map上的每一个点都配备这9种anchor作为初始的检测框,效果如下图右所示。这样做获得检测框很不准确,之后将会在RPN层,以及最后进行2次的bounding box regression修正检测框位置
在这里插入图片描述

如下图,对于每一个点的 k k kanchor来说,从feature maps提取出得特征具有256维,对于每一个anchor,需要分foregroundbackground,因此共有 2 k 2k 2kscore,对于每一个anchor共有 ( x 1 , y 1 , x 2 , y 2 ) (x_1,y_1,x_2,y_2) (x1,y1,x2,y2)四个坐标值。因此共有 4 k 4k 4kcoordinates
在这里插入图片描述

2.2.2 softmax判定foreground与background

确定候选区域标签的规则

  • 与某个ground truth(GT)的IoU最大的区域的分配正标签
  • 与任意GT的IoU大于0.7的区域分配正标签
  • 与所有GT的IoU都小于0.3的区域分配负标签
2.2.3 bounding box regression原理

RCNN论文详解中的第6部分

2.2.4 RPN流程
  1. 生成anchors
  2. 按照输入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topNanchors
  3. 限定超出图像边界的foreground anchors为图像边界
  4. 剔除非常小(面积和scores)的foreground anchors
  5. 进行NMS,按照nms后的foreground softmax scores由大到小排序foreground anchors,提取前post_nms_topNanchors
2.2.5 RPN 训练

整个网络的Loss如下:
L ( p i , t i ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(p_i,t_i)=\frac {1} {N_{cls}}\sum_{i}L_{cls}(p_i,p_i^*)+\lambda \frac {1}{N_{reg}}\sum_{i}p_i^*L_{reg}(t_i,t_i^*) L(pi,ti)=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)

其中:

  • i i i表示anchors index

  • p i p_i pi表示foreground softmax probability

  • p i ∗ p_i^* pi代表对应的GT predict概率(如果anchorGT间IOU>0.7,为1;反之IOU<0.3,为0;至于0.3<IOU<0.7不参与训练)

  • t t t代表predict bounding box

  • t ∗ t^* t代表对应foreground anchor对应的GT box

  • cls loss,即softmax loss

  • reg loss,即soomth L1 loss。注意在该loss中乘了 p i ∗ p_i^* pi相当于只关心foreground anchors的回归

3. RoI Pooling layer

FAST RCNN论文详解中的第3部分

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Faster RCNN是一种基于深度学习的目标检测算法,它是RCNN、Fast RCNN的改进版,具有更快的检测速度和更高的准确率。本文将详细介绍Faster RCNN的PyTorch实现。 Faster RCNN的实现主要分为两个部分:特征提取和区域提取。特征提取使用预训练的卷积神经网络(如VGG16、ResNet等)对输入图像进行特征提取,得到一系列特征图。区域提取使用RPN(Region Proposal Network)对特征图进行处理,得到一系列候选区域,然后对每个候选区域进行分类和回归,得到最终的目标检测结果。 在PyTorch中实现Faster RCNN,可以使用torchvision中的models和transforms模块,以及torch.utils.data中的DataLoader和Dataset模块。具体实现步骤如下: 1. 加载数据集 使用torchvision中的transforms模块对数据进行预处理,然后使用Dataset模块加载数据集,最后使用DataLoader模块对数据进行批量处理。 2. 加载预训练模型 使用torchvision中的models模块加载预训练模型(如VGG16、ResNet等),然后修改模型最后一层的输出,使其适应目标检测任务。 3. 定义RPN 定义RPN网络,包括卷积层、分类层和回归层,使用预训练模型的特征图作为输入,输出候选区域。 4. 定义ROI Pooling层 定义ROI Pooling层,将候选区域映射到固定大小的特征图上,以便进行分类和回归。 5. 定义分类和回归网络 定义分类和回归网络,包括卷积层、全连接层和softmax层,使用ROI Pooling层的输出作为输入,输出目标检测结果。 6. 训练模型 使用反向传播算法和优化器对模型进行训练,调整模型参数,使其适应目标检测任务。 7. 测试模型 使用测试数据集对模型进行测试,计算模型的准确率和召回率,评估模型性能。 以上就是Faster RCNN的PyTorch实现步骤,具体实现细节可以参考PyTorch官方文档和相关论文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值