从深度学习的最新发展来看,对象检测是一个非常有用的领域。近年来人们发现了许多用于目标检测的算法,其中包括YOLO、SSD、Mask-RCNN 和 ValnANET 等等。
在过去的几个月里,我一直致力于改进目标检测的方法。在这一过程我渐渐认识到,学习对象检测的最佳途径是从头开始实现一遍。这正是本教程中所要做的。
我们将使用 PyTorch 来实现基于 YOLO V3 的对象检测器。
本教程的代码基于 Python 3.5, 和 PyTorch 0.4. 代码发布在 Github repo 上。
本教程分为5个部分:
背景知识理解卷积神经网络的原理,包括 Residual Blocks, skip connections, 和 Upsampling。
目标检测的定义、边界框回归、IoU 和非极大值抑制。
PyTorch 的基本用法。
什么是 YOLO?
YOLO 的全称是 You Only Look Once。它是一种基于深度卷积神经网络的目标检测器。我们先了解 YOLO 的工作原理。
全卷积神经网络 FCN
YOLO 仅仅使用卷积层,这种仅适用卷基层的网络我们称之为全卷积神经网络(Fully Convolutional Network)。YOLO 拥有 75 个卷积层,还有 skip connections 和 上采样 Upsampling 层。它使用步幅为 2 的卷积层对特征图进行下采样,而不是使用池化层,这有助于防止通常由池化导致的低级特征丢失。
作为 FCN,YOLO 对于输入图像的大小并没有要求。然而,在实践中,我们可能想要固定输入的大小,以防止后续一些问题的出现。这其中的一个重要