one-stage two-stage 的区别

目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得标记处物体在图片中的具体位置。
目标检测目前使用两类方法: one-stage 、 two-stage

one-stage检测器的大致发展路线:

1.SSD(2015)->RetinaNet(2017)-NAS-FPN(2019.05)->EfficientDet(2019.11)2.Yolo v1->Yolo v2->Yolo v3->Yolo v4

two-stage检测器的大致发展路线:

1.R-CNN(2013)->Fast R-CNN(2015)->Faster R-CNN(2015)->Mask R-CNN(2017)->DCN v1(2017)->DCN v2(2018)

它们的主要区别

1.one-stage网络速度要快很多
2.two-stage网络准确率高

one-stage

one-stage目标检测算法(也称one-shot object detectors),其特点是一步到位,速度相对较快。one-stage检测方法,仅仅需要送入网络 一次就可以预测出所有的边界框,因而速度较快,非常适合移动端。最典型的one-stage检测算法包括YOLO系列,SSD。

two-stage

two-stage检测算法将检测问题划分为两个阶段,首先产生候选区域(region proposals),然后对候选区域分类(一般还需要对位置精修),这一类的典型代表是R-CNN, Fast R-CNN, Faster R-CNN,Mask R-CNN家族。他们识别错误率低,漏识别率也较低,但速度较慢,不能满足实时检测场景。

速度快慢总结

首先来看第一点这个好理解,one-stage网络生成的ancor框只是一个逻辑结构,或者只是一个数据块,只需要对这个数据块进行分类和回归就可以,不会像two-stage网络那样,生成的 ancor框会映射到feature map的区域(rcnn除外),然后将该区域重新输入到全连接层进行分类和回归,每个ancor映射的区域都要进行这样的分类和回归,所以它非常耗时。

为什么two-stage网络更准确----正负样本不均衡问题

我们来看rcnn,它是首先在原图上生成若干个候选区域,这个候选区域表示可能会是目标的候选区域,注意,这样的候选区域肯定不会特别多,假如我一张图像是100x100的,它可能会生成2000个候选框,然后再把这些候选框送到分类和回归网络中进行分类和回归,fast-rcnn其实差不多,只不过它不是最开始将原图的这些候选区域送到网络中,而是在最后一个feature map将这个候选区域提出来,进行分类和回归,它可能最终进行分类和回归的候选区域也只有2000多个并不多,再来看faster-rcnn,虽然faster-rcnn它最终一个feature map它是每个像素点产生9个ancor,那么100x100假如到最终的feature map变成了26x26了,那么生成的ancor就是26x26x9 = 6084个,虽然看似很多,但是其实它在rpn网络结束后,它会不断的筛选留下2000多个,然后再从2000多个中筛选留下300多个,然后再将这300多个候选区域送到最终的分类和回归网络中进行训练,所以不管是rcnn还是fast-rcnn还是faster-rcnn,它们最终进行训练的ancor其实并不多,几百到几千,不会存在特别严重的正负样本不均衡问题,但是我们再来看yolo系列网络,就拿yolo3来说吧,它有三种尺度,13x13,26x26,52x52,每种尺度的每个像素点生成三种ancor,那么它最终生成的ancor数目就是(13x13+26x26+52x52)*3 = 10647个ancor,而真正负责预测的可能每种尺度的就那么几个,假如一张图片有3个目标,那么每种尺度有三个ancor负责预测,那么10647个ancor中总共也只有9个ancor负责预测,也就是正样本,其余的10638个ancor都是背景ancor,这存在一个严重的正负样本失衡问题,虽然位置损失,类别损失,这10638个ancor不需要参与,但是目标置信度损失,背景ancor参与了,因为总的损失 = 位置损失 + 目标置信度损失 + 类别损失,所以背景ancor对总的损失有了很大的贡献,但是我们其实不希望这样的,我们更希望的是非背景的ancor对总的损失贡献大一些,这样不利于正常负责预测ancor的学习,而two-stage网络就不存在这样的问题,two-stage网络最终参与训练的或者计算损失的也只有2000个或者300个,它不会有多大的样本不均衡问题,不管是正样本还是负样本对损失的贡献几乎都差不多,所以网络会更有利于负责预测ancor的学习,所以它最终的准确性肯定要高些

准确度总结:

one-stage网络最终学习的ancor有很多,但是只有少数ancor对最终网络的学习是有利的,而大部分ancor对最终网络的学习都是不利的,这部分的ancor很大程度上影响了整个网络的学习,拉低了整体的准确率;而two-stage网络最终学习的ancor虽然不多,但是背景ancor也就是对网络学习不利的ancor也不会特别多,它虽然也能影响整体的准确率,但是肯定没有one-stage影响得那么严重,所以它的准确率比one-stage肯定要高。
我实际项目中,发现yolo v4 的速度和准确度都比 faster-rcnn 高,当然 faster-RCNN时间比较久了,算法上后期又有很多的更新,暂时未进行比较。不过这些都是一些基本理论,技术还在发展,是用one好还是two好,不是一句话就能说清楚的,根据自己的实际项目来吧。多测试出奇迹。

那么什么情况下背景ancor不会拉低这个准确率呢?

那你就要设置阀值,与真实grundTtruth iou阀值设得小一点,只要大于这个阀值,我就认为你是非背景ancor(注意这部分ancor只负责计算目标置信度损失,而位置、类别损失仍然还是那几个负责预测的ancor来负责)或者假如一个图片上有非常多的位置都是目标,这样很多ancor都不是背景ancor;总之保证背景ancor和非背景ancor比例差不多,那样可能就不会拉低这个准确率,但是只要它们比例相差比较大,那么就会拉低这个准确率,只是不同的比例,拉低的程度不同而已

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python图像识别

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值