-
R-CNN和Fast R-CNN的大致介绍
这两篇文章较早,所以就不单独拎出来做个笔记了,这里把大致的思路进行一个描述 -
R-CNN:
i. 在R-CNN中,实际上CNN只是用于特征的提取。
ii. 首先我们在测试图像上使用selective search 算法来提取可能有图像的区域,这里会选择出2000个左右的感兴趣区域。
iii. 将这些区域放入CNN进行特征的提取。
iv. 使用得到的特征,放入SVM中进行分类,然后再进行回归,对候选框进行一个修正。
v. 缺点非常的明显: -
不是一个end-to-end的模型,不够优雅
-
耗时,无论是训练还是测试,速度都不够快
-
计算出的特征值需要保存,占用大量的空间,耗费磁盘写入时间。
-
每一个区域都放入了CNN,毫无疑问,大量区域重复的计算。
-
选择区域部分并没有训练,那么如果这部分出现了错误,后续的所有操作都是无意义的。
-
Fast R-CNN
i. 选择感兴趣区域的方法不变。
ii. 送入CNN的不再是所有的感兴趣区域,而是整张图片。然后将感兴趣区域映射到最后一层卷积产生的Feature map上,这里利用了卷积的相对位置不变的特点。具体实现还得看看代码。
iii. 通过ROI Pooling,将感兴趣区域全部生成同样大小的feature map,然后直接在网络中,将分类,边框回归一起训练。这个ROI Pooling其实很像SPP Net,可以将不同大小的输入映射到一个固定的尺寸,只不过这个只有一层而已。
iv. 优点: -
提高了卷积共享率,大大增加了速度。
-
不需要再保留特征数据到硬盘,降低了时空复杂度。
-
End-to-end的模型,非常的优雅。
-
Faster R-CNN主要改进
i. 上面分析了,为什么Fast R-CNN的效果提高这么明显,就在于卷积层的共用,减少了重复计算。现在没用到CNN的部分就是在挑选感兴趣区域这一步了。于是文中就提出了一个RPN,使得也可以通过整张图的卷积特征来得到感兴趣区域。
ii. 同时,前两个网络的区域都有2000个,非常的多。而这里我们只产生300个。所以,速度进一步提高。
iii. 通过将RPN和Fast R-CNN的合并,我们得到了一个在单GPU可以达到5FPS的end-to-end的目标检测模型。单使用RPN我们也可以得到一个单一目标检测的网络。 -
RPN的具体介绍
i. 一句话介绍:高效的利用共享卷积来预测感兴趣区域的全卷积网络。
ii. 由于是一个全卷积网络,输入图像的大小是任意的。
iii. 先通过33卷积,之后分为两路11卷积,一路用于判断是前景或者是背景,第二路用于给出第一次的预测框。
iv. Anchors:对于每一个位置,我们使用Anchors来一次预测多种物体,也就是对于一个WH的特征图,我们总共会产生WH*k个预测框,k由尺寸数量和缩放比例数量确定。
v. 平移不变性是使用Anchor的优点。这里实际是用到了卷积后相对位置不变的特点,所以即时物体平移了,在特征图上也会由对应的位置。所以如果我们只要锚框来确定,那么无论他怎么平移,仍然能在最后的特征图中找到。(个人理解,不确定是否是这个意思。)
vi. 与其他方法相比,基于锚框的方法,因为只在单一尺度的图上计算了一次卷积,所以更加的高效,划重点,共享卷积特征。
vii. 损失函数如下图,显然由两部分组成,分类和边框回归,并且只有当Anchor中包含物体时,边框回归的部分才会起作用,:
我们通过以下规则选出参与训练的Anchors: -
和Ground-truth有最高的IoU的框
-
IoU大于0.7的,以上两种作为有目标的
-
IoU小于0.3的,作为背景
-
训练时尽量保持正负样本1:1,如果正样本不足,就多加一些负样本。
-
在具体训练中还提出了使用了4步的联合训练的方法:
i. 首先训练RPN,使用的时在ImageNet上与训练的网络然后fine-tune以适应目标检测任务。
ii. 然后使用第一步得到的RPN选出的区域训练Fast R-CNN。以上两步都是独立的。
iii. 然后再次训练RPN,这一次固定共享的卷积部分,fine-tune独立的RPN部分。
iv. 再fine-tune只属于Fast R-CNN的部分。 -
对于RPN得到的框,我们并不是所有的都去使用,因为有很多都是重叠的。我们先使用NMS处理,只保留IoU不大于0.7的框,然后再根据置信度,选出300个框。
Faster R-CNN论文笔记
最新推荐文章于 2022-07-13 16:29:23 发布