CV 目标检测YOLOv1详解

YOLOv1

总体网络结构

YOLOv1网络
总体结构如上图,就是通过一个卷积神经网络,直接对目标检测预测框的 类别、x、y、w、h 直接进行回归。

1. 卷积部分结构

YOLO卷积部分
卷积部分其实就是一个特征图提取和计算的过程,如上图红色框部分。
个人理解就是能实现很复杂计算的一个特征提取部分,将输入的图片转换成特征图层,并基于这个卷积部分提取的特征图层,结合后面的全连接层进行anchor的(x, y, w, h)、置信度、和各个类别分数的回归。

2. 全连接层部分

在这里插入图片描述

全连接层部分就是将特征图层转换成我们想要的 7×7×30。
这个7×7×30就包含着我们的预测类别、预测置信度、和预测框的位置,是YOLOv1的输出
,上图红色框部分。
为什么是 7×7×30 呢,原因如下图
我们可以看到 7×7×30 里包含了两个anchor框的位置大小信息(x, y, w, h),两个anchor框置信度(是目标还是背景),还有二十个类别的预测分数。
在这里插入图片描述

怎么转换成7×7×30

我们仔细来看这一部分,就会发现特征图层在这一部分前面是 7×7×1024,原论文是这样处理的,
先将特征图层 flatten() 展平,然后接一个 4096 的全连接层,后面再接一个 1470 的全连接层。1470 = 7×7×30
这样,直接通过一个 reshape 将全连接层转换成 7×7×30 的预测特征图层,7×7×30里面的每个1×1×30就包含了前面提到的:
box1(x, y, w, h) + confidence1 + box2(x, y, w, h) + confidence2 + 20个类别预测分数
仔细来看这一部分

(1) anchor置信度

这里的anchor的置信度是判断目标框还是背景框,起着去除多余框的作用,如下图,如果没有置信度来判断目标框还是背景框,根据(x, y, w, h)画出来的预测框是下图这个样子的,有很多黑框,但是只有加粗的黑框才是有用的。
原来的预测框
因此我们加入置信度,判断黑框是否是目标框,就可以去除掉背景框的预测,如下图。
去除后的预测框

(2) anchor位置大小

训练时,回归的是 中心点落在这个像素位置范围内的 Ground Truth 框的(x, y, w, h)。
x, y:框中心点的 x, y;
w, h:框的宽(width)和高(height)

(3) 类别预测分数

由于YOLOv1论文使用的数据集只有20各类别,因此,是用20个数值来表示各类别的预测分数;如果是30各类别,则需要30个数值,就需要转换成 7×7×40 的 tensor 进行回归训练。

3.损失

各部分损失
整个算法的损失均使用了均方误差的方式来实现,包括:

  1. 预测框的坐标误差;
  2. 有无包含物体的置信度误差;
  3. 网格预测类别的误差;

这里损失中用了权重系数来进行平衡,对于不同的损失用不同的权重。

(1)位置损失

坐标损失分为两部分,坐标中心误差 和 位置宽高的误差。
位置损失

参数解释

入coord 表示权重参数,取5。
1(obj)(ij) 表示第i个网格中的第j个预测框是否负责obj这个物体的预测,只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值,和ground truth box的IoU是不是在那个网格的所有box中最大。

为什么采用均方差?

采用均方差
蓝色为预测框,两个红色框则分别表示两个ground truth框,如果不采用均方差,我们会发现A与B、B与C的损失是一样的
但是从面积上看,B框是A框的25倍,C框是B框的81/25倍。B框跟A框的大小偏差更大,所以不应该有相同的loss。如果W和h加上平方根,那么B对A的位置loss约为3.06,B对C的位置loss约为1.17,B对A的位置loss的值更大,这更加符合我们的实际判断。所以,算法对位置损失中的宽高损失加上了平方根。

(2)置信度损失

置信度损失

参数解释

1(obj)(ij) 表示第i个网格中的第j个预测框负责obj这个物体的预测,当 负责 obj这个物体预测的时候置为 1;
1(noobj)(ij) 表示第i个网格中的第j个预测框不负责obj这个物体的预测,当不负责 obj这个物体预测的时候置为 1;
入(noobj) 的作用是在对没有object的box的confidence loss,赋予小的loss weight,在pascal VOC训练中取0.5;而有object的box的confidence loss和类别的loss的loss weight正常取1。

(3)类别损失

类别损失

参数解释

1(obj)(i) 表示第i个网格是否需要进行类别预测。
(pi© - pi©)^2就是通过平方差计算损失,这里用交叉熵进行计算或许更好。

缺点

  1. 每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果较差;
  2. 原始图片只划分为7x7的网格,当两个物体靠的很近时,效果比较差;
  3. 最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到);
  4. 对于图片中比较小的物体,效果比较差;

总结

YOLOv1就是通过卷积神经网络提取图片中的特征信息,并将特征图层转换成我们想要的7×7×30,直接对预测框的 置信度、位置大小、类别分数 进行训练回归。

有什么补充或者问题,欢迎交流。
如有错误,恳请各位大佬指正。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值