吴恩达神经网络和深度学习-学习笔记-42-目标检测
构建一个对象检测算法,通过卷积网络进行对象检测。
采用的是基于滑动窗口的目标检测算法。
实例:构建一个汽车检测算法
训练集
简单来说的步骤:
- 创建一个标签训练集(也就是X和Y),表示适当剪切的汽车图片样本(0和1代表有无)。
出于我们对这个训练集的期望 你一开始可以使用适当剪切的图片(就是整张图片X几乎都被汽车占据)。 - 开始训练卷积网络。
输入这些适当剪切过的图像,卷积网络输出0或1表示图片中有汽车或没有汽车。 - 用训练完的卷积网络来实现滑动窗口目标检测。
滑动窗口目标检测
滑动窗口目标检测的步骤:
- 选定一个特定大小的窗口
- 将这个红色小方块的图片输入卷积网络
- 卷积网络开始进行预测,即判断红色方框内的图片有没有汽车
- 滑动窗口目标检测算法接下来会继续处理第二个图像(红色方框稍向右滑动之后的区域),然后重复以上操作。
思路是以固定步幅滑动窗口,遍历图像的每个区域,思路是以固定步幅滑动窗口 遍历图像的每个区域,对每个位置按0或1进行分类。
可以根据卷积网络对输入大小的要求调整这个红色方框的区域。
这样不论汽车在图片的什么位置,总有一个窗口可以检测到它。
滑动窗口目标检测算法的明显缺点:
就是计算成本的问题,因为你在图片中剪切出太多小方块,卷积网络要一个个地处理。
如果你选用的步幅很大,显然会减少输入卷积网络的窗口个数,但是粗粒度coarser granularity可能会影响性能。反之,如果采用小粒度或小步幅,传递给卷积网络的小窗口会特别多,意味着超高的计算成本。
卷积层上应用滑动窗口目标检测算法
全连接层转化成卷积层
为了构建滑动窗口的卷积应用,首先要知道如何把神经网络的全连接层转化成卷积层。
下图是一个简单的卷积网络:
下面是如何把这些全连接层转化成卷积层:
本质上来说,就是将400×1的二维矩阵变成1×1×400的数据立方(由行的堆叠变为信道的堆叠)。
详细来说就是:
而对于第一个全连接层,用400个5x5×16的过滤器进行卷积操作,输出结果为1x1×400(对应全连接层的400×1)。==我们不再把它看作一个含有400个节点的集合,而是一个1x1x400的输出层。==从数学角度看,它和全连接层是一样的。
因为这400个节点中每个节点都有一个5x5x16维度的过滤器。所以每个值都是上一层上这些5x5x16激活值经过某个任意线性函数的输出结果
然后再添加另外一个卷积层,这里用的是400个1x1×400过滤器来实现卷积,下一层的维度是1x1x400(其实就是上个网络中的这一全连接层)。
最后经由4个1x1×400过滤器的处理,得到一个softmax激活值。
卷积层上应用滑动窗口目标检测算法
(第二行的图)假设输入给卷积网络的图片大小是14x14x3,测试集图片是16x16x3。
现在给这个输入图片加上黄色条块(加完的图片其实就是测试集的数据)
- 在最初的滑动窗口算法中,你会把这片蓝色区域输入卷积网络,生成0或1分类。
- 接着滑动窗口,步幅为2个像素(向右滑动2个像素),将这个绿框区域输入给卷积网络,运行整个卷积网络,得到另外一个标签0或1。
- 继续将橘色区域输入给卷积网络,卷积后得到另一个标签。
- 最后对右下方的紫色区域进行最后一次卷积操作。
滑动窗口的卷积应用,使得卷积网络在这4次操作过程中很多计算都是重复的。比如使用相同的5x5x16过滤器进行卷积操作得到12x12x16的输出层,得到12x12x16的输出层输出结果6x6x16,照旧应用400个5x5的过滤器得到一个2x2x400的输出层(而不是1x1x400),应用1x1过滤器得到另一个2x2x400的输出层,再经过一个全连接层最终得到一个2x2x4的输出层。
所以该卷积操作的原理是:我们不需把输入图片分割成四个子集,来分别执行向前传播,而是把它们作为一张图片输入给卷积网络进行计算,其中的公有区域可以共享很多计算。
第三行图片是更大的图片的示例,原理还是和上面一样。
小结:
我们不用依靠连续的卷积操作来识别图片中的汽车,比如我们可以对大小为28x28的整张图片进行卷积操作,一次得到所有预测值(用全连接层转化成卷积层的方法)。如果足够幸运,神经网络便可以识别出汽车的位置。
吴恩达神经网络和深度学习-学习笔记-42-目标检测相关推荐
- 吴恩达神经网络与深度学习——深度神经网络
吴恩达神经网络与深度学习--深度神经网络 深度神经网络 符号 前向传播 矩阵维度 m个样本 为什么使用深层表示 搭建深层神经网络块 正向传播和反向传播 前向和反向传播 前向传播 反向传播 参数和超参数 ...
- 吴恩达神经网络和深度学习
[前言] 在学习了深度学习和神经网络之后,为什么我要以博客的形式来做笔记?这CSDN有那么多的优秀文章,我自己写的都比不上 别人的我写的真的有意义吗,为什么我要浪费大量的时间去做这项工作?我相信一句话 ...
- 吴恩达神经网络与深度学习——浅层神经网络
吴恩达神经网络与深度学习--浅层神经网络 神经网络概述 神经网络表示 计算神经网络的输出 m个样本的向量化 for loop 向量化 向量化实现的解释 激活函数 sigmoid tanh函数 ReLu ...
- 吴恩达神经网络和深度学习-学习笔记-38-使用开源的方案+迁移学习+数据增强data augmentation
使用别人的开源成果 想要用现成的网络,最好在网络上找到开源的实现,这要比从头开始实现快得多. 比如:直接在Google上搜索resnets github,找到合适的后点击下载会得到URL,然后在cmd ...
- 吴恩达神经网络和深度学习-学习笔记-28-端到端的深度学习(end-to-end deep learning )
深度学习最令人振奋的最新动态之一,就是端到端深度学习end-to-end deep learning的兴起. 什么是"端到端深度学习" 以前有一些数据处理系统或学习系统,它们需要多 ...
- 吴恩达神经网络和深度学习-学习笔记-8-梯度消失与爆炸 + 梯度检测
梯度消失与爆炸 介绍 直观理解是: 权重W只比1(即单位矩阵)大一点,深度神经网络的激活函数将爆炸式增长. 权重W只比1(即单位矩阵)小一点,深度神经网络的激活函数将指数式递减. 虽然我(吴恩达老师) ...
- 吴恩达-神经网络和深度学习课程-学习心得(一)
前言: 陆陆续续学完了吴恩达老师在网易云课堂上开设的深度学习工程师微专业的部分内容(01.神经网络与深度学习,04.卷积神经网络,02.改善深层神经网络),在进一步应用实践之前,对之前的学习的内容做个 ...
- 吴恩达神经网络和深度学习-学习笔记-39-计算机视觉现状
Data vs hand-engineering 你可以把大部分的机器学习问题看成是在你的数据相对较少的地方,应用到你拥有大量数据的地方. 我们今天有相当数量的语音识别数据,至少相对于这个问题的复杂性 ...
- 吴恩达神经网络和深度学习-学习笔记-22-误差分析
单一误差分析 假设我们面对一个猫分类器的准确率不够的原因. 队友看了一下算法分类出错的例子,注意到算法将一些够狗分类为猫. 在这种条件下,我们应不应该做一个项目专门处理狗?比如搜集更多的狗的图片,或者 ...
- 吴恩达神经网络和深度学习-学习笔记-21-何时该改变开发集+测试集或指标
需要我们改变开发集+测试集或指标的情况,是现有的指标或开发测试集并不能帮助我们选择出最好的模型! 如果你的评估指标,无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标. (加权来排除某一类 ...
最新文章
- OPPO海外官方调试ID
- c语言getitem函数,该借用和窃取的引用的Python C-API函数
- (转)目前比较全的CSS重设(reset)方法总结
- 基于IP访问控制的局限性
- python集成工具包_pyBit
- 把玩Alpine linux(二):APK包管理器
- AMBA总线协议AHB、APB
- java.time.format例子_java格式化时间示例
- 14、java中的集合(1)
- 《我的十年图像生涯》—王郑耀(西安交通大学)
- PerfDog-移动端性能测试-基本使用
- PHP常用的缓存技术汇总
- ES6_Promise
- poj3349找相同的雪花(哈希)
- java判断闰年代码_根据输入的年份判断是否是闰年?(在JAVA用if-else)
- 偷用计算机作文,【实用】《偷着》作文500字4篇
- WIn7 解决 - ReadyBoost 未启用,因为该计算机的运行速度足够快
- XML外部实体(XXE)注入详解
- QT之调用百度地图离线API
- 小熊派STM32-OTA+IOT教程