基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)

目录

(1) RCNN与SPP的比较

(2) RCNN → Fast RCNN → Faster RCNN

(3) YOLO与RCNN类方法比较

(4) YOLO与SSD的比较

(5) YOLO v1 → YOLO v2 → YOLO v3

(6) FPN、RetinaNet、Mask R-CNN、YOLOv3

FPN(2017_CVPR)

RetinaNet(2017_ICCV)

Mask R-CNN(2017_ICCV)

YOLOv3


(1) RCNN与SPP的比较

  • SPP-net提出了SPP层(空间金字塔池化层,Spatial Pyramid Pooling),使得输入的候选框可大可小,解决了R-CNN区域候选时crop/warp(裁剪和放缩)带来的偏差问题

    • 卷积网络对尺寸并没有要求,固定尺寸的要求完全来源于全连接层部分,借助空间金字塔池化的方法来衔接两者(卷积层和全连接层)

    • 如:3种池化视图,分别是{4∗4,2∗2,1∗1},最后不管候选框大小如何,输出的特征数都一样

  • 但其他方面依然和R-CNN一样,因而依然存在不少问题,这就有了后面的Fast R-CNN

(2) RCNN → Fast RCNN → Faster RCNN

  • RCNN:区域候选(选择性搜索)、特征提取(卷积网络)、分类(SVM)、位置精修(回归方法)

        位置回归:学习目标框相对于真实框的平移参数和缩放参数

       (1) 先得到候选区域,再对每个候选区域提取特征 (与传统方法相比,用选择性搜索而非滑动窗的穷举法)

        缺点:重复计算(几千个候选区域存在重叠)、训练的空间和时间代价很高、慢

    • 1. 训练分多个阶段

    • 2. 每个proposal都要计算convNet特征,并保存在硬盘上。

  • Fast R-CNN:区域候选(选择性搜索)、特征提取+分类+位置精修(神经网络)

    • 先得到整幅特征图,在对候选区域进行处理,减少重复计算 (候选区域仍由之前的方法得到,故速度还是很慢)

    • 把多个任务的损失函数写到一起,分类与位置精修同时执行(用统一的全连接层),节省了时间,并与特征提取一起融合到一个网络里面,无需像RCNN那样中间存储特征供后续SVM使用,节省空间

    • 用到了SPP的思想(ROI pooling层),无需像R-CNN那样对ROI区域放缩,可以一定程度上提升准确率

  • Faster R-CNN:区域候选+特征提取+分类+位置精修(神经网络)

    • 提出了RPN(区域候选网络),代替选择性搜索生成候选区域,将四个步骤融合到一个网络里面

      • 这里生成的候选区域即滑动窗口的卷积实现,虽然候选区域算一种穷举,但是是并行生成的,而非传统方法中的串行进行,且共享了特征提取时的很多计算,故速度还是有很大提升。通过共享卷积,RPN在测试时的速度约为10ms,相比于selective search的秒级简直可以忽略不计。

      • RPN的作用:RPN在卷积层后增加滑动窗口操作以及两个卷积层完成区域候选功能,第一个卷积层将特征图每个滑窗位置编码成一个特征向量,第二个卷积层对应每个滑窗位置输出k个区域得分和k个回归后的区域候选,并对得分区域进行非极大值抑制后输出得分Top-N【文中为300】区域,告诉检测网络应该注意哪些区域

    • 提出了anchor box的概念,有参考,学习更准确

      • 一个滑动窗对应多个anchor box(原文用了三种尺度,三种比例,共9个anchor box),表示每个滑动窗对应多个候选区域,由RPN网络用非极大值抑制筛选出概率较大的候选区域后再输入给后续的网络进行分类和回归。(这里的滑动窗是特征图上的滑动窗,对应原图中是有跨度的大滑动窗,与感受野有关)

  • Mask R-CNN:加入语义分割的任务,融入到一个框架,信息变多后,性能得到了提升(多任务学习的作用)

基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)_第1张图片

基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)_第2张图片

(3) YOLO与RCNN类方法比较

   基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)_第3张图片

YOLO利用了分治法的思想,并把目标检测(object detection)问题处理成一个回归问题,用一个卷积神经网络结构就可以从输入图像直接预测bounding box和类别概率。

yolo与faster R-CNN的对比:

  • faster R-CNN先提取出候选区域(对候选区域进行一遍筛选之后在送入到下一步进行继续判断),在对每个候选区域进行分类和位置回归(分两步),速度较慢,而yolo用一个统一的网络就可以从输入图像直接预测类别和位置,一步到位,速度较快,不过准确率上,yolo略低

  • yolo基于图像的全局信息进行预测,与基于滑动窗或者区域候选的检测算法相比,yolo对背景的误检率会比较小

  • yolo中的anchor box是用k均值聚类学习得到,而faster R-CNN为人工选择得到,相比之下,yolo的anchor box更好

(4) YOLO与SSD的比较

SSD( Single Shot MultiBox Detector)对YOLOv1的改进

  • 融合了不同卷积层的特征,从而实现多尺度目标检测,故小目标检测效果更好

  • 引入了Faster RCNN中anchor box的概念,有参考,学习到的目标框更加准确,且一个栅格可以识别多个物体。

  • //去掉了YOLOv1后面的全连接层,减少了大量参数,提高了速度?(可以接入任意尺寸的输入图像吗?)

性能比较

  • 无论在小物体检测,还是在速度,准确率上,SSD都优于YOLOv1

  • 但是对于YOLOv2,两者准确率比较接近,而且YOLOv2速度更快(主要是SSD是基于VGG16的网络模型,运算量相对较大)

(5) YOLO v1 → YOLO v2 → YOLO v3

YOLOv2借鉴SSD的思路对YOLOv1进行了一系列改进,更像是SSD的升级版

  • 引入了anchor box的概念,有参考,学习到的目标框更加准确,且一个栅格可以识别多个物体。还对其进行了改进

    • 对anchor box的选取采用k均值聚类,而非像Faster RCNN里人工选择

    • 目标框定位方法的改进,对于定位坐标,Fasster RCNN 学习的是相对于anchor box的偏移参数,由于没有限制,中心点可以是图像的任意点,而YOLO v2学习的是相对于某个栅格的偏移参数,中心点的学习由一个sigmid函数限制在该栅格内,能更快收敛,稳定性更好。

  • 细粒度特征(fine grain features)

    • 简单添加一个 pass through layer,把浅层特征图连接到深层特征图

      • (类似resnet中的做法(resnet中应该是叠加,但是这里是通道串联),而SSD是直接将不同卷积层得到的特征图输出到末尾)

  • 换为全卷积网络

    • 可以适应不同尺寸的输入

  • 多尺度训练(Multi-Scale Training)

    • 训练时随机选择新的输入图像尺寸,使得网络可以适应多种不同尺度的输入

  • Batch Norm

    • 可以使网络快速收敛,且有正则化效果,去掉了dropout

YOLO9000( YOLO9000: Better, Faster, Stronger)

    YOLO9000是在YOLOv2的基础上得到的,相比于YOLO v2,YOLO9000 具有更强大(Stronger)的检测功能,可以检测出更多的类别

  • joint classification and detection(联合训练分类和检测) 

    • 采用这种联合训练,YOLO9000从COCO检测数据集中学习如何在图片中寻找物体,从ImageNet数据集中学习更广泛的物体分类。 使该系统可以识别超过9000种物品

  • Dataset combination with WordTree

    • 使用WordTree把多个数据集(coco和imagenet)整合在一起

YOLOv3

不仅速度快,而且准确率高,检测小物体的能力也得到了很大提升

  • 多尺度预测 (借鉴了FPN的思路)

    • 通过加入不同卷积层的特征,进行多尺度检测,采用FPN的做法,不仅利用不同特征图分别检测,还将不同尺度的特征图进行融合再检测。

    • 每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3中尺度.

    • 尺度1: 在基础网络之后添加一些卷积层再输出box信息.

    • 尺度2: 从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息.相比尺度1变大两倍.

    • 尺度3: 与尺度2类似,使用了32x32大小的特征图.

  • 更好的基础分类网络(类ResNet)和分类器

    • 仿ResNet, 与ResNet-101或ResNet-152准确率接近,但速度更快,新网络结构Darknet-53(比以前的网络层数更深,YOLOv2为Darknet-19)

基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)_第4张图片

 

基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)_第5张图片

基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)_第6张图片

(6) FPN、RetinaNet、Mask R-CNN、YOLOv3

FPN(2017_CVPR)

  • 对不同分辨率的特征图,除了侧向的连接,还加入了自上而下的连接(对比,SSD是融合了几层直接做预测)

  • (除了对不同尺度的特征图分别进行预测外,还融合不同尺度的特征图进行预测)

基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)_第7张图片

RetinaNet(2017_ICCV)

性能超过了FPN

提出了一阶段算法准确率不够好的原因为:

(1)数量极度不平衡的正负样本(前景和背景样本)比例(2)分类难度差异的问题:gradient被easy example 支配(说loss被支配可能更直接一点)的问题

  • 一般性的损失函数 Focal Loss (FL)

    • 在loss中增加难分类样本的权重,增加了最后的准确率,解决分类问题中类别数量不平衡(如果把anchor box当做样本,前景样本很少,背景样本很多,加α)、分类难度差异(不同类别样本分类难度不一样,如果简单样样本很多,loss虽小,但是由于量多可能会被支配,加(1-p)^γ)的一个 loss

    • 基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)_第8张图片

  • 单阶段的目标检测模型 RetinaNet

    • 网络结构用的FPN

Mask R-CNN(2017_ICCV)

  • 加入语义分割任务,多任务学习,检测效果更加好

YOLOv3

基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)_第9张图片

你可能感兴趣的:(图像处理)