目标检测(5)-Faster RCNN

2024-05-14 09:08
文章标签 目标 检测 faster rcnn

本文主要是介绍目标检测(5)-Faster RCNN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:https://zhuanlan.zhihu.com/p/27988828


前段时间感觉状态比较差,给自己放了个假,加上刚回到学校事情有些多,拖了几周没更新,实在抱歉。

github地址:rbgirshick/py-faster-rcnn

论文地址:Towards Real-Time Object Detection with Region Proposal Networks

RCNN:目标检测(2)-RCNN - 知乎专栏

Fast RCNN:目标检测(4)-Fast R-CNN - 知乎专栏


摘要

言归正传,目标检测领域由RCNN开始,通将引入卷积神经网络取得了长足的进展,但是始终未能摆脱传统区域建议算法的限制。Fast RCNN提到如果去除区域建议算法的话,网络能够接近实时,而selective search方法进行区域建议的时间一般在秒级。产生差异的原因在于卷积神经网络部分运行在GPU上,而selective search运行在CPU上,所以效率自然是不可同日而语。一种可以想到的解决策略是将selective search通过GPU实现一遍,但是这种实现方式忽略了接下来的检测网络可以与区域建议方法共享计算的问题。因此Faster RCNN从提高区域建议的速度出发提出了region proposal network 用以通过GPU实现快速的区域建议。通过共享卷积,RPN在测试时的速度约为10ms,相比于selective search的秒级简直可以忽略不计。Faster RCNN整体结构为RPN网络产生区域建议,然后直接传递给Fast RCNN。当然重点就是这个RPN网络咯,我们看看RPN如何产生区域候选。下图是Faster RCNN的整体网络结构:


对于一幅图片的处理流程为:图片-卷积特征提取-RPN产生proposals-Fast RCNN分类proposals。

区域建议的产生

在目标检测领域,区域建议与后续的检测往往是分开进行的,而对于区域建议算法一般分为两类:基于超像素合并的(selective search、CPMC、MCG等),基于滑窗算法的,也就是我们在selective search一文中提到的穷举法。自从卷积网络出现后,滑窗也自然高级了一点,比如说可以在卷积特征层上滑窗,由于卷积特征层一般很小,所以得到的滑窗数目也少很多。但是产生的滑窗准确度也就差了很多,毕竟感受野也相应大了很多。Faster RCNN的做法是,既然区域建议的精度不够,那么类似于Faster RCNN,给每一个region再来个回归得到更加精细化的位置就是咯。



RPN对于feature map的每个位置进行滑窗,通过不同尺度以及不同比例的K个anchor产生K个256维的向量,然后分类每一个region是否包含目标以及通过回归得到目标的具体位置。

  • 这里使用的滑窗大小为 3*3 ,感觉很小,但是其相对于原图片的感受野约为200左右个像素。
  • anchor box的作用是产生不同比例及尺度的region proposal,通过将anchor中心点与滑窗中心点对齐,然后以一定的比例及大小裁剪滑窗。比如裁剪一个512*512的大小,比例为1:2的滑窗实现就是对于滑窗中心点向外扩充像素使得对应原图包含的像素点个数为512*512,比例为1:2。然后对于这一块进行卷积提取固定维度的特征。
  • RPN是一个全卷积神经网络的结构,也就是将全连接层通过卷积层去替换(我将在下一篇文章里面写FCN)。因此可以接受任意大小的输入,同时输出所有的anchors对应的特征。实验细节部分会详细说这一点。
  • 由于采用的是滑窗的方式,因此全连接层(上图获得256-d向量的位置)是共享权重的,每个滑窗的权重都是相同的。其实现方式是通过 3*3 的卷积层。

多尺度样本的产生

由于目标检测的目标尺度可能相差很大,因此我们需要尽可能产生不同尺寸的region proposals,常见的有两种方法,加上本文的一共三种方法:



  • 图像金字塔:通过将图像放缩到不同的尺寸,然后提取特征去做。有点类似于RCNN中的实现方式,显然这样需要为每一个尺寸重复提取卷积特征,成本很高。
  • 卷积特征金字塔:先对于图像提取卷积特征,然后将卷积特征放缩到不同的尺寸。类似于SPP的实现方式。在SPP中我们也看到,这里面的图像也需要放缩到几种尺寸,产生多尺度结果。
  • anchor金字塔:通过不同尺度的anchor在卷积特征上滑窗相当于是anchor金字塔,不需要图像有多个尺寸,仅需要有多个尺寸的anchor就好了。文章使用了3种尺度以及3种比例。


感觉区域大小很重要,3尺寸的1比例与3比例相差很小,因为比例准不准没关系,后面还有回归层去微调呢,但是如果尺寸不够那回归层就无能为力了。

损失函数的设计

RPN包含两个网络分支,分类层以及回归层。分类层给出一个二分类label,也就是这个region是否包含目标,回归层产生目标的位置。其中与任意ground-truth box的IOU大于0.7即认为是包含目标的,而对于任意ground-truth box的IOU都小于0.3则认为是负样本。对于回归采用的与Fast RCNN一致。


通过Ncls,Nreg,权衡分类以及回归的重要性程度。这里面一切都与Fast RCNN类似,那我们就只用看不同的地方就好了。
  • 分类损失一个是二分类,一个是类别相关的分类。
  • 回归损失一个是非类别相关的,Fast RCNN是类别相关的。
  • Fast RCNN ROI pooling后面跟着两个FC然后再到相应的分类或是回归,RPN则是一个全卷积的过程,包括对于后续的向量全连接操作都是通过 1*1 卷积实现的。而且无论回归还是分类从256-d向量到后面都只有一个卷积层。
  • 9个anchor的参数不共享,但是每个滑窗位置的参数是共享的。

RPN的训练过程

  • RPN可以通过BP算法端到端训练,为了防止类似样本向负样本倾斜,我们在每一个批次中采样256个anchors,然后这些anchors中正负样本比例为1:1。
  • RPN与Fast RCNN权重共享训练

文章使用的四步交替训练的方法:

  1. 通过预训练模型初始化RPN网络,然后训练RPN。
  2. 通过预训练模型初始化Fast RCNN,并使用RPN产生的proposal训练RPN。
  3. 通过Fast RCNN初始化RPN中与其共有的网络层,然后固定这些层训练其他层。
  4. 固定Fast RCNN中的共有层,通过RPN训练Fast RCNN。

实验细节

文章对于图像的预处理是放缩使得短边为600个像素,以VGG为例,经过四次的池化操作,每个卷积层像素的感受野对应于原图为16个像素。对于1000*600的图片,其卷积特征层尺寸为60*40,所以anchors数量为60*40*9,而去除在边缘的不完整的anchors,最后能得到6000个anchors,而这些anchors的特征是同时计算出来的。比如针对一个图像尺寸128*128,其对应于卷积层特征尺寸为9*9,然后对于所有的9*9小块进行卷积得到的feature map就是所有的anchor对应的特征。RPN产生的region proposal重叠较多,通过NMS去除重叠后大约剩余2K个proposal,在测试时仅选用前300个proposal,效果也是相当的好。

  • 不同尺度的anchors对应的真实的proposal大小



可以看到,我们的尺寸和比例还是起到了作用的,相应尺寸和比例的proposal也基本符合要求的。

  • proposal个数



可以看到300个proposal其实并没有降低识别准确率,而且NMS对结果也没啥影响,所以测试时取前300个proposal,这样可以大幅提高速度。

  • 分阶段权重共享的优点



权重共享大约能够提升个1.5个百分点,还是很有效果的。同时我们也看到数据集扩充对于识别结果影响最大,通过COCO+07+12训练然后再07上测试能够达到78.8%,提高10个点。

  • 时间性能



通过ZF基本可以实现实时的,所以文章标题也是朝着实时目标检测迈进嘛~

总结

至此,可以说RCNN目标检测系列已经是相当的完美了,无论是结果还是效率都可以商用了。但是网络的通用性不太好,在最新的网络比如Inception、ResNet系列直接套用Faster RCNN是不合适的,如何使用这些新的网络呢?接下来我们将研究FCN、RFCN这两个方法





这篇关于目标检测(5)-Faster RCNN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988341

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测

关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定,珠宝首饰上架各大电商平台前必须进行RSLReport(欧盟禁限用化学物质检测报告)资质认证,以确保产品不含对人体有害的化学物质。 RSL-铅,

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

Android模拟器的检测

Android模拟器的检测 需求:最近有一个需求,要检测出模拟器,防止恶意刷流量刷注册。 1.基于特征属性来检测模拟器,比如IMSI,IDS,特殊文件等等。 这个方案局限性太大,貌似现在大部分模拟器默认就是修改了的,还不需要人为的去修改。 经过测试,发现如下图所示。 如果是模拟器的话,这些特殊值应该返回true,比如DeviceIDS,Build。可是居然返回了false,说明特殊值