<p>Finally some researchers published a paper about SPP application in Yolo <a href="https://arxiv.org/abs/1903.08589" rel="noreferrer">https://arxiv.org/abs/1903.08589</a>.</p>

<p>For yolov3-tiny, yolov3, and yolov3-spp differences :  </p>

<ul>
<li>yolov3-tiny.cfg uses downsampling (stride=2) in Max-Pooling layers</li>
<li>yolov3.cfg uses downsampling (stride=2) in Convolutional layers</li>
<li>yolov3-spp.cfg uses downsampling (stride=2) in Convolutional layers + gets the best features in Max-Pooling layers</li>
</ul>

<p>But they got only <strong>mAP = 79.6%</strong> on Pascal VOC 2007 test with using Yolov3SPP-model on original framework.</p>

<p>But we can achive higher accuracy <strong>mAP = 82.1%</strong> even with yolov3.cfg model by using AlexeyAB's repository <a href="https://github.com/AlexeyAB/darknet/issues/2557#issuecomment-474187706" rel="noreferrer">https://github.com/AlexeyAB/darknet/issues/2557#issuecomment-474187706</a></p>

<p>And for sure we can achieve even higher mAP with yolov3-spp.cfg using Alexey's repo.
<a href="https://i.stack.imgur.com/js9wN.png" rel="noreferrer"><img src="https://i.stack.imgur.com/js9wN.png" alt="enter image description here"></a></p>

<p>Original github question : <a href="https://github.com/AlexeyAB/darknet/issues/2859" rel="noreferrer">https://github.com/AlexeyAB/darknet/issues/2859</a></p>
YOLOv3 SPP and YOLOv3 difference?
<p>I couldn't find any good explanation about YOLOv3 SPP which has better <code>mAP</code> than YOLOv3. The author himself states YOLOv3 SPP as this on his repo: </p>

<blockquote>
  <p>YOLOv3 with spatial pyramid pooling, or something</p>
</blockquote>

<p>But still I don't really understand it. In <code>yolov3-spp.cfg</code> I notice there are some additions</p>

<pre><code>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
</code></pre>

<p>Anybody can give further explanation about how YOLOv3 SPP works? Why layers -2, -4 and -1, -3, -5, -6 are chosen in <code>[route] layers</code>? Thanks.</p>