专栏/本科毕设—背景介绍—RetinaNet篇

本科毕设—背景介绍—RetinaNet篇

2019年03月01日 15:07--浏览 · --点赞 · --评论
粉丝:118文章:12

单步检测与两步检测最大的不同是,两步检测需要首先提出一些稀疏的提议框(sparse set of candidate proposals),主要用来做类别无关(class-agnostic)的检测,用来辨别哪些是物体,哪些是背景,然后用深度神经网络来对每个提议框再次做精确的类别检测和位置回归,而单步检测并没有对背景或物体做预检测,而是直接对预先设置的锚框(anchors)做类别判定和位置坐标回归。通常单步检测的算法速度更快一些,但是精度不尽人意。这是因为在目标检测算法的训练过程中,存在着一个类别不平衡的问题(class imbalance),负类样本(negative samples)的数量往往远远大于正类样本(positive samples)的数量,因此在训练时,误差函数难以收敛。而两步检测正是因为使用提议网络,大大减少了负类样本的数量,所以精度可以提高,而单步检测并没有这个步骤,所以精度难以提升。那么能不能在单步检测中引入一种机制,使得类别不平衡的问题得以解决呢?

为了解决这个问题,RetinaNet 算法在 2017 年被 Tsung-Yi Lin,Priya Goyal 等人提出,它主要的贡献是一种新的损失函数 Focal Loss,这个函数的特性是,对于检测器检测对的样本(easy samples),其对损失函数的贡献很小,而检测器没检测对的样本(hard samples)仍保持着较高的损失,从而可以使训练过程更加稳定,效率和精度都更高。

传统的交叉熵损失(Cross Entropy Loss)函数如下:

其中,y{±1} 指的是人工标注的类别,p[0,1] 是模型对类别 y=预测的概率。

为简便起见,我们令


对于普通的交叉熵损失,即使分类被分得很好(p≫ 0.5)(easy examples),损失仍然很大。比如对于 y=1,当 pt=0.9 时,CE(pt)=0.1054,而当 pt=0.8 时,CE(pt)=0.2231

为了解决背景类别远大于物体类别造成的类别不平衡问题,可以弱化背景类别对损失函数的贡献:


通常 α 可以取相反类别的频率值,比如对于 class=1,可以取 α=fclass=0。也可以将 α 视作一个超参数(hyperparameter),通过交验验证(cross validation)的方式得到最优值。

在网络误差反向传播时,能被分类器分对的样本对梯度的贡献要远大于被分类器分错的样本对梯度的贡献,这样会导致在训练过程中误差函数收敛很慢或不稳定。为了解决这个问题,RetinaNet 提出了 Focal Loss:

其中 γ 是聚焦参数(focusing parameter),取值范围为 γ>0。在 PASCAL VOC 2007 数据集上,经实验验证取 γ=时效果最好。


从上图可直观地看出,对于正类(class = 1),当预测的概率 pt>0.5 时,FL(pt的值要比 CE(pt小很多,而当 pt时,PL(pt的值与 CE(pt的值趋近于一致。因此 Focal Loss 可以将易检测出的样本(easy examples)和难以检测出的样本(hard examples)区分开来,使得检测器更“专注”于难检测的样本,最终提高网络的精度。

基于上述的思想,RetinaNet 采用特征金字塔网络(Feature Pyramid Network, FPN)作为主干网络,对原网络结构稍微做了些修改,然后整合了区域提议网络(Region Proposal Network, RPN)中的锚框(anchor)思想,最后使用 Focal Loss 函数来计算损失,使得单步检测算法精度有了很大提升。

FPN 是一种改善因特征层的深度不同而导致语义特征不同,从而使得检测精度下降问题的网络结构,其主要思想是将深层低分辨率的特征图经过上采样后,与浅层高分辨率的特征图拼接,从而构成不同尺度的融合特征图,进一步在这些融合特征图上进行目标检测或语义分割等任务。FPN 的网络结构如下图所示:

其中 C代表特征图与输入图像相比缩小了 2^倍。

RetinaNet 在 FPN 的基础上,又增加了 P和 P两层,删掉了 P层,其中 P层是 C层经过 3×stride=的卷积层得到的,而 P是 P层经过 3×stride=的卷积层得到的。删掉 P层是为了减少计算量,而增加 P层和 P层的目的是为了提高检测较大物体的精度。

做类别预测和位置回归使用的网络是全卷积神经网络,分类任务和回归任务使用的子网络分别在之前生成的所有特征层上参数共享,具体的结构为相同的 4 层 3×的卷积层后再接一个通道为对应任务的 3×卷积层,对于分类任务,通道数为 KA,其中 为类别数,为每个位置的锚框数,对于回归任务,通道数为 4A。相比于传统 RPN 网络而言,这里的分类任务和回归任务使用不同的子网络,并且层数更深,从而使得任务更专一,效果更好。

在训练过程中,样本匹配策略和 Fast R-CNN 大致相同,舍弃了一些容易检测出的负类样本(easy negatives)。因为引入 Focal Loss,所以对类别不平衡的问题不是特别敏感,所以 Focal Loss 中的参数 α 也随着 γ 的增大而减小,当 γ=时,最优的 α=0.25。经过实验,RetinaNet 在 COCO 数据集上得到了 40.8% 的精度,超越的所有已知的两步目标检测算法和单步目标检测算法。

由此可见,类别不平衡确实是单步检测精度无法追及两步检测的主要问题,而 Focal Loss 较完美地解决了这个问题,从而使得两步算法框架和单步算法框架逐渐统一。

投诉或建议