论文地址: Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks
pytorch实现:github链接
1. 介绍
Faster R-CNN通过对区域候选框提议方法的革新对目标检测框架的精度和速度[训练和推断]进行了大幅度的改善,提出使用RPN网络进行候选框提议,Faster R-CNN的架构如下图所示:
Faster R-CNN框架包括四个部分:
- Conv Layers
- RPN网络
- RoI 池化
- Classifier
1. Conv Layers
Conv Layers的作用是提取特征图为后续的模块提供输入,在Conv Layers这一模块中包含13个卷积层,13个Relu层和4个池化层,对于所有的卷积层,kernel_size=3,pad=1,stride=1;对于所有的池化层,kernel_size=2,pad=0,stride=2。卷积层能够保持输出和输入的尺寸一致,而每经过一个池化层,图像都会变为原来的一半,有四个池化层所以最终ConvLayers的输出是输入的 。
2. Region Proposal Network(RPN)
RPN用于区域提议,通过softmax判断前后景,再利用bounding box 回归进行anchors的位置修正,也就是说RPN实际上是包含两条路径的,最终该模块包含一个Proposal层会剔除较小的和越界的提议。
这一模块中有几个值得注意的点。
2.1 Anchors
Anchors实际上是一种多尺度检测的方法用于捕获不同大小的物体,anchor的尺寸是根据图像尺寸设定的,文中采用3种尺度和3种长宽比即每个位置上取九个anchor,对于该模型来说,Conv Layers的输出是ceil(800/16) x ceil(600/16) 的特征图,最终会产生ceil(800/16) x ceil(600/16) x 9个anchor,ceil是向上取整函数。
得到anchors之后首先RPN会判断该anchors属于前景还是背景,再利用边界框回归进行位置调整,最终将包含类别判定和位置信息的anchor输入到proposals层,该层综合这两个信息,计算精确的前景Anchors,总之RPN的工作流程如下:
- 生成Anchors,对Anchors做边界框回归
- 对Anchors做二分类,根据前景分类分数进行降序排序,取前pre_nms_topN个anchors
- 限定图像边界,非极大值抑制
- 取前post_nms_topN个anchors作为最终的proposals
这一过程中,已经包含了对Anchors映射回原图是否超出边界做了判断,所以此处的输出是对应原始输入图像尺度的。
3. RoI池化
对于传统的CNN来说,其输入和输出的尺寸应该是固定的,吐过输入图像大小不定,较为简单的方法有两种,一是crop一部分图片输入网络,这样就破坏了图像的完整结构,二是wrap成需要的大小传入网络,这样回破坏图像的形状信息。
而proposals正好是各种大小不一的矩形框,需要RoI池化来继续宁尺寸的调整,具体的工作流程如下:
- 使用spatial_scale参数将对应原始输入图像尺度的proposals映射到输入特征图尺度
- 将每个proposal对应的feature map区域分为pooled_w x pooled_h的网格
- 对网格的每一份进行最大池化操作
这样得到了最终的尺寸大小一致的proposals了。
4. Classifier
从RoI池化层获得的 大小的proposal feature maps后送入后续网络后:
- 通过全连接层和sofmax对proposals进行分类
- 再次对proposals进行边界框回归
因为该阶段全连接层的参数也是训练好的,也进一步验证了RoI池化层的必要性。
5. 训练阶段
- 已训练好的主干网络上训练RPN网络
- 利用RPN网络产生proposals
- 第一次训练Fast R-CNN
- 第二次训练RPN
- 再次产生proposals
- 第二次训练Fast R-CNN
训练RPN时候的损失函数:
其中:
是一个对数损失,
,又
是一个
损失,相比于
,对离群点不敏感。当回归目标无界,使用
损失需要进行谨慎地学习率的调整以避免梯度爆炸,
损失则消除了这种敏感性。
欢迎扫描二维码关注微信公众号 深度学习与数学 [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]