小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Computer & DL
  4. Deep Learning
  5. 正文

吴恩达深度学习课程DeepLearning.ai笔记(4-3)

2018年3月7日 2039点热度 0人点赞 0条评论

卷积神经网络 — 目标检测

1. 目标定位&特征点检测-目标检测

图片检测的三个问题:

(1)分类问题:区分图片是汽车亦或是其它;

(2)目标定位:判断是否是汽车并确定其位置;

(3)目标检测:源图中有多个不同的物体,分析确定该物体是什么并确定位置。

(1)目标分类与定位

如图1所示。Softmax后面可以有多个输出,其输出结果是各项目标的可能性。

定位最关键的就是输出图中红圈的中心点的坐标(bx,by),然后就是它的宽bw和高bh。通常以图片的左上角坐标为(0,0),右下角为(1,1)。

1520427639519641.jpg

图1

(2)定义目标标签y

我们的代价函数可以如下式所示:

1520476789127284.jpg

    我们可以知道,当处于第一行状态时,我们需要关注神经网络对所有输出值的准确度;而当第二行状态时,只需要关注对于背景的准确度。

经过神经网络后输出一个n×1的矩阵。这里我们假设检测车、行人、摩托车。那么这个矩阵可以如图2所示:

1520427664130997.jpg

图2

每一个参数的含义都已经在图中表示出来了。注意,若PC=0,则后面的参数无论取何值都无意义。

(3)特征点检测

特征点检测,顾名思义,就是根据图片上的特征点的坐标实现对目特征的识别和定位。就像图3中女性的眼角,运动员的动作姿势等,都可以成为被标记的特征点。

1520427683417153.jpg

图3

(4)目标检测

实现目标检测,就是采用定义一个小窗口,然后就像推拉门一样滑动来进行检测。

训练模型:

1520427703308952.jpg

图4

将训练集的图片切割成一个一个小图片,然后对其进行标记:若有汽车,标记为1;若无汽车,标记为0。

滑动窗口检测:

首先选定一个特定大小的框,被称为窗口,将窗口放到图片上进行预测。如图5所示,图中三张图片分别应用了3种不同尺寸的窗口。不同尺寸的窗口有什么优缺点呢?选用尺寸较大的窗口,优点是减少了数据量,但是缺点是检测的准确率下降;对于尺寸较小的窗口来说,优点是检测的准确率得到提升,但是数据量却变得十分庞大。

然后以固定的步幅长度来滑动该窗口,遍历图像的各个区域,对窗内的各个小图输入模型进行预测。

这之后,需要继续选取一个更大的窗口,然后再重复遍历图像每个区域的动作,以对是否有车进行预测。

1520427735918735.jpg

图5

卷积层代替全连接层:

如图6所示,对于图中上侧的部分来说,它是使用了两个400个节点的全连接层,然后通过Softmax输出了分类的概率等等信息。但是实际上,利用1×1的卷积核,如该图下半部分所示,也可以实现类似的结果。这一点的原理在前面已经讲过,在此不再累述。

1520427760258862.jpg

图6

滑动窗口的卷积实现:

如图7所示:

1520427782119562.jpg

图7

    我们可以使用上面已经训练好的模型,应该注意到,虽然图片中使用的是平面图,但是实际上它是一个三维的。我们输入一个16×16×3的图片,在图中蓝色代表滑动窗口。在这里,我们设置步长为2,然后分别于卷积核进行卷积运算,最后得到了4个10×10×16的特征图。由于在滑动的过程中必然存在大量的重叠,因此在下一层的特征图中也是存在大量重叠。在第二部分中,实际上我们是利用增加了一个padding进行处理,具体的过程和第一部分类似。

那么由此可知,滑动窗口在整幅图片上进行滑动卷积的操作过程,就等同于在该图片上直接进行卷积运算的过程。所以卷积层实现滑动窗口的这个过程,我们不需要把输入图片分割成四个子集分别执行前向传播,而是把他们作为一张图片输入到卷积神经网络中进行计算,其中的重叠部分(公共区域)可以共享大量的计算。

2. Bounding Box预测(YOLO算法)

前面的讨论一直在理想情况下,实际上我们不能输出最精准的边界框(Bounding Box)。

这个时候我们可以使用YOLO算法。下面开始介绍YOLO算法。

1520427805468540.jpg

图8

l  在整个图片上加较为精细的网格,将图片分为n×n的小方格;

l  然后利用前述的图像分类和定位,将其分别应用在这些小方格之中;

l  对每一个小方格定义训练标签yi(标签内容如前图2所示);

l  将这些小方格的标签合并在一起,最终输出Y,它的大小为n×n×8。

通过观察不同位置的输出值,我们就能知道这些位置中是否存在目标物体,然后也能由存在物体的输出向量得到目标物体的更加精准的边界框。

注意:

    (1)将对象分配到一个格子的过程是:观察对象的中点,将该对象分配到其中点所在的格子中,(即使对象横跨多个格子,也只分配到中点所在的格子中,其他格子记为无该对象,即标记为“0”);

(2)YOLO显式地输出边界框,使得其可以具有任意宽高比,并且能输出更精确的坐标,不受滑动窗口算法滑动步幅大小的限制;

(3)YOLO是一次卷积实现,并不是在n×n网格上进行n2次运算,而是单次卷积实现,算法实现效率高,运行速度快,可以实现实时识别。

我们做以下约定:

对于每个网格,以左上角为(0,0),以右下角为(1,1);

中点bx、by表示坐标值,在0~1之间;

宽高bh、bw表示比例值,存在>1的情况。

3. 交并比(LOU)与非最大值抑制(NMS)

(1)交并比

如图9所示,所谓交并比指的是图中橘黄色部分比上绿色部分。这个参数是用来衡量目标检测算法是否运作良好。一般情况下,当LOU≥0.5的时候,说明检测正确。

1520427852789113.jpg

图9

(2)非最大值抑制

该方法解决了相同的物体被重复检测的问题。

算法思想:

l  在对n×n个网格进行目标检测算法后,每个网格输出的Pc为一个0~1的值,表示有车的概率大小。其中会有多个网格内存在高概率;

l  得到对同一个对象的多次检测,也就是在一个对象上有多个具有重叠的不同的边界框;

非最大值抑制对多种检测结果进行清理:选取最大Pc的边界框,对所有其他与该边界框具有高交并比或高重叠的边界框进行抑制;

l  逐一审视剩下的边界框,寻找最高的Pc值边界框,重复上面的步骤。

l  非最大值抑制,也就是说抑制那些不是最大值,却比较接近最大值的边界框。

算法步骤:

(1)对于图片每个网格预测输出矩阵:yi=[Pc bx by bh bw],其中Pc表示有对象的概率;

(2)抛弃Pc⩽0.6的边界框;

(3)对剩余的边界框(while):选取最大Pc值的边界框,作为预测输出边界框;抛弃和选取的边界框IoU⩾0.5IoU⩾0.5的剩余的边界框。

1520427878111221.jpg

图10

4. Anchor box

到目前为止,我们已经完成了我们想要完成的任务。但是这存在一个问题,即目前我们只能检测一个对象,这很显然是不够的。那怎样才能检测多个对象呢?这里我们可以使用Anchor box。

重叠目标:

1520427895320598.jpg

图11

    对于重叠的目标,这些目标的中点有可能会落在同一个网格中,对于我们之前定义的输出只能得到一个目标的输出。

而Anchor box 则是预先定义多个不同形状的Anchor box,我们需要把预测目标对应地和各个Anchor box 关联起来,所以我们重新定义目标向量:yi=[Pc bx by bh bw c1 c2 c3 Pc bx by bh bw c1 c2 c3。。。]。用这样的多目标向量分别对应不同的Anchor box,从而检测出多个重叠的目标。

总结:

l  之前的算法:在训练图像中的每一个目标被分配一个包含目标重点的格子,输出大小。(Each object in training image is assigned to grid cell that contains that object’s midpoint.)

l  使用2个Anchor boxes: 每一个训练图像中的目标都被分配包含对象中点的网格单元格和具有最高IoU的网格单元格的锚点框。(Each object in training image is assigned to grid cell that contains object’s midpoint and anchor box for the grid cell with highest IoU.)

更多内容参见: Redmon et al., 2015, You Only Look Once: Unified real-time object detection

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 人工智能 神经网络
最后更新:2018年3月7日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
莱芜市2011年普通高中招生工作实施意见1 Maintenance Mode:把博客设置为维护状态 WIN10+anaconda+CUDA9.0+CUDNN7.0安装配置Tensorflow(GPU)教程 『超决战!奥特英雄传说』新版官方网站正式启用! Leetcode题目解析(191118):141&142&146 《超决战!奥特英雄传说(下部)》网站测试开始
标签聚合
高中 鸟哥的linux私房菜 生活 leetcode linux python学习 Python 算法 Java 学习
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号