One stage 检测器的性价比:速度与激情(精度)

Introduction

之前介绍完了two stage检测器的演进(主要是Faster R-CNN后的),今天就总结one stage检测器的“性价比”,这可比two stage 的要精彩。

You Only Look Once

Humans glance at an image and instantly know what objects are in the image, where they are, and how they interact.(人们看了一眼图像,立即知道图像中有什么对象,它们在哪里以及它们如何相互作用。)但是最好还是要“在人群中多看你一眼”,小心看走眼。不能多看我一眼吗,YOLO:不管,我就看一眼。那就看你怎么只看一眼。
在这里插入图片描述
YOLO将输入图像(448x448)划分为S×S(7x7)网格。 如果对象的中心落入网格单元,则该网格单元负责检测该对象。每个网格单元预测B(B=2)边界框和这些框的置信度分数(confidence scores)。这些置信度分数反映了该模型对盒子是否包含目标的信心,以及它预测盒子的准确程度。如果该单元格中不存在目标,则置信度分数应为零。否则,我们希望置信度分数等于预测框与真实值之间联合部分的交集(IOU)。confidence = Pr(Object)∗IOU。

每个网格单元还预测C个条件类别概率Pr(Classi|Object)。这些概率以包含目标的网格单元为条件。每个网格单元我们只预测的一组类别概率,而不管边界框的的数量B是多少。在测试时,乘以条件类概率和单个盒子的置信度预测,便得到每个框特定类别的置信度分数。这些分数编码了该类出现在框中的概率以及预测框拟合目标的程度。
在这里插入图片描述
为了在Pascal VOC上评估YOLO,YOLO使用S=7,B=2。Pascal VOC有20个标注类,所以C=20,最终的预测是7×7×30的张量(S×S×(B∗5+C)。
YOLO Architecture
YOLO采用了sum-squared error loss,但存在两个问题:1)分类误差与定位误差的权重是一样的;2)在每张图像中,许多网格单元不包含任何对象。这将这些单元格的“置信度”分数推向零,通常压倒了包含目标的单元格的梯度。这可能导致模型不稳定,从而导致训练早期发散。为了改善这一点,YOLO增加了边界框坐标预测损失,并减少了不包含目标边界框的置信度预测损失,设置λcoord=5和λnoobj=0.5。同时,平方和误差也可以在大盒子和小盒子中同样加权误差。我们的错误指标应该反映出,大盒子小偏差的重要性不如小盒子小偏差的重要性。为了部分解决这个问题,YOLO直接预测边界框宽度和高度的平方根,而不是宽度和高度(Y = sqrt(x) 的导数值在靠近0时比较大)。

YOLO每个网格单元预测多个边界框。在训练时,每个目标我们只需要一个边界框预测器来负责。我们指定一个预测器“负责”根据哪个预测与真实值之间具有当前最高的IOU来预测目标。这导致边界框预测器之间的专业化。每个预测器可以更好地预测特定大小,方向角,或目标的类别,从而改善整体召回率。
在这里插入图片描述
YOLO的优点:
1)快,很快( The VGG-16 version of Faster R-CNN is 10 mAP higher but is also 6 times slower than YOLO. )YOLO将目标检测框架看作回归问题从空间上分割边界框和相关的类别概率。回归大法好啊!

2)背景误检率低。YOLO在训练过程中可利用整张图像的整体(context)信息,而Faster-Rcnn是局部图像信息。因此,若当图像背景(非物体)中的部分数据被包含在候选框中送入检测网络进行检测时,容易被误检测成物体。测试证明,YOLO对于背景图像的误检率低于fast rcnn误检率的一半。

YOLO的缺点:
1)漏检。每个 grid 只预测一个类别的Bounding Boxes,而且最后只取置信度最大的那个 Box。这就导致如果多个不同物体(或者同类物体的不同实体)的中心落在同一个网格中,会造成漏检。YOLO对相互靠的很近的物体,还有很小的群体 检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。

2)位置精准性差。召回率低。由于损失函数的问题,定位误差是影响检测效果的主要原因。尤其是大小物体的处理上,还有待加强。YOLO对每张图像只预测 772 = 98 个 Box。Faster RCNN:老子三种尺度,三种比例,九种anchors,共20k anchors,你拿什么跟我比?YOLO小声逼逼:有种等我弟弟来。

3)对测试图像中,同一类物体出现的新的不常见的长宽比和其他情况是。泛化能力偏弱。

SSD

SSD:YOLO,我比你精度高。YOLO:你有我快吗?。SSD:我还比你快(59fps vs 45fps)。YOLO:见鬼了,我要找我弟弟去。

SSD的主要contributions:
1)引入了SSD,这是一种针对多个类别的单次检测器,比先前的先进的单次检测器(YOLO)更快,并且准确得多,事实上,与执行显式区域提出和池化的更慢的技术具有相同的精度(包括Faster R-CNN)。

2)SSD的核心是预测固定的一系列默认边界框的类别分数和边界框偏移,使用更小的卷积滤波器应用到特征映射上。(设置先验框)

3)为了实现高检测精度,我们根据不同尺度的特征映射生成不同尺度的预测,并通过纵横比明确分开预测。(采用多尺度特征图用于检测)
SSD300模型的架构
SSD Model
1)Multi-scale feature maps for detection(采用多尺度特征图用于检测)SSD将卷积特征层添加到截取的基础网络的末端。这些层在尺寸上逐渐减小,并允许在多个尺度上对检测结果进行预测。在SSD300模型的架构,使用conv4_3, conv7(fc7), conv8_2, conv9_2,conv10_2和conv11_2来预测位置和置信度。

2)Convolutional predictors for detection(采用卷积进行检测)每个添加的特征层(或者任选的来自基础网络的现有特征层)可以使用一组卷积滤波器产生固定的检测预测集合。对于具有p通道的大小为m×n的特征层,潜在检测的预测参数的基本元素是3×3×p的小核得到某个类别的分数,或者相对于默认框坐标的形状偏移。在应用卷积核的m×n的每个位置,它会产生一个输出值。边界框偏移输出值是相对每个特征映射位置的相对默认框位置来度量的

3)Default boxes and aspect ratios (默认边界框和长宽比)对于网络顶部的多个特征映射,SSD将一组默认边界框与每个特征映射单元相关联。默认边界框以卷积的方式平铺特征映射,以便每个边界框相对于其对应单元的位置是固定的。在每个特征映射单元中,我们预测单元中相对于默认边界框形状的偏移量,以及指出每个边界框中存在的每个类别实例的类别分数。具体而言,对于给定位置处的k个边界框中的每一个,我们计算c个类别分数和相对于原始默认边界框形状的4个偏移量。这导致在特征映射中的每个位置周围应用总共(c+4)k个滤波器,对于m×n的特征映射取得(c+4)kmn个输出。

Choosing scales and aspect ratios for default boxes(为默认边界框选择尺度和长宽比)通过利用单个网络中几个不同层的特征映射进行预测,SSD可以模拟image pyramid 相同的效果,同时还可以跨所有目标尺度共享参数。

已知网络中不同层的特征映射具有不同的(经验的)感受野大小[13]。幸运的是,在SSD框架内,默认边界框不需要对应于每层的实际感受野。我们设计平铺默认边界框,以便特定的特征映射学习响应目标的特定尺度。每个特征映射默认边界框的尺度计算如下:
在这里插入图片描述
其中smin为0.2,smax为0.9,意味着最低层具有0.2的尺度,最高层具有0.9的尺度,并且在它们之间的所有层是规则间隔的,sk表示先验框大小相对于图片的比例,m指的特征图个数,但却是5,因为第一层(Conv4_3)是单独设置的。对于第一个特征图(Conv4_3),其先验框的尺度比例一般设置为smin/2=0.1,那么尺度为300×0.1=30。对于后面的特征图,先验框尺度按照上面公式线性增加,但是先将尺度比例先扩大100倍,此时增长步长为 ⌊ ⌊ s m a x × 100 ⌋ − ⌊ s m i n × 100 ⌋ m − 1 ⌋ = 17 \lfloor \frac{\lfloor s_{max} \times 100 \rfloor - \lfloor s_{min} \times 100 \rfloor }{m-1} \rfloor=17 m1smax×100smin×100=17,这样各个特征图的sk={20,37,54,71,88}(s1 = 0.2x100=20),将这些比例除以100,然后再乘以图片大小(300x300),可以得到各个特征图的尺度为60,111,162,213,264。综上,可以得到各个特征图的先验框尺度30,60,111,162,213,264。

SSD为默认边界框添加不同的长宽比,并将它们表示为 a r ∈ 1 , 2 , 3 , 1 2 , 1 3 a_r \in 1, 2, 3, \frac{1}{2}, \frac{1}{3} ar1,2,3,21,31,可以计算每个边界框的宽度( w k a = s k ( a r ) w^a_k =s_k\sqrt(a_r) wka=sk( ar))和高度( h k a = s k ( a r ) h^a_k =\frac{s_k}{\sqrt(a_r)} hka=( ar)sk)。对于长宽比为1,SSD还添加了一个默认边界框,其尺度为 s k ′ = s k s k + 1 s'_k = \sqrt s_ks_{k+1} sk=s ksk+1,在每个特征映射位置得到6个默认边界框,注意最后一个特征图 s k ′ s'_k sk需要参考一个虚拟来计算 s k ′ = 300 × 105 / 100 = 315 s'_k=300×105/100=315 sk=300×105/100=315。在实现时,Conv4_3,Conv10_2和Conv11_2层仅使用4个先验框,它们不使用长宽比为3,13的先验框。conv4_3, conv7(fc7), conv8_2, conv9_2,conv10_2和conv11_2对应的特征图大小为(38,38),(19,19),(10,10),(5,5),(3,3),(1,1)。所以对于输入图片大小为300x300,SSD一共可以预测38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4=8732个边界框。

SSD 训练阶段:
1)Matching strategy (匹配策略)在训练过程中,需要确定哪些默认边界框对应实际边界框的检测,并相应地训练网络。对于每个实际边界框,从默认边界框中选择,这些框会在位置,长宽比和尺度上变化。我们首先将每个实际边界框与具有最好的Jaccard重叠的边界框相匹配。与MultiBox不同的是,我们将默认边界框匹配到Jaccard重叠高于阈值(0.5)的任何实际边界框。这简化了学习问题,允许网络为多个重叠的默认边界框预测高分,而不是要求它只挑选具有最大重叠的一个边界框。
2)Training objective (训练目标函数)SSD训练目标函数来自于MultiBox,但扩展到处理多个目标类别。设 x i , j p ∈ ( 0 , 1 ) x^p_{i, j} \in (0, 1) xi,jp(0,1)是第i个默认边界框匹配到类别p的第j个实际边界框的指示器。在上面的匹配策略中,我们有 ∑ x i , j p ≥ 1 \sum x^p_{i, j} \ge 1 xi,jp1。总体目标损失函数是定位损失(loc)和置信度损失(conf)的加权和:
在这里插入图片描述
其中N是匹配的默认边界框的数量。如果N=0,则将损失设为0。定位损失是预测框(l)与真实框(g)参数之间的Smooth L1损失[6]。类似于Faster R-CNN[2],SSD回归默认边界框(d)的中心偏移量(cx,cy)和其宽度(w)、高度(h)的偏移量。
在这里插入图片描述
置信度损失是在多类别置信度©上的softmax损失:
在这里插入图片描述
3)Hard negative mining (难例挖掘)在匹配步骤之后,大多数默认边界框为负例,尤其是当可能的默认边界框数量较多时。这在正的训练实例和负的训练实例之间引入了显著的不平衡。SSD不使用所有负例,而是使用每个默认边界框的最高置信度损失来排序它们,并挑选最高的置信度,以便负例和正例之间的比例至多为3:1。

YOLOv2

YOLOv2:哥哥我来了,Better,Faster,Stronger,你受苦了。
YOLO:我们家终于扬眉吐气了。

Better
与最先进的检测系统相比,YOLO有许多缺点。YOLO与Fast R-CNN相比的误差分析表明,YOLO造成了大量的定位误差。此外,与基于区域提出的方法相比,YOLO召回率相对较低
在这里插入图片描述
1)批标准化。批标准化导致收敛性的显著改善,同时消除了对其他形式正则化的需求[7]。通过在YOLO的所有卷积层上添加批标准化,我们在mAP中获得了超过2%的改进。批标准化也有助于模型正则化。通过批标准化,我们可以从模型中删除丢弃而不会过拟合。

2)高分辨率分类器。所有最先进的检测方法都使用在ImageNet[16]上预训练的分类器。从AlexNet开始,大多数分类器对小于256×256[8]的输入图像进行操作。原来的YOLO以224×224的分辨率训练分类器网络,并将分辨率提高到448进行检测。这意味着网络必须同时切换到学习目标检测和调整到新的输入分辨率。对于YOLOv2,我们首先ImageNet上以448×448的分辨率对分类网络进行10个迭代周期的微调。这给了网络时间来调整其滤波器以便更好地处理更高分辨率的输入。然后,我们在检测上微调得到的网络。这个高分辨率分类网络使我们增加了近4%的mAP。

3)具有锚盒的卷积。Faster R-CNN中的区域提出网络(RPN)仅使用卷积层来预测锚盒的偏移和置信度。由于预测层是卷积的,所以RPN在特征映射的每个位置上预测这些偏移。预测偏移而不是坐标简化了问题,并且使网络更容易学习。我们从YOLO中移除全连接层,并使用锚盒来预测边界框。我们还缩小了网络,操作416×416的输入图像而不是448×448。我们这样做是因为我们要在我们的特征映射中有奇数个位置,所以只有一个中心单元。目标,特别是大目标,往往占据图像的中心,所以在中心有一个单独的位置来预测这些目标,而不是四个都在附近的位置是很好的。YOLO的卷积层将图像下采样32倍,所以通过使用416的输入图像,我们得到了13×13的输出特征映射。具有锚盒我们的模型得到了69.2 mAP,召回率为88%,精度上得到了一个小下降。尽管mAP下降,但召回率的上升意味着我们的模型有更大的提升空间。

4)当锚盒与YOLO一起使用时,我们遇到了两个问题。首先是边界框尺寸是手工挑选的。网络可以学习适当调整边界框,但如果我们为网络选择更好的先验,我们可以使网络更容易学习它以便预测好的检测。我们不用手工选择先验,而是在训练集边界框上运行k-means聚类,自动找到好的先验。如果我们使用具有欧几里得距离的标准k-means,那么较大的边界框比较小的边界框产生更多的误差。然而,我们真正想要的是导致好的IOU分数的先验,这是独立于边界框大小的。因此,对于我们的距离度量,我们使用:
在这里插入图片描述
我们运行各种k值的k-means,并画出平均IOU与最接近的几何中心,见图2。我们选择k=5作为模型复杂性和高召回率之间的良好折衷。聚类中心与手工挑选的锚盒明显不同。有更短更宽的边界框和更高更细的边界框。

聚类的目的是anchor boxes和临近的ground truth有更大的IOU值,这和anchor box的尺寸没有直接关系。到聚类中心的距离越小越好,但IOU值是越大越好,所以使用 1 - IOU,这样就保证距离越小,IOU值越大。
在这里插入图片描述
5)直接位置预测
当YOLO使用锚盒时,我们会遇到第二个问题:模型不稳定,特别是在早期的迭代过程中。大部分的不稳定来自预测边界框的(x,y)位置。在区域提出网络中,网络预测值tx和ty,(x,y)中心坐标计算如下:
在这里插入图片描述
例如,预测tx=1会将边界框向右移动锚盒的宽度,预测tx=−1会将其向左移动相同的宽度。个公式是不受限制的,所以任何锚盒都可以在图像任一点结束,而不管在哪个位置预测该边界框。随机初始化模型需要很长时间才能稳定以预测合理的偏移量。
在这里插入图片描述
我们没有预测偏移量,而是按照YOLO的方法预测相对于网格单元位置的位置坐标。这限制了落到0和1之间的真实值。我们使用逻辑激活来限制网络的预测落在这个范围内。网络预测输出特征映射中每个单元的5个边界框。网络预测每个边界框的5个坐标,tx,ty,tw,th和to。如果单元从图像的左上角偏移了(cx,cy),并且边界框先验的宽度和高度为pw,ph,那么预测对应:
在这里插入图片描述
由于我们限制位置预测参数化更容易学习,使网络更稳定。使用维度聚类以及直接预测边界框中心位置的方式比使用锚盒的版本将YOLO提高了近5%。

6)细粒度特征
这个修改后的YOLO在13×13特征映射上预测检测结果。虽然这对于大型目标来说已经足够了,但它可以从用于定位较小目标的更细粒度的特征中受益。Faster R-CNN和SSD都在网络的各种特征映射上运行他们提出的网络,以获得一系列的分辨率。我们采用不同的方法,仅仅添加一个直通层,从26x26分辨率的更早层中提取特征。

直通层(The passthrough layer)通过将相邻特征堆叠到不同的通道而不是空间位置来连接较高分辨率特征和较低分辨率特征,类似于ResNet中的恒等映射。这将26×26×512特征映射变成13×13×2048特征映射,其可以与原始特征连接。我们的检测器运行在这个扩展的特征映射的顶部,以便它可以访问细粒度的特征。这会使性能提高1%。

7)多尺度训练
原来的YOLO使用448×448的输入分辨率。通过添加锚盒,我们将分辨率更改为416×416。但是,由于我们的模型只使用卷积层和池化层,因此它可以实时调整大小。我们希望YOLOv2能够鲁棒的运行在不同大小的图像上,因此我们可以将其训练到模型中。我们没有固定的输入图像大小,每隔几次迭代就改变网络。每隔10个批次我们的网络会随机选择一个新的图像尺寸大小。由于我们的模型缩减了32倍,我们从下面的32的倍数中选择:{320,352,…,608}。因此最小的选项是320×320,最大的是608×608。我们调整网络的尺寸并继续训练。

Faster
Darknet-19。我们提出了一个新的分类模型作为YOLOv2的基础。我们的模型建立在网络设计先前工作以及该领域常识的基础上。与VGG模型类似,我们大多使用3×3滤波器,并在每个池化步骤之后使通道数量加倍[17]。按照Network in Network(NIN)的工作,我们使用全局平均池化做预测以及1×1滤波器来压缩3×3卷积之间的特征表示[9]。我们使用批标准化来稳定训练,加速收敛,并正则化模型[7]。我们的最终模型叫做Darknet-19,它有19个卷积层和5个最大池化层。完整描述请看表6。Darknet-19只需要55.8亿次运算来处理图像,但在ImageNet上却达到了72.9%的top-1准确率和91.2%的top-5准确率。

在这里插入图片描述
1)分类训练
我们使用Darknet神经网络结构,使用随机梯度下降,初始学习率为0.1,学习率多项式衰减系数为4,权重衰减为0.0005,动量为0.9,在标准ImageNet 1000类分类数据集上训练网络160个迭代周期[13]。在训练过程中,我们使用标准的数据增强技巧,包括随机裁剪,旋转,色调,饱和度和曝光偏移。如上所述,在我们对224×224的图像进行初始训练之后,我们对网络在更大的尺寸448上进行了微调。对于这种微调,我们使用上述参数进行训练,但是只有10个迭代周期,并且以10−3的学习率开始。在这种更高的分辨率下,我们的网络达到了76.5%的top-1准确率和93.3%的top-5准确率。

2)检测训练
我们修改这个网络进行检测,删除了最后一个卷积层,加上了三个具有1024个滤波器的3×3卷积层,其后是最后的1×1卷积层与我们检测需要的输出数量。对于VOC,我们预测5个边界框,每个边界框有5个坐标和20个类别,所以有125个滤波器。我们还添加了从最后的3×3×512层到倒数第二层卷积层的直通层,以便我们的模型可以使用细粒度特征。

Stronger
我们提出了一个联合训练分类和检测数据的机制。我们的方法使用标记为检测的图像来学习边界框坐标预测和目标之类的特定检测信息以及如何对常见目标进行分类。它使用仅具有类别标签的图像来扩展可检测类别的数量。

RetinaNet

RetinaNet:嘿,前面的哥们,你们知道自己为什么这么菜吗?你们啊有太多的negative啊,笑一笑,positive起来。前面的哥们:不知你在说什么。Focal loss 调教大法好啊!

We identify class imbalance during training as the main obstacle impeding one-stage detector from achieving state-of-the-art accuracy and propose a new loss function that eliminates this barrier. (我们将训练过程中的类别失衡确定为阻碍一级检测器达到最新精度的主要障碍,并提出了消除这种障碍的新损失函数。)Anchors和RPN其实是真爱啊,单单一个Anchors不好受。R-CNN检测器中的类不平衡是通过两级级联和采样启发法解决的。提议阶段将候选对象位置的数量迅速缩小到少量(例如1-2k),从而筛选出大多数背景样本。在第二个分类阶段,执行采样启发法,例如固定的前景与背景之比(1:3)或在线硬示例挖掘(OHEM)以保持前景与背景之间的可管理平衡。

Focal Loss
Focal Loss旨在解决一阶段目标检测情况,在这种情况下,训练期间前景和背景类别之间存在极大的不平衡(例如1:1000)。
在这里插入图片描述
1)cross entropy (CE) loss :
在这里插入图片描述
其中 y ∈ { ± 1 ) } y \in\lbrace \pm 1)\rbrace y{±1)}指定了groundtruth的类别,而 p ∈ [ 0 , 1 ] p \in [0,1] p[0,1]是模型对带有标签y = 1的类别的估计概率。为方便起见,我们定义pt
在这里插入图片描述
重写 C E ( p , y ) = C E ( p t ) = − l o g ( p t ) CE(p,y) =CE(p_t) = -log(p_t) CE(p,y)=CE(pt)=log(pt)

2) Balanced Cross Entropy
解决类别不平衡的常见方法是为类别1引入加权因子 α ∈ [ 0 , 1 ] \alpha \in [0,1] α[0,1],为类别-1引入加权因子 1 − α 1-\alpha 1α。 实际上,可以通过逆类频率设置 α \alpha α,也可以将其视为通过交叉验证设置的超参数。 为了符号上的方便,我们将 α t \alpha_t αt的定义类似于pt的定义。 我们将 α \alpha α平衡CE损失写为:
在这里插入图片描述
3) Focal Loss Definition
正如我们的实验将显示的那样,在密集探测器的训练过程中遇到的大类别失衡压倒了CE Loss。 容易分类的负类别构成了Loss的大部分,并主导了梯度。 尽管 α t \alpha_t αt平衡了正/负例子的重要性,但它并未区分简单/困难例子。 相反,我们建议重塑损失函数,以减轻简单的例子,从而集中训练难例。
更正式地说,我们建议添加一个具有可调聚焦参数 γ \gamma γ的调制因子 ( 1 − p t ) γ (1-p_t)^{\gamma} (1pt)γ 给CE Loss。我们将焦点损失定义为:
在这里插入图片描述
two properties of the focal loss:(1)当一个例子被错误分类并且 p t p_t pt很小时,调制因子接近1并且损失不受影响。当 p t → 1 p_t\to1 pt1时,调制因子变为0,即分类良好的示例的损失是低权重的。(2)聚焦参数 γ \gamma γ平滑地调整容易样本下降的速率。

在实际中使用α-balanced variant of the focal loss:
在这里插入图片描述
RetinaNet Detector
在这里插入图片描述RetinaNet是一个统一的网络,由骨干网和两个特定于任务的子网组成。骨干负责计算整个输入图像上的卷积特征图,并且是一种自卷积网络。第一个子网在主干的输出上执行卷积对象分类;第二个子网执行卷积边界框回归。

1)Feature Pyramid Network Backbone:
我们采用[20]的特征金字塔网络(FPN)作为RetinaNet的骨干网络。在[20]之后,我们在ResNet架构之上构建了FPN [16]。我们构建了一个级别为 P 3 P_3 P3 P 7 P_7 P7的金字塔,其中 l l l表示金字塔等级( P l P_l Pl的分辨率比输入低 2 l 2^l 2l)。

2)Anchors
我们使用类似于[20]中RPN变体中的平移不变锚点框。锚在金字塔等级 P 3 P_3 P3 P 7 P_7 P7上分别具有 3 2 2 32^2 322 51 2 2 512^2 5122的区域。如[20]所示,在每个金字塔等级,我们使用三个长宽比 { 1 : 2 , 1 : 1 , 2 : 1 } \lbrace1:2,1:1,2:1\rbrace {1:2,1:1,2:1}的锚点。对于比[20]更密集的比例覆盖,在每个级别,我们添加尺寸为 { 2 0 , 2 1 3 , 2 2 3 } \lbrace2^0,2^{\frac{1}{3}},2^{\frac{2}{3}}\rbrace {20,231,232}的3个长宽比锚的原始组的锚。这在我们的设置中改善了AP。总共每个级别有A = 9个锚点,并且它们覆盖相对于网络输入图像的比例范围32 - 813像素。

3)Classification Subnet
分类子网预测每个A anchors和K个类别在每个空间位置处对象存在的概率。该子网是连接到每个FPN级别的小型FCN;所有金字塔等级共享此子网的参数。它的设计很简单。从给定的金字塔等级获取具有C通道的输入特征图,该子网应用四个3x3卷积层,每个卷积层具有C个滤波器,每个层接着ReLU激活,接着是具有KA滤波器的3x3卷积层。最后附加sigmoid激活以输出每个空间位置的KA个二元预测值。

4)Box Regression Subnet
与对象分类子网并行,我们将另一个小FCN附加到每个金字塔等级,以便将每个锚框的偏移量回归到附近的ground-truth对象(如果存在)。子回归子网的设计与分类子网相同,只是它在每个空间位置终止于4A线性输出,见图3(d)。对于每个空间位置的每个A个锚点,这4个输出预测锚和ground-truth框之间的相对偏移(我们使用RCNN [11]中的标准框参数化)。我们注意到,与最近的工作不同,我们使用类不可知的边界框回归量,它使用更少的参数并且同样有效。

YOLOv3

在这里插入图片描述

CornerNet

Anchor:YOLO,SSD,RetinaNet,想干检测,可以,都给老子交把上个月,上上个月的房租交了。YOLO,SSD,RetinaNet:包租婆,有人砸了我们的买卖。CornerNet:Anchor-free,Anchor-free。耳目一新啊!

Abstract
1)We propose CornerNet, a new approach to object detection where we detect an object bounding box as a pair of keypoints, the top-left corner and the bottom-right corner, using a single convolution neural network.(我们提出了一种新的目标检测方法 CornerNet,这种方法将对象边界框检测当作一对关键点(即左上角和右下角)使用单个卷积神经网络来检测。 anchor-free,欧耶)

2) In addition to our novel formulation, we introduce corner pooling, a new type of pooling layer that helps the network better localize corners.(除了这种新颖 的检测方法,我们还引入了 corner pooling,这是一种新型的池化层,可以帮助网络更好地 定位角点。 )

Introduction
1)Dis anchor。 anchor 框的使用有两个缺点。首先,我们通常需要非常多的 anchor 框, 这是因为检测器被训练以判断每个 anchor 框是否与真实标签框足够重叠,并且需要大量的anchor 框以确保与大多数真实标签框足够重叠。事实上,只有一小部分 anchor 框与真实标签框重叠; 这在正负 anchor 框之间造成了巨大的不平衡,由此减缓了训练过程。其次,anchor 框的使用引入了许多超参数和设计选择问题,这包括使用多少个anchor 框, anchor 框的大小和宽高比。

2)promote CornerNet。我们介绍了 CornerNet,这是一种新颖的一阶段目标检测方法,可以不使用 anchor 框。我们将一个目标物体检测作为一对关键点( keypoints)。 我们 使用单个卷积网络来预测同一物体类别所有实例的左上角热图( heatmap ),所有右下角的热图,以及每个检测到的角点的嵌入向量(embedding vector )。嵌入向量用于把属于同一目标的一对角点分为一组——网络被训练的目的就是使他们的嵌入向量相似。(训练网络对属于同一对象的两个角点产生相似(距离小)的嵌入向量)
在这里插入图片描述
CornerNet 的另一个创新之处是 corner pooling,这是一种新型的池化层,可帮助卷积网络更好地定位边界框的角点(keypoint → \to corner)。边界框的角点通常位于对象外部,在这种情况下,角点无法根据局部特征进行定位。 从另一个角度看,为了确定在一 个像素位置处是否存在左上角角点,我们需要水平地向右看对象的最顶部边界,并且垂直地向下看对象的最左边边界(由对象最顶部的边界线和最左边边界线相交的交点就是left corner)。corner pooling:它包含两个特征图; 在每 个像素位置,第一个特征图向右最大化池化所有特征向量,第二个特征图向下最大化池化所 有特征向量,然后将两个池化结果相加。
在这里插入图片描述
我们假设检测角点比检测边界框或候选框中心点更好的原因有两个。 首先,框的中心点可能更难以定位,因为它取决于对象的所有4个边,而定位一个角点只取决于2条边,因此更容易。另外,可以使用 corner pooling,这可以编码一些关于明确定义角点的先验知识。 其次,角点提供了一种更有效的方式来密集地离散框的空间:我们只需要 O ( w h ) O(wh) O(wh)个角点来表示 O ( w 2 h 2 ) O(w^2h^2) O(w2h2)可能的 anchor 框(CenterNet啪啪啪打脸啊)。

cornernet
1)overview
在这里插入图片描述
在 CornerNet 中,我们将对象检测作为一对关键点(边界框的左上角和右下角)检测。 卷积网络预测两组热图来表示不同对象类别的角点位置,一组用于左上角,另一组用于右下 角。 网络还预测每个检测到的角点的嵌入向量(Newell 等人,2017),使得来自同一对象的两个角点的嵌入向量之间的距离很小。 为了产生更紧凑的边界框(更好的),网络还预测偏移量来微调角点的位置。 通过预测的热图,嵌入向量和偏移量,我们应用一个简单的后处 理算法来获得最终的边界框。

2) Detecting Corners
对于每个角点,有一个符合真实标签位置的为正样本,所有其他位置都是负样本在训练期间,我们不是同等地惩罚负位置, 而是减少对正位置(标签角点)半径内的负位置给予的惩罚。 这是因为:如果一对假角点 靠近各自的真实标签角点位置,检测器仍然可以产生一个足以与真实标签框重叠的框(图 5)。 我们根据物体的大小来确定半径的值,确定的依据是要确保半径内的一对点生成的边界框与 ground-truth 的 IoU ≥ t(我们在所有实验中将 t 设置为 0.3) 给定半径,惩罚减少量由非标准化的二维高斯给出, e − x 2 + y 2 2 σ e^{-\frac{x^2+y^2}{2\sigma}} e2σx2+y2,其中心位于正位置,其 σ \sigma σ 1 3 \frac{1}{3} 31的半径。

假设 pcij为预测热图中类别 c 在位置(i,j)的得分,ycij 为用非标准化高斯增强的“ground-truth” 热图得分(意思是使用上段描述的减少半径内惩罚的得分)。我们设计了一个 focal loss 损失函数的变体[23]:
在这里插入图片描述
其中 N 是图像中目标的数量,α 和 β 是控制每个角点点的贡献的超参数(在所有实验中我们 将 α 设置为 2,β 设置为 4)。 利用高斯凸点编码的 ycij,( 1-ycij)项减少了 ground-truth 周围的惩罚。

图像中的位置(x,y)被映射到热图中的位置 ( ⌊ x n ⌋ , ⌊ y n ⌋ (\lfloor\frac{x}{n}\rfloor,\lfloor\frac{y}{n}\rfloor (nxny,其中 n 是下采样因子。当我们将热图中的位置重新映射到输入图像时,可能会丢失一些精度,这会极大地影响小边界框与 ground-truth 之间的 IoU。 为了解决这个问题, 们预测位置偏移量以微调角点位置,然后再将它们重新映射到输入分辨率。
在这里插入图片描述在这里插入图片描述
其中 ok是偏移量,xk和 yk是角点 k 的 x 和 y 坐标。 特别是,我们预测所有类别的左上角 共享一组偏移,另一组由右下角共享。

3) Grouping Corners
一张图像中可能出现多个目标,因此可能检测到多个左上角和右下角。我们需要确定左上角和右下角的一对角点是否来自同一个目标边界框。Newell 等人检测所有人类关节,并为每个检测到的关节生成嵌入向量。他们根据嵌入向量之间的距离将节点进行分组。 关联嵌入的思想也适用于我们的任务。 网络为每个检测到的角点预测嵌入向量,这样一来, 如果左上角和右下角属于同一个边界框,则它们嵌入向量之间的距离应该小。 然后,我们 可以根据左上角和右下角嵌入向量之间的距离对角点进行分组。 嵌入向量的实际值并不重 要。 仅使用嵌入向量之间的距离来对角点进行分组。

我们同 Newell 等人(2017)一样使用 1 维的嵌入向量。 假设 etkebk分别作为对象 k 的左上 角和右下角的嵌入向量。 与Newell和 Deng(2017)一样,我们使用“pull”损失训练网络来分组角点,使用“push” 损失来分离角点:
在这里插入图片描述
其中 ek是 etk和 ebk 的平均值,我们在所有实验中将 Δ 设置为 1。 类似于偏移量损失,我们 仅在标注角点位置处应用损失。

4)Corner Pooling
通常没办法根据局部视觉特征判断是否存在角点。要确定一个像素点是否为左上角,我们需要水平地向右看目标的最上面边界,垂直地向底部看物体的最左边边界。因此,我们提出corner Pooling通过编码显式先验知识来更好地定位角点。

假设我们想确定位置(i,j)处的像素点是否是左上角。 设 ft和 fl是作为左上角池化层输入的特征图,假设 ftij和 flij分别是 ft和 fl中位置(i, j)处的向量。 在 H×W 的特征图上,corner pooling 层首先将所有以(i, j)和(i,H)之间的特征向量最大化池化到 ft中的特征向量 tij, 并且最大化池化所有(i,j)和(w,j)之间的特征向量作为 fl中的特征向量 lij。 最后, 它将 tij和 lij加在一起。 该计算可以用以下等式表示:
在这里插入图片描述
我们按元素取最大值。 tij和 lij都可以通过动态规划有效地计算。
在这里插入图片描述
预测模块的体系结构如图 7 所示。模块的第一部分是残差块的修改版本(He 等,2016)。 在这个修改后的残差块中,我们用一个corner pooling池化模块替换了第一个3×3卷积模块, 该模块首先通过两个 128 个通道的 3×3 卷积模块(Unless otherwise specified, our convolution module consists of a convolution layer, a BN layer (Ioffe and Szegedy, 2015) and a ReLU layer) 处理来自骨干网络的特征,然后应用 corner pooling 池化层。 在设计残差模块后,我们将池 化层的特征输入到具有 256 个通道的 3×3 Conv-BN 层中,并添加 shortcut 层。 修改后的残 差块后面是一个带有 256 个通道的 3×3 卷积模块,以及 3 个 Conv-ReLU-Conv 层,用于生成 热图,嵌入向量和偏移量。
在这里插入图片描述
5)Hourglass Network
我们的 hourglass 网络由两个 hourglass 模块组成,我们对 hourglass 模块的架构进行了一些修 改。 我们只使用步幅 2 的卷积层来减少特征分辨率,而不是使用最大池化层(这是现在主 流的做法,虽然增加了很多参数量和计算量,但效果要好很多)。 我们将特征分辨率降低了 5 倍,并沿途增加了特征通道数量(256,384,384,384,512)。 当我们对特征进行上采样时,我 们使用 2 个残差模块,然后是最近邻上采样。 每个跳跃连接也包含 2 个残差模块。 hourglass 模块中有 4 个残差模块,512 个通道。 在 hourglass 模块之前,我们使用步幅为 2,128 通道 的 7×7 卷积模块将图像分辨率降低 4 倍,然后使用步幅 2,256 通道的残差块( He 等,2016)。

和 Newell 等人(2016)一样,我们还在训练中增加了中级监督。 但是,我们不会将中间预 测添加回网络,因为我们发现这会损害网络的性能。 我们将 1×1 Conv-BN 模块应用于第一 个 hourglass 模块的输入和输出。 然后我们通过逐元素加法合并它们,然后是 ReLU 和 256 个通道的残差块,然后将其用作第二个 hourglass 模块的输入。 hourglass 网络的深度为 104. 与许多其他最先进的检测器不同,我们只使用整个网络最后一层的特征进行预测。

Experiments
1) Training Details
在训练期间,我们将网络的输入分辨率设置为 511×511,这导致输出分辨率为128×128。为了减少过拟合,我们采用标准数据增强技术,包括随机水平翻转,随机缩放,随机裁剪和随机颜色抖动,包括调整图像的亮度,饱和度和对比度。 最后,我们将 PCA(Krizhevsky 等,2012)应用于输入图像。

我们使用 Adam(Kingma 和 Ba,2014)来优化整个训练损失:
在这里插入图片描述
其中α,β和γ分别是三个损失的权重。 我们将 α 和 β 都设置为 0.1,将 γ 设置为 1.我们发 现 1 和更大的 α 和 β 值会导致性能不佳。

2) Testing Details
在测试期间,我们使用简单的后处理算法从热图,嵌入向量和偏移量生成边界框。我们首 先在角点热图上使用 3×3 最大池化层来应用 NMS。 然后我们从热图中选择前 100 个左上 角和前100个右下角。 角点位置由相应的偏移量进行了调整。我们计算左上角和右下角嵌入向量之间的 L1距离。距离大于 0.5 或包含不同类别的角点组将被移除。左上角和右下角的平均分数用作检测分数。

CenterNet

道生一,一生二,二生三,三生万物。Our detector uses keypoint estimation to find center points and regresses to all other object properties, such as size, 3D location, orientation, and even pose. 一生万物,回归大法好啊,说YOLO和你是什么关系?CenterNet:我爹是keypoint estimation啊!

Introduction
在本文中,我们提供了一个更简单,更有效的选择。 我们用边界框中心点来表示目标。然后,其他属性(例如对象大小,尺寸,3D范围,方向和姿势)直接从位于中心位置的图像特征中回归。那么,目标检测是标准的关键点估计问题。我们只需将输入图像输入到一个完整的卷积网络即可生成一个热图。此热图中的峰值对应于目标中心。每个峰值处的图像特征可预测目标边界框的高度和宽度。该模型使用标准的密集监督学习进行训练。 推理是单个网络前向,没有后处理的NMS。
在这里插入图片描述
我们的方法与基于锚的单阶段方法密切相关。中心点可以看作是单个不可知形状的锚。但是,有一些重要的区别。首先,我们的CenterNet仅根据位置分配“锚点”,没有边界框重叠。 我们没有针对前景和背景分类的手动阈值。其次,每个对象只有一个正“锚点”,因此不需要非最大抑制(NMS)。 我们仅在关键点热图中提取局部峰。 第三,与传统的目标检测器(输出步幅为16)相比,CenterNet使用更大的输出分辨率(输出步幅为4)。这消除了对多个锚的需求。

我们并不是第一个使用关键点估计进行物体检测的人(CornerNet,ExtremeNet)。这两种方法都基于与CenterNet相同的健壮关键点估计网络。 但是,在关键点检测之后,它们需要组合分组阶段,这会显着降低每种算法的速度。 另一方面,我们的CenterNet只需为每个对象提取单个中心点,而无需进行分组或后处理。

Preliminary
I ∈ R W × H × 3 I \in R^{W \times H \times 3} IRW×H×3为宽度W和高度H的输入图像。我们的目标是生成关键点热图 Y ^ ∈ [ 0 , 1 ] W R × H R × 3 \hat{Y} \in [0,1]^{\frac{W}{R} \times \frac{H}{R} \times 3} Y^[0,1]RW×RH×3其中R为输出步幅,C为关键点类型的数量。 关键点类型包括人体姿势估计中的C = 17个人体关节,或目标检测中的C = 80个物体类别。我们使用文献中默认输出步幅R = 4。预测的 Y ^ x , y , c = 1 \hat{Y}_{x,y,c} = 1 Y^x,y,c=1对应于检测到的关键点, Y ^ x , y , c = 0 \hat{Y}_{x,y,c} = 0 Y^x,y,c=0为背景。对于类别c的ground truth 关键点 p ∈ R 2 p \in R_2 pR2,我们计算出低分辨率的等效项 p ~ = ⌊ p R ⌋ \tilde{p}=\lfloor \frac{p}{R}\rfloor p~=Rp。然后,我们使用高斯核 Y x y c = e x p ( − ( x − ( ~ p ) ) 2 + ( y − ( ~ p ) ) 2 2 σ p 2 ) Y_{xyc}=exp(-\frac{(x-\tilde(p))^2+(y-\tilde(p))^2}{2\sigma^2_p}) Yxyc=exp(2σp2(x(~p))2+(y(~p))2)将所有ground truth关键点绘制到热图 Y ∈ [ 0 , 1 ] W R × H R × 3 Y \in [0,1]^{\frac{W}{R} \times \frac{H}{R} \times 3} Y[0,1]RW×RH×3上,其中 σ p \sigma_p σp是对象大小自适应的标准偏差。如果同一类的两个高斯重叠,则采用元素级最大值。The training objective is a penalty-reduced pixelwise logistic regression with focal loss :
在这里插入图片描述
为了恢复每个中心点由输出步幅引起的离散化误差,我们另外预测了局部偏移 O ^ ∈ R W R × H R × 2 \hat{O} \in R^{\frac{W}{R} \times \frac{H}{R} \times 2} O^RRW×RH×2。所有类别c共享相同的偏移量预测。 偏移经过L1 Loss训练:
在这里插入图片描述
监督仅在关键点位置 p ~ \tilde p p~起作用,所有其他位置均被忽略。

Objectsas Points
( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) (x^{(k)}_1,y^{(k)}_1,x^{(k)}_2,y^{(k)}_2) (x1(k),y1(k),x2(k),y2(k))是类别为ck的对象k的边界框。它的中心点位于 p k = ( x 1 ( k ) + x 2 ( k ) 2 , y 1 ( k ) + y 2 ( k ) ) 2 ) p_k = (\frac{x^{(k)}_1+x^{(k)}_2}{2},\frac{y^{(k)}_1+y^{(k)}_2)}{2}) pk=(2x1(k)+x2(k),2y1(k)+y2(k)))。我们使用关键点估计器 Y ^ \hat Y Y^来预测所有中心点。对于每个对象k,我们回归到对象大小 s k = ( x 2 ( k ) − x 1 ( k ) , y 2 ( k ) − y 1 ( k ) ) s_k = (x^{(k)}_2-x^{(k)}_1,y^{(k)}_2-y^{(k)}_1) sk=(x2(k)x1(k),y2(k)y1(k))。为了限制计算负担,我们对所有对象类别使用单个大小预测 S ^ ∈ R W R × H R × 2 \hat{S} \in R^{\frac{W}{R} \times \frac{H}{R} \times 2} S^RRW×RH×2。我们在目标的中心点使用L1损失:
在这里插入图片描述
我们不对比例进行归一化,而是直接使用原始像素坐标。
在这里插入图片描述
除非另有说明,否则在我们所有的实验中,我们将λsize设置为0.1,将λofff设置为1。 我们使用单个网络来预测关键点 Y ^ \hat Y Y^,偏移 O ^ \hat O O^和大小 S ^ \hat S S^。该网络预测每个位置的C + 4输出总数。 所有输出共享一个通用的全卷积骨干网络。

From points to bounding boxes
在推理时,我们首先针对每个类别分别提取热图中的峰值。我们检测其值大于或等于其8个相邻邻居的所有响应,并保留前100个峰值。令 P ^ \hat P P^为n个检测中心 P = { ( x ^ i , y ^ i ) } i = 1 n P=\lbrace(\hat x_i,\hat y_i)\rbrace^n_{i=1} P={(x^i,y^i)}i=1nc类的集合。每个关键点位置均由整数坐标(xi,yi)给出。 我们使用关键点值 Y ^ x i y i c \hat Y_{x_iy_ic} Y^xiyic作为其检测置信度的度量,并在位置处生成一个边界框。
在这里插入图片描述
其中, ( σ ^ x i , σ ^ y i ) = O ^ x i , y i (\hat \sigma_{xi},\hat \sigma_{yi})=\hat O_{x_i,y_i} (σ^xi,σ^yi)=O^xi,yi偏移量预测,而 ( w ^ i , h ^ i ) = S ^ x i , y i (\hat w_i,\hat h_i)=\hat S_{x_i,y_i} (w^i,h^i)=S^xi,yi是大小预测。所有输出都是直接从关键点估计产生的,而无需基于IoU的非最大抑制(NMS)或其他后处理。 峰值关键点提取可用作NMS的替代方案,可以使用3×3 max pooling操作有效地实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值