目标检测算法——Faster R-CNN解析

1 标准数据集----ImageNet

  • ImageNet是李飞飞团队创建的一个用于图像识别的大型数据库,里面包含了超过1400万张带标记的图片。
  • 2010年以来,ImageNet每年举办一次图片分类和物体检测的比赛----ILSVRC(大规模视觉识别挑战赛,Imagenet Large Scale Visual Recognition Challenge)。图片分类比赛中有1000个不同类别的图片,每个类别大约有200~1000张来自不同源的图片,后续很多优秀的神经网络结构都是从该比赛中诞生的。

2 潜在物体候选框(ROI, regions of interest)获取方法

2.1 选择性搜索(selective search)

首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。
为了避免单个区域吞噬其他区域,需要先对较小的组进行分组。
ss
SelectiveSearch在一张图片上提取出来约2000个侯选区域,需要注意的是这些候选区域的长宽不固定。 而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改。

2.3 区域预测网络(RPN, region proposal network)

  • 1、用n×n(默认3×3=9)大小的窗口去扫描特征图的每个像素点,每个滑窗位置映射到一个低维的向量(默认256维),并为每个滑窗位置考虑k种(在论文设计中k=9)可能的参考窗口(论文中称为anchors)
  • 2、这个n×n的滑动窗口经过整个特征层,并且每次计算都将经过这低维特征向量输入并最终输出2个结果:
    • 输出每个anchor位置对应的4个值(用于回归网络,修正位置)
    • 输出每个anchor位置是否为物体(是否为前景或背景概率,二分类网络)
  • 其中anchors:
    3*3卷积核的中心点对应原图上的位置,将该点作为anchor的中心点,在原图中框出多尺度、多种长宽比的anchors,三种尺度{ 128,256,512 }, 三种长宽比{1:1,1:2,2:1},特征图中的每个像素点有9种框
  • 3区域预测网络的训练
    • 标记anchor,用于训练
      anchors与任何ground-truth box的交并比(IoU)
      • IoU大于0.7记为正样本
      • IoU小于0.3,记为负样本
      • 剩下的样本全部忽略
      • 正负样本比例为1:3
    • 训练损失
      可以直接使用“分类+定位”的模型进行“head”修改
      注:这里使用的损失函数和Fast R-CNN内的损失函数原理类似,同时最小化两种代价
  • 4、候选区域的训练是为了让得出来的 正确的候选区域, 并且候选区域经过了回归微调。最终得到一定数量的潜在物体候选框(ROI)。
  • :在这基础之上做Fast RCNN训练是得到特征向量做分类预测和回归预测。
    rpn

3 候选框缩放

3.1 Crop+Warp

传统的CNN限制了输入必须固定大小,所以在实际使用中往往需要对原候选框(ROI)进行crop或者warp的操作,来保证输入大小一致。

  • crop:截取原图片的一个固定大小的patch
  • warp:将原图片的ROI缩放到一个固定大小的patch
    无论是crop还是warp,都无法保证在不失真的情况下将图片传入到CNN当中。会使用一些方法尽量让图片保持最小的变形。

原候选框(ROI)调整效果

  1. 各向异性缩放(不使用):即直接缩放到指定大小,这可能会造成不必要的图像失真
  2. 各向同性缩放:在原图上出裁剪侯选区域, (采用侯选区域的像素颜色均值)填充到指定大小在边界用固定的背景颜色
    候选区域缩放

3.2 空间金字塔池化(SPP,spatial pyramid pooling)

通过SPP将任意大小的特征图转换成固定大小的特征向量
示例:假设原图输入是224x224,对于conv出来后的输出是13x13x256的,可以理解成有256个这样的Filter,每个Filter对应一张13x13的feature map。接着在这个特征图中找到每一个候选区域映射的区域,spp layer会将每一个候选区域分成1x1,2x2,4x4三张子图,对每个子图的每个区域作max pooling,得出的特征再连接到一起,就是(16+4+1)x256的特征向量,接着给全连接层做进一步处理,如下图:
spp

3.3 RoI Pooling

首先RoI pooling只是一个简单版本的SPP,目的是为了减少计算时间并且得出固定长度的向量。
在这里插入图片描述
RoI池层使用最大池化将任何有效的RoI区域内的特征转换成具有H×W的固定空间范围的小feature map,其中H和W是超参数 它们独立于任何特定的RoI。
例如:VGG16 的第一个 FC 层的输入是 7 x 7 x 512,其中 512 表示 feature map 的层数。在经过 pooling 操作后,其特征输出维度满足 H x W。假设输出的结果与FC层要求大小不一致,对原本 max pooling 的单位网格进行调整,使得 pooling 的每个网格大小动态调整为 h/H,w/W, 最终得到的特征维度都是 HxWxD。

它要求 Pooling 后的特征为 7 x 7 x512,如果碰巧 ROI 区域只有 6 x 6 大小怎么办?每个网格的大小取 6/7=0.85 , 6/7=0.85,以长宽为例,按照这样的间隔取网格:[0,0.85,1.7,2.55,3.4,4.25,5.1,5.95],取整后,每个网格对应的起始坐标为:[0,1,2,3,3,4,5]
在这里插入图片描述
为什么要设计单个尺度呢?这要涉及到single scale与multi scale两者的优缺点
single scale,直接将image定为某种scale,直接输入网络来训练即可。(Fast R-CNN)
multi scal,也就是要生成一个金字塔,然后对于object,在金字塔上找到一个大小比较接近227x227的投影版本
后者比前者更加准确些,没有突更多,但是第一种时间要省很多,所以实际采用的是第一个策略,因此Fast R-CNN要比SPPNet快很多也是因为这里的原因。

4 非最大值抑制(NMS,non-maximum suppression)

  • 目的:对最终所有的候选区域得分,进行概率筛选,得到最终候选区域结果
  • 迭代过程:
    假设现在滑动窗口有:A、B、C、D、E 5个候选框,
    1. 第一轮:假设B是得分最高的,与B的IoU>0.5删除。现在与B计算IoU,DE结果>0.5,剔除DE,B作为一个预测结果
    2. 第二轮:AC中,A的得分最高,与A计算IoU,C的结果>0.5,剔除C,A作为一个结果
    3. 最终结果为在这个5个中检测出了两个目标为A和B

nms

5 常用目标检测算法比较

5.1 R-CNN训练过程

在这里插入图片描述

5.2 SPPNet训练过程

在这里插入图片描述

5.2 Fast R-CNN训练过程

在这里插入图片描述

5.2 Faster R-CNN训练过程

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测是计算机视觉领域的重要任务,而Faster R-CNN作为目标检测领域的经典算法之一,具有较高的检测精度和鲁棒性。在睿智的目标检测系列中,我们将使用PyTorch搭建一个基于Faster R-CNN目标检测平台。 首先,我们将使用PyTorch构建一个深度学习模型的基础框架。PyTorch是一个开源的机器学习库,具有灵活的设计和易于使用的特点,因此非常适合用于搭建目标检测平台。我们将利用PyTorch提供的模块和工具,构建一个包含RPN模块、ROI pooling模块和分类回归模块的Faster R-CNN模型。 其次,我们将使用标记好的目标检测数据集,如COCO或PASCAL VOC数据集,对我们搭建的目标检测平台进行训练和验证。我们将利用PyTorch内置的数据加载和预处理工具,以及优化器和损失函数,对Faster R-CNN模型进行端到端的训练,以提高检测精度和泛化能力。 最后,我们将通过在真实场景下的目标检测任务中的应用,来验证我们搭建的Faster R-CNN目标检测平台的性能。我们将评估其在目标定位、多目标检测、不同尺寸目标检测等方面的表现,并对可能的改进和优化进行进一步的研究和实验。 通过这样一个基于PyTorch搭建的Faster R-CNN目标检测平台,我们将能够深入理解目标检测算法的原理和实现细节,提高对深度学习框架的应用能力,并为未来的研究和应用奠定基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值