【Deep Learning】R-CNN
来源:互联网 发布:淘宝卖假货没人管吗 编辑:程序博客网 时间:2024/05/20 06:41
最近看完了有关RCNN这几篇论文,现在将这几篇论文整理一下,这是第一篇,主要内容是对RCNN这一经典网络进行说明。
1. 综述
R-CNN 将 CNN 引入目标检测
Fast R-CNN 将 bounding box 和 label 统一到一个网络内
Faster R-CNN 将region proposals 也统一到一个网络内
首先给出要介绍的四篇文章的连接。
1. Rich feature hierarchies for accurate object detection and semantic segmenta
2. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
3. Fast R-CNN
4. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
2. R-CNN
2.1 主要创新点:
- 采用了 CNN 来代替传统方法 (SIFT、HOG 等)进行提取特征。
- 采用了大样本下的有监督训练 + 小样本下的微调 来解决小样本难以训练甚至是容易出现过拟合的问题。
2.2 整体流程:
首先给出文论中的图:
从上图中可以看出,论文中的整体流程大致可以分为三个大部分:
- 找出候选框
- 利用 CNN 对这些找出的候选框提取出特征向量
- 利用 SVM 对上述这些提取出来的特征向量进行分类
2.3 注意点
下图即为 pre-trained 流程:
这里微调主要是两部分:
• 将分类数从1000改为21
• 重新初始化最后一个全连接层
接下来使用的是相对较小的,并且使用的是 selective search 之后的 region proposal 作为网络的输入。
如果当前的 region proposal 的 IoU 大于 0.5,就将其标为positive,否则标记为 negative,以此来训练整个detection网络。并且对网络中的相应超参数进行相应的小幅度调整。
以对狗分类为例,如下图:
计算公式如下:
IOU=(A∩B)/(A∪B)
在上面的损失函数中加入了正则项是为了避免回归参数
- 构造样本对。为了提高每类样本框回归的有效性,对每类样本都仅仅采集与 Ground-truth 相交 IoU最大的 region proposal,并且 IoU>0.6 的region proposal 作为样本对
(Pi,Gi) ,一共产生20个样本对(20个类别)。 - 每种类型的回归器单独训练,输入该类样本对N个
{(Pi,Gi)}i=1⋯N 以及Pii=1⋯N 所对应的AlexNet网络 pool5层特征ϕ5(Pi)i=1⋯N - 利用最后的四个式子和输入样本对
{(Pi,Gi)}i=1⋯N 计算ti∗i=1⋯N - 利用
ϕ5(Pi)i=1⋯N 和ti∗i=1⋯N ,根据损失函数Loss 进行回归计算,得到使损失函数最小的参数wT∗ .
大致过程如下:
- 输入一张目标图像,采用SS策略提取大约2000个建议框。
- 先在每个框周围加上16个像素值为建议框像素平均值的边框。在直接变形为227*227大小的图片。
- 先将所有建议框像素减去该建议框像素平均值后(预处理),在以此将每个227*227的建议框输入AlexNet 网络获取到4096维的特征,2000个建议框的CNN特征组合成2000*4096 的矩阵;
- 2000*4096维特征与20个SVM组成的权值矩阵4096*20相乘(20种分类,SVM是二分类器,则有20个SVM),获得2000*20维矩阵表示每个建议框是某个物体类别的得分。
- 分别对上述2000*20维矩阵中每一列也就是每一类进行非极大值抑制以此来剔除重叠建议框,得到该列即类中得分最高的一些建议框;
- 分别用20个回归器对上述20各类别中剩余的建议框进行回归操作,最终得到的每个类别的修正后的得分最高的bounding box.
下面引用 Alanyannick 博客中的两段话
测试阶段的检测:
测试阶段,使用 selective search的方法在测试图片上提取2000个region proposals归一化到227*227,然后在CNN中正向传播,将最后一层得到的特征提取出来。然后对于每一个类别,使用为这一类训练的SVM分类器对提取的特征向量进行打分,得到测试图片中对于所有region proposals的对于这一类的分数,再使用贪心的非极大值一直去除相交的多余的框。非极大值抑制(NMS)首先计算出每一个 bounding box 的面积,然后分局score进行排序,把score最大的bounding box 作为选定的框,计算其余bounding box与当前最大score与box的IoU,去除IoU大于设定阈值的 bounding box。然后重复上面的过程,直到候选bounding box为空,然后再将 score小于一定阈值的选定框删除得到一类的结果。总之,整个网络需要首先在AlexNet 上进行分类的训练model,得到AlexNet之后才能进行分类。分类之后再盖一下AlexNet model(fc:1000->21)得到detection model(training->test).然后在上面利用SVM进行二分类判断当前的region 有没有我们需要的物体(对结果进行排序,取前面的IoU最大的那几个),再对这些进行canny边缘检测,才可以得到bounding-box。(then B-Box regression)。
简单地说,RCNN需要两次进行跑CNN model,第一次得到 classification的结果,第二次才能得到(nms+b-box regression)bounding box.
个人总结:
因为我还没有看这篇论文的源码,因此整体流程和具体实现细节上可能理解的还不能足够到位,后期看过源码后会将源码列出然后再对整体流程和局部细节进行说明。
就我目前的理解来说,RCNN的训练流程为:
a.首先pre-trained出一个CNN model,将其权重和参数保留
b.使用SS方法从每张图片中提取出2000个region proposals并进行归一化(227*227),将这些region proposals 输入到预训练好的网络中,但是将网络的最后一个全连接层的权重重新进行初始化,并将softmax 改为20+1类的线性SVM进行分类。
c.对每一个region proposal进行特征提取并利用SVM进行分类训练,分类后进行NMS去除IoU小于阈值的框,其中这里涉及到SVM正负样本的选择问题,具体可以查看上面的内容。
d.为了对最后得到的精细的框,在pool5层输出特征后对每一类训练一个bounding box regression,训练的具体方法上面已经叙述过。需要注意的是,这一步和上一步在训练过程中是并行的,我们要为每一类的框训练一个线性回归器,用来对最后的位置进行精修。
RCNN的test的流程为:
a.首先使用SS方法在测试图片上提取2000个region proposal,并进行归一化.
b.在CNN中进行正向传播,将最后一层得到的特征提取出来。
c.对于每一个类别,使用为这一类训练的SVM匪类器对提取的特征向量进行打分,得到测试图片中对于所有region proposals的对于这一类的分数,在使用非极大值抑制去除多余的框。
d.将score小于一定阈值的选定框删除得到一类的结果。
3.优缺点
优点:
- 作为这个系列的开篇之作,最大的意义就在于提出了将region proposal 与 用在分类任务上的 CNN 模型结合,为之后的想法与检测目标提出了指导性的意义。
缺点:
- 训练步骤过于繁琐(微调网络+训练SVM+训练b-box regression)
- 由于采用SS方法用来region proposal再进行训练和测试,导致二者的速度都过于缓慢
- region proposal 与后面的网络以及分类(回归)均不在一个pipeline中,也就是说,这个框架并不是一个整体,而是由几个部分共同组成。
- 训练过程占用大量存储空间
参考内容
1.基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
2.RCNN学习笔记(1)
3.RCNN学习笔记(1)
- 【Deep Learning】R-CNN
- 【Deep Learning】Fast R-CNN
- 【Deep Learning】Faster R-CNN
- Caffe (CNN, deep learning )
- deep learning with R
- deep learning CNN 几个疑问
- 【Deep Learning】Review:Faster R-CNN- TowardsReal-Time Object Detection with Region Proposal Networks
- 「Deep Learning」R-CNN - Region-based Convolutional Neural Networks
- 论文解读Face Detection using Deep Learning: An Improved Faster R-CNN Approach
- deep learning - h2o R samples
- deep learning toolbox学习4之CNN
- Deep learning:三十八(Stacked CNN简单介绍)
- Deep learning:三十八(Stacked CNN简单介绍)
- deep learning tutorial卷积神经网络CNN
- Deep learning:三十八(Stacked CNN简单介绍)
- 深度学习(Deep Learning) 5.CNN
- Deep Learning的学习实践 5 -- CNN
- 【深度学习:CNN】Deep Learning模型之CNN
- C# DateTime日期格式化
- 算法面试之回溯法
- Ubuntu 17.04 py-faster-rcnn only CPU
- 全文检索
- leetcode_649. Dota2 Senate ? 待解决
- 【Deep Learning】R-CNN
- 从零开始在iPhone上运行视频流实时预测模型应用,只需10步
- 学车经验总结(科目二)
- linux下nohup的使用
- 常见的内存泄漏
- 终端修改数据库密码 MAC
- Oracle Spacial(空间数据库)空间索引
- C#学习-Access数据库导入
- Node.js 安装2502 2503 解决办法 fis3 安装