[DeeplearningAI笔记]目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法

2020-08-14 14:44:14 浏览数 (1)

3.1 目标定位

对象定位 localization 和目标检测 detection
  • 判断图像中的对象是不是汽车--Image classification 图像分类
  • 不仅要判断图片中的物体还要在图片中标记出它的位置--Classification with localization 定位分类
  • 当图片中有 多个 对象时,检测出它们并确定出其位置,其相对于图像分类和定位分类来说强调一张图片中有 多个 对象--Detection 目标检测
对象定位 localization
  • 对于普通的图像分类问题:在最后的输出层连接上 softmax 函数,其中 softmax 神经元的数量取决于分类类别数。
  • 对于 定位分类 可以让神经网络多输出几个单元,输出一个边界框(bounding box),
b_x,b_y,b_h,b_w
训练样本目标标签
损失函数
  • 对于目标标签中不同的参数,也可以使用不同的损失函数,例如 Pc 使用逻辑回归而其余的使用平方和误差。

3.2 特征点检测 Landmark detection

  • 对于特征点检测,给出一个识别面部表情的基本构造模块,即选取面部图片当中的 64 个坐标作为特征点。
  • 注意:所有的特征点 landmark 在整个数据集中表示的含义应当一致
  • 则目标标签的向量可表示为:
  • 训练集中特征点的坐标都是人为辛苦标注的
人体姿态检测 people post-detection
  • 通过神经网络标注人物姿态的关键特征点,通过这些特征点的坐标可以辨别人物的姿态。

3.3 目标检测 Object detection

基于滑动窗口的目标检测算法(sliding windows detection algorithm)
  • 对于训练集样本,X 使用经过裁剪的,检测目标基本在图像中心的图片。Y 表示样本图片中是否有需要检测的对象。训练完这个卷积神经网络,接下来就可以用它来实现滑动窗口目标检测。
  • 首先选定一个特定大小的窗口,并使用以上的卷积神经网络判断这个窗口中有没有车,滑动目标检测算法会从左上角向右并向下滑动输入窗口,并将截取的图像都输入到 已经训练好的卷积神经网络中 以固定步幅滑动窗口,遍历图像的每个区域
  • 然后使用比以上使用的窗口大一些的窗口,重复进行以上操作。然后再使用比上一次更大的窗口进行图像的截取与检测。
  • 所以无论目标在图像中的什么位置,总有一个窗口可以检测到它。
  • 但是滑动窗口目标检测算法有十分消耗计算成本的缺点,因为使用窗口会在原始图片中截取很多小方块,并且卷积神经网络需要一个个的进行处理。虽然使用较大的步长可以有效的节省计算成本,但是粗粒度的检测会影响性能,小步幅和小窗口就会大量的耗费计算成本
  • 早些时候在普通的线性分类器上使用滑动窗口目标检测算法可以有很好的性能,但是对于卷积神经网络这种对于图像识别相当耗费性能的算法而言,需要对滑动窗口算法进行重新设计。

3.4 卷积的滑动窗口实现 Convolutional implementation of sliding windows

  • 3.3 中使用的基于滑动窗口的目标检测算法效率很低十分消耗计算成本,本节将介绍使用于卷积神经网络的滑动窗口算法。
将全连接层转换为卷积神经层 Turning FC layer into convolutional layers
  • 使用大小为
14*14*3

的图片作为图片数据,使用 16 个

5*5

的卷积核做卷积操作,得到

10*10*16

的特征图,然后使用

2*2

的 max-pooling 池化算法,得到

5*5*16

的特征图.将结果输入到两层具有 400 个神经元节点的全连接层中,然后使用 softmax 函数进行分类--表示 softmax 单元输出的 4 个分类出现的概率。

  • 接下来要将最后连接的两个全连接层 FC1 和 FC2 转换为卷积层。
  • 方法是 使用与得到的特征图大小相同的卷积核进行卷积,卷积核的数量对应全连接层中神经元节点的数量
卷积层的滑动窗口实现 Convolution implementation of sliding windows

“参考文献 Sermanet P, Eigen D, Zhang X, et al. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks[J]. Eprint Arxiv, 2013.

  • 使用卷积层代替全连接层的网络结构
  • 假设
14*14*3

的图像是从

16*16*3

的图像中截取出来的,即原始图像的大小为

16*16*3

.即首先截取原始图片中的红色区域输入网络,然后截取绿色区域,接着是黄色区域,最后将紫色区域截取出来作为图像数据集。

  • 结果发现,滑动窗口得到的图片进行的这四次卷积运算中的很多计算都是重复的
  • 得到的最终的
2*2*4

的稠密特征图各不同颜色部分都对应了原始图片中相同颜色的经过卷积操作后的结果。

  • 所以正确的卷积操作的原理是我们不需要把输入图片分割成四个子集,分别传入卷积神经网络中进行前向传播,而是把它们作为一张图片输入给卷积网络进行计算,其中共有的区域可以共享很多计算
总结
  • 对于卷积神经网络的滑动窗口实现,不需要依靠连续的卷积操作来识别图片中的汽车,而是可以对整张图片进行卷积操作,一次得到所有的预测值。如果足够幸运,神经网络便可以识别出汽车的位置。
补充
  • 卷积神经网络的滑动窗口实现提高了整个算法的效率,但是这个方法仍然存在一个缺点: 边界框的位置可能不够准确

3.5 得到更精确的边界框 Bounding box predictions

  • 有时边界框并没有完整的匹配图片中的对象,或者最佳的边界框并不是正方形,而是横向略有延伸的长方形。
YOLO algorithm

“Redmon J, Divvala S, Girshick R, et al. You Only Look Once: Unified, Real-Time Object Detection[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2016:779-788.

  • 其中一个可以得到较精确的边界框的算法时 YOLO 算法--即 You only look once
  • 具体操作方式是:假设图像的大小是
100*100

,然后在图像上放一个网格,为了描述的简洁,在此使用

3*3

的网格,实际中会使用更加精细复杂的网格,可能是

19*19

. 如何编码边界框 how to encode the bounding boxes

A=left[ begin{matrix} p_{c}\ b_{x}\ b_{y}\ b_{h}\ b_{w}\ 0\ 1\ 0\ end{matrix} right] left[ begin{matrix} 使用0和1表示网格中是否有目标物体\ 边框中心点横坐标值的范围在(0,1)之间\ 边框中心点纵坐标的范围在(0,1)之间\ 边框高可以大于1,因为有时候边框会跨越到另一个方格中\ 边框宽可以大于1,因为有时候边框会跨越到另一个方格中\ 行人\ 汽车\ 摩托车\ end{matrix} right] end{equation}

参考资料

[1]

吴恩达老师课程原地址: https://mooc.study.163.com/smartSpec/detail/1001319001.htm

0 人点赞