目录

第一周 卷积神经网络基础

第二周 深度卷积网络:实例探究

第三周 目标检测

第四周 特殊应用:人脸识别和神经风格转换

第一周 卷积神经网络基础

垂直边缘检测器,通过卷积计算,可以把多维矩阵进行降维。如下图:

卷积运算提供了一个方便的方法来发现图像中的垂直边缘。例如下图:

对于3x3的过滤器,使用下面的数字组合鲁棒性比较高,这样的过滤器也称为Sobel过滤器

还有一种称为Scharr的过滤器,如下:

随着深度学习的发展,我们学习的其中一件事就是当你真正想去检测出复杂图像的边缘,你不一定要去使用那些研究者们所选择的这九个数字(3x3的过滤器),但你可以从中获益匪浅。把这矩阵中的9个数字当成9个参数,并且在之后你可以学习使用反向传播算法,其目标就是去理解这9个参数。

将矩阵的所有数字都设置为参数,通过数据反馈,让神经网络自动去学习它们,我们会发现神经网络可以学习一些低级的特征,例如这些边缘的特征。

padding卷积,为了指定卷积操作中的padding,你可以指定的值。也可以使用Valid卷积,也就是p = 0。也可使用Same卷积填充像素,使你的输出和输入大小相同。(same卷积填充的核心要点,是使得原给出的矩阵中像素点都能够均匀被调用计算,否则边缘点调用少,从而被忽略)

一个典型的卷积神经网络通常有三层,一个是卷积层,我们常常用Conv来标注。还有两种常见类型的层,一个是池化层,我们称之为POOL。最后一个是全连接层,用FC表示。如下图:

卷积网络中使用池化层,也能够缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。一下是一个池化层的例子, 把4×4的输入拆分成不同的区域,我把这个区域用不同颜色来标记。对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值。

最大化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。所以最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。

池化的超级参数包括过滤器大小f和步幅s,常用的参数值为f = 2,s = 2,应用频率非常高,其效果相当于高度和宽度缩减一半。

最大池化只是计算神经网络某一层的静态属性,它只是一个静态属性。

如何选定这些参数,常规做法是,尽量不要自己设置超参数,而是查看文献中别人采用了哪些超参数,选一个在别人任务中效果很好的架构,那么它也有可能适用于你自己的应用程序。

下面看一个卷积神经网络的例子,步骤一般为卷积->池化->卷积->池化... ... ->全连接,全连接等。如下图:

第二周 深度卷积网络:实例探究

当用于训练图像和数据集时,AlexNet能够处理非常相似的基本构造模块,这些模块往往包含着大量的隐藏单元或数据,这一点AlexNet表现出色。AlexNetLeNet表现更为出色的另一个原因是它使用了ReLu激活函数。如下图:

非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。 跳跃连接(Skip connection),它可以从某一层网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层。我们可以利用跳跃连接构建能够训练深度网络的ResNets,有时深度能够超过100层。

如图所示,5个残差块连接在一起构成一个残差网络。

一般情况,随着网络深度加深,训练错误会越来越多。但是ResNets不一样, 即使网络再深,训练的表现却不错,比如说训练误差减少,就算是训练深达100层的网络也不例外。这种方法,可以有助于 解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能。也许从另外一个角度来看,随着网络越来深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。

普通网络和ResNets网络常用的结构是:卷积层-卷积层-卷积层-池化层-卷积层-卷积层-卷积层-池化层……依此重复。直到最后,有一个通过softmax进行预测的全连接层。

1×1卷积层 给神经网络添加了一个非线性函数,从而减少或保持输入层中的通道数量不变,当然如果你愿意,也可以增加通道数量。后面你会发现这对构建Inception网络很有帮助。如下图:

如果你看到一篇研究论文想应用它的成果,你应该考虑做一件事,我经常做的就是在网络上寻找一个开源的实现。因为你如果能得到作者的实现,通常要比你从头开始实现要快得多,虽然从零开始实现肯定可以是一个很好的锻炼。

在自己遇到的问题,训练的数据集内容比较少时,可以从网上下载一些以已训练且数据集比较大的模型,然后修改其最后的softmax输出值,然后再在此模型上进行训练学习,这就是卷积网络训练中的迁移学习,一般能够达到很好的效果。

常用的实现数据扩充的方法是使用一个线程或者是多线程,这些可以用来加载数据,实现变形失真,然后传给其他的线程或者其他进程。

当你没有太多标签数据时,你只需要更多地考虑手工工程。 另一套技术,当你有相对较少的数据时就可以用很多相似的数据。

第三周 目标检测

目标定位

滑动窗口目标检测,通过不断改变初始窗口的大小,以一定的步幅移动该窗口,对意向目标进行检测。具体如下图:

滑动窗口目标检测算法也有很明显的缺点,就是计算成本,因为你在图片中剪切出太多小方块,卷积网络要一个个地处理。如果你选用的步幅很大,显然会减少输入卷积网络的窗口个数,但是粗糙间隔尺寸可能会影响性能。反之,如果采用小粒度或小步幅,传递给卷积网络的小窗口会特别多,这意味着超高的计算成本。

YOLO对象检测算法是最有效的对象检测算法之一,包含了整个计算机视觉对象检测领域文献中很多最精妙的思路。

第四周 特殊应用:人脸识别和神经风格转换

人脸识别,需要解决一次学习的问题。 要让人脸识别能够做到一次学习,为了能有更好的效果,要做的应该是学习Similarity函数。 解决一次学习问题的,只要你能学习函数d,通过输入一对图片,它将会告诉你这两张图片是否是同一个人。如果之后有新人加入了你的团队(编号5),你只需将他的照片加入你的数据库,系统依然能照常工作。

函数的作用就是输入两张人脸,然后告诉你它们的相似度。实现这个功能的一个方式就是用Siamese网络,如下图:

对于两个不同的输入,运行相同的卷积神经网络,然后比较它们,这一般叫做Siamese网络架构。

要想通过学习神经网络的参数来得到优质的人脸图片编码,方法之一就是定义三元组损失函数然后应用梯度下降。学习收集定义好的三元组数据集, 用梯度下降最小化我们之前定义的代价函数,这样做的效果就是反向传播到网络中的所有参数来学习到一种编码,使得如果两个图片是同一个人,那么它们的d就会很小,如果两个图片不是同一个人,它们的d就会很大。如下图:

人脸识别的另一种方法是可以把识别过程当成一个二分类问题。对比两种图片的差异,输出相似度,如下图:

什么是神经风格迁移?

例如,可以把一张图片的元素整合到另一张图片中,如下图:

参考资料:

1.http://www.ai-start.com

Deep Learning.ai学习笔记_第四门课_卷积神经网络的更多相关文章

  1. Deep Learning.ai学习笔记_第一门课_神经网络和深度学习

    目录 前言 第一周(深度学习引言) 第二周(神经网络的编程基础) 第三周(浅层神经网络) 第四周(深层神经网络) 前言 目标: 掌握神经网络的基本概念, 学习如何建立神经网络(包含一个深度神经网络), ...

  2. Deep Learning.ai学习笔记_第三门课_结构化机器学习项目

    目录 第一周 机器学习策略(1) 第二周 机器学习策略(2) 目标:学习一些机器学习优化改进策略,使得搭建的学习模型能够朝着最有希望的方向前进. 第一周 机器学习策略(1) 搭建机器学习系统的挑战:尝 ...

  3. Deep Learning.ai学习笔记_第二门课_改善深层神经网络:超参数调试、正则化以及优化

    目录 第一周(深度学习的实践层面) 第二周(优化算法) 第三周(超参数调试.Batch正则化和程序框架) 目标: 如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行, ...

  4. Deep Learning.ai学习笔记_第五门课_序列模型

    目录 第一周 循环序列模型 第二周 自然语言处理与词嵌入 第三周 序列模型和注意力机制 第一周 循环序列模型 在进行语音识别时,给定一个输入音频片段X,并要求输出对应的文字记录Y,这个例子中输入和输出 ...

  5. 【Deep Learning Nanodegree Foundation笔记】第 10 课:Sentiment Analysis with Andrew Trask

    In this lesson, Andrew Trask, the author of Grokking Deep Learning, will walk you through using neur ...

  6. 【Deep Learning Nanodegree Foundation笔记】第 1 课:INTRODUCTION Welcome

    Welcome to the Deep Learning Nanodegree Foundations Program! In this lesson, you'll meet your instru ...

  7. 【Deep Learning Nanodegree Foundation笔记】第 0 课:课程计划

    第一周 机器学习的类型,以及何时使用机器学习 我们将首先简单介绍线性回归和机器学习.这将让你熟悉这些领域的常用术语,你需要了解的技术进展,并了解深度学习在更大的机器学习背景中的位置. 直播:线性回归 ...

  8. TensorFlow学习笔记(四)图像识别与卷积神经网络

    一.卷积神经网络简介 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现. ...

  9. 【Deep Learning Nanodegree Foundation笔记】第 7 课:NEURAL NETWORKS Intro to Neural Networks

    In this lesson, you'll dive deeper into the intuition behind Logistic Regression and Neural Networks ...

随机推荐

  1. hive中,动态添加map和reduce的大小,以增加并行度

    map是配置mapred.max.split.size,来定义map处理文件的大小,默认是256000000字段,换算就是256M.  如果想增加map的并行度,那么就是减少map处理文件的大小即可. ...

  2. 011 pandas的常见操作

    一:对索引进行操作 1.reindex重新索引 pandas提供了一个方法来创建一个适应新索引的新对象. Series通过调用reindex方法会根据新的索引顺序重新排序,如果新的索引中存在原索引不存 ...

  3. Hudson与Jenkins

    Hudson是Jenkins的前身,它们都是基于Java开发的一种持续集成工具,用于监控程序重复的工作,包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作. Hudson的特性 1 ...

  4. Python 豆瓣mv爬取

    爬取网址:https://www.dbmeinv.com/       豆瓣mv(现已更名) 注:自制力不好的同学,先去准备营养快线! import requests from bs4 import ...

  5. detailFormatter bootstrapTable

    detailView : true,//会导致表格最开头多出一列 detailFormatter :function(index, row, element){ var image = '<di ...

  6. HDU-1013的解题报告

    题目来源:hdu-1013 题意:正整数的数字根是通过求整数的整数而求出的.如果结果值是一个位数,那么这个数字就是数字根.如果结果值包含两个或多个数字,则将这些数字相加并重复该过程.只要需要获得一个数 ...

  7. 关于go get安装git golang项目时报错的处理办法

    关于go get安装git golang项目时报错的处理办法 使用go get安装github上的项目时一般来说,不可避免会出错.各种错误的处理办法: 必须条件: 1.安装git并配置环境变量.下载地 ...

  8. POJ 1094 Sorting It All Out 【拓扑排序】

    <题目链接> 题目大意: 对于N个大写字母,给定它们的一些关系,要求判断出经过多少个关系之后可以确定它们的排序或者排序存在冲突,或者所有的偏序关系用上之后依旧无法确定唯一的排序. 解题分析 ...

  9. POJ 1904 King's Quest (强连通分量+完美匹配)

    <题目链接> 题目大意: 有n个王子,每个王子都有k个喜欢的妹子,每个王子只能和喜欢的妹子结婚,大臣给出一个匹配表,每个王子都和一个妹子结婚,但是国王不满意,他要求大臣给他另一个表,每个王 ...

  10. anaconda源配置

    1. 生成配置文件 第一次运行 conda config命令时,将会在用户的home目录创建该文件..condarc配置文件,是一种可选的(optional)运行期配置文件,其默认情况下是不存在的. ...