YOLOv3: An Incremental Improvement - 1 - 论文学习
有时候你会给它打一年电话,你知道吗?我今年没有做很多研究。花了很多时间在Twitter上。玩了一会儿GANs。去年[12][1]还剩下一点动力;我对YOLO做了一些改进。但是,说实话,没有什么超级有趣的,只是一些小的改变,使它更好。我也帮助别人做了一些研究。
事实上,这就是我们今天来到这里的原因。我们有一个准备好拍摄的最后期限[4],我们需要引用一些YOLO中的随机更新,但我们没有一个来源。所以准备好技术报告吧!
技术报告的伟大之处在于他们不需要介绍,你们都知道我们为什么在这里。因此,这一介绍的结尾将为论文的其余部分指明方向。首先我们要告诉你YOLOv3是怎么回事。然后我们会告诉你我们是怎么做的。我们也会告诉你一些我们尝试过但没有成功的事情。最后,我们将考虑这一切意味着什么。
按照YOLO9000,我们的系统使用维度集群作为anchor boxes[15]来预测边界框。该网络预测每个边界框的4个坐标,分别是tx、ty、tw、th。如果该对应的单元格(的左上角坐标)是从整个图像的左上角坐标偏移(cx, cy),边界框先验有宽度和高度为pw, ph,则预测对应:
在训练中,我们使用误差损失的平方和。如果用于坐标预测的真实值为t^*,我们的梯度为真实值(从真实框根据上面式子反向计算得到的值)减去我们的预测值 t* : tˆ* - t*。这个真实值可以很容易地通过反求上面的方程计算出来。
YOLOv3使用逻辑回归预测每个边界框的客观得分。如果边界框先验比任何其他边界框先验与真实框对象重叠更多,那么其得分应该为1。如果边界盒先验不是最好的,但重叠的真实框对象超过某个阈值,我们将忽略该预测,如[17]所做。我们使用的阈值是0.5。与[17]不同,我们的系统只为每个真实框对象分配一个边界框。如果一个边界框先验没有分配给一个真实框对象,它不会生成坐标或类预测的损失,只会导致置信度的损失。
每个框使用多标签分类来预测边界框可能包含的类。我们没有使用softmax,因为我们发现它对于良好的性能是不必要的,相反,我们只使用独立的逻辑分类器。在训练过程中,我们使用二元交叉熵损失( binary cross-entropy loss )进行类预测。
这个公式有助于我们移动到更复杂的领域,如 Open Images Dataset [7]。在这个数据集中有许多重叠的标签(即女人和人)。使用一个softmax强加了一个假设,即每个框中正好有一个类,但通常不是这样。多标签方法可以更好地对数据建模。
YOLOv3预测了三种不同尺度的特征图。我们的系统从这个尺度中提取特征,使用类似于特征金字塔网络(FPN)[8]的概念(即输出三种不同大小的特征图的结果,感受野更加丰富)。
从我们的基本特征提取器开始,我们添加了几个卷积层。最后一个卷积层得到了一个三维张量编码的边界框、对象和类预测。在我们使用COCO[10]进行的实验中,我们预测每个尺寸的特征图的每个位置上有3个框,因此每个特征图输出的张量是N×N×[3*(4 + 1 + 80)],用于4个边界框偏移量、1个对象预测和80个类预测。(这是第一个尺寸的特征图,根据代码得到结果张量为13*13*[3*(4 + 1 + 80)] = 13*13*255)
接下来,我们从上面输出的卷积层的前两层中提取特征图,并将该卷积层上采样2倍,得到A卷积层。我们还从网络前面的卷积层中获取一个特征图B(与上面上采样得到的A的输出大小W*H相同),并使用串联将其B与我们的上采样特征图A合并得到特征图C。该方法允许我们从上采样的特征A中获取更有意义的语义信息,从早期的特征图B中获取更细粒度的信息。然后,我们再添加几个卷积层来处理这个组合的特征图C,并最终预测出一个类似的张量,现在张量的大小是原来的2倍(因为上采样了两倍,为2N×2N×[3*(4 + 1 + 80)] = 26*26*255)。
我们再次执行于第二步相同的设计来预测最终规模的框,得到结果为4N×4N×[3*(4 + 1 + 80)] = 52*52*255。因此,我们对该第三尺度的预测得益于所有的先验计算以及网络早期的细粒度特性。
我们仍然使用k-means聚类来确定我们的边界框先验。我们只是随意选择了9个集群和3个尺度然后在各个尺度上均匀地划分集群。在COCO数据集上,9个簇分别为(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116×90)、(156×198)、(373×326)。
我们使用一个新的网络来进行特征提取。我们的新网络是YOLOv2、Darknet-19中使用的网络和新颖的残差网络之间的混合方法。我们的网络使用连续的3×3和1×1的卷积层,现在也有一些快捷连接,而且网络更大。它有53个卷积层。等待.....Darknet-53 !
这个新网络比Darknet-19强大得多,也比ResNet-101或ResNet-152更高效。
下面是一些ImageNet的结果:
每个网络都使用相同的设置进行训练,并以256×256的单次裁剪精度进行测试。运行时间是在Titan X上以256×256的速度测量的。因此,Darknet-53的性能与最先进的分类器不相上下,但浮点运算更少,速度更快。Darknet-53比ResNet-101更好,速度快1.5倍。Darknet-53的性能与ResNet-152相似,并且速度是后者的2倍。
Darknet-53还实现了每秒最高的浮点运算。这意味着网络结构更好地利用GPU,使其更有效地评估,从而更快。这主要是因为ResNets层太多,效率不高。
我们仍然训练完整的图像,没有使用困难负样本挖掘(hard negative mining)或任何其他方法。我们使用多尺度的训练,大量的数据扩充,批量标准化,和所有其他标准的东西。我们使用Darknet神经网络框架来训练和测试[14]。
YOLOv3很不错!见表3:
就COCOs的平均AP度量而言,它与SSD变体相当,但是快了3倍。尽管如此,在这个指标上,它仍然远远落后于RetinaNet等其他模型。
但是,当我们查看IOU= 0.5(或图中的AP50)处的mAP的“旧”检测度量时,可知YOLOv3非常强大。它几乎与RetinaNet等价并远远高于SSD变体。这表明YOLOv3是一种非常强大的探测器,擅长为对象生成像样的框。但是,随着IOU阈值的增加,性能会显著下降,这表明YOLOv3很难使框与对象完全对齐。
在过去,YOLO与小物件做斗争。然而,现在我们看到了这种趋势的逆转。通过新的多尺度预测,我们看到YOLOv3具有相对较高的APS性能。但在中、大型对象上的性能相对较差。要弄清这件事的真相,还需要更多的调查。
当我们在AP50度量上绘制精度与速度的关系图时(参见图3),我们看到YOLOv3比其他检测系统有显著的优势。也就是说,它更快更好。
我们做YOLOv3的时候尝试了很多其他方法。很多都没用。这是我们能记住的使用过的方法:
Anchor box x, y offset predictions. 我们尝试使用普通的anchor boxes预测机制,其中你预测的x, y偏移作为使用线性激活的框宽度或高度的一个倍数。我们发现这个配方降低了模型的稳定性,效果不是很好。
Linear x, y predictions instead of logistic. 我们尝试使用线性激活函数来直接预测x, y偏移量,而不是逻辑激活函数。这导致了在mAP上的一些点下降。
Focal loss. 我们尝试过focal loss。我们的mAP掉了2个点。对于focal loss试图解决的问题,YOLOv3可能已经足够健壮,因为它有独立的对象预测和条件类预测。因此,对于大多数例子,类预测没有损失?还是什么?我们不能完全确定。
Dual IOU thresholds and truth assignment. Faster RCNN在训练中使用两个IOU阈值。如果一个预测框与真实框重叠了0.7,那么它就是一个正例子,如果重叠在[0.3 0.7]这个区间,那么该结果就被忽略了。对于所有真实对象来说,如果重叠小于0.3,那么它就是一个负例子。我们尝试了类似的策略,但没有得到好的结果。
我们很喜欢我们目前的配方,至少看起来是局部最优的。这些技术中的一些可能最终会产生良好的结果,也许他们只是需要一些调整来稳定训练。
YOLOv3是一个很好的探测器。它快速,准确。在0.5到0.95 IOU之间,它的COCO平均AP并不高。但它在0.5 IOU的老检测指标上非常好。
为什么我们要改变度量标准呢?最初的COCO论文中只有这样一个隐晦的句子:“一旦评估服务器完成,将添加关于评估指标的完整讨论”。Russakovsky等人报告说,人类很难区分0.3和0.5的IOU !“训练人类在视觉上检查一个IOU为0.3的边界框,并将其与IOU为0.5的边界框区分开,这是非常困难的。[18]如果人类很难分辨出两者的区别,那区分他们又有什么用呢?
但或许一个更好的问题是:“既然我们有了这些探测器,我们该拿它们怎么办?”“很多做这项研究的人都在谷歌和Facebook。我想,至少我们知道技术掌握得很好,而且肯定不会被用来收集你的个人信息并卖给……等等,你是说这就是它的用途?哦。
其他大量资助视觉研究的人是军队,他们从来没有做过什么可怕的事情,比如用新技术杀死很多人等等
我非常希望大多数使用计算机视觉的人都能做一些快乐的、有益的事情,比如在国家公园[13]中数斑马的数量,或者跟踪他们的猫在他们的房子[19]中漫步。但是,计算机视觉已经开始受到质疑,作为研究人员,我们有责任至少考虑一下我们的工作可能造成的危害,并想办法减轻它。毕竟我们欠这个世界这么多。
我们要感谢Reddit的评论者、实验室的同事、电子邮件的发送者,以及走廊里传来的欢呼声。如果你像我一样,正在评估ICCV然后我们知道你可能有37个其他文件你可以阅读,但你总会总是推迟到最后一周,然后有一些传说的邮件告诉你你应该如何完成这些评论,该些邮件没有完全清楚地表达他们的意思,也许他们来自未来?无论如何,如果没有你们过去的自我在过去做的所有工作,这篇论文最终不会变成现在的样子,它可能只是向前走一点,而不是一直向前直到现在。
评论者#2又名Dan Grossman (lol blinding的作者)坚持认为我在这里指出我们的图表有两个非零的原点。你是绝对正确的,丹,那是因为它看起来比承认我们都在这里为2-3%的mAP而战要好得多。但这里是所请求的图形。我还加入了一个FPS,因为当我们在FPS上绘图时,我们看起来就像超级棒。。
Reddit上的评论者#4,又名JudasAdventus,写道:“读起来很有趣,但是反对MSCOCO指标的论据似乎有点站不住。”我早就知道你会出卖我的,Judas。你知道当你在做一个项目的时候,结果只会是好的,所以你必须找出一些方法来证明你做的事情实际上是很酷的?我基本上是在尝试这么做,然后我对COCO指标进行了一些抨击。但既然我已经在这座山上竖起了木桩,我还不如死在上面。
事情是这样的,mAP已经坏了,所以对它的更新可能会解决一些问题,或者至少说明为什么更新的版本在某种程度上更好。我最不喜欢的一点就是缺乏正当性。对于PASCAL VOC, IOU阈值被“故意设置得很低,以反映真实数据中边界框的不准确性”。COCO的标签比VOC好吗?这是绝对可能的,因为COCO有分割掩码,也许标签更值得信赖,因此我们不担心不准确。但是,我的问题是缺乏正当的理由。
COCO度量强调更好的边界框,但是这种强调必须意味着它去强调其他东西,在这种情况下,就是分类的准确性。是否有充分的理由认为更精确的边界框比更好的分类更重要?未分类的示例比稍微移动的边界框更明显。
mAP已经搞砸了,因为所有重要的是每个类的等级排序。例如,如果你的测试集只有这两幅图像,那么根据mAP,两个产生这些结果的检测器是一样好的:
这mAP的问题显然是过于夸张,但我想我的新retconned点是人们在“现实世界”的关心的东西之间的这种明显的差异和我们目前的指标,我认为如果我们要想出新的指标我们应该关注这些差异。还有,它已经是平均精度(mean average precision)了,我们甚至称COCO度量为平均平均精度(average mean average precision)?
这里有一个建议,人们真正关心的是给定一个图像和一个探测器,探测器将如何发现和分类图像中的物体。去掉每个类的AP,只做一个全局平均精度怎么样?或者对每幅图像进行AP计算并求平均值?
不管怎样,b框都是愚蠢的,我可能是masks的真正信徒,只是我无法让YOLO学习它们。