前面介绍了图像分类网络,并重点解析了ResNet及其应用以及MobileNet系列的轻量化分类网络,这一篇接着介绍图像目标检测网络。
目标检测具有巨大的实用价值和应用前景。
应用领域包括人脸检测、行人检测、车辆检测、飞机航拍或卫星图像中道路的检测、车载摄像机图像中的障碍物检测、医学影像在的病灶检测等。
在安防领域中,可以实现比如安全帽、安全带等动态检测,移动侦测、区域入侵检测、物品看护等功能。
在工业领域中,可以实现物体定位抓取,电子产品缺陷检测等。
接下来主要从概念、发展流程以及常见模型三个大方面出发对其进行简单介绍。
一、基础概念
1、什么是目标检测
检测图像中某个对象的位置(Localization),并判断该物体类别(Classification)。
2、IOU
作用
用于评判两个框的相似程度,通常用于训练阶段的预测框和真实框进行比较,通过设置IOU阈值可以过滤掉很多预测框
$ Iou = \frac{|A \cap B|}{A \cup B} $
不足
-
如果两个框没有相交,根据定义,IoU=0,不能反映两者的距离大小(重合度)。同时因为loss=0,没有梯度回传,无法进行学习训练。
-
IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IoU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。
改进
Iou_Loss(不能反应距离,无交集时没有梯度返回) ==> GIouLoss(引入两个框的最小包围框,解决距离问题,但训练存在发散情况) ==> DIouLoss(引入和GT中心点欧式距离,以及外围包围框的对角线距离) ==> CIoutLoss(加入惩罚项,彻底解决框包含的问题)
- IOU_Loss:主要考虑检测框和目标框重叠面积。
- GIOU_Loss:在IOU的基础上,解决边界框不重合时的问题。
- DIOU_Loss:在IOU和GIOU的基础上,考虑边界框中心点距离的信息。
- CIOU_Loss:在DIOU的基础上,考虑边界框宽高比的尺度信息。
- SIoU Loss: 损失函数通过引入了所需回归之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加快网络收敛,进一步提升了回归精度
3、NMS
作用
在预测阶段对多个预测框进行去重处理。
算法流程
- 按照预测概率(置信度)对预测框进行排序
- 设置Iou阈值
- 选取最大概率框记为A,其次概率记为B,计算B与A的Iou,如果超出阈值,则舍弃B,如果小于阈值,则保留下来
- 对保留下来的框继续执行以上步骤,直到所有保留下来的框两两之间Iou都小于阈值
二、发展流程
在介绍其发展流程前,我们先思考一个问题,利用前面学习的分类网络可不可以实现目标检测呢?
当然可以:比如采用人工滑窗 + 分类,及人工选择一个区域,然后判断这个区域的类型,这是一个比较传统的检测方式。
但里面有几个问题
- 框选多大合适
- 前景框和背景框数量相差太多(通常背景框会比较多),训练分类网络样本不均衡
- 耗时
经过深度学习不断的发展,这种耗时的方式已经很少用了,这里给出github上梳理的一个目标检测发展流程,还有最新的一些没有囊括进来。
参考:https://github.com/hoya012/deep_learning_object_detection
三、常见目标检测模型
一些论文中通常会提到一阶段检测、两阶段检测算法以及Anchor free和Anchor base模型等,这里从一阶段和两阶段以及Anchor free和Anchor base两大块出发,介绍一些常见的目标检测模型。
3.1 一阶段(One Stage)和两阶段(Two Stage)模型
参考:https://www.zhihu.com/question/428972054
一阶段和两阶段划分依据是是否存在显式的 候选框(ROI)提取过程,典型的两阶段算法是 Faster rcnn,其包括 RPN 和 RCNN 两个模块,RPN 模块负责提取 ROI,然后通过 Roipool 或者 Roialign 进行 ROI 特征切割提取,最后在输入到 RCNN 中进行识别和定位。如果没有显式ROI提取过程则认为是一阶段算法,例如典型的 yolo、retinanet 等等。一般而言,两阶段算法精度高但是速度慢一些,一阶段精度稍微低一点但是速度容易优化到比较快,但是随着算法的发展,两者的界限越来越模糊,两者结合的也有例如带 refine 阶段的 Reppoints,可以认为是 1.5 阶段。
3.1.1 One Stage常见模型
YoloV1: https://arxiv.org/pdf/1506.02640.pdf
将图片分成SxS个网络,如果object的中心落在网格A中,则网络A就负责预测这个object,每个网格预测B个box(x, y, w, h, confidence)和C个类别,所以输出维度为\(S∗S∗(B∗5+C)\)。
3.1.2 Two Stage常见模型
Faster rcnn: https://arxiv.org/abs/1506.01497
图片经过一个分类骨架网络和特征金字塔(FPN)进行特征提取,特征图再经过区域候选网络(RPN)得到候选区域(ROI),最后再经过RCNN模块对其进行分类并回归得到最终检测框。
3.2 Anchor free和Anchor based模型
Anchor-based、Anchor-free 是从是否需要显式定义先验 anchor 角度区分,如果需要定义 Anchor 那么就是 Anchor-base,目前主流算法大部分都是这个类型,例如 Faster rcnn、Retinanet 和 YoloV2 等等;而 Anchor-free 是从 2019 年开始慢慢流行,其最大优势是不需要设置麻烦且有重大影响的 Anchor,输出是对每个输出特征图上点进行分类和定位建模,参数稍微少一些,更加容易理解,典型算法是 FCos、ATSS 和 SABL 等等。
3.2.1 Anchor based常见模型
SSD :https://arxiv.org/abs/1512.02325
- 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类
- 基于Faster RCNN中的Anchor,提出了相似的Prior box;
- 加入基于特征金字塔(Pyramidal Feature Hierarchy)的检测方式,即在不同感受野的feature map上预测目标
YoloV2 : https://arxiv.org/pdf/1612.08242.pdf
YoloV2在V1的基础上借鉴Faster RCNN也尝试采用anchor,在每个grid预先利用聚类设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,预测位置更改为预测偏移量。
Retinanet : https://arxiv.org/abs/1708.02002
RetinaNet的特征提取网络选择了残差网络ResNet,特征融合这块选择了FPN(特征金字塔网络),以特征金字塔不同的尺寸特征图作为输入,搭建三个用于分类和框回归的子网络。
3.2.2 Anchor Free常见模型
YoloV1:https://arxiv.org/pdf/1506.02640.pdf
这个前面已经介绍过了
Focs:https://arxiv.org/abs/1904.01355
将点看作训练样本,而非anchor。如果点落在GT Box中则作为正样本,否则为负样本。回归时目标是点到四边的距离。如果点落在多个目标框中,则选择面积小的作为回归目标,为提高召回率,结合FPN,即利用多尺度特征图进行预测,不同层级特征图预测不同尺寸目标。
CornerNet: https://arxiv.org/abs/1808.01244
将目标检测问题当作关键点检测问题,即检测目标框左上角和右上角两个关键点。
ATSS: https://arxiv.org/abs/1912.02424
随着不断发展,融合FPN和Focal Loss后,Anchor free的方法不断接近Anchor based。2020年中科大的一篇文章ATSS《Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection》揭示了其两者的区别本质上在于正负样本分配问题。训练目标检测模型时,我们首先会定义正、负样本来进行分类,然后使用正样本来进行回归,其提出了一种自适应训练样本选择算法。
挑选\(K*L\)个候选正样本,计算其与GT Box的Iou值,最后阈值由Iou值得平均值加方差得到,大于阈值得作为正样本,其他作为负样本。
标签:arxiv,检测,图像,网络,---,https,深度,org,Anchor From: https://www.cnblogs.com/xiaxuexiaoab/p/17704866.html