这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战
特斯拉中也用到类似 YOLO one-stage 目标检测,说以也想借这个机会来回顾一下。那么什么是 one-stage 目标检测呢?也就是生成候选框和目标预测与边界框回归都是由一个网络完成的。
今天来说一说和写一写 YOLOv1,YOLOv1 在目标检测中应该算独树一帜,有点类似今天 Web 前端 vue 地位。而且一路走来不断地给我们带来惊喜。YOLO 是 You Only Look Once 缩写,顾名思义是一个 one-stage 目标检测框架,是一个端到端的目标检测框架。YOLOV1 将目标检测问题成功转换为回归(regression)的问题。网上有很多关于 YOLO 的文章和视频,希望我的文章能够给你带来不一样内容,帮助你更好理解 YOLO 当前比较流行多目标检测的框架。
输入和输出
通常我们知道神经网络模型,所谓神经网络模型就是一个函数,当将数据输入给函数,函数就会给一个输出。在 YOLOv1 是输入一张图片,输出是一个结构化数据,其中包含图片中出现那些目标以及目标的位置信息。随后文章中会将所有我们要检测不同类别的目标统称为前景。
输入的数据是 448 x 448 x 3,由于网络的最后需要接入两个全连接层,全连接层需要固定尺寸的输入,故需要将输入resize。
最后一个 FC 层得到一个 1470 x 1 的输出,将这个输出 Reshap 一下,得到 7 x 7 x 30 的一个Tensor,即最终每个单元格都有一个 30 维的输出,代表预测结果
- 输出向量表示预测结果
- 表示位置信息,分别是边界框的中心点和边界框的宽和高
- 表示是前景的概率是多少,还需要乘以一个 IoU,为什么还要乘以一个 IoU 呢?也就是除了希望正确判断是前景,还希望作为前景其预测的边界框与真实的目标边界框越接近。
- 类别,检测为前景,所谓前景也就是说这个网格中存在目标类别,这个用于推出检测目标所属的类别。通过公式来看这是一个条件概率,所以概率可以表示
- 每一个网格都负责进行目标检测
这神经网络输出数值如何映射到图片来用于推理以及和真实值进行对比,在 YOLOv1 网络输出宽和高是一个0 到 1 之间小数,需要乘以图片的真实的宽和高