吴恩达深度学习 Deeplearning.ai学习笔记 Course4 Week3 目标检测(Object detection)


本周将会学习对象检测,这是CV中的一个新的应用方向。

3.1 对象定位(Object localization)

图片分类任务我们已经熟悉了,比如这里,就是算法遍历图片,判断其中的对象是不是汽车,这就是图片分类。这节课我们要学习构建神经网络的另一个问题,即定位分类问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用红色方框把汽车圈起来,这就是定位分类问题。
在这里插入图片描述
输入一张图片到多层卷积神经网络。它会输出一个特征向量,并反馈给softmax单元来预测图片类型。
在一张图片中,我们假设出现的事物有行人、汽车、摩托车和背景,这四个分类就是softmax函数可能输出的结果。
但是,当我们现在还要多画一个框来显示这个物体的位置呢?这时我们就要多输出一些位置信息了,这里我们规定位置信息为 b x , b y , b h , b w b_x,b_y,b_h,b_w bx,by,bh,bw,其中 b x , b y , b_x,b_y, bx,by,为框的中心位置, b h , b w b_h,b_w bh,bw则表示了框的高度和宽度
在这里插入图片描述
接下来我们在规定一下输出函数Y,输出函数仍是一个列向量。如图所示
在这里插入图片描述
其中 p c p_c pc代表这个图中是否有物体,也就是我们关心的比如行人,汽车和摩托车,如果有这三类则为1,没有则为0.而 b x , b y , b h , b w b_x,b_y,b_h,b_w bx,by,bh,bw就是前面所叙述的标记框的位置, c 1 , c 2 , c 3 c_1,c_2,c_3 c1,c2,c3则是上面三种分类的一种,这里我们假设只可能出现一种物体,所以这三个里面只有一个是1,其他两个是0.

刚刚所叙述的是 p c = 1 p_c=1 pc=1时的情况,当 p c = 0 p_c=0 pc=0时,其余的数字将不再有意义。我们在做算法的时候可以忽略这些数,先检查 p c p_c pc是否合法即可。
在这里插入图片描述

3.2 特征点检测(Landmark detection)

上节课介绍了对象的定位,现在我们来看看对于特征点的定位
在这里插入图片描述
事实上,特征点定位和对象定位没有太大的差别。就是在输出层多加上几个输出。你想要定位多少个特征点,就设定多个输出。只要有人或者自己先将标签标注好,再使用卷积神经网络训练,就能识别出这些特征点。现在有很多应用做到了这点,很多人常用的自拍软件就是一个很好的例子。通过识别图像中人脸的特征点,可以对这些特征点修改进行诸如瘦脸、变大眼睛的一些操作。

总之,假如有一个标记好了的足够大的数据集,那么神经网络便可以输出上述所有特征点,你可以利用它们实现其他有趣的效果,比如判断人物的动作姿态,识别图片中的人物表情等等。

3.3 目标检测(Object detection)

刚刚学过了对象定位和特征点检测,现在我们来构建一个对象检测算法。这节课,我们将学习如何通过卷积网络进行对象检测,采用的是基于滑动窗口的目标检测算法。
在这里插入图片描述
假如我们想要构建一个汽车检测算法,首先要创建一个标签训练集,一开始可以使用适当剪切的图片,就是整张图片几乎都被汽车占据。就是一整张照片里面只有一个汽车。比如可以照张照片,然后剪切,剪掉汽车以外的部分,使汽车居于中间位置,并基本占据整张图片。有了这个标签训练集,就可以开始训练卷积网络了,输入这些适当剪切过的图片,卷积网络输出,0或1表示图片中有汽车或没有汽车。训练完这个卷积网络,就可以用它来实现滑动窗口目标检测。

滑动窗口目标检测

在这里插入图片描述
思路其实很简单,我们取一个小窗口。让这个小窗口在想要检测的图片上滑动。一开始取的窗口会小一些,之后就越来越大。把小窗口中的图片送到卷积神经网络中去检测,看是输出1或是0,这样就能找到目标的位置。当然,这里的小窗口滑动的步长和小窗口的大小都是由讲究的。对于神经网络来说,这个方法已经不怎么适用了,因为这会产生很大的输入量和计算量。

不过,庆幸的是,计算成本问题已经有了很好的解决方案,大大提高了卷积层上应用滑动窗口目标检测器的效率,让我们接着看。

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

我们学习了如何通过卷积网络实现滑动窗口对象检测算法,但效率很低。这节课我们讲讲如何在卷积层上应用这个算法。

将全连接层转化为卷积层

在这里插入图片描述
如上图所示,我们在全连接层处。不再将每个节点单独的考虑,而是将所有节点视为上一层的输出。也就是将它们集合为一个向量。所以当我们在全连接层进行操作的时候,要使用的是卷积过滤器。这样我们就将一个全连接层转化成了一个卷积层。

卷积实现滑动检测

在这里插入图片描述
假设向滑动窗口卷积网络输入14×14×3的图片,为了简化演示和计算过程,这里我们依然用14×14的小图片。和前面一样,神经网络最后的输出层,即softmax单元的输出是1×1×4。严格来说,14×14×3应该是一个长方体,第二个10×10×16也是一个长方体,但为了方便,这里只画了正面。对于1×1×400的这个输出层,只画了它1×1的那一面,所以这里显示的都是平面图,而不是3D图像。在具体看的时候,也可以自行脑补一下。

假设输入给卷积网络的图片大小是14×14×3,测试集图片是16×16×3。就如上图的第二行图片所示。这个时候就将14×14作为窗口。将它们都输入卷积层。一共会要输入4次。结果发现,这4次卷积操作中很多计算都是重复的。所以执行滑动窗口的卷积时使得卷积网络在这4次前向传播过程中共享很多计算。

所以该卷积操作的原理是我们不需要把输入图像分割成四个子集,分别执行前向传播,而是把它们作为一张图片输入给卷积网络进行计算,其中的公共区域可以共享很多计算,就像这里我们看到的这个4个14×14的方块一样。也就是一张图片跑一次就行。不用跑4次!

在这里插入图片描述
比如,我们可以对大小为28×28的整张图片进行卷积操作,一次得到所有预测值。这样神经网络便可以识别出汽车的位置。但是这个做法还是有缺陷,是边界框的位置可能不够准确。

3.5 Bounding Box预测(Bounding box predictions)

在这节课中,我们来看看如何得到更精准的边界框。

YOLO算法

YOLO意思是你只看一次——You only look once
在这里插入图片描述
算法是这么做的,比如你的输入图像是100×100的,然后在图像上放一个网格。为了介绍起来简单一些,这里用3×3网格,实际实现时会用更精细的网格。基本思路是使用前几个视频介绍过的图像分类和定位算法,然后将算法应用到9个格子上。然后每个格子的输出就是我们之前见过的那个向量,具体每个参数代表什么我就不多说了。
在这里插入图片描述
所以对于这里9个格子中任何一个,都会得到一个8维输出向量,因为这里是3×3的网格,所以有9个格子,总的输出尺寸是3×3×8。注意一点,把对象分配到一个格子的过程是,观察对象的中点,然后将这个对象分配到其中点所在的格子,所以即使对象可以横跨多个格子,也只会被分配到9个格子其中之一。因为这是一个卷积实现,实际上它的运行速度非常快,可以达到实时识别。所以这也是只用一次输入一张图片到神经网络中,然后输出会是每个你分好的小格中的对象的位置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值