目标检测(2)-RCNN

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

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

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

RCNN注意事项:https://blog.csdn.net/u010417185/article/details/79723974

RCNN作为第一篇目标检测领域的深度学习文章,大幅提升了目标检测的识别精度,在PASCAL VOC2012数据集上将MAP从35.1%提升至53.7%。使得CNN在目标检测领域成为常态,也使得大家开始探索CNN在其他计算机视觉领域的巨大潜力。这篇文章的创新点有以下几点:将CNN用作目标检测的特征提取器、有监督预训练的方式初始化CNN、在CNN特征上做BoundingBox 回归。

摘要

从ILSVRC 2012、2013表现结果来看,CNN在计算机视觉的特征表示能力要远高于传统的HOG、SIFT特征等,而且这种层次的、多阶段、逐步细化的特征计算方式也更加符合人类的认知习惯。但是,如何将在目标检测领域重现这种奇迹呢?目标检测区别于目标识别很重要的一点是其需要目标的具体位置,也就是BoundingBox。而产生BoundingBox最简单的方法就是滑窗,可以在卷积特征上滑窗。但是我们知道CNN是一个层次的结构,随着网络层数的加深,卷积特征的步伐及感受野也越来越大。例如AlexNet的Pool5层感受野为195*195,步伐为32*32,显然这种感受野是不足以进行目标定位的。使用浅层的神经网络能够保留这种空间结构,但是特征提取的性能就会大打折扣。RCNN另辟蹊径,既然我们无法使用卷积特征滑窗,那我们通过区域建议方法产生一系列的区域,然后直接使用CNN去分类这些区域是目标还是背景不就可以吗?当然这样做也会面临很多的问题,不过这个思路正是RCNN的核心。因此RCNN全称为Regions with CNN features。

整体结构


RCNN的输入为完整图片,首先通过区域建议算法产生一系列的候选目标区域,其中使用的区域建议算法为Selective Search,具体可以参照:目标检测(1)-Selective Search - 知乎专栏。然后对于这些目标区域候选提取其CNN特征,并训练SVM分类这些特征。最后为了提高定位的准确性在SVM分类后区域基础上进行BoundingBox回归。

  • 产生目标区域候选

这部分其实就是直接使用Selective Search,选择2K个置信度最高的区域候选,关于筛选的细节以及排序规则可以参照本专栏上一篇文章。

  • CNN目标特征提取

RCNN使用的是AlexNet,可以参见我们的相关文章:卷积神经网络模型(2)-AlexNet解读 - 知乎专栏由于CNN的参数量巨大,训练CNN需要大量的样本,此前的方法是大家先用无监督的预训练初始化CNN的参数,然后再在样本集上使用监督的训练方法。不同于这些方法,RCNN使用ImageNet的有标签数据进行有监督的预训练,然后再在本数据集上微调最后一层全连接层。直到现在,这种方法已经成为CNN初始化的标准化方法。但是训练CNN的样本量还是不能少的,因此RCNN将正样本定义的很宽松,为了尽可能获取最多的正样本,RCNN将IOU>0.5(IoU 指重叠程度,计算公式为:A∩B/A∪B)的样本都称为正样本。每次迭代批大小为128,其中正样本个数为32,负样本为96.其实这种设置是偏向于正样本的,因为正样本的数量实在是太少了。由于CNN需要固定大小的输入,因此对于每一个区域候选,首先将其放缩至227*227,然后通过CNN提取特征。


对IOU的进一步理解或再详细了解RCNN可参照博文 https://blog.csdn.net/u010417185/article/details/79723463


CNN特征层选取

现在CNN已经能够提取到目标的特征了,但是CNN的层数很多,选择哪一层作为特征提取层呢?RCNN进行了宽泛的实验,最终选择的fc层。


对比Pool5层以及FC层,可以看出fc层相对的MAP要高很多,尤其是经过预训练后的网络。一方面原因是Pool5层的特征尺寸比较大,另一方面是全连接层特征更加符合类别信息。但是选用Fc6还是Fc7呢差距还是不明显的。其中R-CNN FT fc7 BB取得了最高的MAP,数据是在经过微调的RCNN上取得Fc7层特征,然后训练SVM,并通过BoundingBox回归得到的最终结果。

  • 目标种类分类器

在通过CNN提取区域候选的特征后,RCNN对于每个种类训练SVM用以分类这些特征具体属于哪个种类。但是这里面的样本确定和CNN中的样本也是不一样的啦,因为CNN需要大量的样本去驱动特征提取,因此正样本的阈值比较低。而SVM适合小样本的分类,通过反复的实验,RCNN的SVM训练将ground truth样本作为正样本,而IOU>0.3的样本作为负样本,这样也是SVM困难样本挖掘的方法。

  • 贪婪非极大值抑制

由于有多达2K个区域候选,我们如何筛选得到最后的区域呢?RCNN使用贪婪非极大值抑制的方法,假设ABCDEF五个区域候选,首先根据概率从大到小排列。假设为FABCDE。然后从最大的F开始,计算F与ABCDE是否IoU是否超过某个阈值,如果超过则将ABC舍弃。然后再从D开始,直到集合为空。而这个阈值是筛选得到的,通过这种处理之后一般只会剩下几个区域候选了。

  • BoundingBox回归

为了进一步提高定位的准确率,RCNN在贪婪非极大值抑制后进行BoundingBox回归,进一步微调BoundingBox的位置。不同于DPM的BoundingBox回归,RCNN是在Pool5层进行的回归。而BoundingBox是类别相关的,也就是不同类的BoundingBox回归的参数是不同的。例如我们的区域候选给出的区域位置为:也就是区域的中心点坐标以及宽度和高度

我们要做的就是找到一个映射把他转换到真实的位置:

那我们就要定义一些转换的参数啦:
这些就是我们需要的参数,我们想得到关于尺寸无关的X,Y偏移量,以及尺度变化信息。如果求解到了这四个参数,我们就能成功的映射到真是目标位置了。


RCNN选用的特征是Pool5层特征,然后假设每个偏移量是Pool5特征的一个线性映射,也就是:

然后我们要求解这个W就可以了,RCNN使用的是L2范数的最小均方误差,也就是下面这个式子,T就是我们的目标,根据我们上面的GP的公式可以很容易得到T的表达式,也就是最后这个式子:
这就是个规则的最小均方误差的问题了,很容易求解,比如BP算法。需要注意的一点就是在对于训练样本的选择上,我们做的只是微调,因此不能选择目标建议与真实位置相差较大的情况。

  • 为什么不直接使用Fc8的结果作为贪婪极大值抑制的输入而是重新训练很多的SVM呢?

作者有去尝试使用Fc8结果作为输入,但是发现精度大约下降了4%,产生这种情况的原因是我们CNN的图片正样本定义为IOU>0.5,这是个很宽松的条件,导致CNN并不能定位到很精确的位置。那能不能将IOU设置的高一点呢?答案是否定的,因为CNN需要大量的样本,当正样本设置为真是BoundingBox时效果很差,而IOU>0.5相当于30倍的扩充了样本数量。而我们近将CNN结果作为一个初选,然后用困难负样本挖掘的SVM作为第二次筛选就好多了。

  • 存在的问题

RCNN虽然效果很好,但是存在一些问题,比如时间代价太高了,网络训练是分阶段的,太麻烦了等。而这些问题将在我们后面的文章一一解决。直到最终版本Faster RCNN可以说是近乎完美的目标检测模型了,网络优美,速度快。







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



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

相关文章

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

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

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

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

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

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

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