-
- 学习目标
- 1.计算机视觉
- 2.边缘检测示例
- 3.其他边缘检测
- 4.Padding
- 5.卷积步长 strided convolution
- 6.在三维图像(RGB)上进行卷积
- 7.单层式卷积网络one Layer of a Convolution Network
- 8.简单型卷积网络示例
- 9.池化层 Pooling Layers
- 10.卷积神经网络示例(CNN Example)
- 11.为何要用卷积?
- 12.practic
- 13.番外,卷积核的数学意义
- 14.编程题
- 卷积过程相关代码
-
- Z1 = tf.nn.conv2d(X,W1, strides = [1,1,1,1], padding = ‘SAME’)
- A1 = tf.nn.relu(Z1)
- P1 = tf.nn.max_pool(A1, ksize = [1,8,8,1], strides = [1,8,8,1], padding = ‘SAME’)
- P2 = tf.contrib.layers.flatten(P2)
- Z3 = tf.contrib.layers.fully_connected(P2, 6,activation_fn=None)
- cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = Z3, labels = Y))
- optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
-
- 卷积过程相关代码
学习目标
- Understand the convolution operation
- Understand the pooling operation
- Remember the vocabulary used in convolutional neural network (padding, stride, filter, …)
- Build a convolutional neural network for image multi-class classification
1.计算机视觉
应用方式:
- Image Classification
- Object detection
- Neural Style Transfer
在大图片上进行深度学习。普通学习图片可以达到1000*1000*3(通道数)的级别。将是一个有3,000,000(3 million)特征数的输入。
2.边缘检测示例
垂直边缘检测,在课堂的实例中其实是使用了一个Prewitt的filter(filter过滤器,【图像处理】滤波器模板,神经网络的卷积核kernel指的都是一个意思)。参考本笔记12.2。
数学里,星号是卷积的标准符号,×是乘号。但是一般编程语言里星号 表示乘法。卷积操作是矩阵求内积。
3.其他边缘检测
如上图上下所示。
颜色由深变浅,产生正边缘。颜色由浅入深,产生负边缘。
更据filter的不同数值填入,检测器会具备一些独特的边缘检测,除了水平、垂直检测,还有可能45度检测,75度检测,72度检测等等等等。
卷积神经网络的独特之处:将filter中的元素当作参数去学习,并通过反向传播让模型自己去学习该设置什么值。而这将生成更加善于捕捉你的数据的统计学特征的过滤器。并且很有可能超过CV专业人员精心设计的filter数值。简而言之,训练CNN在相当意义上是在训练每一个卷积层的滤波器。让这些滤波器组对特定的模式有高的激活,以达到CNN网络的分类/检测等目的。
在单层卷积后,通常能提取出横向、纵向、斜向的边缘这样的简单特征。经过多次卷积后,filter能通过学习提取出复杂的组合特征。例如眼睛、鼻子等等由多种线条组合而成的图形,这些高维特征是一系列低维特征的组合。在一些论文中有将这些卷积后的图片显示出来供研究人员观察,观察卷积网络学习到的是些什么图像。“反卷积”是不是这种应用的定义?
4.Padding
不padding的情况下:(n×n)的图片,用(f×f)的filter卷积,产生的输出大小(n-f+1)×(n-f+1)
不进行padding的缺点:
- 输入图片的边缘像素,因为不处于对称中心点,被卷积遍历运算引用的次数比图像中心区域的像素点少的多。即我们会丢失图像靠近边界的信息。
- 每一次卷积图片都会缩小,多次卷积图片将变得非常的小。
所以,有必要进行padding(补白)。比如输入图片是(6×6)padding成(8×8)的图片后,再进行kernel=(3×3)的卷积,输出将还是一个(6×6)的图像。
Padding/Not | Cool | |
---|---|---|
“Valid” convolution | no Padding | 会忽略图像边缘的信息 |
“Same” convolution | Pad so that output size is the same as the input size. | 单侧padding的像素个数p=(f-1)/2时 输出图片与输入图片同样大小 |
5.卷积步长 strided convolution
就是filter每次移动的步长。通常情况下,步长=1。如果设定步长=2,前后两次filter的起始位置相距2个像素(水平方向移动是相距2个像素,换行时也是下降两像素)。下图示例就是strided=2的情形。
filter大小是(f×f),加上Strided(s)、padding(p是单侧补上的像素宽度)后,输入图片(n×n)与输出图片大小间的关系是:
互相关(cross-correlation)与卷积
在数学教材书籍上,卷积操作需要对卷积核先做水平与垂直翻转,再求卷积。这会产生一种性质:(A卷积B)* 卷积C = A卷积 *(B卷积C) ,这一性质在数学上叫结合率(associativity),这一性质在信号处理领域很有用 但对深度神经网络而言,它并不重要 。从数学定义上,我们现在进行的“无翻转卷积核”操作最好称之为交叉相关。
但在机器学习的约定中, 我们通常忽略掉翻转的操作,并将这称之为卷积。
6.在三维图像(RGB)上进行卷积
在二维(W×H)图像上的卷积示意图:
Convolutions over Volume
对于一个多通道图片,以RGB图片举例是3通道,要建立一个对等通道数的filter,即RGB图片要3个filter。这3个filter分别与原始图片的三个通道进行卷积操作。合计求和成一个值填入输出图像上。
所以虽然输入图像有3层,但输出图像是单层的。
如何在应用中应用多个过滤器
应用两个过滤器,那么输出就是两层。这两层也是下一层的输入。实际上你可以在同一层应用很多个filter来捕捉原始图片上各种各样的特征。
summary:
原始图片(n×n×nc)∗filter(f×f×nc)→(n−f+1)×(n−f+1)×n′c 原 始 图 片 ( n × n × n c ) ∗ f i l t e r ( f × f × n c ) → ( n − f + 1 ) × ( n − f + 1 ) × n c ′
n′c n c ′ ,是下一层的 nc n c ,等于应用过滤器的数量
7.单层式卷积网络one Layer of a Convolution Network
如上图所示,一层完整卷积层,包括
- 使用n个filter进行卷积,
- 每个filter输出的卷积结果加上各自的偏置量,得出Z(一个卷积核共享一个b)
- 对这个Z进行激活操作,比如relu。
- 最终的输出结果有n层(depth=n)
卷积网络的参数数量计算
If you have 10 filters that are 3×3×3 in one layer of a neural network,how many parameters does that layer have?
NumberParameters=(单个kernel的参数量+1个偏置量)×filter总数=[(3×3×3)+1]×10=280 N u m b e r P a r a m e t e r s = ( 单 个 k e r n e l 的 参 数 量 + 1 个 偏 置 量 ) × f i l t e r 总 数 = [ ( 3 × 3 × 3 ) + 1 ] × 10 = 280
优点:无论输入层多大(输入的图片多大),参数量恒定。相比普通神经网络输入有多少个特征就至少有