YOLOv3 SPP和YOLOv3的区别?

YOLOv3 SPP and YOLOv3 difference?

我找不到任何关于 YOLOv3 SPP 比 YOLOv3 更好 mAP 的解释。作者自己在他的 repo 中这样声明 YOLOv3 SPP:

YOLOv3 with spatial pyramid pooling, or something

但是我还是不太明白。在 yolov3-spp.cfg 我注意到有一些补充

575 ### SPP ###
576 [maxpool]
577 stride=1
578 size=5
579 
580 [route]
581 layers=-2
582 
583 [maxpool]
584 stride=1
585 size=9
586 
587 [route]
588 layers=-4
589 
590 [maxpool]
591 stride=1
592 size=13
593 
594 [route]
595 layers=-1,-3,-5,-6
596 
597 ### End SPP ###
598 
599 [convolutional]
600 batch_normalize=1
601 filters=512
602 size=1
603 stride=1
604 pad=1
605 activation=leaky

谁能进一步解释一下YOLOv3 SPP是如何工作的?为什么在 [route] layers 中选择层 -2、-4 和 -1、-3、-5、-6?谢谢。

见图3.SPP解释。

yolov3-spp.cfg中,他们使用[route]

对同一图像使用了3个不同大小的最大池

之后,他们收集创建的特征图,如图 3 中称为 "fixed-length representation"。

终于有研究人员发表了一篇关于SPP在Yolo中应用的论文https://arxiv.org/abs/1903.08589

对于 yolov3-tiny、yolov3 和 yolov3-spp 的差异:

  • yolov3-tiny.cfg 在 Max-Pooling 层中使用下采样(stride=2)
  • yolov3.cfg 在卷积层中使用下采样(步幅=2)
  • yolov3-spp.cfg 在卷积层中使用下采样(步长=2)+ 在最大池化层中获得最佳特征

但他们在原始框架上使用 Yolov3SPP 模型的 Pascal VOC 2007 测试中仅获得 mAP = 79.6%

但是我们可以通过使用 AlexeyAB 的存储库 https://github.com/AlexeyAB/darknet/issues/2557#issuecomment-474187706

即使使用 yolov3.cfg 模型也可以获得更高的精度 mAP = 82.1%

并且可以肯定的是,我们可以使用 Alexey 的存储库通过 yolov3-spp.cfg 实现更高的 mAP。

原始 github 问题:https://github.com/AlexeyAB/darknet/issues/2859