目标检测前言——YOLO

        目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割。它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力。

        我们要求检测器输出5个 value:物体类别 class、bounding box 左上角坐标x1、bounding box左上角坐标y1、bounding box 右下角坐标x2、bounding box 右下角坐标y2。

目标检测前言——YOLO_第1张图片

传统目标检测

        传统算法通常分为三个阶段:区域选择、特征提取和体征分类。

        1)区域选取。选取图像中可能出现物体的位置,由于物体位置、大小等信息不确定,因此传统算法通常使用滑动窗口(Sliding Windows)。这种算法会存在大量冗余框,计算复杂度高。

         2)特征提取。得到物体位置后,通过人工设计的提取器进行特征提取,如 SIFT、HOG等。由于人工设计的提取器包含的参数少,鲁棒性低,因此特征提取质量并不高。

        3)特征分类。根据上一步得到的特征进行分类,通常使用 SVM、AdaBoost 分类器。

深度学习目标检测

        深度学习经典检测方法:

        1)two_stage(双阶段):Faster-rcnn、Mask-Rcnn系列

        2)one-stage(单阶段):YOLO系列

        双阶段精度高但速度慢,单精度速度快但精度稍逊。

1.指标

1)IOU(Intersection over Union)交并比

目标检测前言——YOLO_第2张图片

 2)mAP(mean Average Precision)全类平均正确率:综合衡量检测效果

        首先 precisoon 准确率,Recall 召回率计算公式如下:

 precision=\frac{TP}{TP+FP}

Recall=\frac{TP}{TP+FN}

        其中,TP、FP、FN解释如下:

目标检测前言——YOLO_第3张图片

        其中:

        准确率:预测所有为正的结果中,真正正确的结果的比例。

        召回率:所有正例中,被正确预测的比例。

        物体检测中的每一个预测结果包含两部分,预测框(bounding box)和置信概率(Pc)。置信概率 Pc 有两层意思,一是所预测 bounding box 的类别,二是这个类别的置信概率。超过阈值的预测框即为检测框。

        一般情况下,随着置信阈值的减少,更多的正例预测框被判定为正例,那么召回率会有所提升,但是这必然引入错误检测为正例的负例,从而导致准确率下降。

        随着置信阈值的调整,召回率稳步变大,准确率整体减小,局部上下跳动,RP曲线如下图:

目标检测前言——YOLO_第4张图片

         AP(Average Precision) 的计算基本等同于计算 PR 曲线下的面积,但略有不同。需要先将 PR 曲线平滑化。方法是,查全率r对应的查准率 p ,取查全率大于等于 r 时最大的查准率 p。即:

        p(r)=\frac{max}{\bar{r} > r}p(\bar{r})

        平滑后如下:

目标检测前言——YOLO_第5张图片

         AP 计算可以定义为经过插值的 precision-recall 曲线与X轴包络的面积。即平滑后的 PR 曲线与 X 轴围成的面积。

        mAP 就是计算所有类别的 AP,然后取平均值。

        mAP=\frac{\sum_{i=1}^{K}AP_{i}}{K}

2.YOLO-V1简介

        YOLO,You Only Look Once,经典的 one_stage 方法,作者为 Joseph Redmon。把检测问题转换成回归问题,一个 CNN 就可以完成。可以对视频进行实时检测,应用领域非常广。

目标检测前言——YOLO_第6张图片

1)预测阶段(前向推断)

        YOLO-V1 网络结构如下:

目标检测前言——YOLO_第7张图片

         输入为448\times 448\times 3的图像。448\times 448表示图像的大小,\times 3表示彩色图像的RGB三通道。  经过24个卷积层提取图像特征,经过2层全连接层回归得到1470位的向量,再经过 reshape 操作得到7\times 7\times 30的 tensor(张量)。输出张量中包含所有预测框的坐标、置信度和类别结果,对其进行后处理即可得到目标检测结果。

检测步骤简介:

        1)首先 YOLO 将图像划分为 S\times S 个 grid cell(网格),在 YOLO-V1 中 S=7

        2)每个 grid cell 可以预测 B 个 bounding box(边界框),在 YOLO-V1 中 B=2。每个 bounding box(边界框) 包含五个参数(x,y,h,w,c)。其中 x,y 为中心坐标,h,w 为高度和宽度,c为置信度。bounding box形状大小不定,其中心点位置决定其属于哪个 grid cell。

        3)每个 grid cell 可以生成其属于每个类别的条件概率。

        4)将每个 bounding box 的置信度乘以其属于每个类别的条件概率,即可以得到其各类别的概率。再经过后处理即可得到目标检测结果。

目标检测前言——YOLO_第8张图片

7\times 7\times 30输出张量组成:

        首先,每张图有7\times 7个 grid cell,即为输出张量的7\times 7

        每个 grid cell 有两个 bounding box,每个 bounding box有5个参数(x,y,h,w,c)。即每个 grid cell 共有10个 bounding box 参数。

        在 YOLO-V1 中,共有20个类别,故每个 grid cell 还有 20 个类别条件概率。

        合在一起即为7\times 7\times 30的张量。

        目标检测前言——YOLO_第9张图片

2)预测阶段(后处理)

        经过前向推断,得到每个 grid cell 的 30 位张量。

目标检测前言——YOLO_第10张图片

         用每个 bounding box 的置信度乘以其属于的 grid cell 的类别条件概率,得到其属于每个类别的置信度。

        对其中某一个类,首先设定一个置信度阈值,小于阈值的置信度置0,再对所有置信度进行排序,得到结果可视化如下图中位所示:

目标检测前言——YOLO_第11张图片

        图中,线框的粗细表示置信度,线框的颜色表示其属于的类别。

        再对同类别的预测框进行NMS(Non-Maximum Suppression,非极大值抑制),得到最终检测结果。

NMS(Non-Maximum Suppression,非极大值抑制)

        以对狗的检测为例,经过阈值筛选及排序,得到所有 bbox(bounding box)对狗的置信度数据如下:

目标检测前言——YOLO_第12张图片

NMS步骤如下:

        1)计算最大置信度的 bbox与每一个 bbox的 IoU。若 IoU 大于某一个阈值则认为其与最大置信度的 bbox 重复检测,将其置信度设置为 0;若小于阈值则将其保留。

         2)继续计算第二大置信度不为0的 bbox 与每一个 bbox 的 IoU。重复步骤1),直至计算完所有 bbox,即可得到对狗的检测结果。

        对每个类别都进行如上步骤 1)2)计算,即可得到每个类别的检测结果。

3)训练阶段(反向传播)

        在训练阶段,主要是使预测框尽量拟合 ground truth(正确标记的数据),使得损失函数最小化。

目标检测前言——YOLO_第13张图片

         图中绿框即为 ground truth。绿框的中心点所落在的 grid cell 需要负责拟合这个绿框,且该 grid cell 输出的类别信息也应该为 ground truth 的类别(这限制了YOLO-V1的目标检测数目,最多识别7\times 7=49个目标)。

        对于每个 grid cell 共生成两个 bounding box,与 ground truth 交并比(IoU)大的 bbox 负责调整拟合成 ground truth,另一个框尽可能降低其置信度。

目标检测前言——YOLO_第14张图片

         图中,由外围绿色虚线框来调整拟合 ground truth 的绿色实线框。

        对于 ground truth 中心点没有落在的 grid cell,使其两个 bbox 的置信度都尽可能小。

损失函数(loss function)

        基于如上目标,设计损失函数如下:

目标检测前言——YOLO_第15张图片

         其中所有参数,带上标的为标注值,不带上标的为预测值。

损失函数共有五项:

        1)负责检测物体的 bbox 中心点定位误差。

        2)负责检测物体的 bbox 宽高定位误差。(加根号能使小框对误差更敏感)

        3)负责检测物体的 bbox confidence(置信度)误差。

                置信度预测值:从模型前向推断结果中找到这个 bbox 的置信度。

                置信度标签值:计算负责检测物体的 bbox 与 ground truth的 IoU。

        4)不负责检测物体的 bbox confidence(置信度)误差。

                置信度标签值设置为0。

        5)负责检测物体的 grid cell 分类误差。

你可能感兴趣的:(目标检测,目标检测)