R-CNN Fast R-CNN Faster R-CNN总结_明天一定早睡早起的博客-程序员宅基地

技术标签: cnn  机器学习  深度学习  

Faster RCNN理论合集
他的视频总结的非常好!在CSDN也有博客。用户名:太阳花的小绿豆
这篇博客基本是在他的视频里面进行总结的。具体论文还没有看。


R-CNN

在这里插入图片描述

算法流程

RCNN算法流程可分为4个步骤

  • 一张图像生成1K~2K个候选区域(使用Selective Search方法)
    利用Selective Search算法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。
  • 对每个候选区域,使用深度网络提取特征
    将2000候选区域缩放到227x227pixel,接着将候选区域输入事先训练好的CNN网络获取特征。
  • 特征送入每一类的SVM 分类器,判别是否属于该类
    将特征送入SVM得到获得每个候选区域的不同类别的得分(概率),分别对每一类进行非极大值抑制剔除重叠建议框,得到该类中得分最高的一些建议框。
    参考:NMS——非极大值抑制
  • 使用回归器精细修正候选框位置
    对NMS处理后剩余的建议框进一步筛选。分别用回归器对类别中剩余的建议框进行回归操作,最终得到x,y的偏移量以及w,h的缩放因子。最终得到每个类别修正后得分最高的bounding box。

存在的问题

R-CNN存在的问题:

  1. 测试速度慢:
    测试一张图片约53s(CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大
    量重叠,提取特征操作冗余。
  2. 训练速度慢:
    过程及其繁琐
  3. 训练所需空间大:
    对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOC07训练集上的5k图像上提取的特征需要数百GB的存储空间。

FAST R-CNN

在这里插入图片描述

算法流程

Fast R-CNN算法流程可分为3个步骤

  • 一张图像生成1K~2K个候选区域(使用Selective Search方法)
    和RCNN第一步一致
  • 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
    区别于RCNN:
    1. 没有将第一步生成的候选区域全部输入CNN提取特征,而是直接将整幅图像输入CNN提取特征,再将候选区域投影到特征矩阵。这样就不用重复计算候选区域的特征矩阵了。
    2. 候选区域也并非全部投影到特征矩阵,而是按照一定规则先进行筛选。
  • 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果(分类结果以及边界框回归)
    ROI池化使得FAST RCNN不限制图像输入的尺寸,而RCNN当中限定了输入图像必须是227x227。
    ROI池化的步骤:
    1. 输入特征图划分成NxN的区域。
    2. 每个区域求max pooling。

边界框回归器

边界框回归器输出候选边界框的回归参数 ( d x , d y , d w , d h ) (d_x, d_y, d_w, d_h) (dx,dy,dw,dh)
在这里插入图片描述

P x , P y , P w , P h P_x,P_y,P_w,P_h Px,Py,Pw,Ph分别为候选框的中心x,y坐标,以及宽高
G ^ x , G ^ y , G ^ w , G ^ h \hat{G}_x,\hat{G}_y,\hat{G}_w,\hat{G}_h G^x,G^y,G^w,G^h分别为最终预测的边界框中心x,y坐标,以及宽高
G x , G y , G w , G h G_x,G_y,G_w,G_h Gx,Gy,Gw,Gh分别为ground truth的中心x,y坐标,以及宽高
G ^ x = P w d x + P x G ^ y = P h d x + P y G ^ w = P w exp ⁡ ( d w ) G ^ h = P h exp ⁡ ( d h ) \hat{G}_x=P_wd_x+P_x\\ \hat{G}_y=P_hd_x+P_y\\ \hat{G}_w=P_w\exp(d_w)\\ \hat{G}_h=P_h\exp(d_h)\\ G^x=Pwdx+PxG^y=Phdx+PyG^w=Pwexp(dw)G^h=Phexp(dh)

Multi-task loss

L ( p , u , t u , v ) = 分 类 损 失 + 边 界 框 回 归 损 失 = L c l s ( p , u ) + λ [ u ⩾ 1 ] L l o c ( t u , v ) L(p,u,t^u,v)=分类损失+边界框回归损失=L_{cls}(p,u)+\lambda[u\geqslant1]L_{loc}(t^u,v) L(p,u,tu,v)=+=Lcls(p,u)+λ[u1]Lloc(tu,v)
p p p是分类器预测的softmax概率分布 p = ( p 0 . . . p k ) p=(p_0...p_k) p=(p0...pk)
u u u对应真实类别标签(采用one-hot编码)
t u t^u tu对应边界框回归器预测的回归参数 ( t x u , t y u , t w u , t h u ) (t^u_x, t^u_y, t^u_w, t^u_h) (txu,tyu,twu,thu)
v v v对应真实目标的边界框回归参数 ( v x , v y , v w , v h ) (v_x, v_y, v_w, v_h) (vx,vy,vw,vh),可以通过下面的公式逆推
G x = P w v x + P x G y = P h v x + P y G w = P w exp ⁡ ( v w ) G h = P h exp ⁡ ( v h ) G_x=P_wv_x+P_x\\ G_y=P_hv_x+P_y\\ G_w=P_w\exp(v_w)\\ G_h=P_h\exp(v_h)\\ Gx=Pwvx+PxGy=Phvx+PyGw=Pwexp(vw)Gh=Phexp(vh)

分类损失

修正分类。
L c l s ( p , u ) = − log ⁡ ( p u ) L_{cls}(p,u)=-\log(p_u) Lcls(p,u)=log(pu)
p p p是分类器预测的softmax概率分布 p = ( p 0 . . . p k ) p=(p_0...p_k) p=(p0...pk)
u u u对应真实类别标签(采用one-hot编码)
由于采用的是one-hot编码,非对应类别的标签都为0,化简即可得上述公式

边界框回归损失

修正边界框。
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 ) L_{loc}(t^u,v)=\sum_{i\in\{x,y,w,h\}}smooth_{L_1}(t^u_i-v_i) Lloc(tu,v)=i{ x,y,w,h}smoothL1(tiuvi)
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 smooth_{L_1}(x)=\left\{ \begin{array}{lr} 0.5x^2,& if |x| <1\\ |x|-0.5,& otherwise\\ \end{array}{} \right. smoothL1(x)={ 0.5x2,x0.5,ifx<1otherwise

FASTER R-CNN

算法流程

在这里插入图片描述

Faster R-CNN算法流程可分为3个步骤

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

RPN (region proposal networ)

RPN生成的候选框会等比例放缩回输入图像,RPN结构如图所示
在这里插入图片描述

有几点需要知道:

  1. 在原文中使用的是ZF model,其Conv Layers中最后的conv5层输出的num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions。
  2. 对conv feature map做3x3卷积,且num_output=256。
  3. 假设在conv feature map中每个点上有k个anchor(论文k=9),而每个anhcor分为positive(前景)和negative(背景),所以每个点由256d feature通过两个1x1卷积分别转化为cls=2k个scores;而每个anchor都有(x, y, w, h)对应4个修正量,所以reg=4k个coordinates。
  4. 并不会选取所有anchor用于训练。训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。

anchor

三种尺度(面积) { 12 8 2 , 25 6 2 , 51 2 2 } \{128^2,256^2,512^2\} { 1282,2562,5122},由经验所得
三种比例 { 1 : 1 , 1 : 2 , 2 : 1 } \{ 1:1, 1:2, 2:1 \} { 1:1,1:2,2:1}
每个位置在原图上都对应有 3 × 3 = 9 3\times3=9 3×3=9个anchor
对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。

RPN Multi-task loss

L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(\{p_i\},\{t_i\})=\frac{1}{N_{cls}}\sum_iL_{cls}(p_i,p_i^*)+\lambda\frac{1}{N_{reg}}\sum_ip_i^*L_{reg}(t_i,t_i^*) L({ pi},{ ti})=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)
p i p_i pi表示第i个anchor预测为真实标签的概率
p i ∗ p_i^* pi当为正样本时为1,当为负样本时为0
t i t_i ti表示第i个anchor的边界框回归参数
t i ∗ t_i^* ti表示第i个anchor对应的ground truth bbox的边界框回归参数
N c l s N_{cls} Ncls表示一个mini-batch中所有样本数量,论文为256
N r e g N_{reg} Nreg表示中心点的个数,约2400
λ \lambda λ为超参数,论文为10
感觉和FAST R-CNN的loss差不多,都是分类损失+边界框回归损失。

Faster R-CNN Multi-task loss

这部分和fast r-cnn一致
L ( p , u , t u , v ) = 分 类 损 失 + 边 界 框 回 归 损 失 = L c l s ( p , u ) + λ [ u ⩾ 1 ] L l o c ( t u , v ) L(p,u,t^u,v)=分类损失+边界框回归损失=L_{cls}(p,u)+\lambda[u\geqslant1]L_{loc}(t^u,v) L(p,u,tu,v)=+=Lcls(p,u)+λ[u1]Lloc(tu,v)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/laonafahaodange/article/details/122674341

智能推荐

NSStringDrawingOptions_yinachong的博客-程序员宅基地

NSStringDrawingTruncatesLastVisibleLine:如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果没有指定NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略。NSStringDrawingUsesLineFragmentOrigin:绘制文本时使用 line fragement or

条件注解@ConditionalOnBean失效原因_zhm_sky的博客-程序员宅基地_conditionalonbean不生效

测试环境(配置类)@Import({User.class,Pet.class})@Configuration(proxyBeanMethods = true)public class MyConfig { @Bean @ConditionalOnBean(name = "cat") public User user(){ return new User("航书", 12); } @Bean("cat") public

一重指针、二重指针做函数参数的深刻分析(虽然很基础,但要深刻理解)_ShenHang_的博客-程序员宅基地

一重指针做函数参数#include&lt;iostream&gt;using namespace std;void change(int *p){ *p = 20; p++; cout &lt;&lt; p &lt;&lt; endl;}int main() { int a = 10; change(&amp;a); cout &lt;&lt; &amp;a &lt;&lt...

java设置图片点击渐变透明,图片实现渐变/透明效果_weixin_39569753的博客-程序员宅基地

众所周知,图片等一些盒子都可以利用opacity属性来设置不透明度,但是前两天我朋友忽然给我一个截图,截图效果如下图中红框圈住的位置图片或者说摄像头采集的画面出现了渐变到透明,可以清楚的看到可以看到后面小哥的胳膊,然后问我如何实现这种效果,这下把我难住了(呵 天天给我出难题),我开始在个大论坛开始寻找解决方案;忽然在前天,日常逛论坛时看到一个文字投影的效果,而后忽然灵机一动就想,能不能变相的实现前...

java笔记_笑容温暖城寨的博客-程序员宅基地

安卓课的Java扩展笔记包类命名规范总结输出换行与不换行mian方法中的args参数Math类快捷输出语句static关键字定义无参方法定义带返回值方法包package com.eoe.basic.day01;//包名 在java当中用.表示windos中的/,一般格式:com.公司名.项目名.业务模块名称例如:com.sina.crm.user类命名规范总结1、java中可以有多个类2、java中可以有多个类,但是最多只有一个类的类名和文件名相同3、如果一个类被public修饰,那该类

一、网络游戏架构的前世今生(2)_王元恺David的博客-程序员宅基地

网络游戏架构演进史,优化游戏网络,自定义网络协议

随便推点

redis客户端连接遇到的坑,记录一下_choujulong7459的博客-程序员宅基地

期间出现的错误如下:1.connect timeout2.connect refused3.遗失对主机的连接denied redis is running in protected mode。。。。。。总结处理这些报错的步骤:1.关闭centos防火墙2.修改redis.conf文...

[原创]FineUI秘密花园(六) — 表单控件_hong2511的博客-程序员宅基地

FineUI中有哪些常用的表单控件,它们有什么共同点和不同点,这一篇文章我们会详细解说。 表单控件的公共属性 所有的表单都具有如下属性: ShowLabel:是否显示标签(默认值:t

fineui mysql_FineUI 相关_卖家胖蝌蚪的博客-程序员宅基地

FineUI 开源版(原ExtAsp.Net)Last updated:2017-03SURFSKYhttp://pan.baidu.com/share/home?uk=170857326#category/type=0---------------------------------------------------配置&amp;预设http://fineui.com/demo/#/demo/...

手把手教你使用FineUI+动软代码生成器开发一个b/s结构的取送货管理信息系统(附源码)之开篇_编程鸭的博客-程序员宅基地

一 本系列随笔概览及产生的背景近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如何利用FineUI快速开发一个小型的b/s结构的管理系统,已达到帮助团队成员快速掌握b/s结构信息系统的开发方法。源码位置:https://github.com/kamiba/FineU...

[原创]FineUI秘密花园(一) — 为什么选择FineUI?_weixin_33778778的博客-程序员宅基地

首先来看看FineUI是什么? FineUI 是一组基于 ExtJS 的专业 ASP.NET 控件库,拥有原生的 AJAX 支持和华丽的 UI 效果。 FineUI 的使命是创建没有 JavaScript,没有 CSS,没有 UpdatePanel,没有 ViewState,没有 WebServices 的网站应用程序。   从这段官方描述中,我们看到了三个信息点: ...

FineUI布局应用(二)_weixin_30767921的博客-程序员宅基地

一、FineUI页面布局分为 1、Fit布局 1 &lt;f:Panel ID="Panel1" Title="布局Fit(Layout=Fit)" runat="server" Layout="Fit" Height="300px" EnableFrame="true" EnableCollapse="true" 2 BodyPa...