【目标检测】Faster RCNN总结

本文详细介绍了Faster R-CNN的目标检测框架,包括其提出的背景、主要创新点——RPN网络,以及整个系统的实现原理。Faster R-CNN通过引入RPN网络解决了候选区域生成耗时的问题,显著提高了检测效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Faster-Rcnn个人学习笔记

笔记内容:

主要是关于论文的概述以及文章的主要思路,阅读前一定要自己进行全文的阅读(个人认为是借鉴作用),另外因为个人水平问题可能写的不够完善,之后会进行陆续的补充。
笔记链接:个人Faster-RCNN笔记链接
另外有个宝藏Up对于初入目标检测的人来说,极力推荐。
Up主页宝藏UP

文章内容:
05.Faster-RCNN
📄论文题目
Faster R-CNN: Towards Real-Time Object Detection
with Region Proposal Networks
👨‍💻作者
Shaoqing Ren(任少卿):提出适用于物体检测的高效框架Faster RCNN和图像识别算法ResNet
Kaiming He(何恺明):开发了深度残余网络(ResNets)
❓四个问题
❔要解决什么问题?
Faster-RCNN的提出是为了解决Proposel Region生成计算耗费时间成本高的问题,因为当时的检测算法中获得proppsel的时间与目标检测网络所花费的时间相当,而在目标检测网络的改进已经遇到瓶颈。因此,对于Proposel region的处理成为了一个新的方向。
❔使用什么方法解决问题?
引进RPN网络,共享权值(使得时间消费减少,近乎0成本)

❔实际效果如何?
各个mAP等均有提升并且检测速度大有提升。
❔还存在什么问题?
RPN网络因为是刚刚提出,还有所提升空间(加入更多机制提高检测精度与检测速度等)
本身Faster-RcnN检测速度相较于之前的检测网络速度更加迅速,所以可以考虑更多方法复杂化检测网络,进行更多的提升
✨论文概述
🔸1.Abstract
由于当时先进的检测方法(SPP,Fast-rcnn等)采用Region Proposal减少了检测网络的运行时间,但是也暴露了Region Proposal计算瓶颈问题。由此引入了一个RPN网络与检测网络共享卷积特征,使得Region Proposal的生成成本近乎为零!
RPN网络:RPN网络是一个全卷积的网络,可以同时预测目标的边界与得分。RPN网络通过端到端的训练来生成Region Proposal。
全卷积网络(FCN): FCN与CNN的区别在把于CNN最后的全连接层换成卷积层。
端到端的训练: 整个训练的流程并不进行人为的问题划分,而是完全交给深度学习模型直接学习从原始数据到期望输出的映射。
Region Proposal(候选区域): 在图像中预先找到检测目标可能出现的位置,通过利用图像中的纹理、边缘及颜色等信息,保证在选取较少的窗口(几百上千个)的情况下保持较高的Recall(召回率)。
🔹2.Introduction
Fast R-CNN使用的卷积(conv)特征映射,同样可以用于候选区域生成。在这些卷积特征增加额外的两个卷积层构建RPN网络,第一层每个卷积映射位置编码为一个短的(例如256D)特征向量,第二个卷积层在每个卷积映射位置输出这个位置上多种尺度与长宽比的K个候选区域的目标得分与回归边界(K的典型值)。
为了统一RPN与Fast RCNN目标检测网络设计了一个训练方案:保持Proposals 固定,交替微调Region Proposal 与目标检测任务(此方案很快收敛,最后形成让两个任务共享卷积特征的标准网络)。
Faster RCNN算法流程:
将图像输入网络获得相应的特征图。
使用RPN网络结构生成候选框,将RPN生成框投影到特征图上获得相应的特征矩阵。
将每个特征矩阵通过ROI pooling 层缩放到7*7大小的特征图,接着将特征图展平通过一系列的全连接层得到预测结果。
ROI pooling(不限制输入图像尺寸):

 ROI Pooling 过程:输入 feature map -> 定位region proposal的投影 ->划分2*2个Sections -> max pooling

🔸3.Relater work
OverFeat:训练全连接层(FC),预测目标(假定目标只有一个)定位任务的box坐标。
MultiBox:从最后一个FC层同时预测多个(800)boxes的网络中生成Region Proposal。
🔹4.Region Proposal Networks
RPN网络可以接受任意大小的图像作为输入,输出目标的矩形候选框(Region Proposal)的集合,每个候选框均有一个目标得分。
为生成Region Proposal:使用滑动窗口在Conv feature map上滑动,生成一个一维的向量(256-d大小)。再通过两个1*1全卷积层(cls layer 和 reg layer)输出目标分类的概率与边界框回归参)。(细节如下图)

感受野计算样例:

(1)Translation-Invarian Anchors: Faster-RCNN中的Anchors由三种尺度(128128,256256,512512)及三种比例(1:1,1:2,2:1),所以每个位置在原图上有9个anchor box。对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor(6040为特征图大小),忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。
(2)A Loss Function for Learning Region Proposals:

(3)样本问题:正样本定义为最高IOU的anchor或者anchor的IOU大于0.7,负样本定义为IOU小于0.3的anchor。另外为避免损失函数偏向负样本,随机在一个图像中采样256个anchor,计算mini-batch的损失函数(正负样本anchor的比例是1:1),如果一个图像中的正样本数小于128,我们就用负样本填补这个mini-batch。
(4)Sharing Convolutional Features for Region Proposal and Object Detection:
(a)直接采用RPN Loss + Fast RCNN Loss的联合训练方法。
(b)原论文提出分别训练RPN以及Fast RCNN的方法:

ImageNet:是一个计算机视觉系统识别项目, 是目前世界上图像识别最大的数据库。
🔸5.实验
RPN共享卷积特征,候选区域较少并且减少了Proposal的FC消耗。
cls层得分的mAP值高的主要原因,reg层更有利于生成高品质的候选区域。
以下是一些实验结果:

🔹6.Conclusion
为高效准确的生成候选区域提出了RPN网络,使得基于深度学习的目标检测系统学习到RPN改善了候选区域的质量,进而改进了整个目标检测系统的性能。
👀补充
FasterRcnn框架图:

附录
推荐B站Up:https://space.bilibili.com/18161609?spm_id_from=333.788.b_765f7570696e666f.2

### Faster R-CNN目标检测算法实现 Faster R-CNN是一种高效的目标检测算法,其核心思想是通过区域提议网络(RPN)生成候选区域,并结合卷积神经网络(CNN)进行特征提取和分类[^1]。该算法的提出极大地提升了目标检测的速度与精度,成为现代目标检测框架的重要基础之一[^2]。 #### 1. 算法架构 Faster R-CNN的主要组成部分包括: - **卷积层**:用于从输入图像中提取特征。 - **区域提议网络(RPN)**:负责生成候选区域,这些区域可能包含目标对象。 - **RoI Pooling层**:将不同大小的候选区域统一为固定尺寸的特征图,便于后续处理[^3]。 - **全连接层**:对候选区域进行分类和边界框回归。 整个流程可以分为以下部分: 1. 输入图像经过卷积层提取特征。 2. RPN生成候选区域。 3. 使用RoI Pooling层将候选区域转换为固定尺寸。 4. 通过全连接层完成分类和边界框回归任务。 #### 2. 数据准备 在使用Faster R-CNN进行目标检测之前,需要准备好训练数据集。数据集通常包括标注好的图像和对应的边界框信息。常见的数据集格式包括Pascal VOC和COCO。如果需要训练自定义数据集,可以参考TensorFlow或其他框架的教程进行数据预处理[^4]。 #### 3. 模型训练 模型训练涉及以下几个关键步骤: - **初始化模型参数**:可以选择预训练模型作为初始权重,以加速收敛。 - **定义损失函数**:Faster R-CNN的损失函数包括分类损失和边界框回归损失[^3]。 - **优化器选择**:常用的优化器包括SGD、Adam等。 - **超参数调整**:例如学习率、批量大小等。 以下是基于TensorFlow的Faster R-CNN模型训练代码示例: ```python import tensorflow as tf from object_detection.utils import config_util from object_detection.protos import pipeline_pb2 from google.protobuf import text_format # 加载配置文件 pipeline_config = pipeline_pb2.TrainEvalPipelineConfig() with tf.io.gfile.GFile('path/to/pipeline.config', "r") as f: proto_str = f.read() text_format.Merge(proto_str, pipeline_config) # 配置训练参数 config_util.update_faster_rcnn_and_ssd_configs(pipeline_config) train_steps = pipeline_config.train_config.num_steps # 创建训练模型 model_dir = 'path/to/model/directory' model_lib_v2.train_loop( pipeline_config=pipeline_config, model_dir=model_dir, checkpoint_every_n=1000 ) ``` #### 4. 模型推理 训练完成后,可以使用训练好的模型进行目标检测。以下是推理过程的简要描述: 1. 加载训练好的模型权重。 2. 对输入图像进行前向传播,获取候选区域和分类结果。 3. 应用非极大值抑制(NMS)筛选出最终的检测结果。 推理代码示例如下: ```python import tensorflow as tf from object_detection.utils import label_map_util from object_detection.utils import visualization_utils as viz_utils # 加载模型 detect_fn = tf.saved_model.load('path/to/saved_model') # 加载标签映射 category_index = label_map_util.create_category_index_from_labelmap('path/to/label_map.pbtxt') # 推理函数 def detect_objects(image_np): input_tensor = tf.convert_to_tensor(image_np) input_tensor = input_tensor[tf.newaxis, ...] detections = detect_fn(input_tensor) return detections # 可视化检测结果 image_np = load_image_into_numpy_array('path/to/image.jpg') detections = detect_objects(image_np) viz_utils.visualize_boxes_and_labels_on_image_array( image_np, detections['detection_boxes'][0].numpy(), detections['detection_classes'][0].numpy().astype(int), detections['detection_scores'][0].numpy(), category_index, use_normalized_coordinates=True, max_boxes_to_draw=200, min_score_thresh=.30 ) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值