论文模型笔记——RCNN系列

RCNN系列模型主要包括以下几种,按发布时间排序:

  1. **RCNN**(2014年):首次将CNN引入目标检测,主要是特征提取阶段使用CNN(AlexNet)。

  2. **Fast RCNN**(2015年):通过共享卷积特征图提高了RCNN的速度和效率,引入了ROI Pooling来提取固定大小的特征。

  3. **Faster RCNN**(2015年末):加入了区域提议网络(RPN),实现了端到端的目标检测,进一步提高了检测速度。

  4. **Mask RCNN**(2017年):在Faster RCNN的基础上添加了一个并行分支,用于生成高精度的实例分割掩码,同时采用了ROI Align技术提高精度。

1. RCNN

介绍

R-CNN主要分为四个阶段

  1. 产生候选区域:对于输入的图片,使用Selective Search方法,选择出2000个候选区域(每个区域大小不一)。
  2. 特征提取:使用AlexNet对每一个候选区域提取特征,得到2000*4096维的特征向量。
  3. 候选区域类别判断与NMS:将2000*4096维特征向量送入到21个(20个类别+1个背景)SVM分类器中,需要使用NMS去除冗余的候选框。
  4. 候选框位置调整regression:进一步调整候选框精度

创新

在文章中,作者认为 R-CNN 较之前的算法,能够取得30%的改进是基于以下两点:

  1. 使用了CNN来提取候选区域的特征。
  2. 使用迁移学习,因为目标检测领域的数据相比图像分类任务要少很多,所以使用在图像分类上训练好的模型,经过 fine-tune 可以很好的运用在目标检测上。

2. Fast R-CNN

介绍

Fast R-CNN 主要是在R-CNN和SPPNet的基础上进行改进的,有着以下几个优点:

  1. 与R-CNN、SPPNet相比,有着更高的准确率。

  2. 通过使用多任务损失,将模型训练由多阶段转变为单阶段训练。

  3. 训练时可以一次更新网络的所有层,不再需要分步更新参数。

  4. 不再需要硬盘来存储CNN提取的特征数据
    Fast R-CNN的流程主要分为三步:

  5. 候选区域产生:使用 Selective Search 方法生成2K个图片候选区域。

  6. 整张特征提取与候选区域特征图映射:对整张图片进行特征提取得到相应的特征图(这是对R-CNN的一大改进,参考了SPPNet),并将上一步生成的候选区域映射到特征图中。

  7. ROI Pooling类别与边框预测:先根据候选区域在特征图上定位对应的特征区域。然后将所有的候选区域特征统一缩放到7*7大小,然后将这2K个特征向量展平,并连接到全连接层上,得到类别和边框预测。

创新

  1. 对整张图片进行特征提取得到相应的特征图(这是对R-CNN的一大改进;

  2. 主要创新:使用了RoI Pooling,这一方法参考了SPPNet的空间金字塔池化;

  3. 使用了多任务的损失函数来简化R-CNN中的多阶段训练。


在原文中,作者说Fast RCNN是R-CNN和SPPNet的一个快速更新,所以改进的内容并不是特别多,与后面的Faster RCNN提出了RPN相比,这只能算是一次打补丁的行为。

文中作者更多关心的是一些其它的问题,此处由于篇幅所限,仅简单列举一下作者研究的问题以及相关的结论,具体细节请自行看论文。

  1. 多任务训练是否有帮助?
  • 结论:是的,多任务训练效果比分阶段训练更好。
  1. 尺度不变性:暴力方法还是巧妙技巧?
  • 人话版:在统一图像特征尺度时,是使用SPPNet的空间金字塔池化还是本文中的ROI池化?
  • 结论:两者效果差距微乎其微,甚至空间金字塔池化因为计算开销大,计算所需时间更长。
  1. 训练数据是不是越多越好?
  • 结论:将训练数据翻倍,可以将mAP提高2%~3%。
  1. SVM的表现是否优于softmax?
  • 结论:网络直接输出各类概率(softmax),比SVM分类器性能略好
  1. 候选区域是不是越多越好?
  • 结论:否,候选区域从1K增加到10K的过程中,mAP先有所提升,然后略有下降,而且如果使用更多的候选区域,不仅没有帮助,反而会损害精度。
    理解和实现多任务训练Multi-task Training涉及以下几个关键步骤:
  1. **定义任务**:确定你希望模型同时学习的任务(例如,分类和回归)。

  2. **设计网络**:构建一个神经网络,它有能力处理多个任务。通常,这涉及共享一些层 来学习通用特征 ,同时为每个任务提供专用的分支

  3. **构建多任务损失函数**:为每个任务定义损失函数 ,然后将这些损失结合起来形成一个总的损失 函数。可以为不同任务的损失分配不同的权重来调整它们在训练中的重要性。

  4. **训练模型**:使用包含多个任务损失的总损失函数来训练模型。通过反向传播更新模型参数,使得模型能够同时在所有任务上表现良好。

  5. **调参和评估**:根据模型在各个任务上的表现进行调参,可能需要调整损失权重、网络结构或学习率等。

总结:多任务训练------专用分支 + 包含多个任务损失的总损失(任务损失*对应权重)

3.Faster R-CNN

Images -》Feature extraction -》RPN proposals generation -》proposal features projection

Faster R-CNN框架:

  1. feature extraction

  2. rpn proposal

4.sparse rcnn

Sparse R-CNN与Faster R-CNN是两种目标检测模型,主要区别在于它们处理候选区域的方式。Sparse R-CNN使用稀疏机制,直接学习一组固定数量的候选区域(提议),并通过动态实例交互和权重生成对这些提议进行迭代精化,旨在减少计算量并提高效率。而Faster R-CNN通过区域提议网络(RPN)动态生成候选区域,并使用池化层从这些区域提取特征,然后再进行分类和边界框回归。这导致Sparse R-CNN在设计上更为简洁,且可能在某些情况下提供更高的效率和性能。

5.mask rcnn

Mask R-CNN的创新之处主要有两点:首先,引入了一个新的、与现有结构并行的分支,用于对每个感兴趣区域(ROI)生成高质量的分割掩码,实现精确的实例分割;其次,采用了ROI Align方法替代了先前的ROI Pooling,准确地从每个ROI中提取特征,解决了ROI Pooling中的量化误差问题,提高了检测的精度。这些创新使Mask R-CNN在目标检测和实例分割方面取得了显著的性能提升。

相关推荐
红花与香菇2____22 分钟前
【学习笔记】STM32F407探索者HAL库开发(四)F103时钟系统配置
c语言·笔记·stm32·单片机·嵌入式硬件·学习
大白的编程日记.23 分钟前
【C++笔记】C++编译器拷贝优化和内存管理
java·开发语言·c++·笔记
CrazyZ1261 小时前
c++primer第九章内存模型和名称空间学习笔记
c++·笔记·学习
sml_54212 小时前
【笔记】第三节 组织与性能
笔记
zyq~6 小时前
【自学笔记】支持向量机(2)——核函数
笔记·算法·支持向量机·核函数
CXDNW8 小时前
【算法篇】栈与队列类(笔记)
c++·笔记·算法·leetcode··队列
cong*8 小时前
数据库提权【笔记总结】
数据库·笔记·adb
CrazyZ1268 小时前
c++primer 第八章函数编程答案
开发语言·c++·笔记·学习·算法
乌云暮年8 小时前
【计组】数据的表示与运算
笔记·算法·计算机组成原理
lsnm8 小时前
<刷题笔记> 力扣236题——二叉树的公共祖先
c++·笔记·b树·算法·leetcode