深度学习入门|神奇的目标检测


文章目录

  • 前言
  • 一、目标检测是什么?
  • 二、目标检测的相关概念
    • 1.Bounding Box
    • 2.交并比(IoU)
    • 3. 非极大值抑制(NMS)
    • 4.Anchor Boxes
  • 总结
  • 参考

前言 总结完经典的卷积神经网络后,我决定“进军”目标检测,谈一谈什么是目标检测,以及目标检测中经常出现的几个概念,同时会对比目标检测和分类任务有哪些地方不同。
本篇文章已经默认你有图像分类的基础啦~
一、目标检测是什么? 目标检测任务,是图像分类任务的延伸,给定神经网络一张图片,对于图像分类网络来说,只需要识别图片属于哪一个类别即可,给定的图片往往只包含单一目标。
对于目标检测网络来说,我们不仅要识别图中对象的类别(例如:人,汽车),还需要知道该对象在图片中的位置。给定的图片中可以包含多个分类如下图所示:
深度学习入门|神奇的目标检测
文章图片

这就是目标检测,如果使用图像分类网络去识别一张图片(以上图为例)中的多分类的话,可以分为一下几个步骤,
首先,我们需要一个分类数据集包含4个类别(人,狗,马,以及非前面三类的类别),第二步,用该数据集去训练网络。第三步,在预测的时候用不同大小的窗口去遍历图片,将截取到的图片输入到神经网络进行预测,过程如下图所示:
深度学习入门|神奇的目标检测
文章图片

用不同大小的窗口从图的左上角遍历到右下角,这就是早起的滑动窗口目标检测,这种方法特别耗费时间且计算量巨大。且定位目标不准确。
于是大佬们就想到,这样的滑动窗口,类似于卷积呀~!!!,于是就用卷积代替了这个过程,替代过程如下图所示:
深度学习入门|神奇的目标检测
文章图片

用不同大小的卷积核对图片做卷积运算,最后得到8x8x4结果(这里先不用管为什么这么做,后续会解释)。这样对一张图片,网络只需要进行一次计算,就能得到相应的结果。这就是目标检测的基本概念了,是不是听起来也没那么难啊?
二、目标检测的相关概念 1.Bounding Box 【深度学习入门|神奇的目标检测】在介绍Bounding Box 之前,我们先来介绍一下,对于目标检测中,真实值(y_label)是如何表示的。回顾一下对于图像分类网络中y_label的表示方法, 使用one-hot 标签假设有三类y_label 可以表示为:[1,0,0], [0,1,0], [0,0,1] 下标的索引表示对应的分类。对于目标检测y_label 又是如何表示的呢(以YOLO算法为例,Bounding Box的概念在yoloV2中才出现)
首先我们拿到一张图片,将图片分为若干个格子,如下图所示:
深度学习入门|神奇的目标检测
文章图片

我们要在9个格子中去寻找我们要检测的目标,判断图片中的目标,我们需要的是判断每个格子中有没有目标§,以及目标的位置。目标的位置用起点(x,y)宽高(w,h)表示,以及该目标属于哪一个类别(假设有三类,c1,c2,c3)。于是对于每一个格子 y=[p,x,y,w,h,c1,c2,c3] 这样一个8维向量,对于整张图片Y的维度就会变成338。这个维度是不是跟我们之前学到的特征层的维度类似,这里也就解释了为什么能用卷积代替滑动窗口,且在上文中最后得到的结果为884了。
一张图片不用跑九次,只需要跑一次就可以完成。
那么图片中红色的框就是Bounding Box(边界框)了。于是有遇到了新的问题
,对于一张标好的图片,改变图片大小了,[x,y,w,h] 不就变了吗。于是我们将图片分成九个网格之后,约定好每个格子的左上角为(0,0) 右下角为(1,1)。目标物体的中心点落在那个网格里,就用那个网格进行编码。
深度学习入门|神奇的目标检测
文章图片

于是的上面(x,y) 变成了在该网格中,边界框的中心点的坐标,,(w,h) 变成了边框所占网格的比例,x,y 不能超出每个网格,所以 0 2.交并比(IoU) 对于图像分类网络,评价标准有准确率,混淆矩阵等。对于目标检测来说,检测,交并比(intersection over union)是用来检测目标检测定位准确度的指标,如下图所示:
深度学习入门|神奇的目标检测
文章图片

粉红色是真实框,蓝色是网络得到的预测框,两个框的交集橙色区域占两个矩形框的比例。如下图所示:
深度学习入门|神奇的目标检测
文章图片

显而易见,交并比的值是小于1,一般Iou>=0.5 就好了,对目标要求高的话也可以设置到0.7左右。
3. 非极大值抑制(NMS) 在介绍NMS前,我们先来了解一个概念,置信度,用于判断边界框中的物体是属于正样本(物体)还是负样本(背景),也就是上文编码目标检测y_label中的p。在目标检测过程中,对同一个物体会产生不同大小的边界框,假设p的阈值设置为0.5,产生的边界框如下图所示:
深度学习入门|神奇的目标检测
文章图片

可以从图中看出置信度最高位0.9,于是我们选取0.9为我们的输出结果,然后以0.9的边界框为基础,计算IoU, 将IoU结果达到阈值的框给去除掉,这样就只剩下一个边界框了。这就是非极大值抑制~
4.Anchor Boxes 对于上面所讲解的 ,都是检测没有重叠对象的目标,那么如果两个目标落在用一个格子里(如图):
深度学习入门|神奇的目标检测
文章图片

行人和汽车有所重叠,那么如何检测呢。于是就引入了Anchor Boxes。以第八个格子为中心,生成两个Anchor Box:
深度学习入门|神奇的目标检测
文章图片

于是对于目标检测中的对于每个网格的y 将会变成
y=[p_1,x_1,y_1,w_1,h_1,c1_1,c2_1,c3_1 p_2,x_2,y_2,w_2,h_2,c1_2,c2_2,c3_2]
当检测到上图中的行人时,会使用Anchor box 1,汽车会使用到Anchor box2。
当网格点中既有车又有行人的时候,y的所以项都有意义,当网页点只有一个目标时,只关注目标对应的参数,其他的参数我们就不用关注了
在真正的目标检测过程中,对于每个网格点会设置更多的大小不一的Anchor Box 去检测不用大小的目标,与之的对应y维度也会随之增加。这就是Anchor Box~.
总结 目标检测的大致流程就是,先对数据样本进行画框框标注,输入网络前,先对数据进行编码,训练过程就是回归Anchor Boxes,识别分类的过程,对于同一个目标产生了不同的候选框,于是就采用非极大值抑制,过滤掉多余的框。这就是目标检测。
听起来是不是没那么难,但是写起代码来是真的难,后续会从github上寻找代码,用迁移学习的方法实验目标检测~,欢迎关注
参考 本篇博客主要是学习完吴恩达深度学习目标检测章节的总结,素材大多来自于视频。

    推荐阅读