吴恩达深度学习网课 通俗版笔记——(04.卷积神经网络)第三周 目标检测

目标检测

这周是卷积神经网络的一个应用内容——目标检测


3.1 目标定位

前两周讲的内容多是图像分类问题,也就是给定一张图片,判定其是否为某一物体,对应下图最左情况;再深入一点应当是不仅判断分类,还要标记出物体在图中的位置;甚至是多物体识别,判定图中有哪些物体。
在这里插入图片描述
目标定位就是在输出时给出目标定位框的参数信息,通常设定左上角是(0,0),右下角是(1,1),且设置几种物体可能的类别。
在这里插入图片描述
下面是分类的一个详细过程,输出的是定位框的4个参数信息以及分类结果,例如该问题中约定以一个8维向量来表示,Pc表示是否有待检测物体,C1-C3对应不同物体类别,损失函数这里使用平方误差(实际不同参数不一样),当没有物体时下面7个参数不关心。在这里插入图片描述

3.2 特征点检测

神经网络可以通过输出图片上特征点的坐标作为对目标特征的识别,在预测时输出所有特征点的坐标。
在这里插入图片描述

3.3 目标检测

滑动窗口目标检测算法:设定一个固定大小的窗口,在图片上按照设定步幅移动,将每个小窗口内容送入卷积网络中进行预测,判断是否有待检测物体;之后改变窗口大小和步幅,重复上述操作。

准备好训练集,单独的目标图片以及标签。
在这里插入图片描述
但很容易看出,滑动窗口算法的计算成本非常高,有非常多的窗口(不同粗粒度和步幅)需要进入卷积网络进行预测。
在这里插入图片描述

3.4 卷积的滑动窗口实现

首先介绍一个把全连接层转换为卷积层的方法:

(最后的两步转换没太看懂,1x1x4怎么得到的,4个过滤器?应该是4个过滤器)
在这里插入图片描述
上一节说到计算成本的问题,每个滑动窗口就是一张传入卷积网络进行计算的图片,重复性的计算太多。这里直接选择将整个图片传入卷积网络进行预测,一次性输出所有预测结果,对应位置对应结果。
在这里插入图片描述
最后,总有合适的窗口能够检测到目标物体。
在这里插入图片描述
但该方法仍有一个缺点:输出边界框的位置不够准确。

3.5 Bounding Box 预测

上节的滑动窗口算法最后说到输出的边界框位置可能不够准确,也就是说可能窗口并没有完全覆盖对象或者最完美的边界框可能并不是方形,因此引出YOLO算法。

YOLO算法思路:利用图像分类和定位算法,给图片设定一个网格,简单的就是3x3(实际会用更大的,能确保同一个网格中不包含多个对象),对每一个格子设定一个标签y,y是8维向量(承接第一节的例子),其中bx、by表示格子中的目标物体中心点相对于这个格子的坐标,bh、bw表示红色框的高度和宽度。在进行最后预测时,输出的就是一个3x3x8矩阵。
在这里插入图片描述
下面是坐标编码方式,设定某网格左上角(0,0),右下角(1,1),bx、by、bh、bw都是相对于当前网格的值。
在这里插入图片描述

3.6 交并比

交并比是用来评价对象检测算法结果好坏的指标。

图像实际位置为红框,算法检测出来是紫框,那么两者交集面积和并集面积的比值就是IoU,通常设定大于0.5则认定结果合格。
在这里插入图片描述

3.7 非最大值抑制

对象检测时可能会对一个对象检测多次,比如分了很多小网格,但有好几个网格都认为对象在它们之中,非最大值抑制就可以确保一个对象只输出一个检测框,需要用到上一节的交并比。

非最大值抑制就是输出概率最大的边界框,然后去掉那些和该框一起计算得到的交并比较大的那些框(自己设定的阈值)。
在这里插入图片描述
具体算法步骤大致如下:

  1. 只检测一个对象的情况,输出结果为5维向量
  2. 首先把所有概率小于0.6的框舍去
  3. 对于剩下的框,先找概率最大的一个作为输出预测
  4. 再去掉其他剩余框中与该框交并比大于0.5(自己设置)的框
  5. 如果还有剩余框(其他对象),回到第三步

多个对象的话,对每一个类别都做一次非最大值抑制
在这里插入图片描述

3.8 Anchor Boxes

如果一个网格中包含两个对象时,即两个对象中点位于一个网格中时,按照上面的方法就无法输出。

首先用小网格能尽可能避免该种情况,如果一定是大网格,那么可以使用Anchor Boxes,具体说就是将输出变为16维向量,分别输出两个对象的信息,每个对象不仅分配到该网格中还分配到一个Box中。
在这里插入图片描述
使用该方法的区别就是每个对象除了分配到中点所在网格之外,还分配给一个与该对象实际边框(the ground truth)交并比最大的一个Anchor Box中。
在这里插入图片描述
具体实现例子如下:
在这里插入图片描述

3.9 YOLO算法

该节把上面的所有步骤综合起来:

首先是训练,y标签是3x3x16,16是因为使用了2个Anchor Box,没有对象的格子pc值设为0,其他不关心通常设置为一些数字噪音。有对象的注意看是更符合哪个Anchor Box,写入对应信息。
在这里插入图片描述
做预测时,直接输出3x3x16标签信息
在这里插入图片描述
最后联合非最大值抑制方法,步骤如上一节所说。
在这里插入图片描述
疑问:边界框为什么可以超出格子?

3.10 (选修)RPN网络

该节介绍一种新的算法R-CNN算法,用的不是很多。核心思路是设定候选区域,因为很多区域并没有对象,滑动窗口一个一个使用算法成本很高。

运用图像分割算法来找候选区域。
在这里插入图片描述
该算法经过多次改进,利用卷积网络实现。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
需要学习Windows系统YOLOv4的同学请前往《WindowsYOLOv4目标检测实战:原理与源码解析》,课程链接 https://edu.csdn.net/course/detail/29865【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来!  代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法。YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。【课程内容与收获】 本课程将解析YOLOv4的实现原理和源码,具体内容包括:- YOLOv4目标检测原理- 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算- 代码阅读工具及方法- 深度学习计算的利器:BLAS和GEMM- GPU的CUDA编程方法及在darknet的应用- YOLOv4的程序流程- YOLOv4各层及关键技术的源码解析本课程将提供注释后的darknet的源码程序文件。【相关课程】 除本课程《YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《YOLOv4目标检测实战:训练自己的数据集》《YOLOv4-tiny目标检测实战:训练自己的数据集》《YOLOv4目标检测实战:人脸口罩佩戴检测》《YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值