R-CNN:Region with CNN feature 内容基于 b站霹雳吧啦Wz 博主,讲的很好,这里做简要总结。
R-CNN:只有Feature extraction是CNN,其他是传统的机器学习方法。
关键步骤:
- SS得到约2k个候选区域
- 将约2k个候选区域分别使用AlexNet提特征,
- 将提的特征用SVM做分类(假设分类20类,即voc数据集的类别数)。然后对每一类使用NMS,得到每一类得分最高的一些建议框。
- 训练时,进一步筛选(将NMS后建议框与groundtruth IoU较低的框删掉),然后再使用20个回归器对剩余的建议框对应的cnn特征图进行回归操作(最小二乘法),以进行修正。
最下方的流程图是SS-CNN-SVM的分类过程:↓ 存在的问题: - predict很慢,cpu上一张图约53s,且SS后的候选框有大量冗余
- 训练很慢很繁琐
- 对SVM和回归器的训练需要将cnn得到的特征保存下来,所以占用硬盘空间很大,上百G。
Fast R-CNN:除SS算法外,特征提取、分类以及回归使用一个CNN网络实现。 且其不对每个SS后的候选框做特征提取,而是对整幅图做特征提取生成特征图,然后将候选框位置映射到特征图上,获得候选框所对应的特征图。大大减少了运算量。比R-CNN快200倍以上。 关键步骤:
- SS操作后对2k候选区域筛选64个感兴趣区域(正样本+负样本)进行训练。
- RoI Pooling Layer:将候选区域图像划分为7*7共49个小区域(这样对候选区域无需做resize),然后对每个小区域做maxpooling。
- 将RoI的输出做flatten并使用并联的FC层分别做分类和回归。其中分类器的最终节点有N+1个,即前景类别数量+背景;回归器有(N+1)*4个节点,4代表对x,y,w,h四个量的预测,N+1代表每个类都有单独的边界框回归。
损失loss:分类损失使用CE(Cross Entropy) loss,回归使用smooth L1 loss。[u≥1]是艾弗森括号,其中u代表该候选区域的真实标签 (0代表背景,1-N代表前景的类),当u≥1时[u≥1]=1,u≤1时[u≥1]=0,即只将前景的回归损失计入。 其中回归的损失:
Faster R-CNN:Fast R-CNN的速度瓶颈在SS算法,所以新作针对候选框的生成进行改进。
FasterRCNN = FPN + FastRCNN(之前使用的SS算法,现在替换成RPN),即本作的重点就是RPN网络。其中k是anchor boxes的数量,RPN(Region Proposal Net)结构: 其中关于RPN的感受野该博主在VGG视频中有讲。还会对anchor boxes进行一些筛选操作: 其中训练时需要对anchor boxes进行正负样本的采样,每张图取256个样本,其中正负样本比大概1:1。正样本取与ground truth 的IoU超过阈值(论文取0.7)的(没有超过阈值的就取最大的),负样本取与与所有ground truth的IoU小于0.3的。
分类损失:论文中使用多分类的SCE(softmax CE)损失来计算这个二分类损失,因为其score输出是2k个,如果使用BCE也可以,但网络就是k个输出了。 边界框回归损失:与FastRCNN的边界框回归损失是一样的 剩下的部分就是Fast RCNN了。
训练:
|