神经网络——吴恩达课程总结(卷积神经网络_目标检测)

目标检测

目标定位

目标定位会通过输出四个参数bx by bh bw 给出图像中对象的边界框
在这里插入图片描述

平方误差策略可以减少这八个元素预测值和实际输出结果之间差值的平方
如果y1=0,那么Y矩阵中的后7个元素都不用考虑,只需要考虑神经网络评估Y1(即Pc)的准确度

特征点检测

在这里插入图片描述
以中间的人脸识别为例,假设脸部有64个特征点
选定特征点个数,并生成包含这些特征点的标签训练集,然后利用神经网络输出脸部关键特征点的位置
具体做法是 准备一个卷积网络和一些特征集,将人脸输入卷积网络,输出1或0表示是否有人脸,然后输出各个特征点的x和y值,然后共有129个输出单元(64*2+1),然后就实现了对图片的人脸检测和定位。这是一个识别脸部目标的基本构造模块

还可以定义一些关键特征点,比如是关节的点,胸部的中点和头的点,然后通过神经网路标注人物姿态的关键特征点,再输出这些标注过的特征点,就相当于输出了人物的姿态动作

目标检测

基于滑动窗口的目标检测算法 :
在这里插入图片描述
将红框遍历整个图像,然后不断调大红框再次遍历
缺点是计算成本高,效率低

卷积的滑动窗口实现

用卷积层代替全连接层
不必将图片进行分割依次放入卷积网络,因为这会在中间的公共区域内造成重复操作,可以直接将整张图片进行卷积,以中间的例子来看,最后得到了2x2x4的输出结果,其中左上角的输出就是16x16x3中的左上角14x14的卷积结果
在这里插入图片描述
示例:
不是先将图片分割依次卷积,而是直接将图片进行卷积,一次得到所有的预测值。
在这里插入图片描述
这仍然存在问题,那就是不能输出最精准的边界框

Bounding Box预测

yolo算法为例
假如输入的图像是100x100的,然后在图像上放一个网格,这里用3*3网格(这里是为了方便描述,实际实现时会用更精细的网格,比如19x19)
基本思路:使用图像分类和定位算法,然后将算法应用到9个格子上,对这9个格子中的每一个都指定一个标签y(8维输出向量),如下图所示其中包含对象的输出标签y为下面中的第三或第四个,没有包含的是第二个

yolo算法中会取对象的中点,然后将这个对象分配给包含对象中心的格子,中点是靠自己人为打的标签
因为有9个网格,每个网格指定一个8维向量,所以目标输出尺寸为3x3x8

优点:它不会受到滑动窗法分类器的步长大小限制,对象可以具有任意宽高比,并且能输出更精确的坐标,其次 这是一个卷积实现,没有在3x3网格上跑9次算法,而是单次卷积实现

他的运行速度非常快,可以达到实时识别
在这里插入图片描述
bx,by,bh,bw:
在这里插入图片描述

交并比(IoU)

交并比函数可以用来评价对象检测算法
下图所示:实际边框是红色的,算法给出的是紫色的边框
当交并比为1就是实际边框和预测的完全重合,是最理想的
在这里插入图片描述

非极大值抑制

你的算法可能对同一个对象做出多次检测,所以算法不是对某个对象检测出一次,而是检测出多次。
非最大值算法可以确保你的算法对每一个对象只检测一次
首先假如一张图片想要识别车子,他被19x19的网格覆盖,车子的中点肯定会在一个格子之间,那么这个格子周围的点也会猜测可能这一部分也属于车子的一部分。
在这里插入图片描述

因为你要在361个格子上都跑一次图像检测和定位算法,那么很多格子都会认为“我这个格子里有车的概率很高(p_c)”所以最后可能会对同一个对象做出多次检测,如下图所示
在这里插入图片描述
非最大值抑制要做的就是清理这些检测结果,一辆车只检测一次
首先要找到p_c最大的那一个,将其看为最可靠的检测,然后非最大值抑制就会逐一审视剩下的矩阵,那些和这个边界框有很高交并比的其他边框就会被抑制
在这里插入图片描述

Anchor Boxes

之前的对象检测中可以发现每个格子中只能检测出一个对象,如果想检测出多个对象那么就需要Anchor Boxes这个概念
例如有一张图片由3x3的网格覆盖,行人和车子的中心恰巧在一个格子内。如下图所示
在这里插入图片描述
需要先定义两个不同形状的anchor box(之所以定义两个是因为就这个例子来说,正常的话可能会用到更多的anchor box,可能需要5个甚至更多)y也跟着变化了
在这里插入图片描述
主要是看哪一个anchor box框和实际边界框的交并比更高
实例:
在这里插入图片描述

YOLO对象检测算法实现过程

1.构建训练集

假设要训练一个算法检测三种对象
1 - 行人
2 - 车
3 - 摩托车
如果要用到两个anchor box 那么y=3x3x2x8 (3*3指网格,2指anchor box, 8指的是向量维度)或者是3x3x16
要构建训练集,需要遍历9个格子,然后构成对应的目标向量y
在这里插入图片描述
下列三个向量都是y值,中间的对应于上面图像左上角的蓝色网格,右边的对应于上面图像下面的绿色网格。
假如自己定义的两个anchor box,第一个更高,第二个更宽,然后绿框中的红框和anchor box2 交并比更高,那么车子就和向量的下半部分相关,所以下面的第三个y向量的下半部分的pc=1
在这里插入图片描述
像上面的过程遍历9个格子,遍历完3x3网格的所有位置,最后输出尺寸就是3x3x16,因为实际中网格可能更多,所以最后的尺寸是19x19x16,anchor box也可能会更多,是19x19x4x8,所以最后可能是19x19x40

这就是训练集,然后要训练一个卷积网络,输入是图片

2.训练卷积网络

比如 输入1001003的图片,然后卷积网络最后输出尺寸是3x3x16(在上面的例子中)
在这里插入图片描述
接下来看一下你的算法是如何做出预测的

3.做出预测

在这里插入图片描述
最后要跑一下非最大值抑制

4.输出的时候进行非最大值抑制

在此处换一张图片
在这里插入图片描述

1.如果使用两个anchor box ,那么对于这9个格子中任何一个都会有两个预测的边界框
(注意:预测的边界框是可以超出所在格子的高度和宽度)
在这里插入图片描述
2.抛弃概率的的预测
在这里插入图片描述
3.如果在上面的例子中仍然有3个对象检测类别(行人,车子,摩托),你需要对每个类别单独运行非最大值抑制,处理预测结果是哪个类别的边界框,用非最大值抑制处理行人类别,然后处理车子类别,处理摩托类别。运行三次得到最终的预测结果

候选区域(应用于R-CNN)

相比于滑动窗法,我们知道这种方法会把图片中的所有部分都运行检查器进行检查,这会在没有任何对象的区域浪费时间,比如上一张图片中的左下角位置,这时一种算法就被提出来了

R-CNN

R-CNN算法,意为带区域的卷积网络,或者说是带区域的CNN
这个算法会尝试选出一些区域,在这些区域进行卷积网络分类器是有意义的
比如,对于上面的图像进行图像分割算法之后会变成以下图像
在这里插入图片描述
为了找到可能存在对象的区域,算法会将分割后的图像的一些色块跑分类器
在这里插入图片描述
这就是所谓的分割算法,你先找出可能2000个色块,然后在这些色块上放置边界框,这样的话需要处理的位置可能会少很多,可以减少卷积网络分类器运行的时间

R-CNN的三代

基本的R-CNN算法是使用某种算法求出候选区域,然后对每个候选区域跑一下分类器,每个区域会输出一个标签和一个边界框,它也可以得到相当精确的边界框
缺点是 太慢了

Fast R-CNN 和R-CNN差不多,就是用卷积实现了滑动窗法(本篇文章的第三个小标题中有该内容的解释)缺点:得到候选区域的聚类步骤仍然非常缓慢

Faster R-CNN 使用的是卷积神经网络而不是传统的分割算法来获取候选区域色块

但是大多数R-CNN还是比yolo慢


以上内容来自B站吴恩达网课

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值