01 Faster R-CNN系列

目录

一、 R-CNN

1. R-CNN流程(4个步骤 )

2. RP的确定

3. 预训练模型+微调(backbone)

4. SVM的分类

5. bbox regression的训练

6. NMS

二、 Fast R-CNN

1. Fast R-CNN算法流程

2. 候选区域生成

3. 预训练模型微调(VGG-16为例)

4. ROI Pooling

5. 损失计算

三、 Faster R-CNN

1. Faster R-CNN算法流程

2. backbone

3. RPN

3.1 anchors(在特征图上画框)

 3.2 对特征图上的anchor进行分类

3.3 bounding box regression框回归

3.4 生成Proposal

4. ROI pooling

5. Classification

6. Loss计算

7. 正负样本


个人笔记

一、 R-CNN

用CNN提取出Region Proposals中的featues,然后进行SVM分类与bbox的回归。

参考博文

R-CNNhttps://blog.csdn.net/weixin_43702653/article/details/123973629?spm=1001.2014.3001.5501

1. R-CNN流程(4个步骤 )

  • 一张图像生成1K~2K个候选区域(使用Selective Search方法)
  • 对每个候选区域,使用深度网络提取特征
  • 特征送入每一类的SVM 分类器,判别是否属于该类
  • 使用回归器精细修正候选框位置

2. RP的确定

区域候选框Region Proposal(RP)--------------使用Selective Search算法确定,如下:

  • 使用一种过分割手段,将图像分割成小区域 (1k~2k 个)
  • 计算所有邻近区域之间的相似性,包括颜色、纹理、尺度等
  • 将相似度比较高的区域合并到一起
  • 计算合并区域和临近区域的相似度

重复3、4过程,直到整个图片变成一个区域

在每次迭代中,形成更大的区域并将其添加到区域候选框中;

自下而上的方式可以创建从小到大的不同scale的Region Proposal

3. 预训练模型+微调(backbone)

模型需要通过CNN提取出RP中的特征,用于后面的分类与回归。

  • RP大小都不相同,所以需要对RP进行resize操作,变形为backbone要求的输入大小
  • 变形之前,先在候选框周围加上16的padding,再进行各向异性缩放====不保持横纵比。 
  • 模型微调fine-tuning。将预训练模型最后的1000分类层,换成21分类层(20类物体+背景

正负样本:

计算每个RP和GT的IoU,对于IoU>0.5的RP视为正样本,否则为负样本(即背景)

每个mini-batch随机选取32个正样本和96个负样本组成(128,正负比:1:3

4. SVM的分类

分类之前的网络都是特征提取部分;eg: 2000个框-----------》(2000,4096)

特征提取冻结参数,开始分类      (2000,4096)-----------》(2000,21)20类物体+背景

过程如下:

SVM分类中,IOU<0.3负例,IOU>0.7正例,其余的全部丢弃;

负样本远远远多于正样本,使用hard negative mining方法(如下):

初始时用所有样本训练,经过一轮训练后将score最高即最容易被误判为正样本 的负样本加入新的样本训练集,进行训练,重复以上步骤至达到停止条件。比如分类器性能不再提升

为何hard negative mining?

正样本数目占的比例特别低,负样本太多,直接导致优化过程很慢,

很多负样本远离分界面对于优化几乎没有帮助;选取容易被误判为正样本的  负样本继续训练

5. bbox regression的训练

与GT的IOU>0.6的RP作为正样本,做回归训练.

在目标检测中,窗口一般用四维向量(x, y, w, h)来表示,分别表示窗口的中心点坐标和宽高。在下图中,窗口 P为region proposal,窗口 G为ground truth,那bounding box regression的目标呢就是:找到一种映射关系,使得 P 经过映射后会得到一个和G 比较接近的G′

 

6. NMS

Non-maximum suppression,即非极大值抑制。对于同一个物体,会预测出多个bounding box,NMS所做的就是去除掉多余的bounding box,只保留和ground truth重叠度最高的bounding box

二、 Fast R-CNN

R-CNN太慢、太占内存。

Fast R-CNNhttps://blog.csdn.net/weixin_43702653/article/details/124002054?spm=1001.2014.3001.5501改进之处:

1、卷积不再是对每个region proposal进行,而是直接对整张图像,这样减少了很多重复计算。原来RCNN是对每个region proposal分别做卷积,因为一张图像中有2000左右的region proposal,肯定相互之间的重叠率很高,因此产生重复计算。

2、用ROI pooling进行特征的尺寸变换,因为全连接层的输入要求尺寸大小一样,因此不能直接把region proposal作为输入。

3、regressor放进网络一起训练,每个类别对应一个regressor,用softmax代替SVM分类器。
 

1. Fast R-CNN算法流程

2. 候选区域生成

同R-CNN一样,利用Selective Search算法通过图像分割的方法得到一些原始区域。

Fast R-CNN与R-CNN不同的是,这些生成出来的候选区域不需要每一个都丢到卷积神经网络里面提取特征,而且只需要在特征图上映射便可

如何映射?如下图:

候选区域及正负样本问题

Fast R-CNN中,并不适用SS算法提供的所有的候选区域,SS算法会得到2000个候选框,但是训练的过程中其实只需要使用其中的一部分

每张图像有64个region proposal(或者叫ROI)。这些ROI中约25%的作为正样本

正样本和IOU值都大于0.5。剩下的ROI作为负样本,IOU都小于0.5。

3. 预训练模型微调(VGG-16为例)

  • RoI池化层取代有监督预训练后的VGG-16网络最后一层池化层;
  • 两个并行层取代VGG-16网络的最后一层全连接层和softmax层

并行层之一是新全连接层1+原softmax层1000个分类输出修改为21个分类输出【20种类+背景】,输出21个类别的概率,共21个节点

并行层之二是新全连接层2+候选区域窗口回归层,输出对应21个类别的候选边界框回归参数(dx , dy , dw, dh ),共21x4个节点

4. ROI Pooling

RoI池化层将每个候选区域均匀分成M×N块,对每个块进行max pooling。从而将特征图上大小不一的候选区域转变为大小统一的特征向量,送入下一层。

5. 损失计算

总损失:

 分类损失:

 边界框损失:

三、 Faster R-CNN

Faster R-CNNhttps://blog.csdn.net/weixin_42310154/article/details/119889682?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168379218216800197076041%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168379218216800197076041&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-119889682-null-null.142%5Ev87%5Econtrol,239%5Ev2%5Einsert_chatgpt&utm_term=Faster%20R-CNN&spm=1018.2226.3001.4187Fast R-CNN很好地解决了传统R-CNN中将Region Proposal区域分别输入CNN网络中的弊端。但是!!!始终都是用的传统Selective Search搜索方式确定Region Proposal,训练和测试时消耗了大量时间在RP搜索上。Faster R-CNN突破性地使用了RPN网络直接提取出RP,并将其融入进整体网络中,使得综合性能有较大提高,在检测速度方面尤为明显

1. Faster R-CNN算法流程

如上图,Faster RCNN主要可以分为四个模块:

  • 特征提取网络,用于提取图像的feature maps,用于后续的RPN层和取proposal
  • RPN(Region Proposal Network)区域候选网络

替代了之前的Selective Search,用于生成候选框。这里任务有两部分,一个是分类:判断所有预设anchor是属于positive还是negative(即anchor内是否有目标,二分类);还有一个bounding box regression:修正anchors得到较为准确的proposals。RPN网络相当于提前做了一部分检测,即判断是否有目标(具体什么类别这里不判),以及修正anchor使框的更准一些。

  • RoI Pooling

RPN生成的proposals,并从(1)中的feature maps中提取出来,生成proposals feature maps送入后续全连接层继续做分类(具体是哪一类别)和回归。

  • Classification and Regression

用proposals feature maps计算出具体类别,再做一次bounding box regression获得检测框最终的精确位置。
 

网络架构:

2. backbone

经过conv层后,feature map不变;经过pooling,feature map的宽高变为之前的一半

通常下采样16倍

一个MxN大小的图片经过backbone之后生成的feature map大小为(M/16)x(N/16)

3. RPN

  • 上面一条获得positive和negative分类(判断是否有目标
  • 下面一条用于计算bounding box regression偏移量(调整框)
  • 最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取修正后的proposals,同时剔除太小和超出边界的proposals

3.1 anchors(在特征图上画框)

原图MxN,则RPN的输入feature map大小为(M/16)x(N/16)。在这个feature map上,对于每一个像素点,作者设置9个预设anchor(3种面积,3个比例)。原图anchor数量也是(M/16) x (N/16) x 9。     

 3.2 对特征图上的anchor进行分类

通过RPN网络的上分支

(M/16)x(N/16)xC 的特征通过1x1卷积得到(M/16)x(N/16)x2k的输出(C是通道数,K是anchor数)

(M/16)x(N/16)x2k代表该feature map上每个点的每个anchor表示目标和背景的概率

3.3 bounding box regression框回归

通过RPN网络的下分支,得到(M/16)x(N/16)x4k的输出

(M/16)x(N/16)x4k代表该feature map上每个点的每个anchor4个偏移系数

3.4 生成Proposal

通过RPN网络种的Proposal部分

三个输入:

cls层的(M/16)x(N/16)x2k向量;reg层的(M/16)x(N/16)x4k向量;im_info=[M, N,scale_factor]

  • reg层的偏移量。修正所有的原始anchor
  • cls层的scores。按positive socres由大到小排列取前topN(比如6000个)个anchors
  • 边界处理。把超出图像边界的positive anchor超出的部分收拢到图像边界处
  • 剔除尺寸非常小的positive anchor
  • 对剩余的positive anchors进行NMS(非极大抑制)
  • 最后输出一堆proposals左上角和右下角坐标值([x1,y1,x2,y2]对应原图MxN尺度

特征图映射到原图如下:

4. ROI pooling

5. Classification

该分类要识别具体属于哪一类。     RPN分类只是二分类,区分有没有目标。

具体做如下两件事

  • 对输入所有proposals进行具体类别的分类(多分类

假设一共输入了300个proposals,输出维度应该是[300, 类别数]

  • 再次对proposals进行bounding box regression,获取更高精度的最终的predicted box

假设一共输入300个proposals,输出维度应该是[300, 4],4还是代表偏移量。最终用proposal原始坐标加上偏移量,修正得到最终的predicted box结果


 

6. Loss计算

【Faster RCNN】损失函数理解https://blog.csdn.net/Mr_health/article/details/84970776?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168379588616800215088994%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168379588616800215088994&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-84970776-null-null.142%5Ev87%5Econtrol,239%5Ev2%5Einsert_chatgpt&utm_term=faster%20rcnn%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187

7. 正负样本

faster rcnn有两次选择正负样本的操作;

RPN的正负样本选择:

RPN将20000多个候选的anchor选出256个anchor进行分类和回归位置。选择过程如下:

  • 对于每一个(gt_bbox),选择和它重叠度(IoU)最高的一个anchor作为正样本。
  • 从剩下的anchor中选择任意一个IoU超过0.7的作为正样本,数目不超过128个。
  • 随机选择IoU小于0.3的anchor作为负样本。负样本和正样本的总数为256。

四、 MaskRcnn

1. 结构图

红色圈就是faster_rcnn

将faster_rcnn中ROI pooling换成RoiAlign(更准确地定位)

MaskRcnn就是比faster_rcnn多一个并行分支——绿色线

 带有FPN的结构如下右图,不共用RoiAlign;     不带FPN如下左图,共用RoiAlign

 

2. RoiAlign

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

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

相关文章

ChatGPT API 遇见 Tistory:自动化英语学习博客

这是通过集成 ChatGPT API 创建自动化英语学习内容系列中的第三部分。 转发: ChatGPT API Meets Tistory: The Automated English Learning Blogs 项目介绍 介绍 这是通过集成 ChatGPT API 创建自动化英语学习内容系列中的第三部分。 我正在尝试整合各种平台。 第一个是 Se…

cahtgpt算法压力测试(丁真版,更新gpt4(暴风哭泣了已经))

更新 补充了gpt-4版本的答案&#xff0c;只能说牛逼&#xff0c;我收回之前的替代不了高级科研工作者的结论&#xff0c;话不多说上答案&#xff1a; 可以看到这里已经吊打got3.5了&#xff0c;它能把这个问题解释的很清楚了 那么关于GPF算法和varimax的关系呢 可以看到gpt3…

连音乐都可以创作!Google AI部门推出交互式体验

机器学习也能应用在音乐上吗&#xff1f;Google AI部门的Magenta研究项目PAIR计划团队打造出第一个由AI驱动的Doodle服务&#xff0c;Doodle为一项交互式体验&#xff0c;让用户自行创造一段旋律&#xff0c;按下和声演奏&#xff08;Harmonized&#xff09;的按钮后&#xff0…

现在程序员的工资是不是被高估了?

图片来源&#xff1a;AIGC 文章来源&#xff1a;www.zhihu.com/question/295009798 韩冬 不是程序员的工资被高估了。而是在中国&#xff0c;IT行业是少有的劳动者议价能力强&#xff0c;能够比较公平的和资方分配公司收入的行业。 最近三十年我国经济突飞猛进&#xff0c;GDP从…

im即时通讯开发/聊天软件系统/社交APP源码搭建/私有化部署聊天原生开发源码快速搭建

由IM技术专家打造的基于 Java 实现的即时通讯&#xff08;IM&#xff09;项目 我们提供私有化即时通讯解决方案&#xff0c;独立部署在您自己的服务器上、代码可以开源、支持二次开发、苹果端上线指导&#xff0c;源码出售&#xff0c;提供远程技术指导&#xff0c;全程指导服务…

微分销机制设计_免费快速搭建微信分销商城_OctShop源码

现在微信的流量以及用户基数的庞大&#xff0c;让很多企业或商家都想在微信里面分一杯羹。搭建一个微信分销商城是一个很明智的选择&#xff0c; 而一个比较完善的商城系统,它的设计与开发是庞大复杂的系统工程&#xff0c;比较耗时耗财。 如何快速免费搭建一个大型专业级的微信…

全新开源微商城源码带分销 支持多端+搭建部署教程

分享一个全新版开源微商城源码带分销功能&#xff0c;支持10终端合一&#xff0c;功能强大&#xff0c;含完整代码程序包和搭建部署教程。 系统特色功能一览&#xff1a; 1、一个后台管理所有设备端&#xff0c;支持&#xff1a;电脑H5手机微信ipad微信小程序支付宝小程序百度…

股票左侧交易策略

文章目录 1.散户炒股常见问题1.1.满仓、重仓操作1.2.一买就跌一卖就涨-反复被洗1.3.追高被套1.4.持股数量过多1.5.过分迷恋技术分析1.6.不会逆向思考1.7.没有自己成型的操作策略 2.认识市场、认识主力、认识自己2.1.认识市场2.1.1.A股的本质是政策市 2.1.2.A股的本质是圈钱市2.…

外汇经典交易策略,最基本的趋势跟踪策略

在所有的经典交易策略中&#xff0c;趋势跟随策略可以说是非常主流的策略&#xff0c;趋势跟随策略一直是盈利能力非常强的交易的策略&#xff0c;往往可以出现较大盈利的策略一般都有趋势跟随的影子&#xff0c;毕竟交易的一条基本准则就是&#xff1a;顺势而为。下面我们介绍…

股票打板策略分析

股票打板策略分析 这里我们只分析一件事情&#xff0c;就是如何打板才能最大概率赚到钱&#xff0c;就是我们可以分析过去一天涨停今天还涨停、分析过去两天涨停今天涨的概率&#xff0c;一直到过去10天涨停今天涨的概率&#xff0c;其实很多人都喜欢打板&#xff0c;但是可能…

我的股票交易策略

投资股市已经成为我们进行资产配置的一个重要选择。在这个市场中主流的投资方式无外乎 价值投资 和 趋势投资 两种。价值投资需要了解各种财务指标来评价各支股票&#xff0c;在被市场低估时买入&#xff0c;在被市场高估时卖出。这对于非财务背景的人来说门槛偏高。趋势投资需…

【汇正财经】沪深创集体收涨

盘面回顾&#xff1a; 今日沪深创午盘均有反弹&#xff0c;收盘沪指涨0.54%&#xff0c;深成指涨0.02%&#xff0c;创业板指涨0.16%。中字头板块集中走强&#xff1b;午后银行板块领涨大金融&#xff0c;助力大盘V型反弹&#xff1b;ChatGPT、算力概念股午后跌幅收窄&#xff…

快讯|山东大学仿生两栖软体机器人; 男子用 ChatGPT 编假新闻赚流量牟利,被警方采取刑事强制措施

一分钟速览新闻点 男子用 ChatGPT 编假新闻赚流量牟利&#xff0c;被警方采取刑事强制措施山东大学仿生两栖软体机器人中国科研团队让机器人通过“看一看”“摸一摸”识别地形OpenAI 不再使用 API 客户数据训练 ChatGPT高通芯片被发现用于收集和传输用户信息&#xff0c;全球约…

巴比特 | 元宇宙每日必读:微软将于下周发布大语言模型GPT-4,多模态成为最大亮点,专家称可为大客户每天节省 500 个工时...

摘要&#xff1a;据德国新闻媒体 Heise 报道&#xff0c;微软德国公司首席技术官 Andreas Braun 在一场活动中宣布GPT-4 将在下周发布&#xff0c;拥有多模态&#xff08;multimodal&#xff09;模型将提供完全不同的可能性。多模态 AI不仅可以将文本相应地翻译成图像&#xff…

提高AI算力,异构优化也是关键

近期&#xff0c;劲爆亮相的ChatGPT着实让人们眼前一亮&#xff0c;让普罗大众也“亲密”体验了人工智能&#xff08;AI&#xff09;的神奇魔力&#xff0c;窥见了智能未来的璀璨前景之一斑。 然而&#xff0c;就在这离生活愈来愈近的AI让人们对未来充满无限憧憬、满怀激动的同…

朱啸虎:ChatGPT对创业公司很不友好,未来两三年内请大家放弃融资幻想

来源&#xff1a;i黑马 作者&#xff1a;朱啸虎 创业家&i黑⻢讯 3月19日&#xff0c;“2023黑马产业大会”在北京举行。本次大会主题为“产业新力量”&#xff0c;来自北京怀柔、四川绵阳、江苏南京、重庆、山东青岛、山东威海、广东佛山等7个产业城市和园区的政府代表&a…

ChatGPT —— Pycharm插件NexChatGPT ,好用好用

废话不多说直接教程吧 文件 -> 设置&#xff08;Settings&#xff09; -> 插件 应用后&#xff0c;右侧边栏会有使用的边框&#xff0c;部分功能如下&#xff1a; 还可以在框内提问&#xff0c;方便~&#xff1a;

解决:keeps stopping(停止运行)

今天在写Android的时候&#xff0c;本来要写一个关于线程的。正常应该是这样的&#xff1a; 可是&#xff0c;在敲完代码后&#xff0c;运行…… 对于这个问题&#xff0c;网上有很杂&#xff0c;最后不得不去问老师&#xff0c;最后&#xff0c;解决。步骤分享如下&#xff1a…

Linux 解决终端关闭后应用程序停止运行

使用screen命令&#xff0c;使用方法如下&#xff1a; 首先执行screen&#xff0c;按任意键进入界面内 在界面内执行程序&#xff0c;若是想在后台保持程序的运行&#xff0c;先按ctrla然后按d 此时便退回了主界面&#xff0c;此时便可以关闭终端 用screen –ls可以查看目前子界…

chatgpt赋能python:如何让Python停止运行

如何让Python停止运行 Python是一种高级编程语言&#xff0c;常用于开发Web应用、数据分析和机器学习等领域。然而&#xff0c;在编写Python代码时&#xff0c;我们难免会遇到程序无限循环、阻塞或出现错误等情况&#xff0c;导致程序无法正常结束。本文将介绍如何让Python停止…