rcnn算法原理_十大算法R实现

rcnn算法原理_十大算法R实现R-CNN算法原理对于一张图片当中多个目标,多个类别的时候。前面的输出结果是不定的,有可能是以下有四个类别输出这种情况。或者N个结果,这样的话,网络模型输出结构不定所以需要一些他的方法解决目标检测(多个目标)的问题,试图将一个检测问题简化成分类问题①:目标检测-Overfeat模型滑动窗口目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。为了在不同观察距离处检测…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

R-CNN算法原理

 对于一张图片当中多个目标,多个类别的时候。前面的输出结果是不定的,有可能是以下有四个类别输出这种情况。或者N个结果,这样的话,网络模型输出结构不定

在这里插入图片描述

在这里插入图片描述

所以需要一些他的方法解决目标检测(多个目标)的问题,试图将一个检测问题简化成分类问题

①:目标检测-Overfeat模型

滑动窗口
目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。为了在不同观察距离处检测不同的目标类型,我们使用不同大小和宽高比的窗口。如下图所示:

在这里插入图片描述

 这样就变成每张子图片输出类别以及位置,变成分类问题。但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,
 有些物体适应的框不一样,所以需要提前设定K个窗口,每个窗口滑动提取M个,总共K x M 个图片,
 通常会直接将图像变形转换成固定大小的图像,变形图像块被输入 CNN 分类器中,提取特征后,
 我们使用一些分类器识别类别和该边界框的另一个线性回归器。

在这里插入图片描述

那这种方法是怎么去利用数据训练的?

 首先我们会准备所需要的训练集数据,每张图片的若干个子图片以及每张图片的类别位置,如下我们从某张图片中滑动出的若干的图片。

在这里插入图片描述

这种方法类似一种暴力穷举的方式,会消耗大量的计算力量,并且由于窗口大小问题可能会造成效果不准确
但是提供了一种解决目标检测问题的思路

在CVPR 2014年中Ross Girshick提出R-CNN。

 不使用暴力方法,而是用候选区域方法(region proposal method),创建目标检测的区域改变了图像领域实现物体检测的模型思路,
 R-CNN是以深度神经网络为基础的物体检测的模型 ,R-CNN在当时以优异的性能令世人瞩目,
 以R-CNN为基点,后续的SPPNet、Fast R-CNN、Faster R-CNN模型都是照着这个物体检测思路。

在这里插入图片描述

步骤(以AlexNet网络为基准)
1.找出图片中可能存在目标的侯选区域region proposal
2.进行图片大小调整为了适应AlexNet网络的输入图像的大小227×227,通过CNN对候选区域提取特征向量,2000个建议框的CNN特征组合成2000×4096维矩阵
3.将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘(20种分类,SVM是二分类器,则有20个SVM),获得2000×20维矩阵
4.分别对2000×20维矩阵中每一列即每一类进行非极大值抑制(NMS:non-maximum suppression)剔除重叠建议框,得到该列即该类中得分最高的一些建议框
5.修正bbox,对bbox做回归微调

选择性搜索(SelectiveSearch,SS)中,首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,我们首先对较小的组进行分组。我们继续合并区域,直到所有区域都结合在一起。下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。

在这里插入图片描述

 SelectiveSearch在一张图片上提取出来约2000个侯选区域,需要注意的是这些候选区域的长宽不固定。
  而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改。

传统的CNN限制了输入必须固定大小,所以在实际使用中往往需要对原图片进行crop或者warp的操作

crop:截取原图片的一个固定大小的patch
warp:将原图片的ROI缩放到一个固定大小的patch
无论是crop还是warp,都无法保证在不失真的情况下将图片传入到CNN当中。会使用一些方法尽量让图片保持最小的变形。

1.各向异性缩放:即直接缩放到指定大小,这可能会造成不必要的图像失真

2.各向同性缩放:在原图上出裁剪侯选区域, (采用侯选区域的像素颜色均值)填充到指定大小在边界用固定的背景颜色

在这里插入图片描述

③ CNN网络提取特征

 在侯选区域的基础上提取出更高级、更抽象的特征,这些高级特征是作为下一步的分类器、回归的输入数据

在这里插入图片描述

提取的这些特征将会保存在磁盘当中(这些提取的特征才是真正的要训练的数据)

④ 特征向量训练分类器SVM

假设一张图片的2000个侯选区域,那么提取出来的就是2000 x 4096这样的特征向量(R-CNN当中默认CNN层输出4096特征向量)。
那么最后需要对这些特征进行分类,R-CNN选用SVM进行二分类。
假设检测N个类别,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,
这样得出[2000, 20]的得分矩阵,如下图所示:

在这里插入图片描述

每个SVM分类器做的事情
判断2000个候选区域是某类别,还是背景

⑤ 非最大抑制(NMS)

目的
筛选候选区域,得到最终候选区域结果
迭代过程
对于所有的2000个候选区域得分进行概率筛选
然后对剩余的候选框,每个类别进行IoU(交并比)>= 0.5 筛选

在这里插入图片描述

假设现在滑动窗口有:A、B、C、D、E 5个候选框,

第一轮:假设B是得分最高的,与B的IoU>0.5删除。现在与B计算IoU,DE结果>0.5,剔除DE,B作为一个预测结果
第二轮:AC中,A的得分最高,与A计算IoU,C的结果>0.5,剔除C,A作为一个结果
最终结果为在这个5个中检测出了两个目标为A和B

⑥修正候选区域

 那么通过非最大一直筛选出来的候选框不一定就非常准确怎么办?R-CNN提供了这样的方法,建立一个bbox regressor

 回归用于修正筛选后的候选区域,使之回归于ground-truth,默认认为这两个框之间是线性关系,因为在最后筛选出来的候选区域和ground-truth很接近了
 修正过程(线性回归)

在这里插入图片描述

给定:anchor A=(A_{x}, A_{y}, A_{w}, A_{h}) 和 GT=[G_{x}, G_{y}, G_{w}, G_{h}]
寻找一种变换F,使得:F(A_{x}, A_{y}, A_{w}, A_{h})=(G_{x}^{'}, G_{y}^{'}, G_{w}^{'}, G_{h}^{'}),
其中(G_{x}^{'}, G_{y}^{'}, G_{w}^{'}, G_{h}^{'})≈(G_{x}, G_{y}, G_{w}, G_{h})

在这里插入图片描述

在这里插入图片描述

R-CNN的训练过程这些部分,正负样本准备+预训练+微调网络+训练SVM+训练边框回归器

⑦正负样本准备

 对于训练集中的所有图像,采用selective search方式来获取,最后每个图像得到2000个region proposal。但是每个图像不是所有的候选区域都会拿去训练。保证正负样本比例1:3

在这里插入图片描述

这样得出若干个候选区域以及对应的标记结果。

⑧预训练(pre-training)

CNN模型层数多,模型的容量大,通常会采用2012年的著名网络AlexNet来学习特征,包含5个卷积层和2个全连接层,
利用大数据集训练一个分类器,比如著名的ImageNet比赛的数据集,来训练AlexNet,保存其中的模型参数。

⑨ 微调(fine-tuning)

 AlexNet是针对ImageNet训练出来的模型,卷积部分可以作为一个好的特征提取器,后面的全连接层可以理解为 一个好的分类器。R-CNN需要在现有的模型上微调卷积参数。

 将第一步中得到的样本进行尺寸变换,使得大小一致,然后作为预训练好的网络的输入,继续训练网络(迁移学习)

SVM分类器:

针对每个类别训练一个SVM的二分类器。举例:猫的SVM分类器,输入维度是2000 4096,目标还是之前第一步标记是否属于该类别猫,训练结果是得到SVM的权重矩阵W,W的维度是409620。

bbox回归器训练:

只对那些跟ground truth的IoU超过某个阈值且IOU最大的region proposal回归,其余的region proposal不参与

R-CNN测试过程

 输入一张图像,利用selective search得到2000个region proposal。

 对所有region proposal变换到固定尺寸并作为已训练好的CNN网络的输入,每个候选框得到的4096维特征

 采用已训练好的每个类别的svm分类器对提取到的特征打分,所以SVM的weight matrix是4096 N,N是类别数,这里一共有20个SVM, 得分矩阵是200020

 采用non-maximun suppression(NMS)去掉候选框

 第上一步得到region proposal进行回归。

R-CNN流程总结
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

表现
在VOC2007数据集上的平均精确度达到66%

瓶颈:
1、训练阶段多:步骤繁琐: 微调网络+训练SVM+训练边框回归器。

2、训练耗时:占用磁盘空间大:5000张图像产生几百G的特征文件。(VOC数据集的检测结果,因为SVM的存在)

3、处理速度慢: 使用GPU, VGG16模型处理一张图像需要47s。

4、图片形状变化:候选区域要经过crop/warp进行固定大小,无法保证图片不变形

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196054.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 看板娘代码

    看板娘代码大部分摘自:https://www.cnblogs.com/hean/p/11167216.html需要三个文件和一个可选文件waifu.css(看板娘在页面的位置以及大小)waifu-tips.js(看板娘的语言设置)live2d.min.js(一些点击之后的动作)flat-ui.min.css(看板娘的选项PS:右面的选项,不需要可以不配置)链接:https://…

    2025年5月24日
    0
  • Liquibase的简单使用[通俗易懂]

    Liquibase的简单使用[通俗易懂]`LiquiBase`是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通

    2022年8月5日
    4
  • 常用邮件服务器软件(邮件服务器软件哪个好)

    常见邮件服务器软件1.微软ExchangeServer[3]​2.TurboMail3.Coremail4.U-Mail5.lifecube网络宝邮件服务器6.MDaemonServer7.WinWebMail8.IceWarp/MerakMailServer9.LotusDomino/Notes10.Postfix/Sendmail/Qm…

    2022年4月17日
    59
  • zabbix监控mysql的哪些参数_Zabbix监控Mysql数据库性能

    zabbix监控mysql的哪些参数_Zabbix监控Mysql数据库性能在之前的博文里面写过如何通过Zabbix监控mysql主从同步是否OK,mysql从库是否有延时(Seconds_Behind_Master)主库,当mysql主从有异常时通过Email或者SMS通知DBA和系统人员。除此之外,Zabbix还可以监控mysqlslowqueries,mysqlversion,uptime,alive等。下面通过ZabbixGraphs实时查看的SQL语句操…

    2022年4月28日
    26
  • rc522命令表_linux驱动程序文件

    rc522命令表_linux驱动程序文件硬件平台:1主控:SMDKExynos4412POPS5M8767A2RFID模块:君盾集团提供的RC522模块3通信接口:SPI软件平台:AndroidICS&kernelversion3.0.15一,使能主控端SPI1硬件使能:从SMDK原理图上可以看到SPI0与I2C共用,SPI1已经连接到其它设备,SPI2未用,故这里选用SPI2。2软件使能:SMDKExyno…

    2022年9月15日
    0
  • 5个Web前端开发软件,零基础入门完全够用了!

    对于刚刚入行不久的Web前端编程小白来说,在开发工具的选择方面或许会显得有些力不从心,毕竟网络上众说纷纭,相关的开发工具也是非常之多,以至于许多小伙伴一时不知道从何下手。为了解决这个问题,今天就为大家介绍几个不错的开发工具,感兴趣的朋友可以自己尝试一下:1、Notepad++这个软件就不多说了,记事本的增强版,主要应用在Windows平台下,大部分人都应该使用过,非常轻巧灵活,运行速度快,支持多窗口切换,可编辑语言也非常多,自动补全、语法提示和检查等功能都不错,对于前端开发入门来说,可以作为一个不错的选

    2022年4月9日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号