【吴恩达深度学习笔记】4.3目标检测Object detection

第四门课 卷积神经网络(Convolutional Neural Networks)

3.1目标定位(Object localization)

图片分类任务就是算法遍历图片,判断其中的对象是不是目标,这就是图片分类。在图片中标记出目标的位置,用边框或把目标圈起来,这就是定位分类问题。图片分类的思路可以帮助学习分类定位,而对象定位的思路又有助于学习对象检测。

如果构建自动驾驶系统,对象可能包含以下几类:行人、汽车、摩托车、背景。如果想定位图片中目标的位置,输出一个边界框,就是让神经网络再多输出4个数字,标记为 b x , b y , b h , b w b_x,b_y,b_h,b_w bx,by,bh,bw,这四个数字是被检测对象的边界框的参数化表示。约定被测图片左上角的坐标为 ( 0 , 0 ) (0,0) (0,0),右下角标记为 ( 1 , 1 ) (1,1) (1,1)。要确定边界框的具体位置,需要指定红色方框的中心点 ( b x , b y ) (b_x,b_y) (bx,by),边界框的高度为 b h b_h bh,宽度为 b w b_w bw。目标标签向量定义如下: y = [ p c , b x , b y , b h , b w , c 1 , c 2 , c 3 ] T y=[p_c,b_x,b_y,b_h,b_w,c_1,c_2,c_3]^T y=[pc,bx,by,bh,bw,c1,c2,c3]T

p c p_c pc表示是否含有对象,或者被检测对象属于某一分类的概率,背景分类除外。如果对象属于前三类(行人、汽车、摩托车),则 p c = 1 p_c=1 pc=1,如果对象是背景,则 p c = 0 p_c=0 pc=0 y y y的其他参数没有意义,全部记为 ? ? ? c 1 , c 2 , c 3 c_1,c_2,c_3 c1,c2,c3表示属于对象1-3类中的哪一类,是行人、汽车还是摩托车。

在这里插入图片描述
神经网络的损失函数,其参数为类别 y y y和网络输出 y ^ \hat y y^,如果采用平方误差策略,损失值等于每个元素相应差值的平方和: L ( y ^ , y ) = ( y ^ 1 − y 1 ) 2 + ( y ^ 2 − y 2 ) 2 . . . + ( y ^ 8 − y 8 ) 2 L(\hat y,y)=(\hat y_1-y_1)^2+(\hat y_2-y_2)^2...+(\hat y_8-y_8)^2 L(y^,y)=(y^1y1)2+(y^2y2)2...+(y^8y8)2

3.2特征点检测(Landmark detection)

假设你正在构建一个人脸识别应用,假设脸部有64个特征点,需要准备一个卷积网络和一些特征集,将人脸图片输入卷积网络,输出1或0,1表示有人脸,0表示没有人脸,然后输出 ( l 1 x , l 1 y ) (l_{1x},l_{1y}) (l1x,l1y)…直到 ( l 64 x , l 64 y ) (l_{64x},l_{64y}) (l64x,l64y),其中 l l l点一个特征,共有129个输出单元。注意:所以标签在所有图片中必须保持一致,

3.3目标检测(Object detection)

滑动窗口目标检测:以固定步幅移动特定大小的窗口,遍历图像的每个区域,把这些剪切后的小图像输入卷积网络,对每个位置按0或1进行分类,判断里面有没有目标。再改变窗口大小进行同样操作。滑动窗口目标检测算法有很明显的缺点就是计算成本,因为在图片中剪切出太多小方块,卷积网络要一个个处理。如果选用的步幅很大,显然会减少输入卷积网络的窗口个数,但是粗糙间隔尺寸可能会影响性能。反之,如果采用小粒度或小步幅,传递给卷积网络的小窗口会特别多,这意味着超高的计算成本。

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

把神经网络的全连接层转化成卷积层:

在这里插入图片描述
参考论文:Sermanet, Pierre, et al. “OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks.” Eprint Arxiv (2013).

以绿色方块为例,假设剪切出这块区域(编号1),传递给卷积网络,第一层的激活值是这块区域(编号2),最大池化后的下一层的激活值是这块区域(编号3),这块区域对应着后面几层输出的右上角方块(编号4,5,6)。

在这里插入图片描述
滑动窗口的实现过程即在图片上剪切出一块区域,把它输入到卷积网络,继续输入下一块同样大小的区域,重复操作,直到某个区域识别到汽车。滑动窗口卷积操作的原理是不需要把输入图像分割成四个子集,分别执行前向传播,而是把它们作为一张图片输入给卷积网络进行计算,其中的公共区域可以共享很多计算。在卷积层上应用滑动窗口算法提高了整个算法的效率。但这种算法的缺点是边界框的位置可能不够准确。

3.5Bounding Box预测(Bounding box predictions)

能得到更精准边界框的算法是YOLO(You only look once)算法,算法的优点在于神经网络可以输出精确的边界框,可以具有任意宽高比,并且能输出更精确的坐标,不会受到滑动窗口分类器的步长大小限制。测试时喂入输入图像 x x x,然后跑正向传播,直到得到输出 y y y。在输出中可以读出1或0,格子中对象的边界框是什么。使用更精细的网格那么多个对象分配到同一个格子得概率就小得多。

比如输入图像是100×100,在图像上放一个3×3网格,实际实现时会用更精细的网格,可能是19×19。基本思路是使用图像分类和定位算法,将算法应用到9个格子上。格子里没有目标的标签向量是 y = [ 0 , ? , ? , ? , ? , ? , ? , ? ] T y=[0,?,?,?,?,?,?,?]^T y=[0,?,?,?,?,?,?,?]T。格子里有目标的向量是 y = [ 1 , b x , b y , b h , b w , 0 , 1 , 0 ] T y=[1,b_x,b_y,b_h,b_w,0,1,0]^T y=[1,bx,by,bh,bw,0,1,0]T。总的输出尺寸是3×3×8。这是一个卷积实现,并没有在3×3网格上跑9次算法,这是单次卷积实现,但使用了一个卷积网络,有很多共享计算步骤,所以这个算法效率很高。YOLO算法因为是一个卷积实现,实际上它的运行速度非常快,可以达到实时识别。

在这里插入图片描述
参考论文:Redmon, Joseph, et al. “You Only Look Once: Unified, Real-Time Object Detection.” (2015):779-788.

在这里插入图片描述
在YOLO算法中,对于这个方框(编号1所示),约定左上这个点是 ( 0 , 0 ) (0,0) (0,0),右下这个点是 ( 1 , 1 ) (1,1) (1,1),要指定橙色中点的位置, 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 bxby必须在0和1之间, b h 、 b w b_h、b_w bhbw可能会大于1。

3.6交并比(Intersection over union)

交并比(loU)函数是计算预测边界框和实际边界框交集和并集之比。一般约定,在计算机检测任务中,如果 l o U ≥ 0.5 loU\geq 0.5 loU0.5,就说检测正确,如果预测器和实际边界框完美重叠, l o U = 1 loU=1 loU=1

借据中提到的“我欠你这么多钱(I own you this much money)”也叫做loU。

3.7非极大值抑制(Non-max suppression)

非极大值抑制方法可以确保算法对每个对象只检测一次,非最大值意味着只输出概率最大的分类结果,但抑制很接近,但不是最大的其他预测结果。

在这里插入图片描述
要实现非极大值抑制,第一步是去掉所有边界框,将所有的预测值小于或等于某个阈值如 p c ≤ 0.6 p_c\leq 0.6 pc0.6的边界框去掉。这就抛弃了概率比较低的输出边界框。剩下没有抛弃的边界框就一直选择概率最高的边界框,然后把它输出成预测结果,取这个边界框高亮显示。第二步是和高亮标记的边界重叠面积很高的那些边界框抛弃掉,直到每个边界框都判断过了,它们有的作为输出结果,剩下的会被抛弃。

如果同时检测三个对象,那么输出向量就会有三个额外的分量。正确的方法是独立进行三次非极大值抑制,对每个输出类别都做一次。

3.8Anchor Boxes

如果想让一个格子检测出多个对象,可以使用anchor box。预先定义多个不同形状的anchor box形状,把预测结果和这些anchor box关联起来。此时输出 y y y的维度会成倍增加。

在这里插入图片描述
注意以下两种情况算法处理不好,需要引入一些打破僵局的默认手段:

  1. 有两个anchor box,但在同一个格子中有三个对象。
  2. 两个对象都分配到一个格子中,而且它们的anchor box形状也一样。

人们一般手工指定anchor box形状,可以选择5到10个覆盖到多种不同的形状。还有一种自动选择anchor box的高级方法:k-平均算法,可以将两类对象形状聚类,如果用它来选择一组anchor box,选择最具有代表性的一组anchor box,可以代表试图检测的十几个对象类别。

3.9YOLO算法(Putting it together:YOLO algorithm)

在这里插入图片描述

3.10候选区域(Region proposals)

参考文献:[Girshick R, Donahue J, Darrell T, et al. Rich feature hierarchies for accurate object detection and semantic segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2014: 580-587.]

R-CNN算法,带区域的卷积网络。这个算法尝试选出一些区域,不再针对每个滑动窗运行检测算法,而是只选择一些窗口,在少数窗口上运行卷积网络分类器。选出候选区域的方法是运行图像分割算法,分割的结果是下边的图像,先找出可能的色块,然后在色块上放置边界框,运行分类器,这样需要处理的位置可能要少的多,可以减少卷积网络分类器运行时间,比在图像所有位置运行一遍分类器要快。

在这里插入图片描述
基本的R-CNN算法是使用某种算法求出候选区域,然后对每个候选区域运行一下分类器,每个区域会输出一个标签,并输出一个边界框,这样就能在确实存在对象的区域得到一个精确的边界框。大多数更快R-CNN的算法实现还是比YOLO算法慢很多。

错题

没有错题:)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值