目标检测——Fast R-CNN算法解读

论文:Fast R-CNN
作者:Ross Girshick
链接:https://arxiv.org/abs/1504.08083
代码:https://github.com/rbgirshick/fast-rcnn

目录

  • 1、算法概述
  • 2、Fast R-CNN细节
    • 2.1The RoI pooling layer
    • 2.2 Fine-tuning for detection
    • 2.3 Fast R-CNN detection
  • 3、实验结果
  • 4、创新点和不足

1、算法概述

先说R-CNN的不足之处:
1、训练方式不是端到端的,必须先微调CNN网络,然后用CNN网络得到的特征训练SVMs,最后学习bounding-box回归器。
2、训练起来耗时且耗磁盘空间,用于训练SVMs和bounding-box的区域候选框的特征必须提取好后存储在磁盘中。
3、检测速度很慢,通过重复提取每个区域候选框的特征进行SVM分类加回归,用VGG16的backbone,即使在GPU上推理速度也要47s/image。

同年的SPPNet针对R-CNN也做了改进,除了将用于提取特征的CNN网络替换成ZF5,主要改进点就是用SPP(空间金字塔池化)层替换了网络最后一个池化层,这使得原本R-CNN的2000次CNN前向传播用于提取候选框区域特征得以仅通过一次就可以全部做完,这一改进大大减少了训练和推理时间。但它还是没有解决上面提到的R-CNN第1、第2两个不足点。

Fast R-CNN相对于之前的R-CNN工作做了如下改进:1、将CNN网络由AlexNet替换成了VGG16,能提取到更深层次特征;2、利用多任务损失函数,使得训练一步到位;3、训练阶段网络全部层都可以更新(相对于SPPNet而言,论文中说SPPNet在SPP层之前的卷积层无法更新,我在知乎上搜到的回答如下,回答来自知乎@可以啊,其实论文2.3节也解释了原因);4、不需要额外的磁盘空间用于存储特征。
在这里插入图片描述

2、Fast R-CNN细节

在这里插入图片描述
Fast R-CNN的结构如上图所示,网络接收的输入为一整张图片和一组区域候选框坐标,图片经过几组连续的conv+pooling层后得到特征图,然后,针对每个区域候选框,都将通过感兴趣区域池化层(ROI Pooling Layer)从特征图中提取一个固定长度的特征向量。每个特征向量被送到全连接层,最终连接到两个分支作为网络输出层:一个产生softmax概率估计,类别数为K个对象类加一个“背景”类;另一个为K个对象类输出的四个实数预测。每组4个值为K个类对应的预测box位置(反映在原图中需解码)。

2.1The RoI pooling layer

RoI池化层使用最大池化将任何有效感兴趣区域内的特征转换成具有固定尺寸HxW (例如,7x7)的小特征图。假设某个区域候选框对应特征图上的RoI区域窗口为(r,c,h,w),(r,c)代表矩形左上点,(h,w)代表矩形高,宽。RoI最大池化的工作原理是将h * w大小的RoI窗口划分为H * W个网格,每个网格的大小近似为h/H * w/W,然后将每个网格中的值最大池化到相应的输出网格单元中。RoI Pooling层可看作是单个尺度的SPP层(single-level SPP),如下图所示:
在这里插入图片描述

2.2 Fine-tuning for detection

在微调之前,先调整网络结构,将VGG16的最后一层maxpooling层替换成RoIpooling层,设置输出的固定尺寸为H=W=7;调整输出层为softmax和bounding-box回归,softmax类别为K+1,bounding-box输出为4K;调整输入为图片加上图片对应的区域候选框坐标。
样本采样采用分层采样,Fast R-CNN使用了一个训练过程,共同优化softmax分类器和bounding-box回归器,而不是在三个单独的阶段训练softmax分类器、SVM和回归器推理阶段。

多任务损失
作者通过在每个标记的RoI上使用一个多任务损失L来联合训练分类和bounding-box回归,联合损失公式如下:
在这里插入图片描述
其中,u为ROI对应的类别真实标签,v为ROI对应的矩形框坐标真实标注。因为背景类的标注为u=0,可见背景类不参与坐标框回归损失计算。这里坐标框回归用的是smoothL1损失:
在这里插入图片描述

Mini-batch采样
Batchsize设置为128,是从两张图片采样得到,每张图片包含64个ROI区域,25%的是正样本,正样本为IOU(ROI区域与groundtruth交并比)大于等于0.5的,类别u>=1;其余IOU为0.1到0.5的视为背景样本,类别u=0,IOU小于0.1的视为困难样本挖掘的参考例子。训练中只做了概率为0.5的水平翻转数据增强。

尺度不变性
作者也采用类似于SPPNet同样的方式进行多尺度训练,通过图像金字塔为网络提供近似的尺度不变性。在测试阶段,也采用在图像金字塔上进行区域候选框选择。

2.3 Fast R-CNN detection

在推理阶段,网络接收一张图片或者是一张图片的图像金字塔列表及对应的R个目标区域候选框坐标。在测试阶段R取值为2000。当用图像金字塔作为输入时,2000个ROI区域也被按比例分配到图像的每个尺度上,这些ROI区域接近224x224的大小。最终会在类别分支得到K+1个分数,在回归分支得到4个坐标点(取类别分数最大的类别对应的4个坐标值),然后按类别应用nms消除多余的框。

3、实验结果

实验设置:作者使用了三种模型(S,M,L)用于对比,AlexNet(model S),VGG_CNN_M_1024(model M,与S有相同的深度,但是通道数更宽),VGG16(model L),作者在VOC2007,VOC2010,VOC2012上测试结果如下:
在这里插入图片描述
和R-CNN,SPPNet训练时间及推理时间对比结果如下:
在这里插入图片描述

4、创新点和不足

  • 创新点:
    1、利用多任务损失函数,使得训练一步到位;
    2、提出RoIPooling层,使得训练阶段网络全部层都可以更新;
    3、Fast R-CNN消除了存储特征的磁盘空间消耗。
  • 不足:
    1、候选框区域生成还是用selective search,不仅耗时且与后面的训练过程是独立的;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/238218.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 年综合网络安全审计清单

在网络威胁不断演变的时代,确保组织数据和系统的安全至关重要。 全面的网络安全审核清单可以在实现这一目标方面发挥关键作用。但是,什么才是有效的网络安全审核清单呢?以及如何对其进行定制以满足您组织的独特需求? 了解网络安…

cpu版本的torch可以用清华镜像源安装

一、来到pytroch官网找到如下代码 官方提供的默认的安装cpu版本的torch的命令 pip3 install torch torchvision torchaudio二、使用清华镜像安装 pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

python高级练习题库实验1(B)部分

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目4代码实验结果题目5代码实验结果题目总结题目1 打包糖果小游戏,用户输入糖果品牌与个数,还有一个盒子里面可以装多少个糖果,输出一些打印信息,如下图所示: 代码 print("Packaging lollies into…

Java实现socket编程案例

以下是一个基本的Java socket编程案例: 服务端代码: import java.net.*; import java.io.*;public class Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket null;try {serverSocket new ServerSocket…

C/C++ 内存管理(1)

文章目录 C/C 内存划分静态和动态内存C语言的动态内存分配函数mallocfreecallocrealloc 常见内存使用错误 C/C 内存划分 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结 束时这些存储…

Windows环境 dockertopdesk 部署gitlab

1.在dockertopdesk里搜索 gitlab镜像 (pull)拉取镜像 2.运行镜像到容器 mkdir gitlab gitlab/etc gitlab/log gitlab/opt docker run -id -p 3000:80 -p 9922:22 -v /root/gitlab/etc:/etc/gitlab -v /root/gitlab/log:/var/log/gitlab -v /root/gitlab/opt:/var/opt/gitla…

R语言实验三

1、读取一个文件并进行如下操作。 ①使用命令清空工作空间,使用read.table读取exam_1.txt文件,将文件保存到data变量中,数据第一行设置为列名,第一列是行名。 ②判断对象data是否为矩阵。 ③将对象转换为矩阵,记为d…

canvas基础:渲染文本

canvas实例应用100 专栏提供canvas的基础知识,高级动画,相关应用扩展等信息。 canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重要的帮助。 文章目录 示例…

视频后期特效处理软件 Motion 5 mac中文版

Motion mac是一款运动图形和视频合成软件,适用于Mac OS平台。 Motion mac软件特点 - 精美的效果:Motion提供了多种高质量的运动图形和视频效果,例如3D效果、烟雾效果、粒子效果等,方便用户制作出丰富多彩的视频和动画。 - 高效的工…

如何检查代理和防火墙设置

这样的错误可能会突然出现在个人计算机屏幕上,当访问您喜爱的网站时。这是什么原因,如何快速解决这个问题?我们将弄清楚如何检查。 关于访问问题 对网站的访问受阻实际上是一个非常常见的错误,它既可能是由于物理原因&#xff08…

【redis】[windows]redis安装以及配置等相关

前言:下载安装配置密码、远程访问等等 目录 一、下载 二、配置文件说明 1、bind 1.1 这个参数默认值是127.0.0.1,也就是只允许redis所在机器访问redis。 1.2 如果我们的应用服务和redis服务不在一个机器我们就需要修改这个参数为0.0.0.0&#xff0c…

JS逆向-mytoken之code参数

前言 本文是该专栏的第60篇,后面会持续分享python爬虫干货知识,记得关注。 本文以mytoken为例,通过js逆向获取其code参数的生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”进行详细说明。 接下来,跟着笔者直接往下看正文详细…