RCNN, Fast-RCNN, Faster-RCNN联系与区别
RCNN
RCNN使用以下四步实现目标检测:
a. 在图像中确定约1000-2000个候选框
b. 对于每个候选框内图像块,使用深度网络提取特征
c. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
d. 对于属于某一特征的候选框,用回归器进一步调整其位置
Fast-RCNN
1. 使用selective search算法为每一张待检测的图片提取出2000左右的候选框,这一点和RCNN相同;
2. 特征提取阶段,同样是提取出整张图片的feature map,然后将原图上的候选框映射到feature map上。然后对各个候选框对应3. 的feature map上的块做ROI pooling,提取出固定长度的特征向量;
4. 对于上一步的每一个ROI,网络输出每个类的概率和每个bounding box;
5. 最后,使用NMS算法。
Fast R-CNN的RegionProposal是在feature map之后做的。
损失函数使用了multi-task loss(多任务损失)函数,将边框回归直接加到CNN网络中训练。分类Fast R-CNN直接用softmax替代R-CNN用的SVM进行分类。
Faster RCNN
Faster R-CNN这篇论文着重解决了这个系统中的2个问题:
1. 让CNN网络完成region proposal;
2. 让区域生成网络和Fast RCNN网络共享特征提取网络。
在整个Faster R-CNN算法中,有三种尺度:
1. 原图尺度:原始输入的大小。不受任何限制,不影响性能。
2. 归一化尺度:输入特征提取网络的大小,在测试时设置,源码中opts.test_scale=600。anchor在这个尺度上设定。这个参数和anchor的相对大小决定了想要检测的目标范围。
3. 网络输入尺度:输入特征检测网络的大小,在训练时设置,源码中为224*224。
补充
文中anchors的数目:对于1000×600的一张图像,大约有20000(~60×40×9)个anchors,忽略超出边界的还剩下6000个,利用非极大值抑制去掉重叠区域,剩2000个用于训练(一个epoch,随机从一幅图的2000个anchors采样256个作为一个Mini-batch训练RPN网络,正负样本比例约为1:1); 测试时在2000个区域建议中选择Top-N【文中为300】个区域建议用于Fast R-CNN检测。
参考:
http://www.cnblogs.com/venus024/p/5717766.html