吴恩达《深度学习》第四门课(3)目标检测(Object detection)
3.1目标定位
(1)案例1:在构建自动驾驶时,需要定位出照片中的行人、汽车、摩托车和背景,即四个类别。可以设置这样的输出,首先第一个元素pc=1表示有要定位的物体,那么用另外四个输出元素表示定位框的中心坐标和宽高,再用3个输出元素one-hot表示是三个类别中的哪一类。当第一个元素pc=0时表示是背景,然后就不需要考虑其他输出了,如下图所示(需要注意的是是根据图片的标签y来决定使用几个元素的):

(2)损失函数:上图中左下角是使用了平方误差损失函数这是为了方便解释方便而使用的。实际使用中pc使用逻辑回归,c1,c2,c3是用softmax激活然后然后用对数损失函数,位置信息是使用平方误差损失函数,然后将这些损失函数相加起来得到最终的代价函数。当标签y=0时,只考虑pc即可。
3.2特征点检测
(1)特征点检测就是第一个单元输出1,表示有这个对象(如人脸),然后如果在人脸上定义了64个特征点(如下图所示),每个特征点用(x,y)表示,那么网络将会有1+2*68=129个单元输出。需要注意的一点是在标注样本时,所有标签在所有图片中务必保持一致,比如说,第5个特征点表示左眼的外眼角,那么所有图片的第五个特征点都应该是这个。

3.3目标检测
(1)案例是检测图片中的汽车,首先是有裁剪合适的照片(裁剪合适是指照片中如果有汽车那么汽车将占满整张图),进行训练一个可以分类汽车的网络,即输出是否有汽车。如下图所示:

(2)滑动窗口目标检测是用一个滑动窗口从图片的最左上角从做到右(设定一定步长)从上到下去滑动,分别将窗口内的图片裁剪下来送入到之间训练好的网络中,判断有无汽车,然后改变窗口大小,以及步长等,重复上面步骤,如下图所示:


(3)滑动窗口的问题就是计算量非常的大,因为要保证精确度化不能用太大的步长,这样滑动窗口很多,而且很多地方是属于重复计算了。
3.4卷积的滑动窗口实现
(1)将全连接层转换为卷积层,如下图所示5*5*16与400个单元进行全连接可以转换为用400个5*5*16的卷积核来卷积5*5*16,这样每一个卷积核其实就相当与都是全连接的结果,唯一的区别就是之前全连接输出是400个单元,现在输出是1*1*400,维度不同,下一层全连接转卷积同样操作,最后一层原来是输出4个单元,现在变成了1*1*4,维度不同,仅此而已。

(2)上一节中一个一个滑动框输入网络中,有许多计算是重叠的,即多次计算,所以可以将原图直接输入到网络中,这样避免了重复计算。之所以将前面的全连接层变成卷积层,是因为只有都是卷积层的时候才可以输入任意尺寸的图片,更具体的说是参数不随图片尺寸变化,而全连接层参数w时固定的意味着图片输入尺寸要固定。

(3)该方法还存在的一个问题就是边界框位置不够准确。
3.5Bounding Box预测(YOLO算法)
(1)将一张图3*3共9个单元(在论文中是分成19*19,论文默认前提是一个单元里只有一个对象),每个单元都有上面提到的1+4+3=8个输出(还是用上面无人驾驶的例子,3个类别加一个背景)所以整个网络输出为3*3*8。换言之就是输入一张图片,然后网络最终输出的维度为3*3*8,3*3是指有图片分成这么多格子,然后每个格子需要用到8个参数。如下图所示:

(2)YOLO中将对象(即识别的物体)的中心点落在哪一个网格中就,它就属于哪个网格,一个对象只能属于一个网络,即使这个目标可能横跨了好多个网格。
(3)bx,by,bw,bh一种表示方法:将网格(注意不是整张图)的左上角记做(0,0),网格右下角为(1,1),所以bx,by的值都在0到1之间,反证法如果超过1说明它不应该划分到这个网格中。bw,bh也是相对于网格的比例,所以其值可能大于1.如下图所示:

3.6交并比
(1)IoU=(A∩B)/(A∪B),一般将交并比的值大于0.5看成是检测正确的,当然这个值可以根据实际情况来定。

3.7非极大值抑制
(1)需要理解的一点是,我们做的样本标签中一个对象只会属于一个网格(中心点落在该网格上),但是当我们开始对网络进行预测时,很多网格都会觉得这个对象是属于自己的,如下图所示:

(2)用只有一个类别(如汽车)来说明非极大值抑制的过程。首先将预测到有汽车的网格中概率小于阈值的都去掉(比如说0.6),然后将剩下预测到有汽车的都进行排序,去其中可能性最大的,它将成为一个预测结果,然后与它的交并比大于某个阈值的都去掉,然后再在剩下中取最大可能性的,重复以上步骤,直到处理完全部。
如下图所示(下图中的pc其实是之前的pc乘上类别概率c1、c2或c3):

(3)当有多个类别时,按类别分开进行非极大值抑制。
3.8Anchor Box
(1)上面都是假设一个网格里面只有一个对象,如果有两个对象,如下图所示,人和汽车的中心点几乎重合,这时可以提出一种新概念,即在一个网格框中设置多个不同形状的anchor box,比如说两个,一个瘦高的,一个挨胖的,如下图所示:

(2)其实实质就是每个网格的第三维度增加输出,把之前的3*3*8变成3*3*16(如下图所示),有时候会变成四个维度如3*3*2*8。

(3)有一点需要注意的是,在给样本打标签时要做到统一,比如说瘦高型的,那么将对应到前八个输出,如果是矮胖型的对应到后面的八个输出。
(4)当超过两个对象在同一个网格(其实概率特别小),暂时没有什么好的办法;如果两个对象都是与同一种类型(比如说瘦高型的),也没什么特别好的办法。
3.9YOLO算法
(1)将上面提到的各个模块组合在一起其实就是YOLO算法了,每个网格多个anchor box,最后再做非极大值抑制。

3.10候选区域(Region proposals)
(1)RCNN:首先使用传统图像分割的方法,对图像进行分割,然后提取出2000个可能有对象的候选框,这样相对于最开始提到的滑动框的方式减少了非常多的框,其他二者其实是一回事,然后送入网络,如下图所示:

(2)Fast RCNN:即先将整个图像进行卷积,然后再将候选框映射到卷积之后的输出做分类,其实就是上面提到的卷积整幅图减少重复计算。
(3)Faster RCNN:由于使用传统的图像分割选出候选框需要非常多的时间,所以使用卷积神经网络来选出候选框。三个算法特点如下图:

吴恩达《深度学习》第四门课(3)目标检测(Object detection)的更多相关文章
- 吴恩达深度学习第4课第3周编程作业 + PIL + Python3 + Anaconda环境 + Ubuntu + 导入PIL报错的解决
问题描述: 做吴恩达深度学习第4课第3周编程作业时导入PIL包报错. 我的环境: 已经安装了Tensorflow GPU 版本 Python3 Anaconda 解决办法: 安装pillow模块,而不 ...
- 吴恩达深度学习第2课第2周编程作业 的坑(Optimization Methods)
我python2.7, 做吴恩达深度学习第2课第2周编程作业 Optimization Methods 时有2个坑: 第一坑 需将辅助文件 opt_utils.py 的 nitialize_param ...
- 吴恩达深度学习第1课第4周-任意层人工神经网络(Artificial Neural Network,即ANN)(向量化)手写推导过程(我觉得已经很详细了)
学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...
- 吴恩达深度学习第2课第3周编程作业 的坑(Tensorflow+Tutorial)
可能因为Andrew Ng用的是python3,而我是python2.7的缘故,我发现了坑.如下: 在辅助文件tf_utils.py中的random_mini_batches(X, Y, mini_b ...
- 吴恩达深度学习第1课第3周编程作业记录(2分类1隐层nn)
2分类1隐层nn, 作业默认设置: 1个输出单元, sigmoid激活函数. (因为二分类); 4个隐层单元, tanh激活函数. (除作为输出单元且为二分类任务外, 几乎不选用 sigmoid 做激 ...
- 【Deeplearning.ai 】吴恩达深度学习笔记及课后作业目录
吴恩达深度学习课程的课堂笔记以及课后作业 代码下载:https://github.com/douzujun/Deep-Learning-Coursera 吴恩达推荐笔记:https://mp.weix ...
- 吴恩达深度学习 反向传播(Back Propagation)公式推导技巧
由于之前看的深度学习的知识都比较零散,补一下吴老师的课程希望能对这块有一个比较完整的认识.课程分为5个部分(粗体部分为已经看过的): 神经网络和深度学习 改善深层神经网络:超参数调试.正则化以及优化 ...
- 深度学习 吴恩达深度学习课程2第三周 tensorflow实践 参数初始化的影响
博主 撸的 该节 代码 地址 :https://github.com/LemonTree1994/machine-learning/blob/master/%E5%90%B4%E6%81%A9%E8 ...
- Coursera 吴恩达 深度学习 学习笔记
神经网络和深度学习 Week 1-2 神经网络基础 Week 3 浅层神经网络 Week 4 深层神经网络 改善深层神经网络 Week 1 深度学习的实用层面 Week 2 优化算法 Week 3 超 ...
- cousera 吴恩达 深度学习 第一课 第二周 作业 过拟合的表现
上图是课上的编程作业运行10000次迭代后,输出每一百次迭代 训练准确度和测试准确度的走势图,可以看到在600代左右测试准确度为最大的,74%左右, 然后掉到70%左右,再掉到68%左右,然后升到70 ...
随机推荐
- 基于docker创建的Jenkins,settings.xml文件放在哪里
如果运行容器时挂载目录如下 启动容器 docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true --r ...
- python3环境的搭建
Python3 下载 Python3 最新源码,二进制文档,新闻资讯等可以在 Python 的官网查看到: Python 官网:https://www.python.org/ 你可以在以下链接中下载 ...
- EasyUi控件Datagrid
很久没有打开我的博客园,刚刚大概扫了一眼我之前写的笔记,关于Devexpress那篇居然有四千多的浏览记录,不知道对浏览过的博友有没有起到一点点作用.当然我写笔记仅仅只是给自己留个记忆,如果歪打正着帮 ...
- EF一对多的表,模糊查询2个表的数据!
如用户表和电话表,要求搜索时可以模糊查询姓名和号码.都可以找到包含该字符的所有用户. /// <summary> /// 模糊查询姓名和电话号码,并按姓名排序返回 /// </sum ...
- C#基础笔记(第十九天)
1.CSS 层叠样式表 对HTML的补充实现网页内容和页面效果的彻底分离1.内联样式表(在标签内设置元素的样式)<p style="background:red; font-size: ...
- 洛谷P1393 动态逆序对(CDQ分治)
传送门 题解 听别人说这是洛谷用户的双倍经验啊……然而根本没有感觉到……因为另外的那题我是用树状数组套主席树做的……而且莫名其妙感觉那种方法思路更清晰(虽然码量稍稍大了那么一点点)……感谢Candy大 ...
- nginx的几种负载均衡策略
转自https://www.cnblogs.com/1214804270hacker/p/9325150.html 一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即 ...
- ReactNative常用组件库 react-native-camera 相机
通过react-native-camera调用原生相机,及自定义样式 GitHub地址: https://github.com/react-native-community/react-native- ...
- SQL语句01
SQL(Structured Query Language):结构化查询语言 SQL分类: 数据操纵语言DML(Data Manipulation Language) SELECT ...
- 一些很好用但不常用的css属性总结 (持续中......)
在各种框架横行的9012,感觉我们学前端的都变得浮躁了很多,放一张最近流行的神图: 唉,扯远了, 还是整理我的东西吧,路漫漫其修远兮,吾将上下而求索! 1, position:sticky; 粘性定位 ...