目录:
• YOLOv2
• YOLOv3
YOLO9000: Better, Faster, Stronger
论文地址:https://arxiv.org/abs/1612.08242
我们介绍了YOLO9000,这是一个最先进的实时目标检测系统,可以检测9000多个目标类别。首先,我们对YOLO检测方法提出了各种改进,既新颖又借鉴了以前的工作。改进后的YOLOv2模型在PASCAL VOC和COCO等标准检测任务上是最先进的。以67 FPS的速度,YOLOv2在VOC 2007上获得76.8的mAP。以40 FPS的速度,YOLOv2获得了78.6 mAP,超过了最先进的方法,如使用ResNet和SSD的更快的RCNN,同时运行速度仍然显著更快。最后,我们提出了一种联合训练目标检测和分类的方法。利用这种方法,我们在COCO检测数据集和ImageNet分类数据集上同时对YOLO9000进行训练。我们的联合训练允许YOLO9000预测没有标记检测数据的对象类的检测。我们在ImageNet检测任务中验证了我们的方法。YOLO9000在ImageNet检测验证集中获得19.7 mAP,尽管在200个类中只有44个类的检测数据。在COCO以外的156门课程中,YOLO9000获得16.0mAP。但YOLO只能检测200多个类;它预测了9000多个不同物体类别的探测结果。它仍然实时运行。
1.导言
通用目标检测应该快速、准确,并且能够识别各种各样的目标。自从神经网络的引入,检测框架变得越来越快速和准确。然而,大多数检测方法仍然局限于一小部分对象。
与分类和标记等其他任务的数据集相比,当前的目标检测数据集是有限的。最常见的检测数据集包含数千到数十万张图像,其中包含数十到数百个标签[3][10][2]。分类数据集有数以百万计的图像,有几万或几十万个类别[20][2]。
我们希望检测能够扩展到对象分类的级别。然而,为检测图像添加标签远比为分类或标签添加标签昂贵(标签通常由用户免费提供)。因此,在不久的将来,我们不太可能看到与分类数据集规模相同的检测数据集。
我们提出了一种新的方法来利用我们已有的大量分类数据,并使用它来扩展当前检测系统的范围。我们的方法使用对象分类的分层视图,允许我们将不同的数据集组合在一起。
我们还提出了一种联合训练算法,允许我们在检测和分类数据上训练目标检测器。我们的方法利用标记的检测图像来学习精确定位对象,同时使用分类图像来增加词汇表和鲁棒性。
使用这种方法,我们训练了YOLO9000,这是一种实时目标检测器,可以检测9000多个不同的目标类别。首先,我们改进了基本的YOLO检测系统,生产出了YOLOv2,这是一种最先进的实时检测器。然后,我们使用我们的数据集组合方法和联合训练算法,对ImageNet的9000多个类以及COCO的检测数据进行了模型训练
我们所有的代码和预先训练过的模型都可以在http://pjreddie.com/yolo9000/.
2.更好
与最先进的检测系统相比,YOLO有很多缺点。与快速R-CNN相比,YOLO的错误分析表明,YOLO产生了大量的定位错误。此外,与基于区域建议的方法相比,YOLO的召回率相对较低。因此,我们主要关注提高召回率和定位,同时保持分类准确性。
计算机视觉通常趋向于更大、更深的网络[6][18][17]。更好的性能通常取决于训练更大的网络或将多个模型组合在一起。然而,对于YOLOv2,我们需要一个更准确、速度更快的探测器。我们没有扩展我们的网络,而是简化了网络,然后使表示更容易学习。我们将过去工作中的各种想法与我们自己的新概念结合起来,以提高YOLO的表现。结果总结见表2。
批量标准化。 批量标准化可以显著提高收敛性,同时消除对其他形式正则化的需求[7]。通过在YOLO中的所有卷积层上添加批量标准化,我们可以使mAP提高2%以上。批量规范化还有助于规范化模型。通过批量标准化,我们可以在不过度拟合的情况下消除模型中的dropout。
高分辨率分类器。 所有最先进的检测方法都使用在ImageNet上预先训练的分类器[16]。从AlexNet开始,大多数分类器对小于256×256的输入图像进行操作[8]。原始YOLO以224×224的速度训练分类器网络,并将检测分辨率提高到448。这意味着网络必须同时切换到学习对象检测,并调整到新的输入分辨率。
对于YOLOv2,我们首先在ImageNet上以完整的448×448分辨率对分类网络进行10个epoch的微调。这使网络有时间调整其过滤器,以便更好地处理更高分辨率的输入。然后,我们根据检测结果对网络进行微调。这个高分辨率的分类网络使我们的mAP增加了近4%。
带锚框的卷积。 YOLO使用卷积特征提取器顶部的完全连接层直接预测边界框的坐标。与直接预测坐标不同,Faster R-CNN使用人工选择的先验值预测边界框[15]。快速R-CNN中的区域建议网络(RPN)仅使用卷积层预测锚框的偏移量和可信度。由于预测层是卷积的,RPN在特征mAP的每个位置预测这些偏移。预测偏移量而不是坐标简化了问题,使网络更容易学习。
我们从YOLO中移除完全连接的层,并使用锚框来预测边界框。首先,我们消除一个池层,使网络的卷积层的输出具有更高的分辨率。我们还将网络缩小,在416的输入图像上操作,而不是448×448。我们这样做是因为我们希望在特征图中有奇数个位置,所以只有一个中心单元。对象,尤其是大型对象,往往占据图像的中心,因此最好在中心有一个位置来预测这些对象,而不是四个位置都在附近。YOLO的卷积层对图像进行了32倍的下采样,因此通过使用416的输入图像,我们得到了13×13的输出特征图。
当我们使用锚框时,我们还将类别预测和空间定位解耦,而是预测每个锚框的类别和objectness。和YOLO一样,objectness预测分支仍是预测真值和提议框的IoU,而类别预测分支会预测给定该框有物体的条件下类别的条件概率。
When we move to anchor boxes we also decouple the class prediction mechanism from the spatial location and instead predict class and objectness for every anchor box. Following YOLO, the objectness prediction still predicts the IOU of the ground truth and the proposed box and the class predictions predict the conditional probability of that class given that there is an object.
使用锚框,我们的准确度会略有下降。YOLO只预测每张图片有98个框,但我们的模型预测的锚框超过1000个。如果没有锚框,我们的中等模型的mAP为69.5,召回率为81%。使用锚框,我们的模型得到69.2mAP,召回率为88%。尽管mAP减少了,但召回率的增加意味着我们的模型还有更多的改进空间。
维度聚类。 我们在使用锚框时遇到了两个问题。首先,框的尺寸是手工挑选的。网络可以学习适当地调整方框,但如果我们从网络开始选择更好的先验,我们可以使网络更容易学习预测良好的检测。
我们在训练集边界框上运行k-means聚类来自动找到好的先验值,而不是手动选择先验值。如果我们使用标准的k-均值和欧几里德距离,较大的框比较小的框产生更多的误差。然而,我们真正想要的是能够获得良好的IOU分数的先验,这与框的大小无关。因此,对于我们的距离度量,我们使用:
我们对k的各种值运行k-means,并用最接近的中心绘制平均IOU,见图2。我们选择k=5作为模型复杂度和高召回率之间的一个很好的折衷。聚类中心与手工挑选的锚框有显著不同。短而宽的框更少,而高而薄的框更多。
我们将平均IOU与我们的聚类策略和表1中手工挑选的锚框中最接近的先验值进行比较。在只有5个先验时,中心的表现类似于9个锚框,平均IOU为61.0,而不是60.9。如果我们使用9个中心,我们会看到一个更高的平均IOU。这表明,使用k-means生成边界框可以更好地表示模型,并使任务更容易学习。
直接位置预测。 在YOLO中使用锚框时,我们会遇到第二个问题:模型不稳定,尤其是在早期迭代中。大多数不稳定性来自预测框的位置。在区域方案网络中,网络预测值和以及中心坐标计算如下:
例如,的预测将使框向右移动锚框的宽度,我会将其向左移动相同的量。
这个公式是不受约束的,因此任何锚框都可以在图像中的任何点结束,而不管锚框的位置如何。在随机初始化的情况下,模型需要很长时间才能稳定到预测合理偏移量。
我们没有预测偏移量,而是遵循YOLO的方法,预测相对于网格单元位置的位置坐标。这将真值限制在0到1之间。我们使用逻辑激活来限制网络的预测在这个范围内。
该网络在输出特征图的每个单元预测5个边界框。网络为每个边界框预测5个坐标:、、、和。如果单元格与图像左上角的偏移量为,且先验框具有宽度和高度,,则预测对应于:
由于我们限制了位置预测,参数化更容易学习,使网络更稳定。与使用锚框的版本相比,使用尺寸聚类以及直接预测边界框中心位置可以将YOLO提高近5%。
细粒度特征。 这种改进的YOLO在13×13特征图上预测检测结果。虽然这对于大型对象来说已经足够了,但它可能会受益于用于定位较小对象的细粒度功能。更快的R-CNN和SSD都在网络中的不同特征图上运行他们的提案网络,以获得一系列分辨率。我们采用了一种不同的方法,只需添加一个穿透层(passthrough layer),以26×26的分辨率呈现早期层的特征。
穿透层通过将相邻特征叠加到不同通道而不是空间位置,将高分辨率特征与低分辨率特征连接起来,类似于ResNet中的恒等映射。这会将26×26×512特征图转换为13×13×2048特征图,可以与原始特征连接。我们的检测器运行在这个扩展的特征映射之上,因此它可以访问细粒度的特征。这将使性能略微提高1%。
多尺度训练。 原始YOLO使用448×448的输入分辨率。随着锚框的增加,我们将分辨率更改为416×416。然而,由于我们的模型只使用卷积层和池层,所以可以动态调整大小。我们希望YOLOv2能够在不同大小的图像上运行,所以我们将其训练到模型中。
我们不是固定输入图像的大小,而是每隔几次就改变网络。我们的网络每10批随机选择一个新的图像尺寸。{32}从我们的模型中,我们把}。因此,最小的选项是320×320,最大的选项是608×608。我们将网络调整到这个维度并继续训练。
这种机制迫使网络学会在各种输入维度上进行良好预测。这意味着同一个网络可以预测不同分辨率下的检测结果。网络在较小的尺寸下运行速度更快,因此YOLOv2在速度和准确性之间提供了一个简单的权衡。
在低分辨率下,YOLOv2是一种廉价、相当精确的探测器。在288×288的速度下,它以90多帧的速度运行,几乎和Faster R-CNN一样好。这使得它非常适合于较小的GPU、高帧率视频或多个视频流。
在高分辨率下,YOLOv2是一款先进的探测器,在VOC 2007上具有78.6 mAP,同时仍以高于实时速度运行。有关YOLOv2与VOC 2007上其他框架的比较,请参见表3。图4
进一步的实验。
我们对YOLOv2进行了VOC 2012检测训练。表4显示了YOLOv2与其他最先进检测系统的比较性能。YOLOv2实现了73.4 mAP,同时运行速度远远快于竞争对手的方法。我们还对COCO进行了训练,并与表5中的其他方法进行了比较。在VOC指标(IOU=0.5)上,YOLOv2获得44.0 mAP,与SSD和更快的R-CNN相当。
3.更快
我们希望检测准确,但也希望检测速度快。大多数检测应用,如机器人或自动驾驶汽车,都依赖于低延迟预测。为了最大限度地提高性能,我们设计的YOLOv2从一开始就是快速的。
大多数检测框架都依赖VGG-16作为基本特征提取器[17]。VGG-16是一个强大、准确的分类网络,但它不必要地复杂。VGG-16的卷积层需要在224×224分辨率的单个图像上进行306.9亿次浮点运算。
YOLO框架使用基于Googlenet架构的定制网络[19]。该网络比VGG-16更快,仅使用85.2亿次操作进行正向传递。然而,它的精确度比VGG16稍差。对于单裁剪,前五名的精度为224×224,YOLO的定制模型获得88.0%的ImageNet,而VGG-16的精度为90.0%。
Darknet-19 我们提出了一个新的分类模型作为YOLOv2的基础。我们的模型建立在之前的网络设计工作以及该领域的常识基础上。与VGG模型类似,我们主要使用3×3滤波器,并在每个池化步骤后将通道数增加一倍[17]。在网络中网络(NIN)的工作之后,我们使用全局平均池进行预测,并使用1×1滤波器压缩3×3卷积之间的特征表示[9]。我们使用批量标准化来稳定训练,加快收敛速度,并对模型进行正则化[7]。
我们的最终模型名为Darknet-19,有19个卷积层和5个最大池层。完整描述见表6。Darknet-19只需要55.8亿次操作就可以处理一幅图像,但在ImageNet上可以达到72.9%的顶级精度和91.2%的顶级精度。
分类训练。 我们使用Darknet神经网络框架,在标准ImageNet 1000类分类数据集上,使用随机梯度下降(起始学习率为0.1)、多项式速率衰减(幂为4)、权重衰减(权重衰减)为0.0005、动量衰减(动量)为0.9,对160个epoch的网络进行训练[13]。在训练期间,我们使用标准的数据增强技巧,包括随机裁剪、旋转、色调、饱和度和曝光变化。
如上所述,在我们以224×224的图像进行初始训练后,我们将我们的网络微调到更大的尺寸448。对于这种微调,我们使用上述参数进行训练,但只训练10个阶段,并以10的学习率开始−3.在这个更高的分辨率下,我们的网络实现了76.5%的前1精度和93.3%的前5精度。
检测训练。 我们通过移除最后一个卷积层来修改该网络以进行检测,而不是添加三个3×3卷积层,每个卷积层带有1024个滤波器,然后是一个最终的1×1卷积层,具有检测所需的输出数量。对于VOC,我们预测5个框,每个框有5个坐标,每个框有20个类别,因此有125个过滤器。我们还从最后一个3×3×512层到第二个到最后一个卷积层添加了一个穿透层,以便我们的模型可以使用细粒度特征。
我们以10%的起始学习率对网络进行了160个阶段的训练−3,在60和90个时期除以10。我们使用0.0005的重量衰减和0.9的动量。我们对YOLO和SSD使用了类似的数据增强,包括随机裁剪、颜色变换等。我们对COCO和VOC使用相同的训练策略。
4.更强 我们提出了一种联合训练分类和检测数据的机制。我们的方法使用标记用于检测的图像来学习特定于检测的信息,如边界框坐标预测和对象性,以及如何对常见对象进行分类。它使用只有类标签的图像来扩展它可以检测的类别数量。
在训练期间,我们混合了检测和分类数据集中的图像。当我们的网络看到标记为检测的图像时,我们可以基于完整的YOLOv2损失函数进行反向传播。当它看到分类图像时,我们只会反向传播架构中分类特定部分的损失。
这种方法带来了一些挑战。检测数据集只有通用对象和通用标签,如“狗”或“船”。分类数据集的标签范围更广、更深。ImageNet拥有100多种狗,包括“诺福克梗”、“约克郡梗”和“贝灵顿梗”。如果我们想在这两个数据集上进行训练,我们需要一种连贯的方式来合并这些标签。
大多数分类方法在所有可能的类别中使用softmax层来计算最终的概率分布。使用softmax时,假定这些类是互斥的。这给组合数据集带来了问题,例如,您不想使用此模型组合ImageNet和COCO,因为“诺福克梗”和“狗”类不是相互排斥的。
我们可以使用一个多标签模型来组合不假设互斥的数据集。这种方法忽略了我们所知道的关于数据的所有结构,例如,所有COCO类都是互斥的。
层次分类。 ImageNet标签是从WordNet中提取出来的,WordNet是一个语言数据库,用于构建概念及其关系[12]。在WordNet中,“诺福克梗”和“约克郡梗”都是“梗”的下位词,后者是“猎狗”的一种,后者是“狗”的一种,后者是“犬科”的一种,等等。大多数分类方法都假定标签的结构是扁平的。然而,对于组合数据集,结构正是我们所需要的。
WordNet的结构是有向图,而不是树,因为语言很复杂。例如,“dog”既是“犬科”的一种,也是“家畜”的一种,它们都是WordNet中的语法集。我们没有使用完整的图结构,而是通过从ImageNet中的概念构建层次树来简化问题。
为了构建这棵树,我们检查ImageNet中的视觉名词,并查看它们通过WordNet图形到根节点的路径,在本例中为“物理对象”。许多语法集在图中只有一条路径,因此首先我们将所有这些路径添加到树中。然后,我们反复检查我们留下的概念,并添加尽可能少地增长树的路径。因此,如果一个概念有两条通向根的路径,一条路径会给我们的树增加三条边,另一条只会增加一条边,我们选择较短的路径。
最终的结果是WordTree,一个视觉概念的层次模型。为了使用WordTree进行分类,我们预测每个节点的条件概率,即给定该语法集的该语法集的每个下位词的概率。例如,在“terrier”节点,我们预测:
如果我们想计算一个特定节点的绝对概率,我们只需沿着树到根节点的路径,乘以条件概率。所以如果我们想知道一张图片是否是诺福克梗,我们计算:
出于分类目的,我们假设图像包含一个对象:。
为了验证这种方法,我们在使用1000类ImageNet构建的WordTree上训练Darknet-19模型。为了构建WordTree1k,我们添加了所有中间节点,将标签空间从1000扩展到1369。在训练期间,我们在树上传播真值标签,这样,如果图像被标记为“诺福克梗”,它也会被标记为“狗”和“哺乳动物”,等等。为了计算条件概率,我们的模型预测了1369个值的向量,我们计算了所有系统集上的softmax,这些系统集是同一概念的下位词,见图5。
使用与之前相同的训练参数,我们的分层Darknet-19实现了71.9%的top-1精度和90.4%的top-5精度。尽管增加了369个额外的概念,并让我们的网络预测树形结构,但我们的准确度只略有下降。以这种方式进行分类也有一些好处。对于新的或未知的对象类别,性能会下降。例如,如果网络看到一只狗的图片,但不确定它是什么类型的狗,它仍然会以高置信度预测“dog”,但在下义词中分布的置信度较低。
这种配方也适用于检测。现在,我们不用假设每幅图像都有一个对象,而是使用YOLOv2的对象性预测器来给出pr(物理对象)的值。探测器预测一个边界框和概率树。我们向下遍历树,在每次拆分时取最高置信度路径,直到达到某个阈值,然后预测该对象类。
数据集与WordTree的组合。 我们可以使用WordTree以合理的方式将多个数据集组合在一起。我们只需将数据集中的类别映射到树中的语法集。图6显示了使用WordTree组合ImageNet和COCO标签的示例。WordNet非常多样化,因此我们可以对大多数数据集使用这种技术。
联合分类和检测。 既然我们可以使用WordTree组合数据集,我们就可以在分类和检测方面训练我们的联合模型。我们想训练一个超大规模的探测器,所以我们使用COCO探测数据集和完整ImageNet版本中的前9000个类创建了我们的组合数据集。我们还需要评估我们的方法,以便添加ImageNet检测挑战中尚未包含的任何类。此数据集对应的WordTree有9418个类。ImageNet是一个更大的数据集,因此我们通过对COCO进行过采样来平衡数据集,这样ImageNet的大小仅为4:1。
利用这个数据集,我们训练了YOLO9000。我们使用基本的YOLOv2架构,但只有3个先验,而不是5个先验来限制输出大小。当我们的网络看到检测图像时,我们会像正常情况一样反向传播丢失。对于分类损失,我们只在标签的相应级别或以上反向传播损失。例如,如果标签是“狗”,我们会将任何错误分配给树下面的预测,“德国牧羊犬”和“金毛寻回犬”,因为我们没有这些信息。
当它看到分类图像时,我们只会反向传播分类丢失。要做到这一点,我们只需找到预测该类最高概率的边界框,然后计算预测树上的损失。我们还假设预测框与真值标签重叠至少0.3IOU,并基于此假设反向传播对象性损失。
通过这项联合训练,YOLO9000学习使用COCO中的检测数据在图像中查找对象,并学习使用ImageNet中的数据对各种各样的对象进行分类。
我们在ImageNet检测任务中评估了YOLO9000。ImageNet的检测任务与COCO共享44个对象类别,这意味着YOLO9000只看到了大多数测试图像的分类数据,而不是检测数据。YOLO9000在不相交的156个对象类上获得了19.7个映射,其中16.0个映射从未见过任何标记的检测数据。该图比DPM获得的结果更高,但YOLO9000仅在部分监督的情况下在不同的数据集上进行训练[4]。它还同时检测9000个其他物体类别,所有这些都是实时的。
当我们在ImageNet上分析YOLO9000的表现时,我们看到它能很好地学习新物种的动物,但却在学习服装和设备等方面遇到困难
新的动物更容易学习,因为对象性预测很好地概括了COCO中的动物。相反,COCO没有任何类型的服装的边框标签,只针对个人,因此YOLO9000努力为“太阳镜”或“泳裤”等类别建模。
5.结论
我们介绍了实时检测系统YOLOv2和YOLO9000。YOLOv2是最先进的,在各种检测数据集上都比其他检测系统更快。此外,它可以在各种图像大小下运行,以在速度和精度之间进行平滑的权衡。
YOLO9000是一个实时框架,通过联合优化检测和分类来检测9000多个对象类别。我们使用WordTree将来自不同来源的数据和我们的联合优化技术结合起来,在ImageNet和COCO上同时进行训练。YOLO9000是缩小检测和分类之间数据集大小差距的有力一步。
我们的许多技术都不局限于目标检测。ImageNet的WordTree表示为图像分类提供了更丰富、更详细的输出空间。使用分层分类的数据集组合在分类和分割领域将是有用的。多尺度训练等训练技术可以在各种视觉任务中提供益处。
对于未来的工作,我们希望使用类似的技术进行弱监督图像分割。我们还计划使用更强大的匹配策略,在训练期间为分类数据分配弱标签,以改善检测结果。计算机视觉拥有大量的标记数据。我们将继续寻找将不同数据源和结构结合在一起的方法,以构建更强大的视觉世界模型。
原文地址:https://arxiv.org/abs/1804.02767
YOLOv3发表于2018年4月8日,再过几天就是YOLOv3发表四周年了。
我们将向YOLO介绍一些最新信息!我们做了一系列小的设计修改,使之更好。我们还训练了这个非常棒的新网络。比上次大了一点,但更准确。不过还是很快,别担心。在320x320下,YOLOv3以28.2 mAP的速度在22毫秒内运行,与SSD一样精确,但速度快了三倍。如果用旧的检测指标.5 IOU mAP,YOLOv3是相当好的。在一块TitanX上,它达到57.9% AP50,延迟是57.5毫秒,相比RetinaNet到达57.5 AP50,延迟是198ms,它的性能相似,速度快了3.8倍。和之前一样,代码在:https://pjreddie.com/darknet/yolo/
1.引言
有时候你只是打了一年电话,知道吗?今年我没有做太多研究。在Twitter上花了很多时间。玩了一些GANs。有一点去年遗留下来的动力[12][1];我设法对YOLO做了一些改进。但是,老实说,没有什么特别有趣的,只是一些小的改变让它变得更好。我还帮助了其他人的研究。
事实上,这就是我们今天来到这里的原因。我们有一个camera-ready deadline[4],我们需要引用我对YOLO所做的一些随机更新,但我们没有消息来源。所以,为技术报告做好准备吧!
技术报告最棒的一点是,不需要介绍,你们都知道我们为什么在这里。因此,本简介的结尾将为本文的其余部分指明方向。首先,我们将告诉你YOLOv3是什么。然后我们会告诉你我们是怎么做的。我们还会告诉你一些我们尝试过但没有成功的事情。最后,我们将思考这一切意味着什么。
2. The Deal
YOLOv3是这样的:我们主要从其他人那里获得好的想法。我们还训练了一个比其他分类器更好的新分类器网络。我们将带您从头开始了解整个系统,这样您就可以了解所有内容。
2.1. 边界框预测
遵循YOLO9000,我们的系统使用维度簇( dimension clusters)作为锚框来预测边界框[15]。网络预测每个边界框的4个坐标、、、。如果单元格与图像左上角的偏移量为,且边界框先验(prior)具有宽度和高度,,则预测对应于:
在训练期间,我们使用误差损失平方和(sum of squared error loss)。如果某个坐标预测的真值是,那么我们的梯度就是地真值(从真值框计算)减去我们的预测:。通过颠倒上述方程式,可以很容易地计算出该真值。
YOLOv3使用逻辑回归预测每个边界框的objectness score。如果“边界框先验”与真值对象的重叠超过任何其他边界框先验,则该值应为1。如果边界框先验不是最好的,但确实与真值对象重叠了超过某个阈值,我们将忽略预测,如[17]。我们使用0.5的阈值。与[17]不同,我们的系统只为每个真值对象指定一个边界框。如果未将边界框先验指定给真值对象,则不会导致坐标或类预测损失,只会导致objectness损失。
2.2. 类别预测
每个框使用多标签分类预测边界框可能包含的类。我们没有使用softmax,因为我们发现它对于良好的性能是不必要的,相反,我们只是使用独立的逻辑分类器。在训练过程中,我们使用二元交叉熵损失进行类别预测。
当我们转移到更复杂的领域,如 Open Images数据集[7]时,这个公式会有所帮助。在这个数据集中有许多重叠的标签(即Woman and Person)。使用softmax时,假设每个框只有一个类,但情况往往并非如此。多标签方法可以更好地建模数据。
2.3 跨尺度的预测
YOLOv3以3种不同的尺度来预测边框。我们的系统使用类似于金字塔网络的概念从这些尺度中提取特征[8]。从我们的基本特征提取器中,我们添加了几个卷积层。最后一个卷积层预测一个3-d张量,编码边界框、objectness以及类别的预测。
在COCO[10]的实验中,在每个尺度上我们预测3个边框,所以张量为,其中有4个边框偏移量,1个objectness,以及80个边框预测。
接下来,我们从前两层中提取特征图,并将其上采样2×。我们还从网络早期获取一个特征图,并使用连接将其与我们的上采样特征合并。这种方法允许我们从上采样的特征中获得更有意义的语义信息,并从早期的特征映射中获得更细粒度的信息。然后,我们再添加几个卷积层来处理这个组合的特征图,并最终预测一个类似的张量,尽管现在的大小是原来的两倍。
我们再进行一次相同的设计,以预测最终尺度的盒子。因此,我们对第三尺度的预测得益于所有先前的计算以及网络早期的细粒度特征。我们仍然使用k-均值聚类来确定我们的边界框prior。我们只是随意选择了9个簇和3个尺度,然后在各个尺度上均匀地划分簇。在COCO数据集上,9个簇为:(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116×90)、(156×198)、(373×326)。
2.4. 特征提取器
我们使用一个新的网络来进行特征提取。我们的新网络是一种混合方法,既有Darknet-19 YOLOv2中使用的网络,也有新型的残差网络。我们的网络使用连续的3×3和1×1卷积层,但现在也有一些残差连接,而且要大得多。它有53个卷积层,所以我们称之为......等等......Darknet-53!!
这个新网络比Darknet19强大得多,但仍然比ResNet-101或ResNet-152更高效。以下是ImageNet的一些结果:
每个网络都使用相同的设置进行训练,并以256×256的单裁剪精度进行测试。运行时间在TitanX上以256×256测量。因此,Darknet-53与最先进的分类器相比,具有更少的浮点运算和更高的速度。Darknet-53比ResNet-101好,速度快1.5倍。Darknet-53的性能与ResNet-152相似,比ResNet-152快2倍。
Darknet-53还实现了每秒最高的浮点运算量。这意味着网络结构更好地利用了GPU,使其评估更有效,从而更快。这主要是因为ResNets的层太多,效率不高。
2.5. 训练
我们仍然在完整的图像上训练,没有难的负样本挖掘或任何类似的东西。我们使用多尺度训练,大量的数据增强,批量标准化,所有标准的东西。我们使用Darknet神经网络框架进行训练和测试[14]。
3. 我们表现得怎样样
YOLOv3相当不错!见表3。在COCOs的奇怪的平均AP度量方面,它与SSD变量是一致的,但是3×快。不过,在这个指标上,它仍然远远落后于其他型号,比如RetinaNet。
然而,当我们在IOU=0.5(or图表中的AP50)查看mAP的“旧”检测指标时,YOLOv3非常强大。它几乎等同于RetinaNet,远高于SSD变体。这表明YOLOv3是一种非常强大的探测器,擅长为物体制作像样的边框。然而,随着IOU阈值的增加,性能显著下降,这表明YOLOv3很难使边框与物体完全对齐。
在过去,YOLO很难处理小物体。然而,现在我们看到了这一趋势的逆转。通过新的多尺度预测,我们看到YOLOv3具有相对较高的性能。然而,它在中型和大型对象上的性能相对较差。需要进行更多的调查才能弄清真相。
当我们在AP50指标上绘制精度与速度(见图5)时,我们发现YOLOv3比其他检测系统有显著的优势。也就是说,它更快更好。
4. 我们尝试过但没有成功的事情
我们在制作YOLOv3时尝试了很多东西。很多都没用。以下是我们还记得的。
锚框x、y偏移预测。 我们尝试使用正常的锚框预测机制,即使用线性激活函数预测x,y偏移为框宽或高度的倍数。我们发现这个公式降低了模型的稳定性,效果不太好。
线性x,y预测,而不是logistic预测。 我们尝试使用线性激活来直接预测x,y偏移,而不是logistic激活。这导致mAP出现了几个点的下降。
Focal loss。 我们试着用Focal loss。它把我们的图掉了大约两个点。YOLOv3处理Focus loss试图解决的问题可能已经很强大,因为它有单独的 objectness预测和conditional class预测。因此,对于大多数样本来说,类别预测没有损失?还是什么?我们不完全确定。
双IOU阈值和真值分配。 Faster RCNN在训练期间使用两个IOU阈值。如果一个预测与真值重叠了0.7,那么它就是一个正样本;如果是0.3到0.7,它会被忽略;如果对所有真值物体都小于0.3,它就是个负样本。我们尝试了类似的策略,但没有取得好的效果。
我们非常喜欢我们目前的公式,它似乎至少处于局部最优。也有可能这些技术中的一些可能最终会产生良好的效果,也许它们只是需要一些调整来稳定训练。
5. 这一切意味着什么
YOLOv3是一个很好的探测器。它很快,很准确。就COCO平均AP而言,在0.5到0.95 IOU指标之间,这并没有那么好。但它在旧的检测指标0.5 IOU上非常好。
我们为什么要改变指标?COCO最初的论文中有这样一句晦涩的话:“一旦评估服务器完成,将添加对评估指标的全面讨论”。Russakovsky等人报告说,人类很难区分0.3到0.5的IOU!“训练人类目视检查IOU为0.3的边界框,并将其与IOU为0.5的边界框区分开来,这一点令人惊讶地困难。”[18] 如果人类很难分辨这两者之间的区别,那么这又有多重要呢?
但也许一个更好的问题是:“既然我们有了这些探测器,我们要用它们做什么?”很多做这项研究的人都在谷歌和Facebook上。我想至少我们知道这项技术掌握得很好,肯定不会被用来收集你的个人信息并卖给。。。。等等,你是说这正是它的用途??哦
其他大量资助视觉研究的人是军队,他们从来没有做过任何可怕的事情,比如用新技术杀死很多人等等。。。。。1.
我非常希望大多数使用计算机视觉的人都能用它做一些快乐、有益的事情,比如在国家公园里数数斑马的数量[13],或者在猫在家里闲逛时追踪它们[19]。但是计算机视觉已经被质疑使用,作为研究者,我们有责任至少考虑我们的工作可能造成的危害,并想办法减轻它。我们欠世界那么多。
最后,不要@我。(因为我最终退出了Twitter)。
辩驳
我们要感谢Reddit的评论者、实验室伙伴、电子邮件发送者,以及走廊里传来的喊声,感谢他们可爱、真挚的话语。如果你和我一样,正在为ICCV review,那么我们知道你可能还有37篇论文可以阅读,你总是会推迟到最后一周,然后在这个领域有一些传奇人物给你发电子邮件,告诉你你真的应该如何完成这些review。当然,他们在说什么并不完全清楚,也许他们来自未来?不管怎么说,如果没有你过去的工作,这篇论文也不会变成现在的样子,但是只需要再向前一点,而不是像现在这样一直向前。如果你在推特上说了我也不知道。就这么说吧。
评论家#2 AKA Dan Grossman(lol blinding,他这么做)坚持认为,我在这里指出,我们的图不是一个而是两个非零原点。你说得很对,丹,那是因为它看起来比我们自己承认我们都在这里为2-3%的mAP而战要好得多。但以下是所需的图表。我也加入了一个FPS,因为我们在FPS上绘图时看起来非常棒。
评论员#4又名JudasAdventus在Reddit上写道“有趣的阅读,但反对MSCOCO指标的论点似乎有点弱”。我早就知道你会背叛我犹大。你知道当你在做一个项目的时候,结果是好的,所以你必须想出一些方法来证明你所做的事情是多么的酷吗?我基本上是想这么做的,我对COCO的指标有点猛烈抨击。但既然我已经在这座山上立了桩,我还不如死在上面。
事情是这样的,mAP已经有点坏了,所以对它的更新可能会解决它的一些问题,或者至少可以证明为什么更新后的版本在某些方面更好。这是我最大的问题是缺乏正当理由。对于PASCAL VOC,IOU阈值“被故意设置得很低,以解释真值数据中边界框的不精确性”[2]。COCO比VOC有更好的标签吗?这肯定是可能的,因为COCO有分割掩码,也许标签更可信,因此我们不担心不准确。但我的问题是缺乏正当理由。
COCO度量强调更好的边界框,但这种强调必须意味着它不强调其他东西,在这种情况下,分类精度。是否有充分的理由认为更精确的边界框比更好的分类更重要?未分类的示例比稍微移动的边界框明显得多。
mAP已经搞砸了,因为重要的是每个类的排名顺序。例如,如果您的测试集只有这两个图像,那么根据mAP,产生这些结果的两个检测器同样好:
现在,这显然是对mAP问题的过度夸大,但我想我最近重新阐述的观点是,“现实世界”中的人们所关心的和我们当前的指标之间存在着如此明显的差异,我认为如果我们要提出新的指标,我们应该关注这些差异。而且,它已经是平均精度了,我们怎么称呼COCO度量,average mean average precision?
这里有一个建议,人们真正关心的是给定一个图像和一个检测器,检测器在多大程度上可以找到图像中的对象并对其进行分类。取消每类AP,只做全体平均精度,怎么样?或者对每张图像进行AP计算,然后取平均值?
尽管边框很蠢,但我可能是mask的忠实信徒,除非我无法让YOLO学习它们