4.3目标检测

觉得有用的话,欢迎一起讨论相互学习~Follow Me

3.1目标定位

对象定位localization和目标检测detection

  • 判断图像中的对象是不是汽车--Image classification 图像分类
  • 不仅要判断图片中的物体还要在图片中标记出它的位置--Classification with localization定位分类
  • 当图片中有 多个 对象时,检测出它们并确定出其位置,其相对于图像分类和定位分类来说强调一张图片中有 多个 对象--Detection目标检测

    对象定位localization

  • 对于普通的图像分类问题:在最后的输出层连接上softmax函数,其中softmax神经元的数量取决于分类类别数。
  • 对于 定位分类 可以让神经网络多输出几个单元,输出一个边界框(bounding box),\(b_x,b_y,b_h,b_w\)
    • 本节课程中将图片左上角标记为(0,0),右下角标记为(1,1),边界框中心标记为\(b_x,b_y\),边界框宽度表示为\(b_w\),高度表示为\(b_h\)
    • 因此,训练集中的数据不仅包括神经网络要预测的 对象分类标签 还要有 对象的边框位置的四个参数值
    • 假设图片中的对象有四类:1.pedestrian行人,2.car汽车,3.motorcycle摩托车,4.background背景,其中如果图片中没有1-3类对象,则默认其为背景。
    • 对于目标标签(target label),其可表示为一个向量,其中第一个组件Pc表示是否有对象。如果对象属于前三类,则Pc=1,如果图片中没有目标对象,即是背景,则Pc=0.

训练样本目标标签

损失函数

  • 对于目标标签中不同的参数,也可以使用不同的损失函数,例如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\).
    • 基本思想是使用图像分类和定位算法(image classification and Localization algorithm)然后将算法应用到九个格子上。
    • 更具体的是:你需要对每个小网格定义一个8维向量的目标标签,

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

      \[\begin{equation}
      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}\]

    • YOLO算法使用的是取目标对象边框中心点的算法,即考虑边框的中心点在哪个格子中。对于中间的三个边框,认为目标对象只存在于第二排第一个和第二排第三个网格中。
    • **由于有3*3个网格,所以输出的标签的大小为\(3*3*8\),即8表示目标标签的深度,标签堆叠成为了一个长方体的形式而不是二维的堆叠方式**

[DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法的更多相关文章

  1. [DeeplearningAI笔记]卷积神经网络3.10候选区域region proposals与R-CNN

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.10 region proposals候选区域与R-CNN 基于滑动窗口的目标检测算法将原始图片分割成小的样本图片,并传入分 ...

  2. [DeeplearningAI笔记]卷积神经网络1.2-1.3边缘检测

    4.1卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.2边缘检测示例 边缘检测可以视为横向边缘检测和纵向边缘检测如下图所示: 边缘检测的原理是通过一个特定构造的卷积核对原始图 ...

  3. [DeeplearningAI笔记]卷积神经网络2.2经典网络

    4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [LeNet]--Lécun Y, Bottou L, Bengio Y, et al. Gradient-bas ...

  4. [DeeplearningAI笔记]神经网络与深度学习2.11_2.16神经网络基础(向量化)

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.11向量化 向量化是消除代码中显示for循环语句的艺术,在训练大数据集时,深度学习算法才变得高效,所以代码运行的非常快十分重要.所以在深度学 ...

  5. [DeeplearningAI笔记]改善深层神经网络1.4_1.8深度学习实用层面_正则化Regularization与改善过拟合

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.4 正则化(regularization) 如果你的神经网络出现了过拟合(训练集与验证集得到的结果方差较大),最先想到的方法就是正则化(re ...

  6. [DeeplearningAI笔记]神经网络与深度学习4.深度神经网络

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 4.2 深层神经网络中的前向传播 4.3 核对矩阵的维数 经验方法论 对于神经网络想增加得到没有bug的程序的概率的方法:需要仔细的思考矩阵的维 ...

  7. 斯坦福深度学习与nlp第四讲词窗口分类和神经网络

    http://www.52nlp.cn/%E6%96%AF%E5%9D%A6%E7%A6%8F%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B8%8Enlp%E7%A ...

  8. ECG信号读出,检测QRS,P,T 波(小波去噪,并根据检测),基于BP辨识的神经网络

    这学期的课程选择神经网络.最后的作业处理ECG信号,并利用神经网络识别. 1  ECG引进和阅读ECG信号 1)ECG介绍  详细ECG背景应用就不介绍了,大家能够參考百度 谷歌.仅仅是简单说下ECG ...

  9. RBF神经网络——直接看公式,本质上就是非线性变换后的线性变化(RBF神经网络的思想是将低维空间非线性不可分问题转换成高维空间线性可分问题)

    Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别.语音识别.无人驾驶等技术上都已经落地.而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶 ...

随机推荐

  1. 4个数的和为0 51nod 1267

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...

  2. 附加题程序找bug

    private: void Resize(int sz){ ){ return; } if(maxSize != sz){ T *arr = new T[sz]; if(arr == NULL){ r ...

  3. 本周实验PSP0 过程文档

    2016-03-12 项目总结: 日期\学习时间 听课 编写程序 阅读相关书籍 日总计 周一 110 0 30 140 周二 0 30 30 60 周三 0 40 0 40 周四 110 20 30 ...

  4. UVA 11270 轮廓线

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33787 题意: 用1*2或2*1的长条把n*m方格铺满的方案数. ...

  5. 按着shift键对dbgrid进行多条记录选择的问题(50分)

    可以用sendmessage,想dbgrid 发键盘信息,按下shift键,同时按下button1procedure TForm1.Button1Click(Sender: TObject);vari ...

  6. 【Linux笔记】CentOS&RHEL YUM基础知识

    以下内容收集自网络,以作参考. 一.YUM是什么 YUM = Yellow dog Updater, Modified. 主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它 ...

  7. linux 上传下载

    xshell yum就是傻瓜式的安装软件,你要装什么,yum什么就行了,红帽系统才有yum,乌班图和debian是没有的 输入命令:sudo yum -y install lrzsz rz  上传 从 ...

  8. Java Servlet异步处理、非阻塞I/O和文件上传

    异步处理 应用服务器中的 web容器通常对各个客户端情求分别使用一个服务器线程.在工作负载很繁重的情况下,容器常要大量线程来为所有客户端请求服务.可扩展性限制包括内存用尽,或容器线程池耗尽.为了创建可 ...

  9. 《Linux Shell 脚本攻略》读书笔记

    本书主要讲解一些linux shell命令的用法,讲解一些shell的奇技淫巧. 第一章 小试牛刀 主要介绍一些基本shell指令 终端打印:echo.printf 别名:alias 终端处理工具:t ...

  10. Golang的第一个程序-Hello, World !

    安装Golang: 1. 下载安装包 https://golang.google.cn/dl/ 我这里使用压缩包,下载后解压到D盘(自定义). 2. 添加环境变量:把解压后的bin目录添加到环境变量中 ...