RCNN系列网络的理解

本文概述了RCNN系列(包括原始、FASTR-CNN、FASTERR-CNN和MaskRCNN)的目标检测方法,介绍了它们如何逐步优化计算效率和精度,以及在训练过程中的挑战。重点讨论了锚点机制、特征图处理和mask生成等关键技术。

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

R-CNN                        作者 : Ross Girshick                       

FAST R-CNN              作者 : Ross Girshick   

FASTER R-CNN         作者 : Jian Sun    

MASK R-CNN             作者 :kaiming he     

一.  RCNN

RCNN的基本思想是使用不同尺度的窗口在图像上滑动来截取ROI区域,再送入分类网络中对其识别,这些不同尺度的滑动窗口被称为anchor.

Anchor分为三个尺度和这种尺寸,也就是对图像上每个点产生9个anchor,然后对这些截取出来的图片缩放,缩放到统一尺寸后送入CNN网络。但这回引起庞大的计算量(对一张488*488尺寸的图像,将有488*488*9张anchor图像,),所以需要先对anchor区域进行初判,区分出前景和背景,只对前景评分高的部分图片送入CNN中,最初这个判断前景和背景的工作是由SVM分类器完成的。

所以RCNN需要训练两部分,前景背景分类网络和目标检测网络。

二.  FAST RCNN

FAST RCNN是对RCNN的升级,改进点:

  1. RCNN对每个窗口计算一次CNN,FAST RCNN对整张图计算一次CNN,在计算中共享。即从特征图中裁剪ROI。
  2. RCNN是由三个网络组合而成的,需要分别训练三个网络,FAST RCNN将其整合在一个模型中,使用更为方便。

三.  FASTER RCNN

FASTER RCNN 是对FAST RCNN的优化,FAST RCNN使用滑动窗口技术实现,FASTER RCNN使用特征图生成预选窗口。使用预设的预选窗口(anchor)是存在一定缺陷的,不够紧贴目标,此处对anchor产生了一个修正值,使其使其更贴合检测目标。(它增加了一个3x3的网络和两个1x1的网络,在特征图上滑动窗口生成边界和分值,用来判断anchor的好坏,对好边界在送入后记处理)。

四.  Mask RCNN

Mask RCNN是对faster RCNN的升级,在其之上增加了一个CNN网络,用于从featureMap中提取mask图像,最终应用到从像素级提取检测目标。

五.  备注

  1. RCNN系列网络在输入图像上都是使用固定大小的图片如244X244或488X488,对任意图片输入都是缩放到这个尺寸上之后再送入网络。
  2. RCNN系列它主网络是VGG或resnet。全新训练一个vgg网络本身就是一件困难的事情,我尝试在c++版本voc数据集+ libtorch + RTX2060上训练,网络规模智能到CNN网络的规模只能到256级别,上512就奔溃。陆续花费3天时间,训练了3万多次,正确率大约70%左右(没有使用预测数据集)。
  3. FAST RCNN和FASTER RCNN都有一个裁剪特征图,并判断前景或背景的过程,这个动作会导致产生的tensor的大小和维度不一致,无法组合成更大维度的tensor。排查FASTER RCNN的实现代码发现,它是先裁剪然后对前景分值排序,筛选出分值最高的300个或2000个。
  4. 从个人的体验上,裁剪原图整个网络运行速度比裁剪特征图还快不少。特征图本身数据量比原图大的多裁剪也费时,我的裁剪代码是在CPU上裁剪的,存在数据从CPU到GPU的传输。

                   

### RCNN 系列概述 RCNN(Region with CNN feature)系列算法是目标检测领域的重要里程碑,通过结合区域提议方法和卷积神经网络的强大特征提取能力,显著提高了目标检测的性能。以下是关于 RCNN 系列的关键信息及其发展: #### 1. **R-CNN** R-CNN 是最早将深度学习应用于目标检测的经典算法之一。该方法的核心思想是从图像中生成候选区域(region proposals),并通过卷积神经网络提取这些区域的特征[^1]。随后,利用支持向量机(SVM)进行分类,并通过回归器调整边界框的位置。 然而,R-CNN 存在一些明显的缺点,例如计算效率低下以及训练过程复杂。这些问题促使后续改进版本的研发。 --- #### 2. **Fast R-CNN** 为了提高效率并简化流程,Fast R-CNN 提出了两项重要创新:感兴趣区域池化层(ROI Pooling Layer)和多任务损失函数(Multi-task Loss Function)。 - ROI Pooling 层允许直接从卷积特征图上提取固定大小的特征,从而避免了多次重复计算[^5]。 - 多任务损失函数则在同一网络中联合完成分类和边界框回归的任务,进一步减少了计算负担。 相比原始的 R-CNN,Fast R-CNN 显著降低了运行时间,同时保持较高的准确性。 --- #### 3. **Faster R-CNN** Faster R-CNN 进一步优化了目标检测的速度与效果。它的核心贡献在于引入了一种名为 Region Proposal Network (RPN) 的新机制,取代了传统的选择性搜索算法(Selective Search Algorithm)。这种设计使得整个目标检测流水线完全基于卷积神经网络实现,大幅提升了实时处理的能力[^3]。 具体来说,Faster R-CNN 的框架由以下几个部分组成: - 特征提取模块(Feature Extraction using CNN) - 区域提议网络(Region Proposal Network, RPN) - 感兴趣区域池化层(ROI Pooling Layer) - 分类与边界框回归模块(Classification and Bounding Box Regression) 这一架构不仅实现了端到端的学习,还为后来的目标检测算法奠定了基础。 --- #### 4. **Mask R-CNN** 作为 Faster R-CNN 的扩展版,Mask R-CNN 增加了一个分支用于预测像素级掩码(mask),使其能够执行实例分割任务。这表明 RCNN 家族不仅可以解决矩形框级别的目标定位问题,还能应对更复杂的语义理解需求[^4]。 --- ### 应用场景 由于其强大的泛化能力和灵活性,RCNN 系列广泛应用于多个实际领域,包括但不限于: - 自动驾驶中的障碍物识别 - 医疗影像分析中的病灶标注 - 零售业的商品盘点自动化 - 工业生产线上的质量控制 以下是一个简单的 Python 实现片段展示如何加载预训练好的 Faster R-CNN 模型来进行目标检测: ```python import torch from torchvision import models # 加载预训练模型 model = models.detection.fasterrcnn_resnet50_fpn(pretrained=True) # 设置评估模式 model.eval() # 输入数据准备 example_input = torch.rand(1, 3, 224, 224) # 执行推理 output = model(example_input) print(output) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wolfseek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值