FasterRCNN 理解(精简版总结)

news/2024/7/10 0:59:29 标签: 深度学习, 目标检测

RCNN系列的内容已经有非常多同学分享出来了,大多也非常详细。为了避免在长文中迷失方向,这里做个精简版的总结,记录个人的理解。主要是概括算法流程以及特点,方便回顾。先简单介绍下RCNN和Fast RCNN,在详细记录faster rcnn的RPN网络的理解。

RCNN:

1. 流程

(1). 采用传统方法Selective Search产生目标候选框

(2). 对每个候选框,用深度卷积神经网络提取特征得到feature map

(3). 每个框得到的feature map喂给SVM分类器,并通过线性回归调整bounding box的位置和大小,使得更接近 gt

2. 缺点:

(1)CNN网络参数不共享

(2)采用SVM分类器,速度慢

(3)产生后选框ROI的大小不一样,这样导致CNN输出与FC维度不统一

总的来说,RCNN比较笨,比较慢,进而提出SPP-net。SPP-net用CNN一次性提取特征,并利用空间金字塔池化(spatial pyramid pooling)将大小不一致的proposal变成大小一样的。

Fast RCNN

1. 流程:

(1)CNN提取输入图像特征,得到feature map

(2)从feature map得到ROIs

(3)ROI pooling之后通过softmax 对每个ROI进行分类,并通过BBox reg调整bbox的位置

2. 缺点:

(1)通过Selective Search得到ROI十分耗时

Faster RCNN

1. 流程:

(1)同样的用CNN提取输入图像的特征,得到feature map

(2)通过RPN网络从feature map得到候选框ROIs,并对ROIs进行二分类,判别候选框内容是前景还是背景,留下前景的候选框,抛弃背景候选框,并通过回归微调前景的BBox与标注gt接近。关于RPN网络的操作流程及细节,下文会阐述

(3)ROI pooling得到等size的feature,再送入多分类器

(4)通过多分类器对候选框进行多分类,即gt有几类,这个就会分成相应的类别

(5)再进行BBox回归

2. loss的组成部分:

由上述总体流程,可以得知faster rcnn整体的loss由四个部分组成:

(1)RPN网络进行二分类的loss(候选框是前景 or 背景)

(2)RPN网络前景BBox与gt微调的loss,BBox reg loss

(3)多分类的loss,从RPN网络得到的bbox进行多类别判断的loss

(4)最后每个类别BBox reg微调的loss

3. RPN网络

(1)RPN网络的输入是CNN得到的feature map,RPN在feature map上用3*3的滑动窗得到对应原图的多个候选框。

什么意思呢?feature map上的每一个点,都可以映射到原图的一个区域(即感受野)。对feature map 每个点,对应原图的区域,进行不同的形状大小变换,得到不同大小形状的框就是anchor box。这些框的尺寸和大小是预先设置好的。feature map上的每一个点就是原图区域anchoe box的中心点。为了使得覆盖范围更广,检测的物体更多,并保证效率,faster rcnn基于3个不同尺寸大小,3种不同尺度变换的anchor box做变换,对于feature map的每一个点,在原图区域得到9个anchor box。

(2)去掉超出图像边界的anchor box,把所有anchor box送入二分类层,判断每个anchor box是前景还是背景;同时把anchor box送入回归层,调整box与gt接近。

4. 关于RPN的补充

(1)cls 和reg层都是全卷积网络,用1*1的卷积核代替全连接

(2)anchor 具有平移不变性

(3)anchor的二分类时,有两个方法判断为正例:与gt有最大的IOU的anchor认为是正例;与gt的IOU大于0.7的anchor认为是正例

(4)对重复的box,用nms进行合并进行筛选。若box1和box2重复IOU大于0.7,看box1与box2哪个二分类正例的得分高,谁高保留谁

(5)关于感受野理解补充可参考这位博主:卷积神经网络中感受野的详细介绍_Microstrong0305的博客-CSDN博客_感受野


http://www.niftyadmin.cn/n/1003027.html

相关文章

SAMBA服务器 -- 第十六章

NetBIOS协议:安装软件:配置文件:配置流程:smb.conf配置:格式:【分享名称】部分设置:smb.conf 内的可用变量功能:测试不需要密码的分享:测试需要密码的分享:与…

【转载】Ubuntu下SVN安装和配置

一、SVN安装 1.安装包 1.$ sudo apt-get install subversion 2.创建项目目录 $ sudo mkdir /home/xiaozhe/svn $ cd /home/xiaozhe/svn/ $ sudo mkdir mypro 3.创建svn文件仓库 $ sudo svnadmin create /home/xiaozhe/svn/mypro 4.导入项目到svn文件仓库 (可有可无) …

android tools:

1. android apk tool 一款用于重建apk的工具。可以解压各种apk包,查看完整的资源等,目前不支持查看源代码。 网址:http://code.google.com/p/android-apktool/ 2. unyaffs 可以解压yaffs格式的img文件。 网址:http://code.google.…

STL容器是否是线程安全的

转载http://blog.csdn.net/zdl1016/article/details/5941330 STL的线程安全. 说一些关于stl容器的线程安全相关的话题。 一般说来,stl对于多线程的支持仅限于下列两点:(貌似Effective STL中有描述) 1.多个读取者是安全的。即多个线程可以同时读取一个容器…

ubuntu 启动 meld、diffuse失败

两种方法: 1. 把python版本回退到python2 2. 修改meld使用python2启动。 cd /usr/bin sudo vim meld修改 #!/usr/bin/python2 只要出现无法启动软件的问题,都可试试这个方法。 reference: https://stackoverflow.com/questions/50783742/can-not-star…

误导人的接口(interface)

接口,interface,这个词语有误导之嫌。窃以为,这也是其名称与实际开发不符,造成难于直观理解和使用过程中产生困惑的根源。所谓名不正则言不顺;不怕生错命,最怕改坏名。在现实生活中,接口通常是指…

享受Android应用程序

准备开始 本文介绍几种处理复杂情况的 Android SDK 工具。开发 Android 应用程序,需要最新版 Android SDK,这需要一个 Java Development Kit (JDK)。我使用的是 Android 2.2 和 JDK 1.6.0_17。物理设备不是必须的;本文中的所有代码在 SDK 附…

模型训练报错AttributeError: ‘NoneType‘ object has no attribute ‘text‘

用pascal voc数据格式&#xff0c;mmdetection训练模型时报错AttributeError: NoneType object has no attribute text&#xff0c;定位在xml_style.py-----> difficult int(obj.find(difficult).text) 原因是标注文件 .xml的<object>没有<difficult>的标签。…