YOLO学习笔记2——YOLOv1预测阶段

YOLOv1训练阶段可参考后文:https://blog.csdn.net/baidu_41906969/article/details/122176278

YOLOV1 预测阶段(前向传播)

YOLO学习笔记2——YOLOv1预测阶段_第1张图片

24层卷积层提取图像特征(5) + 2层全连接层回归 ——> 7x7x30的tensor
输入:448x448x3(图片先缩放)
输出:7x7x30的张量(包含所有预测框的坐标、置信度、类别结果)

正方形image——>通过若干卷积层、池化层——>得到一个7x7x1024的feature map——>将该feature map拉平——>喂入4096维的全连接层,输出4096维的向量——>将向量喂入1470个神经元的全连接层,输出1470(7x7x30) 维的向量——>将该向量reshape成7x7x30的feature map

YOLO学习笔记2——YOLOv1预测阶段_第2张图片

  • 将图片划分为 SxS个grid cell(网格,yolov1中S=7)

  • 每个网格要预测B个bounding box(B=2,2个Box:Box1和Box2),每个bbox的中心点都落在grid cell 中,总共7x7x2个预测框(上图第2列上方的黑框图)

    • 每个 bounding box 要预测 (x, y, w, h)confidence 共5个值
      YOLO学习笔记2——YOLOv1预测阶段_第3张图片

    • confidence代表了所预测的box中含有object的置信度和这个box预测的有多准(score)两重信息,计算如下:
      YOLO学习笔记2——YOLOv1预测阶段_第4张图片

    • 如果有object落在一个grid cell里,Pr(Object)第一项取1,否则取0(无目标时取0,那此处confidence的取值为0)

    • 第二项是预测的bounding box和实际的groundtruth之间的IoU值。

  • 每个网格还要预测一个类别信息(所有类别的条件概率),记为C类,输出就是**S x S x (5*B+C)**的一个tensor,Pascal VOC有20个classes,7x7x(2x5+20) = 7x7x30 tensor =1470 outputs

    • C类:假设在包含object的情况下,是某一个类别的概率(第2列下方的彩色图)
    • 将每一个bbox的置信度(包含物体的概率) x20个类别的条件概率,获得每一个bbox20个类别真正的概率(全概率)

YOLO 黑箱:
YOLO学习笔记2——YOLOv1预测阶段_第5张图片
YOLO学习笔记2——YOLOv1预测阶段_第6张图片

  • 每一个grid cell只能有一个类别(从20个条件类别概率中选最高的),一个grid cell只能预测出一个物体,7x7grid cell最多只能预测49个物体,因此yolov1对小目标以及密集目标识别效果差。

  • 7x7x30的张量

    • 49个grid cell,每个grid cell有2个bbox(预测框,每个bbox可以获得20维的全概率)
    • 每一列表示:对于某一个bbox,20个类别的概率值
      YOLO学习笔记2——YOLOv1预测阶段_第7张图片

预测阶段后处理

置信度过滤

7x7x2=98 bboxes
假设一个类别为dog,将所有小于0.2阈值(自设置)的概率全部抹0;
YOLO学习笔记2——YOLOv1预测阶段_第8张图片

非极大值抑制

YOLO学习笔记2——YOLOv1预测阶段_第9张图片
再将dog的类别按概率高低排序,概率高的放前边。
排序过程:
将概率最高的bbox拿出来——>将之后的bbox与之作比较——>如果两个框的iou大于某个阈值,说明这两个bbox重复识别了一个物体——>过滤掉置信度低的那一个,将其设置为0——>如果两个框的iou没有大于某个阈值,则继续比较下一个bbox

  • 再经过一系列解析、后处理(过滤低置信度的预测框、NMS非极大值抑制去除重复的预测框等)得到最终的预测结果

学习的视频地址:https://www.bilibili.com/video/BV15w411Z7LG?p=4
参考博主地址:博主1、博主2

你可能感兴趣的:(yolo,目标检测,深度学习,计算机视觉,目标检测)