目标检测 - RCNN系列模型

news2024/12/26 21:23:34

文章目录

    • 1. RCNN
    • 2. Fast-RCNN
    • 3. Faster-RCNN

1. RCNN

论文:Rich feature hierarchies for accurate object detection and semantic segmentation

地址:https://arxiv.org/abs/1311.2524

在这里插入图片描述

分为两个阶段:

  • 目标候选框Object Proposals
  • Proposals缩放后放入CNN网络

目标候选框的实现:区域提案方法(Extract region proposals):使用选择性搜索selective search提取2000个候选区域,经过得到的(x',y',w',h')与现实标注(x,y,w,h)以欧式距离损失做回归

对候选框bounding box进行评分和整合。

selective search

使用一种过分隔方法,将图片分隔成比较小的区域

计算所有临近区域之间的相似性,包括颜色、纹理、尺度等

将相似度比较高的区域合并到一起

计算合并区域和临近区域到相似度

迭代合并,知道整个图片变成一个区域。

在这里插入图片描述

在选取候选框的时候,除了选择性搜索,还可以使用边缘框edge boxes的方法。

在这里插入图片描述

RCNN过程

  • 一张图像生成1000到2000个候选区域(使用selective search方法)
  • 对每个候选区域,使用深度网络提取特征(卷积池化)
  • 特征送入每一类SVM分类器,判别是否属于该类
  • 使用回归器精细修正候选框位置

在这里插入图片描述

不是一个端到端的结构,整体结构比较松散。

  1. 候选区域的生成

    利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

  2. 对每个候选区域,使用深度网络提取特征

    将2000个候选区域缩放到 277 × 277 p i x e l 277\times 277 pixel 277×277pixel,接着将候选区域输入事先训练好的AlexNet CNN网络中,获取4096维到特征,得到 2000 × 4096 2000\times 4096 2000×4096维矩阵。

    在这里插入图片描述

  3. 特征送入每一类的SVM分类器,判定类别

    2000 × 4096 2000\times4096 2000×4096维特征与20个SVM组成的权值矩阵 4096 × 20 4096\times20 4096×20相乘,获得 2000 × 20 2000\times20 2000×20维矩阵表示每个建议框是某个目标类别的得分。分别对上述 2000 × 20 2000\times20 2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

  4. 使用回归器精细修正候选框位置 - 依然是针对CNN输出的特征向量进行预测

    对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。

    如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示世纪框Ground Truth,红色窗口 G ^ \hat G G^表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。

在这里插入图片描述

非极大值抑制(NMS)

非极大值抑制,为了去除冗余的检测框。

在对conv5后的特征图,接入SVM进行打分,打好分后做非极大值抑制。

非极大值抑制过程:

  • 假设有3个框,根据SVM的打分顺序:概率从大到小为A、B、C
  • 判断B、C与A的重复率IoU是否大于阀值,如果大于阀值,则丢弃。如果小于阀值,则保留。
  • 保留下来的框,根据打分排序,重复上诉过程。

在这里插入图片描述

IoU 交并比

在这里插入图片描述

Bounding-box regression是用来微调窗口的。

(x,y,w,h)x,y为平移,w,h为尺度缩放。

RCNN框架

在这里插入图片描述


2. Fast-RCNN

论文:Fast R-CNN

地址:https://arxiv.org/abs/1504.08083

Fast R-CNN是继R-CNN之后的又一力作。同样使用VGG16作为网络的backbone,与R-CNN相比,训练时间快6倍,测试推理时间快213倍,准确率从62%提升至66%(在Pascal VOC数据集上)。

Fast RCNN算法流程

  • 一张图像生成1000到2000个候选区域(使用Selective Search方法)
  • 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI Pooling层缩放到 7 × 7 7\times 7 7×7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

在这里插入图片描述

一次性计算整张图像特征。不限制输入图像的尺寸。Fast-RCNN将整张图像送入网络,紧接着从特征图上提取相应的候选区域。这些候选区域的特征不需要再重复计算。而对于R-CNN,是一次将候选框区域输入卷积神经网络得到特征。

分类器,输出N+1个类别的概率(N为检测目标的种类,1为背景),用N+1个节点。

边界框回归器,输出对应N+1个类别的候选边界框回归参数 ( d x , d y , d w , d h ) (d_x,d_y,d_w,d_h) (dx,dy,dw,dh),共 ( N + 1 ) × 4 (N+1)\times4 (N+1)×4个节点。

在这里插入图片描述

Fast RCNN损失函数

在这里插入图片描述

分类损失: L c l s ( p , u ) = − l o g p u L_{cls}(p,u) = -logp_u Lcls(p,u)=logpu

边界框回归损失:
L l o c ( t u , v ) = ∑ i ∈ { x , y , w , h } s m o o t h L 1 ( t i u − v i ) s m o o t h L 1 ( x ) = { 0.5 x 2     i f ∣ x ∣ < 1 ∣ x ∣ − 0.5     o t h e r w i s e L_{loc}(t^u,v) = \sum_{i\in\{x,y,w,h\}}smooth_{L_1}(t^u_i-v_i) \\ smooth_{L_1}(x) = \begin{cases} 0.5x^2 \ \ \ if |x|<1 \\ |x|-0.5 \ \ \ otherwise \end{cases} Lloc(tu,v)=i{x,y,w,h}smoothL1(tiuvi)smoothL1(x)={0.5x2   ifx<1x0.5   otherwise

补充:Cross Entropy Loss交叉熵损失

  1. 针对多分类问题(softmax输出,所有输出概率和为1)
    H = − ∑ i o i ∗ l o g ( o i ) H = -\sum_io^*_ilog(o_i) H=ioilog(oi)

  2. 针对二分类问题(sigmoid输出,每个输出节点之间互不干预)
    H = − 1 N ∑ i = 1 N [ o i ∗ l o g o i + ( 1 − o i ∗ ) l o g ( 1 − o i ) ] H = -\frac{1}{N}\sum^N\limits_{i=1}[o^*_ilogo_i+(1-o^*_i)log(1-o_i)] H=N1i=1N[oilogoi+(1oi)log(1oi)]
    其中 o i ∗ o^*_i oi为真实标签值, o i o_i oi为预测值,默认 l o g log log e e e为底等于 l n ln ln

Fast RCNN框架

在这里插入图片描述


3. Faster-RCNN

论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

网址:https://arxiv.org/abs/1506.01497

Faster RCNN是继Fast RCNN后的又一力作。同样适用VGG16作为网络的backbone。

RNP+Fast R-CNN

Faster RCNN算法流程

  • 将图像输入网络得到相应的特征图
  • 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI Pooling层缩放到 7 × 7 7\times 7 7×7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

在这里插入图片描述

RPN网络

在这里插入图片描述

对于特征图上的每个 3 × 3 3\times 3 3×3的滑动窗口,计算出滑动窗口中心点对应原始图像上的中心点,并计算出k个anchor boxes(注意和proposal的差异)

在这里插入图片描述

需要提前设定好k个不同尺寸比例的anchor。在faster rcnn中给了三个尺度和三个比例。

三种尺度(面积): 12 8 2 , 25 6 2 , 51 2 2 128^2,256^2,512^2 128225625122,(面积具体数字,论文中说是根据经验所得)

三种比例: 1 : 1 , 1 : 2 , 2 : 1 1:1,1:2,2:1 1:11:22:1

意思就是,在 12 8 2 128^2 1282这个尺度上,有 1 : 1 , 1 : 2 , 2 : 1 1:1,1:2,2:1 1:11:22:1三个anchor,在 25 6 2 256^2 2562这个尺度上,有 1 : 1 , 1 : 2 , 2 : 1 1:1,1:2,2:1 1:11:22:1三个anchor,在 51 2 2 512^2 5122这个尺度上,有 1 : 1 , 1 : 2 , 2 : 1 1:1,1:2,2:1 1:11:22:1三个anchor。分别来负责检测不同大小的物体。

每个位置(每个滑动窗口)在原图上都对应有 3 × 3 = 9 3\times 3=9 3×3=9个anchor。

但是存在一个问题,VGG的感受野为228,那怎么去预测一个比它大的目标的边界框呢?如去预测 25 6 2 , 51 2 2 256^2,512^2 25625122尺度上的物体。论文中说,通过一个小的感受野去预测一个比它大的目标的边界框是有可能的,根据经验,我们看到一个物体的一部分,可以猜出这个物体的位置区域。

对于一张 1000 × 600 × 3 1000\times 600\times 3 1000×600×3的图像,大约有 60 × 40 × 9 ( 20 k ) 60\times 40\times 9(20k) 60×40×9(20k)个anchor,忽略跨越边界的anchor以后,剩下约 6 k 6k 6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的 c l s cls cls得分,采用非极大值抑制, I o U IoU IoU设置为0.7,这样每张图片只剩2k个候选框。

在原论文中k=9

利用RPN生成的边界框回归参数将anchor调整到我们所需要的候选框。

对于每张图片,上万个anchor中,采样256个anchor,由正样本和负样本两部分组成,比例大概为1:1。如果正样本个数不足128,则用负样本进行填充。

定义为正样本的方式:

  • 只要anchor与ground-truth box的IoU大于0.7,则这个anchor为正样本。
  • anchor与某个ground-truth box拥有最大的IoU,则也认为它为正样本。

定义为负样本的方式:

  • 与所有ground-truth box的IoU小于0.3的anchor,则定义为负样本

对于正样本与负样本之外的所有anchor,则丢弃掉。

RPN损失函数

在这里插入图片描述

  • p i p_i pi表示第 i i i个anchor存在目标的概率
  • p i ∗ p^*_i pi当为正样本时为1,当为负样本时为0
  • t i t_i ti表示预测第 i i i个anchor的边界框回归参数
  • t i ∗ t^*_i ti表示第 i i i个anchor对应的GT Box
  • N c l s N_{cls} Ncls表示第一个mini-batch中的所有样本数量256
  • N r e g N_{reg} Nreg表示anchor位置的个数(不是anchor个数)约2400

分类损失:二值交叉熵损失

回归损失:

在这里插入图片描述

Faster R-CNN训练

直接采用RPN Loss + Fast R-CNN Loss的联合训练方法

原论文中采用分别训练RPN以及Fast R-CNN的方法:

  • 利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数。
  • 固定RPN网络独有的卷积层以及全连接层参数,再利用ImageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast RCNN网络参数。
  • 固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数。
  • 同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全连接层参数。最后RPN网络与Fast RCNN网络共享前置卷积网络层参数,构成一个统一网络。

Faster-RCNN框架

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言float 类型数如何与0值⽐较?

一、问题 写出 float a 与“0值”⽐较的if语句。 二、解答 1、问题分析与解答 ⼀般地&#xff0c;如果⽤证判断⼀个数值型变量(short、int、long 等)&#xff0c;应该⽤ if(a0)&#xff0c;表示的含义是a与0进⾏“数值”上的⽐较; 但 float 型变量并不精确&#xff0c;不能直…

docker里安装conda,并source本地已有的虚拟环境包

有的环境比较难配&#xff0c;在镜像里配置的版本总是与本地不同&#xff0c;导致程序起不来&#xff0c;今天就用个最基础的镜像&#xff0c;去配置anaconda&#xff0c;然后直接导入虚拟环境。 本次使用镜像&#xff1a;nvcr.io/nvidia/cuda:12.2.0-runtime-ubuntu20.04&…

2024阿里云优惠活动隐藏页面,必看!

阿里云优惠活动隐藏页面之前在官网是可以看到的&#xff0c;2024阿里云官网升级后这个页面隐藏了&#xff0c;阿里云百科分享给大家阿里云优惠活动隐藏页面 aliyunbaike.com/go/activity 这是阿里云最新优惠活动集合页面&#xff0c;当前所有的活动都在这个页面&#xff0c;还有…

Ubuntu及CentOS 离线下载安装文件方法说明

一、离线安装包说明 Centos 包后缀名: rpm 安装方法&#xff1a;sudo rpm -ivh package.rpm Ubuntu 包后缀名字&#xff1a; deb 安装方法&#xff1a; sudo dpkg -i <package_file.deb> 二、手动下载 https://pkgs.org/ 通过网站搜索需要的离线包&#xff0c;选择…

数据库防水坝是什么?有什么作用?有哪些优势?

数据库是公司重要IT资产&#xff0c;是公司数据存储、数据整合、数据备份等重要载体。所以保障数据库安全至关重要。目前保障数据库安全产品较多&#xff0c;例如堡垒机、防火墙、数据库防水坝等等。今天我们就先来简单了解一下数据库防水坝是什么&#xff1f;有什么作用&#…

【位运算专题】介绍+详解5道题

本文讲解位运算的基础介绍和详解6道题&#xff0c;在讲解题目的同时提供AC代码【注&#xff1a;点击题目可打开对应链接】 1、位运算的基础介绍【重点】 如果上面位图不了解的&#xff0c;可以看我之前写过的文章&#xff1a; 【C和数据结构】位图和布隆过滤器-CSDN博客 2、…

LeetCode.670. 最大交换

题目 题目链接 分析 这道题的意思是我们只能交换一次&#xff0c;需要得到最大的数字。 我们的第一个想法就是要这个数字先变成一个数组&#xff0c;便于我们操作。 然后把数组最大的数放到第一个位置&#xff0c;如果最大的数字已经在第一个位置&#xff0c;那么就把次大的…

司铭宇老师:二手房电话营销培训:二手房电话销售技巧和话术

二手房电话营销培训&#xff1a;二手房电话销售技巧和话术 一、二手房电话销售的重要性 1.高效传播&#xff1a;通过电话&#xff0c;我们可以迅速将房源信息传播给潜在客户&#xff0c;提高房源的曝光率。 2.精准定位&#xff1a;通过电话沟通&#xff0c;我们可以初步了解客户…

掌握Vim:提升编程效率的实用指南

掌握Vim&#xff1a;提升编程效率的实用指南 1. 引言常用命令解析基础命令编辑命令搜索和替换移动和跳转窗口和标签页 Vim配置优化vimrc文件的基本设置常用配置项高级配置技巧 推荐插件及使用NERDTree&#xff1a;项目文件浏览YouCompleteMe&#xff1a;代码自动补全vim-gitgut…

[Unity] Tilemap瓦片左右翻转(上下翻转)

Tile&#xff08;瓦片&#xff09;左右翻转感觉是很常用的一个功能啊&#xff01;看了一些教程都没有提及&#xff0c;心想难道要把每张Sprite再做一张对称的、再做成瓦片吗&#xff1f; 图片量x2 、瓦片量x2、不现实&#xff01;一定有方法&#xff01; 搜索了了半天没找到方…

基于flask徐州市天气信息可视化分析系统04600-计算机毕业设计项目选题推荐(附源码)

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对天气信息等问题&#xff0c;对天气信息进行…

apk共享

cp apk到共享文件夹&#xff08;在雷电模拟器中MT管理文件时&#xff09; 如Linux操作cp

PLC从HTTP服务端获取JSON文件,解析数据到寄存器

智能网关IGT-DSER集成了多种PLC协议&#xff0c;方便实现各种PLC与HTTP服务端之间通讯。通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址&#xff0c;配置URL&#xff0c;即可采用POST命令&#xff0c;将JSON文件提交给HTTP的服务端&#xff1b; 服务端有返回的JSON&…

求职开源找工作小程序源码系统 源码全开源可二开 带完整的安装包以及安装教程

移动互联网的普及以及不断的发展&#xff0c;求职者和招聘方对于便捷、高效的招聘服务的需求越来越高。传统的招聘网站已经无法满足市场的需求&#xff0c;小编给大家分享一款开源的找工作小程序源码系统&#xff0c;以提供更加灵活、便捷的招聘服务。 以下是部分代码示例&…

2.1第一次作业

1.atd和crond两个任务管理程序的区别 atd是一次性的执行了一次之后就不再执行&#xff0c;crond是周期性质的可以循环重复的执行定时任务 ⒉.指定在2023/04/15 09: 00将时间写入testmail.txt文件中 [rootserver fox]# at 9:00 2023-04-15 warning: commands will be executed…

【数据结构】二叉树算法讲解(定义+算法原理+源码)

博主介绍&#xff1a;✌全网粉丝喜爱、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦&#xff01; &#x1f345;附上相关C语言版源码讲解&#x1f345; &#x1f44…

【蓝桥杯--图论】Dijkstra、Ballman-Ford、Spfa、Floyd

今日语录&#xff1a;每一次挑战都是一次成长的机会 文章目录 朴素DIjkstra堆优化的DijkstraBallman-FordFloydSpfa(求最短路)Spfa&#xff08;求是否含有负权&#xff09; 如上所示即为做题时应对的方法 朴素DIjkstra 引用与稠密图&#xff0c;即m<n^2 #include<iostrea…

Java项目:基于ssm框架实现的电影评论系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm826基于ssm框架实现的电影评论系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#x…

LINUX基础培训十四之系统参数介绍

前言、本章学习目标 了解LINUX中常见系统内核参数掌握常见系统参数优化方法 一、系统参数简介 Linux内核有非常多的参数&#xff0c;而对这些内核参数的修改会尽可能的提高内核的稳定性&#xff0c;并且&#xff0c;在业务高峰期的时候&#xff0c;可以保证内核尽可能的稳定…

Elasticsearch:2023 年 Lucene 领域发生了什么?

作者&#xff1a;来自 Elastic Adrien Grand 2023 年刚刚结束&#xff0c;又是 Apache Lucene 开发活跃的一年。 让我们花点时间回顾一下去年的亮点。 社区 2023 年&#xff0c;有&#xff1a; 5 个次要版本&#xff08;9.5、9.6、9.7、9.8 和 9.9&#xff09;&#xff0c;1 …