目标检测基础介绍-----(4)One-stage的目标检测算法综述和One-stage与Two-stage的比较(笔记)
One-stage基本介绍
- 使用CNN卷积特征
- 直接回归物体的类别概率和位置坐标值(无region proposal)
- 准确度低,速度相对two-stage快
基本流程
one-stage常见算法:
- Yolov1/v2/v3
- SSD/DSSD等
- Retina-Net
- 等等
One-stage核心组件
- CNN网络
- 回归网络
CNN网络设计原则
- 从简到繁再到简的卷积神经网
- 多尺度特征融合网络
- 更轻量级的CNN网络
回归网络
- 回归区域(置信度、位置、类别)
- Anchor机制(SSD)
红色小框中有目标区域置信度会更高。其他小框的置信度会低。
Anchor:找到不同的推荐区域(属于RPN网络的核心组件,One-stage和Two-stage的区别在于是否有RPN推荐区域提取但不影响One-stage使用RPN的思想,如:Anchor机制)
在SSD目标回归(左边),经过主干网络卷积之后得到的feature map,考虑feature map中的每一个点都是一个Anchor,基于当前的Anchor来提取不同尺度的长宽比,对于不同尺度的长宽比所对应的目标区域,利用此目标区域来进行位置的回归和类别的判定。
yolo没有Anchor机制(右边)用的是各自坐标(左上右下)
回归网络预测过程(Yolo)
过程:对整个图片进行划分,S * S 的格子,针对每个网格分别预测当前这个网格为中心的目标区域的位置信息(中上部图),预测出Bounding boxes和置信度,此外还会对每个格子预测目标类别的概率分布值(中下图),(B *5+C)*S *S 维的向量(最终输出) (B:每个格子预测多少的bouding boxes数;5:四个坐标加一个置信度;C:类别),最终的输出就对应到了这里的bouding box坐标的位置,以及bouding box置信度和对于每一个格子所对应的类别的概率分布,在拿到这些值之后,再利用每一个网格预测的类别信息和bouding box 所对应的置信度进行相乘,就能够拿到每一个bouding box所对应的类别置信度信息,利用类别置信度信息再结合NMS算法,对预测出的所有的Bouding box进行筛选过滤,得到最终预测结果。这个过程也是yolo算法在拿到回归网络预测结果之后得到最终的输出所经过的运算过程。实际上对于SSD和faster RNN这样的检测网络,最终输出的bouding box本身预测出的概率分布,可直接用于NMS算法所需要的类别置信度分数,在yolo算法中需要额外将中间两个图的结果进行融合(两个置信度相乘得到最终能分数置信度,最为NMS输入)。
yolo是纯粹的端到端的回归网络,检测效率会更高。但是在yolo算法中通长使用各自划分,认为每一个格子点都是目标检测的中心点,有可能我们划分的格子都不是目标的中心点,因此基于中心点预测目标区域所对应的bouding box信息的前提假设会导致我们预测出来的检测相比于SSD,faster rcnn准确率低。再有,由于在yolo中划分格子的时候会忽略掉其中的小物体,比如说鸟类识别检测鸟群,可能会漏检。但整体检测速度快。
One-stage VS Two-stage
One-stage | Two-stage |
---|---|
优点 | 优点 |
速度快 | 精度高(定位、检出率) |
避免背景错误,产生false positives | Anchor机制 |
学到物体的泛化特征 | 共享计算量 |
缺点 | 缺点 |
精度低(定位、检出率) | 训练时间长 |
小物体检测效果不好 | 误报高 |