How to implement a YOLO (v3) object detector from scratch in PyTorch: Part 1翻译与总结

对Ayoosh Kathuria的YOLOv3实现进行翻译和总结,原文链接如下:

https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/

*首先翻译遵循不删不改的原则有一说一,对容易起到歧义的中文采取保留英文的方式。其中对原文没有删减但是略有扩充,其中某些阐释是我一句话的总结,如有错误请大家在留言区指出扶正。

 

这是从头开始构建YOLO v3检测器的教程,详细说明了如何从配置文件创建网络体系结构、加载权重和设计输入/输出。

目标检测(object detection)是一个因近年来深度学习的发展而受益颇多的领域,近年来,人们开发了多种目标检测算法,其中包括YOLO、SSD、Mask-RCNN和RetinaNet。

在过去的几个月里,我(Ayoosh Kathuria)一直在一个实验室致力于改进目标检测。从这次经历中得到的最大收获就是认识到学习目标检测的最佳方法是自己从头开始实现算法。这正是我们在本教程中要做的。

我们将会使用PyTorch并基于YOLO v3来实现一个目标检测器,这是一种速度更快的目标检测算法。

本教程的代码在Python 3.5和PyTorch 0.4上运行。在这个Github repo中可以完整地找到它。

本教程分为5个部分:

Part 1 (This one): Understanding How YOLO works
Part 2 : Creating the layers of the network architecture
Part 3 : Implementing the forward pass of the network
Part 4 : Objectness score thresholding and Non-maximum suppression
Part 5 : Designing the input and the output pipelines

1.先决条件

  • 你应该了解卷积神经网络是如何工作的。这还包括残差模块、跳远连接和上采样的知识。(Residual Blocks, skip connections可以从ResNet学习, Upsampling是图像插值扩大运算,可以理解为在最后的网络层中等比例扩大经过前面卷积缩小后的图片,得到和原图一样大的图像)
  • 什么是目标检测,边框回归,IoU和非极大值抑制。(bounding box regression是指将本来预测的边框通过平移和放缩来微调,也就是把本来的(x,y,h,w)经过变换得到新的坐标输出。IoU是预测框和标记框的交集。non-maximum suppression是:先假设有6个矩形框,根据分类器的类别分类概率做排序,假设从小到大属于车辆的概率 分别为A、B、C、D、E、F。(1)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;(2)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。就这样一直重复,找到所有被保留下来的矩形框。)
  • 基本的PyTorch用法。你应该能够轻松地创建简单的神经网络。

2.什么是YOLO?

YOLO源于Redmon J , Divvala S , Girshick R , et al. You Only Look Once: Unified, Real-Time Object Detection[J]. 2015.它是一种利用深度卷积神经网络学习到的特征来检测物体的目标检测器。在我们开始构建代码之前,我们必须了解YOLO是如何工作的。

如有兴趣可以参考Andrew Ng的公开课,在CNN中他对YOLO有了初步的讲解,本人也是因吴恩达老师才了解到YOLO。

3.A Fully Convolutional Neural Network

一句话介绍FCN就是不含全连接层的CNN,也就是说直接在像素层面对卷积层进行操作,不再对其参数进行一维展开。

YOLO只使用卷积层,使其成为完全卷积网络(FCN)。它有75个卷积层,有跳远连接和上采样层。不使用任何形式的池化层,使用步长为2的卷积层来对特征映射进行降采样(downsampling说白了就是因为(n-f)/s + 1因为步长s是2所以缩小了图像,因为使用了若干个downsampling原图像就会缩小2的n次方倍,所以最后对应了一个upsampling把缩小的图片通过卷积扩大为原来的大小)。这有助于防止通常因为使用池化层造成的低层面特征的丢失(很好理解,不管是最大池化还是平均池化都会把filter大小内的多个特征丢弃只剩1个)。

上一篇:YOLO 论文阅读


下一篇:YOLO v3 训练 - 03 train