目标检测之 Fast R-CNN

2024-06-10 05:48
文章标签 fast cnn 检测 目标

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

论文地址:Fast R-CNN

代码地址:rbgirshick/fast-rcnn

Fast R-CNN是在 R-CNN的基础上进行的改进,大致框架是一致的。总体而言,Fast R-CNN相对于R-CNN而言,主要提出了三个改进策略:
1. 提出了RoIPooling,避免了对提取的region proposals进行缩放到224x224,然后经过pre-trained CNN进行检测的步骤,加速了整个网络的learning与inference过程,这个是巨大的改进,并且RoIPooling是可导的,因此使得整个网络可以实现end-to-end learning,这个可以认为是Fast R-CNN相对于R-CNN最大的改进之处。

2. 采用了Multi-task loss进行边框回归,这个在R-CNN中也有这方面的实验。

3. 利用了截断的奇异值分解(Truncated SVD for faster detection)加速了网络。

下面图1是 Fast R-CNN的总体框图:


                                                          图1 Fast R-CNN网络架构

这个图已经表达的很清楚了,但是还是有些细节需要说明一下,如图2所示:


                                                                    图2 Fast R-CNN 流程图

现在就按照图2的流程进行讲解。首先是读入一张图像,这里有两个分支,一路送入FCN,输出 feature maps,另一路通过selective search提取region proposals(注意,Fast R-CNN论文中并没有明确说明使用selective search提取region proposals,但是Fast R-CNN是基于R-CNN的,姑且默认采用selective search提取region proposals吧。),提取的每个region proposal 都有一个对应的Ground-truth Bounding Box和Ground-truth class label。其中每个region proposals用四元数组进行定义,即(r, c, h, w),即窗口的左上行列坐标与高和宽。值得注意的是,这里的坐标均是对应原图像的,而不是输出的feature maps。因此,还需要把原图像的坐标系映射到feature maps上。这一点也很简单,比如采用的是pre-trained 网络模型为VGG16的话,RoIPooling替换掉最后一个max pooling层的话,则原图像要经过4个max pooling层,输出的feature maps是原图像的1/16,因此,将原图像对应的四元数组转换到feature maps上就是每个值都除以16,并量化到最接近的整数。那么将region proposal的四元组坐标映射到feature maps上之后接下干什么呢?接下来就是把region proposal窗口框起来的那部分feature maps输入到RoIPooling(R-CNN是将其缩放到224x224,然后送入经过Fine-tuning的网络模型),得到固定大小的输出maps。

那么现在就谈一下RoIPooling层是怎样得到输出的,如下图所示:


                                       图3 RoIPooling 输出

在图3中最外层蓝色的框即表示region proposal的四元组坐标映射到feature maps上,然后此框再经过划分网格,这里为2x2,所以最终的输出feature maps大小为2x2。值得注意的是,本应把region proposal的矩形框(window)均匀分成2x2的网格,但是feture map的坐标值均为整数值,不可避免存在一个就近取整的量化,导致有时无法实现均匀分割,(这个问题在Mask R-CNN中提出的RoIAlign层专门解决这个问题)。在Fast R-CNN论文中,在采用VGG16的时候,Conv5_x的输入feature map的spatial size是7x7的,所以在论文中把每个region proposal划分为7x7的网格,那么最终经过RoIPooling输出的feature maps的spatial size为7x7的。RoIPooling跟标准的 max pooling一样,是逐channel的。

下面要讲的就是Multi-task loss了。由图1或图2可知,网络的最终输出是针对每一个region proposal的。对于每一个region proposal会输出一个类别标签,就是这个region proposal框内框住的目标是属于什么类别,同时对每一个region proposal还进行边框回归,输出一个四元组的坐标,即,而其对应的ground-truth bounding box为,在进行边框回归的时候,利用robust L1 loss计算回归损失。这里无需赘言,参见Fast R-CNN论文 "2.3. Fine-tuning for detection"。

下面讲一下Mini-batch sampling。在进行Fine-tuning的时候,每次读入两张图像,然后在每张图像上均匀选取64个 RoIs,两张图像就是128个RoIs。也就是说,每次迭代的是RoI。这里选取的RoI不是随便选取的,而是RoI与Ground-truth bounding box的IoU≥0.5作为正样本的,也就是此时的样本有一个对应的Ground-truth bounding box与Ground-truth class label,其它的就作为背景样本。

最后关于截断的SVD分解,亦无需赘言,详见 Fast R-CNN "3.1. Truncated SVD for faster detection"。




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



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

相关文章

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

3月份目标——刷完乙级真题

https://www.patest.cn/contests/pat-b-practisePAT (Basic Level) Practice (中文) 标号标题通过提交通过率1001害死人不偿命的(3n+1)猜想 (15)31858792260.41002写出这个数 (20)21702664840.331003我要通过!(20)11071447060.251004成绩排名 (20)159644

基于深度学习的轮廓检测

基于深度学习的轮廓检测 轮廓检测是计算机视觉中的一项关键任务,旨在识别图像中物体的边界或轮廓。传统的轮廓检测方法如Canny边缘检测和Sobel算子依赖于梯度计算和阈值分割。而基于深度学习的方法通过训练神经网络来自动学习图像中的轮廓特征,能够在复杂背景和噪声条件下实现更精确和鲁棒的检测效果。 深度学习在轮廓检测中的优势 自动特征提取:深度学习模型能够自动从数据中学习多层次的特征表示,而不需要

自动驾驶---Perception之Lidar点云3D检测

1 背景         Lidar点云技术的出现是基于摄影测量技术的发展、计算机及高新技术的推动以及全球定位系统和惯性导航系统的发展,使得通过激光束获取高精度的三维数据成为可能。随着技术的不断进步和应用领域的拓展,Lidar点云技术将在测绘、遥感、环境监测、机器人等领域发挥越来越重要的作用。         目前全球范围内纯视觉方案的车企主要包括特斯拉和集越,在达到同等性能的前提下,纯视觉方

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址:YOLOv9 2、使用下面代码进行检测 import torchimport cv2from models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.plots import plot_o

Java内存泄漏检测和分析介绍

在Java中,内存泄漏检测和分析是一个重要的任务,可以通过以下几种方式进行:   1. 使用VisualVM VisualVM是一个可视化工具,可以监控、分析Java应用程序的内存消耗。它可以显示堆内存、垃圾收集、线程等信息,并且可以对内存泄漏进行分析。 2. 使用Eclipse Memory Analyzer Eclipse Memory Analyzer(MAT)是一个强大的工具,可

Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接

在进行参数化读取时发现一个问题: 发现问题: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8081): Max retries exceeded with url: /jwshoplogin/user/update_information.do (Caused by NewConn

基于CDMA的多用户水下无线光通信(3)——解相关多用户检测

继续上一篇博文,本文将介绍基于解相关的多用户检测算法。解相关检测器的优点是因不需要估计各个用户的接收信号幅值而具有抗远近效应的能力。常规的解相关检测器有运算量大和实时性差的缺点,本文针对异步CDMA的MAI主要来自干扰用户的相邻三个比特周期的特点,给出了基于相邻三个匹配滤波器输出数据的截断解相关检测算法。(我不知道怎么改公式里的字体,有的字母在公式中重复使用了,请根据上下文判断字母含义) 1

前景检测算法_3(GMM)

因为监控发展的需求,目前前景检测的研究还是很多的,也出现了很多新的方法和思路。个人了解的大概概括为以下一些: 帧差、背景减除(GMM、CodeBook、 SOBS、 SACON、 VIBE、 W4、多帧平均……)、光流(稀疏光流、稠密光流)、运动竞争(Motion Competition)、运动模版(运动历史图像)、时间熵……等等。如果加上他们的改进版,那就是很大的一个家族了。

基于感知哈希算法的视觉目标跟踪

偶然看到这三篇博文[1][2][3],提到图片检索网站TinEye和谷歌的相似图片搜索引擎的技术原理。以图搜图搜索引擎的使命是:你上传一张图片,然后他们尽全力帮你把互联网上所有与它相似的图片搜索出来。当然了,这只是他们认为的相似,所以有时候搜索结果也不一定对。事实上,以图搜图三大搜索引擎除了上面的老牌的TinEye和Google外,还有百度上线不算很久的新生儿:百度识图。之前听余凯老师的一个D