目标检测理论基础:RCNN系列架构

目录

模型进化史

 区域卷积神经网络R-CNN

模型结构

RCNN:selective search

RCNN:wrap

 RCNN:微调

 RCNN:fine tuning

RCNN:分类部分

RCNN:回归部分

 RCNN:测试

RCNN:性能评价 

SPP-Net

SPP-Net网络

 SPP-Net训练流程

SPP-Net问题

Fast R-CNN

感兴趣区域池化

微调

 多任务损失

 训练:在pre-trained模型上做finetune

 fast rcnn性能提升

 Faster RCNN

 RPN网络

 faster rcnn训练

 性能提升


模型进化史

 区域卷积神经网络R-CNN

模型结构

按分类问题对待:
模块1:提取物体区域(Region proposal):不同位置,不同尺寸,数量很多
模块2:对区域进行分类识别(Classification):CNN分类器, 计算量大

RCNN:selective search

0、按一定的规则生成区域集R
1、计算区域集R里每个相邻区域的相似度S={s1,s2,...}
2、找出相似度最高的两个区域,将其合并为新集,添加进R
3、从S中移除所有与2中有关的子集
4、计算新集与所有子集的相似度
5、跳至2,直至S为空
优先合并四种区域:
-颜色(颜色直方图)相近的
-纹理(梯度直方图)相近的
-合并后总面积小的
-合并后,总面积在其BBOX中所占比例大的

RCNN:wrap

1、在原始区域目标周围取一块区域进行等比缩放到CNN需要的图片大小
2、去除原始目标区域然后对目标区域进行填充,再等比缩放到CNN需要的图片大小
3、直接将原始目标区域非等比缩放到CNN需要的图片大小

 RCNN:微调

M←在Image Net上对CNN模型进行pre-train
M'←在SS生成的所有区域上对M进行fine-tune
注: Log loss
        Soft max层改成(N+1) -way, 其余不变
        正样本(N类) :跟Ground-truth重合IoU>=0.5
        负样本(1类) :IoU<0.5

 RCNN:fine tuning

当数据量较小时,运用深度学习很可能会出现严重的过拟合的现象。
可用Alex net、VG G等网络在Image Net等训练集上预训练模型,然后只对于网络最后面的几层进行重新训练。
对于神经网络的底层,因为它充分的在大数据集上进行了基础特征的提取如:颜色、边框等,依旧可以在小数据集上进行运用。

RCNN:分类部分

R-CNN训练流程:
C←在M'的Fc 7特征上训练线性SVMs分类器
        Hingeloss:SVM特有的
        每个类别(N类) 对应一个SVM分类器
        正样本:所有Ground-truth区域
        负样本:跟Ground-truth重合IoU<0.3的SS区域

注:SVM训练完成后,如果完全分类正确,所有正样本的输出概率都大于0.5,而所有负样本的输出概率都小于0.5。
但常见的情况是有一部分的负样本的输出概率也大于0.5的, 这些样本就称之为“False Positives”。
如果把这些“False Positives”收集起来, 对SVM进行二次训练, 经过二次训练的SVM的分类准确度一般会有一定的提升。

RCNN:回归部分

 RCNN:测试

RCNN:性能评价 

True Positive区域:IoU>=0.5
False Positive区域:IoU<0.5
False Negative区域:遗漏的Ground truth区域
准确率precision:TP/(TP+FP)
召回率recall:TP/(TP+FN)
第C类的平均精度(AP):PR曲线之下的面积是Precision对于Recall的积分。
mAP:所有类别的平均精度求和除以所有类别,即数据集中所有类的平均精度的平均值

优势:mAP大幅提升
问题:
1.训练时间很长(84小时):Fine-tune(18) +特征提取(63) +SVM/Bbox训练(3)
2.测试阶段很慢:VG G 16一张图片47s
3.复杂的多阶段训练

SPP-Net

R-CNN速度慢的原因之一:卷积特征重复计算量太大(每张图片的~2000区域都会计算CNN特征)
两大改进:
1.直接输入整图,所有区域共享卷积计算(一遍):在Conv 5层输出上提取所有区域的特征
2.引入空间金字塔池化(Spatial Pyramid Pooling):为不同尺寸的区域, 在Conv 5输出上提取特征,
映射到尺寸固定的全连接层上

SPP-Net网络

 为什么可以先卷积提取特征,再找roi区域呢?对卷积层可视化发现:输入图片的某个位置的特征反应在特征图上也是在相同位置。基于此, 对某个ROI区域的特征提取只需要在特征图上的相应位置提取就可以了。

 SPP-Net训练流程

 

SPP-Net问题

继承了R-CNN的剩余问题:需要存储大量特征、复杂的多阶段训练、训练时间仍然长(25.5小时)
带来了新问题:SPP层之前的所有卷积层参数不能fine tune

Fast R-CNN

改进:比R-CNN, SPP-Net更快的training/test
           更高的mAP
           实现end-to-end(端对端) 单阶段训练:多任务损失函数(Multi-task loss)
           所有层的参数都可以fine tune
           不需要离线存储特征文件

在SPP-Net基础引入2个新技术:感兴趣区域池化层(RoI pooling layer)
                                                  多任务损失函数(Multi-task loss)

 

感兴趣区域池化

空间金字塔池化(SPP pooling) 的单层特例
将RoI区域的卷积特征拆分成HxW网格(7x7forVGG)
每个Bin内的所有特征进行Max pooling

微调

绿色框为飞机的GroundTruth(GT) ,红色为提取的foreground anchors,那么即便红色的框被分类器识别为飞机,但由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以要采用一种方法对红色的框进行微调,使得foreground anchors和GT更加接近。

 

 多任务损失

 

 训练:在pre-trained模型上做finetune

 奇异值分解(对全连接层的处理):加速全连接运算

在目标检测任务中, 要处理的RoI数量比较多, 几乎一半的前向计算时间被用于全连接层。
就FastR-CNN而言, RoI池化层后的全连接层需要进行约2k次, 因此在FastR-CNN中可以采用SVD分解加速全连接层计算;全连接层输入数据为X,输出数据为Y,全连接层权值矩阵为W,尺寸为u×v,那么该层全连接计算为:Y=W Xx.

 fast rcnn性能提升

 Faster RCNN

对SS算法进行了改进

 

 RPN网络

 

 

 faster rcnn训练

 性能提升

 

总结

模型进化

RCNN VS SPP-NET

 SPP-NET VS FAST RCNN

 FAST RCNN VS FASTER RCNN

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值