R-FCN-3000算法详解

论文背景

论文全称:R-FCN-3000 at 30fps: Decoupling Detection and Classification
论文链接:https://arxiv.org/abs/1712.01802?context=cs.CV
论文日期:2017.12.5

本文提出了一个R-FCN-3000算法,针对多类别数据集的实时检测。每秒可以检测30张图片,可以检测3000类对象。 该算法将检测与分类解耦,为了获得检测分数,将目标分数与分类分数相乘。
该目标检测算法是对与R-FCN算法的优化,因为在R-FCN算法中,需要训练共享的position-sensitive filters,对于多类别的检测,训练卷积核会耗费大量的时间。
对于细粒度的分类器, position-sensitive filters是不必要的,R-FCN-3000在ImageNet数据集上可以达到34.9%mAP的准确率,YOLO-9000能每秒检测30张图片,但是只能达到18%的准确率。
R-FCN-3000学习的对象可以泛化到新型对象上,并且表现会随着训练对象类别的增多而增强。 支持可以学习一个通用检测器的假说。

算法详情

由于CNN算法结构强大的特征学习能力,深度学习神经网络算法在目标检测领域表现优秀,尤其是在拥有十类样本的标准数据集上取得了很大进展,但是在真实案例中只有微小的进展,因为需要实时检测上千类样本。样本的数量太多, 之前的算法表现不佳。

YOLO-9000是一个基于对类别样本的检测算法,本文提出的R-FCN-3000与YOLO-9000比较,准确性有了18%mAP的提高。
本文提出了一个对于R-FCN算法的优化,全卷积检测器需要计算每一个类别的对象分数,能在有限的预算内表现出优秀的准确性。但是全卷积神经网络要求对于每一个类别的特殊过滤器集,从而阻止了将他们应用于多类的数据集。因为这会导致需要计算大量的过滤器,使得计算非常缓慢。

算法重点

解耦目标检测与分类,定位的计算量不会随着类别的增多而增加。
将相似的类别进行级联并且共享参数,R-FCN-3000算法分为两部分,首先是固定数量的super-classes得目标检测器(带有position-sensitive filters),接着是对于每一个super-class的细粒度分类器(不带position-sensitive filters)。
super-classes是通过聚类图片的深度语义特征得到的(例如ResNet-101有2048维的特征)。因此不需要进行语义分层。

算法提升

为了学习使用super-class的影响,而不是独立的每一类目标。本文将super-class的数量设置为1至100,并ImageNet数据集上进行实验,结果表明,准确性得到了很大提升,即使将super-class的数量设置为1。 这也表明position-sensitive filters可以学习用于检测通用对象,对象是一个通用概念,一个通用的目标检测器可以被学习。
通过分别检测一大类的目标,再进行类别的细分,可以提高目标检测的速度,并且可以增多检测的类别数量。 因为不需要训练每一个类别的position-sensitive filters。

算法对比

迁移分类器到检测器

最初使用深度卷积神经网络来进行多类别目标定位,利用回归来预测定位的边界框。之后RPN被用来在目标检测中进行候选区域的提取,是在ImageNet数据集上进行测试的,但没有实验在没有特殊训练的数据集上进行。弱监督检测器是过去解决多类别检测的一个主要研究领域。使用边界框训练的检测器可以别迁移至没有边界框的类别。这一假设也使训练一个固定类别数量的检测器成为可能。
对于一个无监督的类别,从一个分类器至检测器的迁移也被学习,基于级联用于迁移分类器到检测器的弱监督数据方法的多实例学习也被提出了。
YOLO-9000算法共同训练分类数据与检测数据,分类损失就是利用拥有最高分数的边界框进行反向传播计算。这假设预测框就是真实框。 YOLO-9000非常快,因为只使用一个轻量级的神经网络,并且对于每个类别只使用3个过滤器进行定位。然而,对于良好的定位,3个优先的过滤器是不足够的。

共享过滤器

分享过滤器能降低模型复杂度,同时能降低学习基于部分的卷积器的训练数据。 在过去的算法中显示,共享过滤器会使算法更泛化。 Deformable-R-FCN, R-FCN, RetinaNet都没有共享过滤器,因此检测非常慢。 本文提出了一个在多个对象类别共享过滤器的结构。

共享对象特征

只检测一少部分类别的对象对于获得高回召率是足够的,检测每一类目标是不必要的,R-CNN对于每一个类别都进行了边界框回归。首先进行一个类别不可知的回归,然后一个简单的分类层对于检测就足够了。

全卷积检测器的设计

有监督训练

首先需要获得上千类的带注释的数据,使用已有的带分类标签的多类别数据集,然后在其基础上打上边界框的标签,这就使训练变成有监督的,目标检测的准确性得到了很大提升。
然而手工打标的花费是很高的,因此选用ImageNet数据集,每张图片只包含1个或2个目标,会降低打标签的花费。准确性得到了很大提升。

Super-class

全卷积目标检测器基于不同尺寸与比例或者以每个类别的position sensitive filters的形式学习特定类别的过滤器,因此,当类别数过大时,计算就会变得非常不灵活。
分别训练一个目标 / 背景的检测器与一个分类网络。
因此获得可以共享position sensitive filters的外表相似的对象集,获得第 j 类的对象,xj,然后计算例如ResNet-101最后一层的2048维特征向量的平均值。
Super-class是通过使用K-means聚类算法获得的。

神经网络结构在这里插入图片描述

原始的R-FCN没有解耦成两个分支:
在这里插入图片描述
使用RPN得到候选区域,设置被训练的独立类别的检测器集为C,super-classes是K,对于每一个super-class k,有P × P个位置敏感过滤器。

标签

检测分支:当对于i类super-class数据的所有真实框,边界框的IoU大于0.5时,我们将RoI设为正样本,否则设为背景。
对于分类分支:对于所有的细类别,IoU大于0.5的边界框为正样本,只有正样本被用于训练。分类的类别量为C,而不是K+1。

损失函数

对于检测器,使用online hard example mining (OHEM),损失函数使用L1函数,
对于细粒度的分类器,使用softmax函数,当正样本的数量太少时,分类分支的损失函数乘以参数0.05。
保持每一个分支的损失函数的平衡是非常重要的。

实验

数据集
在这里插入图片描述
选用ImageNet数据集,数据集共有3130类对象,每类对象都有大约100张图片,本文只选取了其中的194类对象,并且选用6类没有边界框的对象用作测试集。

实验细节

图片的像素为375 × 500,锚框使用64,128,256三个尺寸,f (1:2), (1:1) 与 (2:1)三个比例,因此在RPN神经网络,每个像素点都有9个锚框。并且训练7个epoch。
前1000次迭代使用0.00002的学习率,然后增加至0.0002。在5.33个epoch之后学习率被提升10倍。
在两个英伟达P6000 GPU上训练3130类对象花费了两周。
为了更快的训练,不使用 position-sensitive RoI pooling,只使用双线性插值方法。使用与fast R-CNN相同的方法基于不同的集群数量以及类别数量训练变形的R-FCN,训练1000类对象只花了2天。
利用水平翻转进行数据增强,使用两个尺寸(375,500) 与 (750,1000) 进行多尺寸推测,并且结合NMS进行两个尺寸的预测。使用使用ResNet-50作为神经网络的主干。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/woduitaodong2698/article/details/86261148
今日推荐