网站建设怎么引流,网站策划方法,网站建设结构图下载,什么样的网站空间做电影网站不卡目标检测算法#xff1a;Faster-RCNN论文解读 前言 其实网上已经有很多很好的解读各种论文的文章了#xff0c;但是我决定自己也写一写#xff0c;当然#xff0c;我的主要目的就是帮助自己梳理、深入理解论文#xff0c;因为写文章#xff0c;你必须把你所写的东西表…目标检测算法Faster-RCNN论文解读 前言 其实网上已经有很多很好的解读各种论文的文章了但是我决定自己也写一写当然我的主要目的就是帮助自己梳理、深入理解论文因为写文章你必须把你所写的东西表达清楚而正确我认为这是一种很好的锻炼当然如果可以帮助到网友也是很开心的事情。 说明 如果有笔误或者写错误的地方请指出勿喷如果你有更好的见解也可以提出我也会认真学习。 原始论文地址 点击这里或者复制链接
https://arxiv.org/abs/1506.01497目录结构 文章目录 目标检测算法Faster-RCNN论文解读1. 文章内容概述2. Faster-RCNN流程介绍3. Anchor/Anchor boxes4. 损失函数5. Faster-RCNN训练6. 总结 1. 文章内容概述
目前的检测算法都依赖于“region proposal”算法虽然SSP-net、Fast-RCNN等技术的进步缩短了检测网络运行的时间但同时也暴漏了region proposal的耗时。
因此作者在Fast-RCNN基础上引入了RPN通过在原来的CNN结构上添加几个卷积层在实现共享权值的同时几乎实现了无成本的区域建议方法。
2. Faster-RCNN流程介绍
论文原图中的流程如下图 当然如果你仅仅是想要知道流程怎么样对其内部不感兴趣的话可以直接看此图流程如下
首先输入一张图片然后将这张图片送给CNN架构其输出一个特征图然后利用RPN网络产生一些区域建议框其次将区域建议框映射到特征图上并使用ROI Pooling方法产生固定长度的输出然后把ROI Pooling输出的值用于回归和分类即可
**但是上面的流程其实非常的简短并且有些地方充满疑惑性。**因此网上有前辈们根据pytorch官方代码和论文总结了一张详细的流程图来自参考资料1 对上图进行简单的说明
首先将图片缩放到指定尺寸然后送给去除了全连接层的VGG16其输出一张特征图 问题为什么要缩放到指定尺寸 明明有了ROI Pooling无论输入输出大小固定为什么还需要缩放到指定尺寸。这是当时的实现工具所限制的当时还没有如tensorflow、pytorch等简单的框架因此考虑到方便还是将图片缩放到同样的尺寸方便处理。 然后特征图分两步走一步是送进RPN一步是送给ROI Pooling RPN部分首先根据特征图遍历生成所谓的anchors然后将特征图经历一个3*3卷积层再分别进行回归校准anchor和分类判别anchors。上图RPN结构中上面路径为分类下面路径为回归 接着利用RPN生成的建议框就是上面校准后的anchors映射于特征图上并将每个建议框对应的特征图内容大小不同提取出进行ROI Pooling操作输出对应的ROI Pooling特征向量长度相同。 最后将ROI Pooling特征向量进行两个全连接操作然后进行分类和回归softmax
下面对上面的关键知识点进行解读
3. Anchor/Anchor boxes
RPN是Faster-RCNN中最为重要的结构我们首先需要明白其目的生成好的区域建议框。
那么看论文原图 首先对上图进行简单说明然后再细细解读细节。上图中的conv feature map就是CNN架构最后输出的特征图红色的框称之为滑动窗口sliding window。即在特征图上滑动一个窗口这个窗口将特征图的n*n图中为3*3作为输入将最后的输出图中的256-d再送给分类与回归。
其实不难看出这个所谓的滑动窗口就是一个3*3卷积层没什么好神奇的。这也对应了最开始Faster-RCNN的3*3卷积层。 解释上面的数字含义 256-d这是维度的意思。因为在Faster-RCNN论文中CNN架构采取的是ZF模型该模型最后一个卷积层输出的特征图通道数就是256维。同理如果换为VGG16那么此处应该为512-d。
k anchor boxes需要知道的是anchor boxes就是我们的区域建议框不过此时的区域建议框还是很粗暴的因为它没有经过分类和回归的修正。其中的k表示数量的意思。
2k scores和4k coordinate一个是分类的得分概率值一个是坐标值。2k表示一个框2个值正例概率负例概率那么k个框就是2k个值。同理4k表示一个框4个坐标值xywh那么k个框就是4k个值。 解释anchor boxes是如何产生的 首先Anchor一般指框的中心而Anchor Boxex才指的是框。
从上图其实不难看出k个anchor boxes的中心都用蓝色虚线对应了滑动窗口的中心**这意味着滑动窗口可移动的每个中心都会产生k个anchor boxes。我们又知道滑动窗口其实就是一个3*3卷积层而特征图就是其输入那么意味着特征图每个点都会产生k个anchor boxes。**在原文中k取9。
上面解决了第一个问题即anchor boxes如何产生的。那么还有一个问题每个点都会产生k个anchor boxes这个anchor boxes有没有什么要求其实这个是人为定的而在论文中作者认为采取三个比例和三个长宽比这样就会产生3*39个框如下图所示自己画的具体到代码一般会给定一个基础的anchor后面的则根据比例等生成 解释一张特征图上的Anchor boxes数量 我们假设原图大小为400*400而CNN架构采取VGG16那么可以知道原图经过VGG16后得到的特征图其实缩小了16倍4个池化层每个缩小2倍。
那么总共的Anchor boxes数量为
400/16*400/16*9 5625 问题来了五千多个的建议框实在太多了。作者于是精选了256个合适的建议框并且正例和负例的比列为11。
怎样判断建议框是否合适呢满足下列条件即可
IOU 0.7的建议框为正例IOU最大的建议框为正例IOU 0.3的建议框为负例处于0.3和0.7之间的建议框直接忽略 解释NMS与越界剔除 获取到建议框后仍然需要进行NMS非极大值抑制不清楚的可以看我RCNN论文解读和越界剔除即建议框超出了原图需要去掉。 解释下图中的18和36是怎么得到的 首先18和36都是代表通道数或维数。364*9即9个框每个框4个坐标值其对应的数据格式应该为
[batch_size,4*9,W,H] 182*9就是9个框每个框对应2个类别值正例或负例其对应的数据格式为
[batch_size,2*9,W,H]问题anchor boxes产生在原图还是特征图 其实从我个人的角度来说anchor boxes产生在原图和特征图上区别不大。比如产生在原图那么你可以通过除以16来映射到特征图上VGG16产生在特征图上同理。
但是从实际角度来说anchor boxes是产生在原图的。为什么这么说因为我们需要计算anchor boxes与真实框的IOU值这从一定程度上已经告诉我们了它就是产生在原图的除非你想多计算一步多浪费点资源。 RPN中的回归怎么实现 这个怎么讲呢就是常见的框回归问题几乎和RCNN中的框回归一模一样没什么特殊的地方如果你感兴趣可以打开我的博客主页找到RCNN论文解读中的部分。或者直接复制下面链接
https://blog.csdn.net/weixin_46676835/article/details/1299292324. 损失函数
Faster-RCNN的损失函数中规中矩和Fast-RCNN变换不大。
具体公式如下 其中
i表示在某一个batch中的第i个anchor boxesPi表示anchor框包围的对象为不同类的概率比如总共20各类分别为各类的概率值Pi*取{01}其值由i这个anchor是否为正例决定为正例则取1否则取0。这意味着只有该值取1时回归才计入损失也即只有包含对象的框才值得计入损失否则没啥意义。ti表示第i个anchor对应的4个坐标值ti*为真实框的坐标值在论文中Ncls取batch_size的数目假设为256Nreg取特征图的大小假设输入图片600*1000VGG16架构则特征图大小约为2400而λ是用来平衡两者的大小关系此时取2400/256约为10。在代码中直接让Ncls和Nreg都取batch_size大小这样λ直接取1即可方便简单。
而Lcls则是常用的分类损失函数即交叉熵损失函数 而Lreg则是目标检测领域常用的平滑L1损失函数即 5. Faster-RCNN训练
现在想想Faster-RCNN的训练流程其实和它的Anchor一样重要。
其实在如何训练Faster-RCNN上作者提出了三种方法分别是4步交替训练、近似联和训练、非近似联合训练。
简单说说这三个方法
交替训练作者采取的方法后面详细说近似联合训练即将RPN和Fast-RCNN训练时合并为一个网络。前向传递时RPN生成区域建议框然后这些区域建议框再送给Fast-RCNN。反向传递时就正常反向传播只是对于共享的卷积层即CNN架构部分将RPN损失和Fast-RCNN损失合并。 这个方法容易实现但是忽略了anchor boxes坐标的导数值即反向传播时不考虑anchor boxes的导数这也是近似的由来。 非近似联合训练非常复杂不考虑
作者最终选择了交替训练的方法来训练Faster-RCNN具体流程如下
首先肯定是把CNN架构这里设为VGG放在ImageNet上训练好然后VGG加上RPN网络部分权值/卷积共享思想开始训练RPN其生成一系列的区域建议框第一次训练Faster-RCNN不包含RPN部分更加准确的来说是训练Fast-RCNN再次训练RPN得到新的区域建议框第二次训练Faster-RCNN不包含RPN部分更加准确的来说是训练Fast-RCNN…迭代重复直至收敛作者这里发现两次左右就收敛了
6. 总结
Faster-RCNN是两阶段检测的集大成之作吸收了前面的所有精华。其主要的贡献在于
提出了RPN结构并巧妙利用了卷积共享的方法减少计算量提出了anchor的思路交替训练方法