深度学习笔记(36) 边界框预测

深度学习笔记(36) 边界框预测

  • 1. 不精准的输出边界框问题
  • 2. YOLO算法


1. 不精准的输出边界框问题

在滑动窗口法中,取这些离散的位置集合,然后在它们上运行分类器
在这种情况下,这些边界框没有一个能完美匹配汽车位置,也许这个框(编号1)是最匹配的了
还有看起来这个真实值,最完美的边界框甚至不是方形
稍微有点长方形(红色方框所示),长宽比有点向水平方向延伸

滑动窗口法卷积实现的算法效率更高,但仍然存在问题,不能输出最精准的边界框
深度学习笔记(36) 边界框预测_第1张图片


2. YOLO算法

其中一个能得到更精准边界框的算法是YOLO算法
YOLO(You only look once)意思是你只看一次
深度学习笔记(36) 边界框预测_第2张图片
比如输入图像是100×100的,然后在图像上放一个网格
为了介绍起来简单一些,用3×3网格,实际实现时会用更精细的网格,可能是19×19
基本思路是使用图像分类定位算法,然后将算法应用到9个格子上

更具体一点,需要这样定义训练标签,所以对于9个格子中的每一个指定一个标签y
y是8维的,和之前的一样,pc等于0或1取决于这个绿色格子中是否有图像
然后bx、by、bh和bw作用就是,如果那个格子里有对象,那么就给出边界框坐标
然后c1、c2和c3就是想要识别的三个类别,背景类别不算
深度学习笔记(36) 边界框预测_第3张图片
这张图里有9个格子,所以对于每个格子都有这么一个向量
(编号4)(编号6)这张图有两个对象
YOLO算法做的就是,取两个对象各自的中点,然后将这个对象分配给包含对象中点的格子
所以左边的汽车就分配到(编号4)格子上
然后这辆Condor(车型:神鹰)中点在(编号6)格子,分配给(编号6)格子
即使中心格子(编号5)同时有两辆车的一部分,就假装中心格子没有任何感兴趣的对象

对于这里9个格子中任何一个,都会得到一个8维输出向量
因为这里是3×3的网格,所以总的输出尺寸是3×3×8

如果现在要训练一个输入为100×100×3的神经网络
在这里插入图片描述
现在这是输入图像,然后有一个普通的卷积网络,卷积层,最大池化层等等
最后会有选择卷积层和最大池化层
这样最后就映射到一个3×3×8输出尺寸即目标标签y

在YOLO算法中
深度学习笔记(36) 边界框预测_第4张图片
对于这个方框(编号6所示),约定左上这个点是(0,0),然后右下这个点是(1,1)
要指定橙色中点的位置,bx大概是0.4,因为它的位置大概是水平长度的0.4,然后by大概是0.3
然后边界框的高度用格子总体宽度的比例表示
所以这个红框的宽度可能是蓝线(编号2所示的蓝线)的90%,所以bh是0.9
它的高度也许是格子总体高度的一半,这样的话bw就是0.5
换句话说,bx、by、bh和bw单位是相对于格子尺寸的比例
所以bx和by必须在0和1之间
然后就开始训练吧


参考:

《神经网络和深度学习》视频课程


相关推荐:

深度学习笔记(35) 滑动窗口的卷积实现
深度学习笔记(34) 目标检测
深度学习笔记(33) 特征点检测
深度学习笔记(32) 目标定位
深度学习笔记(31) 迁移与增强


谢谢!

你可能感兴趣的:(深度学习笔记)