美文网首页
经典目标检测网络学习

经典目标检测网络学习

作者: 叶天羽 | 来源:发表于2019-11-22 20:58 被阅读0次

    零、目标检测

    目前目标检测的相关方法大致分为两种,一种是one-stage,另一种是two-stage,后者是先生成候选框,然后对候选框进行分类,前者是不生成候选框,直接将目标边框定位转化为回归问题。前者的速度快,而后者的精度高。

    一、RCNN

    算法总共可分为四个阶段,一是候选区域生成,即先将图片分割成许多个小块,在利用一些规则进行合并,最终可得到2k个左右的候选区域;二是CNN特征提取,由于需要固定尺寸的输入,因此需要对候选区域进行裁剪填充,最终得到了一些特征向量;三是经过SVM进行分类,得到目标的bounding box;四是位置修正。

    二、SPP

    可忽略图片的尺寸,生成同样大小的特征向量,原理图如下:

    三、Faster RCNN

    1. 网络思想:

    将目标检测分成了两步,第一步是实现定位,第二步则是实现分类,网络结构如下所示:

    网络结构

    2.网络结构:

    网络共有四部分构成:

    1)卷积层:卷积层采用了VGG16的结构,值得注意的是,在卷积过程中,卷积操作并不改变特征图大小,尺寸的减小由池化层来操作。

    2)区域建议网络:区域建议网络结构如下所示:

    区域建议网络

    这一部分结构即能够完成定位。首先输入经过1\times 1卷积通道数变为18,这是因为通常特征图上一个点会生成9个anchor,这些box里面或许存在目标,或许没有目标,因此总共会有18个类别,之后经过softmax进行分类找到含有目标的anchor,前后两个reshape操作是为了便于分类。此时虽然已经得到了一些anchor,但它们的位置并不准确,因此需要做一定的修改。这里文章定义了四个变换,分别是:G_x^\prime  = {A_w} \cdot {d_x}(A) + {A_x}

    G_y^\prime  = {A_h} \cdot {d_y}(A) + {A_y}

    G_h^\prime  = {A_h} \cdot \exp ({d_h}(A))

    G_w^\prime  = {A_w} \cdot \exp ({d_w}(A))

    下面的支路需要学习{d_x}(A),{d_y}(A),{d_w}(A),{d_h}(A)四个变换,因此生成了4*9=36个通道。之后,建议层利用生成的anchor与修正函数,将坐标映射到原图上,利用非极大值抑制等操作丢弃掉一些不合适的box,至此,定位工作基本完成。

    3)RoI pooling:之后需要将每个box里的目标送进分类网络中进行分类,但由于每个box大小不一,直接送进网络中肯定不行,所以这里采用了如下的池化操作,这样就可以送进网络进行分类:

    RoI池化

    4)分类网络:这里只是使用网络进行了分类,需要的注意的是这里又进行了一次回归操作,来进一步修正坐标值:

    分类网络

    四、Yolo

    1. 网络思想:

    与Faster RCNN不同,Yolo将目标的检测直接看成一个回归问题,在回归的过程中直接完成了定位与分类,因此速度要快一些。

    2.网络结构:

    网络结构如下所示:

    网络结构

    网络借鉴了goolgnet网络但并没有使用inception模块,而是主要使用了1*1卷积与3*3卷积的简单替代,网络完成回归主要靠的是后面的全连接层。网络检测理论如下:

    yolo理论

    将图片划分成大小相同的格子,只要目标落在格子中,格子就负责检测那个目标,除此之外,每个格子还会生成一些bounding box,假设每个格子预测了C个类别概率,B个box,除了生成每个box的x,y,w,h外,还会生成一个分数,即sore=Pre*IOU,即每个格子有C+B*5个输出。得到生成的bounding box之后,再设定阈值去掉sore较小的box,利用非极大值抑制得到最终的box。值得一提的是,为了更好的生成坐标,这里的x,y,h,w全部做了归一化操作。

    由于v1虽然速度够快,但定位不够准确,因此v2对v1做了一些改进,如下:

    1)使用了BN层,去除了dropout,这样可以使得网络更容易收敛,且可以防止过拟合。

    2)采用了更高的分辨率分类器,先用高分辨率的Imagenet分类数据集图片进行训练,再进行微调。

    3)移除了全连接层,使用anchor来进行训练,每个预测框都有其对应的类概率,而且anchor是通过k-means的方式生成。

    YOLO9000是在YOLOv2的基础上提出的,其可以检测超过9000个类别的模型,其主要贡献点在于提出了一种分类和检测的联合训练策略。

    v3的改进是将特征提取器换成了残差结构,并且采用了FPN的结构来应付多尺度问题,这里借鉴一下yolo系列之yolo v3【深度解析】_网络_木盏-CSDN博客中的结构图用于展示:

    五、SSD

    1.网络思想:

    SSD与Yolo一样,都是一次直接完成分类与定位,与Yolo相比其不同点是SSD是利用卷积做检测,同时考虑了多尺度问题以及利用了先验框,结构如下所示:

    SSD

    2.网络设计:

    1)先验框的生成:特征图每个点生成四个先验框,共有两个正方形两个矩形,如下所示:

    每个特征图对应先验框设置如下:{s_k} = {s_{\min }} + \frac{{{s_{\max }} - {s_{\min }}}}{{m - 1}}(k - 1),可见,随着卷积层的增加,先验框尺寸增大,这方便使用大尺寸的特征图检测小目标,小尺寸的特征图检测大目标。

    2)先验框的使用:

    如图所示,卷积之后的结果,一路进行先验框的分类,一路生成用于回归的偏移量,一路生成先验框的坐标。

    3)训练:在训练过程中,首先进行先验框的匹配,即与ground truth的IOU较大的先验框匹配,对于剩余的先验框,若与ground truth的IOU大于某个阈值,也认为匹配。

    其他:

    1、OHEM:

    对于目标检测来说,其难度远远大于普通的目标分类,因为无法确定一张图片中目标的数量。为了保证召回率,一般常常采取一种“宁可错杀三千,不可放过一个”的思想,因此,常常会输出许多无用的检测框,这样就会造成负类过多,而正类跟难负类较少,因此需要提出一种方法来减少这些负类,同时学会区分这些难负类。RCNN采取的方法是先用初始的正负样本(为了样本平衡,负样本是整个负样本的子集)来训练分类器,之后使用分类器对样本进行分类,将分类错误的样本放入负样本中,再次进行训练,循环往复,直到分类器性能不再提升,FAST RCNN则是通过随机采样,其中25%是正类,其余为负类进行训练。OHEM则是将对于难负类样本的挖掘嵌入到了优化中,通过损失来选取合适的区域进行训练,其使用了两个RCNN网络进行训练,其中一个只负责前向传播,为网络提供RoI区域的评分,另一个网络根据这个评分选取难例进行训练,两个网络参数共享。

    2、目标检测中的不平衡问题:

    1)多任务损失优化之间的不平衡:由于分类任务要对正负样本进行分类,而回归任务只需要对正样本进行回归,因此这里有一个不平衡的问题,可采用加权的方式解决。

    2)空面不平衡:指的是不同正例对回归损失的贡献是不一致的,不同的IOU的贡献也是不一致的。

    3)尺度不平衡:即不同检测框尺度上的不平衡,网络很可能倾向于生成某一个尺度的检测框,解决方法大多是金字塔方法。

    4)类别不平衡:即分类类别的不平衡,或者是目标与背景类的不平衡,解决方法是有偏采样,或者是采用某些损失函数,例如焦点损失函数。

    3、不同检测网络对比:

    FasterRCNN网络特点是检测较为精确,这主要得益于RPN网络,对特征图上的每个特征点都生成一定数量的候选框,总共大约会生成20k个,经过非极大值抑制会剩下大约300个,在这个过程中还要进行位置的修正,最终的结果较为精确,但代价就是速度慢。Yolo是one-stage的网络,将检测问题转换为了回归问题,其将图片暴力的划分成了7*7的网格,每个格子同时输出类别与位置坐标,结果不如FasterRCNN精确,但速度较快;SSD像是结合了FasterRCNN的优点,其利用了多尺度的特征图来检测目标,借鉴了候选框的机制,但是使用了yolo的模式来生成候选框。

    4、nms、softnms、softernms对比:

    对于nms来说,当两个候选框交集大于阈值的时候,就会消去其中一个得分较低的框,但当两个目标靠的非常近的时候可能就会出现漏检;softnms可以减轻这种情况,当出现阈值过小的时候,softnms不会粗暴的直接消去框,而是给出一个较低的得分,再通过对分数设定阈值来决定保留的候选框,nms的公式可以如下表示:

    {s_i} = \left\{ {\begin{array}{*{20}{c}}{{s_{i,}}}&{iou(M,{b_i}) < {N_t}}\\{0,}&{iou(M,{b_i}) \ge {N_t}}\end{array}} \right.

    而softnms则是表示如下:

    {s_i} = \left\{ {\begin{array}{*{20}{c}}{{s_{i,}}}&{iou(M,{b_i}) < {N_t}}\\{{s_i}(1 - iou(M,{b_i})),}&{iou(M,{b_i}) \ge {N_t}}\end{array}} \right.

    由于以上形式不连续,所以将关于iou的函数变为以下形式:{s_i} = {s_i}{e^{ - \frac{{iou{{(M,{b_i})}^2}}}{\sigma }}}

    然后,以上两种方法没有考虑位置的准确性,所以出现了softernms,其假设候选框服从高斯分布,真实位置服从狄拉克分布,通过kl散度来使得候选框尽可能准确。

    相关文章

      网友评论

          本文标题:经典目标检测网络学习

          本文链接:https://www.haomeiwen.com/subject/cnxnmctx.html