(目标检测篇)系列文章目录
第一章:R-CNN网络详解
第二章:Fast R-CNN网络详解
第三章:Faster R-CNN网络详解
第四章:SSD网络详解
第五章:Mask R-CNN网络详解
第六章:YOLO v1网络详解
第七章:YOLO v2网络详解
第八章:YOLO v3网络详解
文章目录
- 系列文章目录
- 技术干货集锦
- 前言
- 一、摘要
- 二、正文分析
- 1.引入库
- 2.读入数据
- 总结
技术干货集锦
0.摘要
我们对YOLO进行了一些更新!我们进行了一系列小的设计改变以提升性能。我们还训练了一个新的网络,效果非常好。相较于上一次,它稍微大一些,但更加准确。不过,不用担心,它仍然很快。在320×320的情况下,YOLOv3在22毫秒内运行,mAP为28.2,在准确度上与SSD相当,但速度快三倍。当我们看旧的0.5 IOU mAP检测指标时,YOLOv3表现非常好。在Titan X上,它在51毫秒内达到了57.9 AP50,而RetinaNet在198毫秒内只有57.5 AP50,性能相似但快3.8倍。和往常一样,所有代码都可以在https://pjreddie.com/yolo/在线上找到。
1.前言
1.引言 有时候,你可能只是随便做了一年,你知道吗?我今年没有进行太多的研究。在Twitter上花了很多时间。稍微尝试了一下生成对抗网络。我还保留了去年的一些动力[12][1];我设法对YOLO进行了一些改进。但是,老实说,并没有什么特别有趣的东西,只是一些小的改变让它更好。我还稍微帮助了一些其他人的研究。实际上,这就是我们今天在这里的原因。我们有一个摄影准备截止日期[4],需要引用我对YOLO进行的一些随机更新,但我们没有来源。所以准备好进行技术报告吧!技术报告的好处是它们不需要引言,大家都知道我们为什么在这里。所以这个引言的结束将为论文的其余部分指明方向。首先,我们将告诉您关于YOLOv3的情况。然后,我们会告诉您我们的方法。我们还会告诉您一些我们尝试但没有成功的事情。最后,我们将思考这一切意味着什么。
2.正文分析
2.关于YOLOv3的情况 关于YOLOv3的情况如下:我们主要借鉴了其他人的好点子。我们还训练了一个比其他网络更好的新分类器网络。我们将从头开始向您介绍整个系统,以便您可以全面理解。
图1.我们从《Focal Loss》论文[9]中调整了这个图。YOLOv3在性能相当的情况下比其他检测方法运行速度更快。时间来自M40或Titan X,它们基本上是相同的GPU。
2.1 边界框预测
根据YOLO9000,我们的系统使用维度聚类作为锚框来预测边界框[15]。网络为每个边界框预测4个坐标:tx,ty,tw,th。如果单元格相对于图像的左上角有偏移量(cx,cy),并且边界框先验具有宽度和高度pw,ph,则预测对应于以下公式: bx = σ(tx) + cx by = σ(ty) + cy bw = pw * exp(tw) bh = ph * exp(th) 在训练过程中,我们使用平方误差损失。如果某个坐标预测的真实值为t^,则我们的梯度为真实值(由真实框计算得出)减去我们的预测值:t^ - t*。这个真实值可以通过反转上述公式轻松计算得出。 YOLOv3使用逻辑回归为每个边界框预测一个目标性分数。如果边界框先验与任何其他边界框先验相比,与真实目标重叠的部分更多,则该分数应为1。如果边界框先验不是最佳的,但是与真实目标的重叠超过某个阈值,我们会忽略该预测,按照[17]的方法进行处理。我们使用阈值为0.5。 与[17]不同,我们的系统只为每个真实目标分配一个边界框先验。如果边界框先验未分配给真实目标,则对于坐标或类别预测不会产生任何损失,只会有目标性损失。
图2.具有维度先验和位置预测的边界框。我们将盒子的宽度和高度预测为相对于聚类中心的偏移量。我们使用sigmoid函数相对于滤波器应用的位置预测盒子的中心坐标。这个图明显是从[15]中自我剽窃的
2.2 类别预测
每个框都使用多标签分类来预测可能包含的类别。我们不使用softmax,因为我们发现它对于良好的性能来说是不必要的,相反,我们只是使用独立的逻辑分类器。在训练过程中,我们对类别预测使用二元交叉熵损失。这种公式在我们转向更复杂的领域(如Open Images数据集[7])时非常有帮助。在这个数据集中,存在许多重叠的标签(例如,Woman和Person)。使用softmax会假设每个框只有一个类别,而这通常并不是真实情况。多标签方法更好地对数据进行建模。
2.3 不同尺度上的预测
YOLOv3在3个不同的尺度上预测边界框。我们的系统使用类似于特征金字塔网络[8]的概念从这些尺度提取特征。从我们的基础特征提取器中,我们添加了几个卷积层。其中最后一个预测一个3D张量,编码边界框、目标性和类别预测。在我们使用COCO数据集[10]进行实验时,我们在每个尺度上预测3个边界框,因此张量的尺寸为N×N×[3∗(4 + 1 + 80)],其中4个边界框偏移量,1个目标性预测和80个类别预测。接下来,我们从前面的2个层中取出特征图,并将其上采样2倍。我们还从网络中较早的位置获取一个特征图,并使用串联将其与我们的上采样特征合并。这种方法允许我们从上采样特征中获取更有意义的语义信息,并从较早的特征图中获取更细粒度的信息。然后,我们添加几个卷积层来处理这个组合特征图,并最终预测一个类似的张量,尺寸是原来的两倍。我们再次采用相同的设计来预测最后一个尺度的边界框。因此,我们对第三个尺度的预测受益于之前的所有计算以及网络中较早的细粒度特征。我们仍然使用k-means聚类来确定我们的边界框先验。我们随意选择了9个聚类和3个尺度,然后在各个尺度上平均分配聚类。在COCO数据集上,这9个聚类的尺寸分别为:(10×13);(16×30);(33×23);(30×61);(62×45);(59×119);(116×90);(156×198);(373×326)。
2.4 特征提取器
我们使用了一个新的网络来进行特征提取。我们的新网络是YOLOv2中使用的Darknet-19网络和最新的残差网络技术之间的混合方法。我们的网络使用了连续的3×3和1×1卷积层,但现在还加入了一些快捷连接,并且规模更大。它有53个卷积层,所以我们将它称为……等一下……Darknet-53!
这个新网络比Darknet-19更强大,但仍然比ResNet-101或ResNet-152更高效。以下是一些ImageNet的结果:
表2.骨干网络的比较。各种网络的准确率、十亿次操作、十亿次浮点操作每秒以及帧率。
每个网络都是在相同的设置下进行训练,并在256×256的单一裁剪准确率下进行测试。运行时间是在Titan X上以256×256的分辨率进行测量的。因此,Darknet-53在与最先进的分类器相当的准确率下,具有更少的浮点操作和更高的速度。Darknet-53比ResNet-101更好,并且快1.5倍。Darknet-53的性能与ResNet-152相似,并且快2倍。Darknet-53还实现了最高的测量浮点操作每秒。这意味着网络结构更好地利用了GPU,使其在评估时更加高效,因此更快。这主要是因为ResNet有太多的层,而且效率不高。
2.5 训练
我们仍然在完整的图像上进行训练,没有使用困难负样本挖掘或其他类似的方法。我们使用多尺度训练、大量的数据增强、批量归一化等常规方法。我们使用Darknet神经网络框架进行训练和测试[14]。
3.我们是如何做的
我们的YOLOv3非常好!请参考表3。在COCO的奇怪的平均mAP指标上,它与SSD变种相当,但速度快3倍。然而,在这个指标中,它仍然远远落后于RetinaNet等其他模型。然而,当我们看到IOU=0.5的“旧”检测指标(或者图表中的AP50)时,YOLOv3非常强大。它几乎与RetinaNet持平,远高于SSD变种。这表明YOLOv3是一个非常强大的检测器,擅长为物体生成良好的框。然而,随着IOU阈值的增加,性能显著下降,表明YOLOv3在将框与物体完美对齐方面存在困难。过去,YOLO对小物体的检测存在困难。然而,现在我们看到这一趋势逆转了。通过新的多尺度预测,我们看到YOLOv3具有相对较高的APS性能。然而,它在中等和较大尺寸物体上的性能相对较差。需要进一步调查才能弄清楚其中的原因。当我们在AP50指标上绘制准确率与速度的关系时(参见图5),我们可以看到YOLOv3在检测系统方面具有显著的优势。换句话说,它更快、更好。
4.我们在开发YOLOv3时尝试了很多方法,但其中很多并没有成功。
以下是我们能记起来的一些尝试:
- 锚框的x和y偏移量预测:我们尝试使用常规的锚框预测机制,其中通过线性激活函数预测x和y的偏移量,作为盒子宽度或高度的倍数。我们发现这种方法降低了模型的稳定性,并且效果不太好。
- 使用线性激活函数而不是逻辑激活函数进行x和y的预测:我们尝试使用线性激活函数直接预测x和y的偏移量,而不是使用逻辑激活函数。这导致mAP下降了几个点。
- Focal loss:我们尝试使用Focal loss,但这使得我们的mAP下降了约2个点。可能是因为YOLOv3已经在对象性预测和条件类别预测方面具有较强的鲁棒性,所以对于大多数示例,类别预测并没有带来损失?或者还有其他原因?我们并不完全确定。
表3。我只是从[9]那里偷了这些表,因为从头开始制作这些表太耗时间了。好吧,YOLOv3做得还不错。请记住,RetinaNet处理一张图像需要花费大约3.8倍的时间。YOLOv3比SSD变种要好得多,并且在AP50指标上与最先进的模型相当。
图3。再次改编自[9],这次显示的是在IOU为0.5的mAP指标上速度与准确性的权衡。从图上可以看出,YOLOv3的准确性非常高,而且偏向于左侧。你能引用你自己的论文吗?猜猜看,我就是要试试,就是这个家伙![16]。哦,我忘了,我们还修复了YOLOv2中的一个数据加载错误,这帮助提高了大约2个mAP。只是悄悄地加在这里,以免影响布局。
双IOU阈值和真实值分配。Faster R-CNN在训练过程中使用了两个IOU阈值。如果一个预测与真实值的重叠度超过0.7,则将其视为正例;如果重叠度在0.3到0.7之间,则忽略该预测;如果与所有真实值的重叠度都小于0.3,则将其视为负例。我们尝试过类似的策略,但结果不理想。我们目前的表达方式还不错,至少在局部最优解上看起来是如此。可能这些技术最终可以产生好的结果,也许只需要一些调整来稳定训练过程。
总结
- 这一切的含义是,YOLOv3是一个很好的检测器。它速度快,准确度高。在COCO平均AP(IOU在0.5到0.95之间)指标上并不是很出色。但在IOU为0.5的旧检测指标上表现非常好。那么我们为什么要切换指标呢?原始的COCO论文只有一句神秘的话:“一旦评估服务器完成,将提供对评估指标的全面讨论”。Russakovsky等人报告说,人类很难区分IOU为0.3和0.5之间的差异!“训练人类去目视检查IOU为0.3的边界框,并将其与IOU为0.5的边界框区分开来是非常困难的。”[18]如果人类很难区分这个差异,那么这个差异有多重要呢?但也许一个更好的问题是:“我们现在拥有这些检测器后,我们要用它们做什么?”很多从事这项研究的人都在谷歌和Facebook工作。至少我们知道这项技术在好手里,并且绝对不会被用来收集你的个人信息并出售给......等等,你说它将被用来做这些事情?哦。那么,另一个重资助视觉研究的人是军方,他们从未用新技术做过像杀害大量人员这样可怕的事情......等等,对不起,我说错了。我非常希望大多数使用计算机视觉的人只是在做一些快乐的、好的事情,比如在国家公园中计算斑马的数量[13],或者追踪他们家里四处游荡的猫[19]。但计算机视觉已经被用于一些值得质疑的用途,作为研究人员,我们有责任至少考虑我们的工作可能会造成的伤害,并思考如何减轻这种伤害。我们欠这个世界这么多。最后,不要@我。(因为我终于退出了Twitter)。