神经网络与深度学习-目标检测与YOLO

1. 目标检测要做什么

1.1. 目标检测问题

目标检测问题:
目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。
物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别

在这里插入图片描述

1.2. 分类问题与目标检测

在这里插入图片描述

数据集输出表达:

在这里插入图片描述
在这里插入图片描述

目标检测实例:实际图像中有多个目标:

在这里插入图片描述

1.3. 目标检测技术发展

解决方案:

在这里插入图片描述
YOLO家族发展:

一步法(two-stage):

无需候选框,直接出最终结果。

突出优点:快

在这里插入图片描述
YOLO V7性能:

在这里插入图片描述

2. 目标检测基本思想

2.1. 滑动窗口

基本的滑动窗口:

  • 原理示意

在这里插入图片描述
滑动窗口的问题1:

动次数太多,计算太慢

假设图片为𝑤宽,ℎ高,识别一幅图片需要𝑇时间,则需要:

𝑤 ∗ ℎ ∗ 𝑇的总时间。

例如:图片大小448 × 448,识别一个目标需要0.05s,则:

总时间= 448 ∗ 448 ∗ 0.05 ≈ 10000𝑠,约3小时

滑动窗口的问题2:

目标大小不同,每一个滑动位置需要用很多框

图片宽度和高度都不相同,比例也不相同,因此需要取很多框。

例如:标准框100*50大小,

  • 取5050,5025,20050,200100等不同大小,在面积和宽高比变化

  • 假设面积变化3类(0.5,1,2), 宽高比3类(0.5,1,2),则共有9种。

总时间是原来的9倍:

总时间= 10000 × 9 = 90000𝑠,约1天3小时

2.2. 基本思路

滑动窗口的改进:

  • 一般图片中,大多数位置都不存在目标。
  • 可以确定那些更有可能出现目标的位置,再有针对性的用CNN进
    行检测——两步法(Region Proposal)
  • 两步法依然很费时!
  • 进一步减少出现目标的位置,而且将目标分类检测和定位问题合在一个网络里——一步法(YOLO)

2.3. 一步法基本思想

简化的二分类问题:只检测一类(葫芦娃脸):

  • 分成互补重叠的cell
  • 产生问题:目标的大小和位

在这里插入图片描述
分类问题扩展为回归+分类问题:

在这里插入图片描述
在这里插入图片描述

  • 问题1:有一个框里有多个,有个多个框里有一个,怎么办
    多个框里有一个目标,取目标中心点所在框
    一个框里有多个,暂不能解决

在这里插入图片描述
问题2:多类目标怎么办

使用独热编码扩展类别数

问题3:小目标怎么办

使用单独网络拟合小目标,即设置多个bounding box

3. YOLO网络结构

3.1. YOLO网络结构

YOLO网络结构概略图:

在这里插入图片描述

YOLO官方的模型结构图:

在这里插入图片描述
网络结构包含24个卷积层和2个全连接层;其中前20个卷积层用来做预训练,后面4个是随机初始化的卷积层,和2个全连接层

YOLO网络结构概略图:

在这里插入图片描述

3.2. YOLO模型处理

YOLO网络输入:

  • YOLO v1在PASCAL VOC数据集上进行的训练,因此输入图片为448 × 448 × 3。实际中如为其它尺寸,需要resize或切割成要求尺寸

YOLO模型处理:𝟕 × 𝟕网格划分:

  • 将图片分割为 𝑆2个grid(𝑆 = 7),每个grid cell的大小都是相等的
  • 每个格子都可以检测是否包含目标
  • YOLO v1中,每个格子只能检测一种物体(但可以不同大小)。

在这里插入图片描述
YOLO网络输出:

  • 输出是一个7 × 7 × 30的张量。对应7 × 7个cell
  • 每个cell对应2个包围框(bounding box, bb),预测不同大小和宽高比,对应检测不同目标。每个bb有5个分量,分别是物体的中心位置(𝑥, 𝑦)和它的高(ℎ) 和宽 (𝑤) ,以及这次预测的置信度

在这里插入图片描述

在右图中,每个框代表1个预测的bb,粗细代表不同的置信度,越粗得越高

3.3. YOLO基本思想

YOLO模型输出:

在这里插入图片描述
在上面的例子中,图片被分成了49个框,每个框预测2个bb,因此上面的图中有98个bb

4. 包围框与置信度

4.1. YOLO包围框

YOLO的包围框:

我们有 𝑠2个框,每个框的bb个数为𝐵,分类器可以识别出𝐶种不同的物体,那么所有整个ground truth的长度为𝑆 × 𝑆 × (𝐵 × 5 + 𝐶)

YOLO v1中,这个数量是30

YOLO v2和以后版本使用了自聚类的anchor box为bb, v2版本为𝐵 = 5, v3中𝐵 =9

处理细节——归一化:

四个关于位置的值,分别是𝑥, 𝑦, ℎ和𝑤,均为整数,实际预测中收敛慢

因此,需要对数据进行归一化,在0-1之间。

例子是一个448448的图片,有33的grid,每个cell是149。

目标中心点是(220,190)

在这里插入图片描述

4.2. YOLO置信度

处理细节——置信度:

置信度计算公式: C = P r ( o b j ) ∗ 10 U t r u t h p r e C = Pr(obj) ∗ 10U_{truth}^{pre} C=Pr(obj)10Utruthpre

  • Pr(obj)是一个grid有物体的概率
  • IOU是预测的bb和真实的物体位置的交并比

在这里插入图片描述
𝐼𝑂𝑈:图中绿框为真实标注,其余五个颜色框为预测值,可计算对应𝐼𝑂U

在这里插入图片描述

4.3. 训练值与预测值

处理细节——训练值(ground truth):

Pr 𝑜𝑏𝑗 的ground truth:三个目标中点对应格子为1,其它为0

在这里插入图片描述
处理细节——训练数据与网络输出:

训练数据与网络输出

在这里插入图片描述

5. 损失函数

5.1. YOLO损失函数

YOLO损失函数(一共五项):

在这里插入图片描述

YOLO损失函数——边界框对应损失项:

在这里插入图片描述
为什么第2项要开根号?让误差更显著,保证回归精度
在这里插入图片描述

在这里插入图片描述

YOLO损失函数——𝝀取值:

在这里插入图片描述

6. 训练与NMS

6.1. 非极大值抑制

预训练与训练:

  • 保留了这么多边界框,预测中一个物体可能被多个边界框包围;实际物体只对应一个边界框,如何解决个问题呢?
  • NMS- NMS核心思想是:选择得分最高的作为输出,与该输出重叠的去掉,不断重复这一过程直到所有备选处理完

在这里插入图片描述
NMS算法要点:

  1. 首先丢弃概率小于预定IOU阈值(例如0.5)的所有边界框;对
    于剩余的边界框:
  2. 选择具有最高概率的边界框并将其作为输出预测;
  3. 计算 “作为输出预测的边界框”,与其他边界框的相关联IoU
    值;舍去IoU大于阈值的边界框;其实就是舍弃与“作为输出预
    测的边界框” 很相近的框框。
  4. 重复步骤2,直到所有边界框都被视为输出预测或被舍弃

NMS算法示例:

汽车不止一次被检测

在这里插入图片描述

  1. 它首先查看与每次检测相关的概率并取最大的概率。图中选概率为0.9的方框;
  2. 进一步查看图像中的所有其他框。与当前边界框较高的IoU的边界框将被抑制。因此图中0.6和0.7概率的边界框将被抑制。(此时面包车已经只剩一个边界框)
  3. 从概率最高的所有边界框中选择下一个,在例子中为0.8的边界框;
  4. 再次计算与该边界框相连边界框的IoU,去掉较高IoU值的边界框。
  5. 重复这些步骤,得到最后的边界框

在这里插入图片描述
在这里插入图片描述

6.2. 数据集训练

预训练与训练:

  • YOLO先使用ImageNet数据集对前20层卷积网络进行预训练,然
    后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定
    位的训练和预测
  • 训练中采用了drop out和数据增强来防止过拟合。
  • YOLO的最后一层采用线性激活函数(因为要回归bb位置),其它
    层都是采用Leaky ReLU激活函数

在这里插入图片描述
YOLO v1模型效果:

在这里插入图片描述
YOLO v3模型效果:

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值