结果应该是这样对应1.1-1.3
OK,cut the crap.
一、计算机视觉(Computer Vision,CV)概述,1.1
LeNet、AlexNet到ResNet,近年来卷积神经网络似乎一直在主导深度学习的发展。在计算机视觉中,卷积神经网络依靠端到端等多方面优势干掉了一票图像处理算法。在课程开始时,从吴老师的精神头能看出,卷积神经网络学起来肯定很过瘾.
Andrew Ng计算机视觉图像分类的Hello World:猫图分类.
目标检测的Hello World:车辆识别.
终于有了新例子,风格迁移
在前两节课程
中,作业中处理的都是几十刚上百像素的图片(之前的猫图分类作业是64×64,样本向量
二、边缘检测(Edge Detection),1.2,1.3
这种类似的图在公众号,专栏中见过很多了,像拼图一样,从青春痘拼出个猪腰子脸.
边缘:物体周边的部分,在图片中因颜色不同呈现
在边缘检测中,既要检测垂直边缘,又要检测水平边缘,这样才能勾勒出目标.
对于数字图像,想得到边缘,需要用过滤器(filter),或称为核(kernel)、卷积核、滤波器来进行卷积运算(Convolution Operation,*),垂直和水平的区别就是过滤器不同,在矩阵运算中,也常用稀疏矩阵来过滤掉不想保留的元素.
这里课程中将的非常仔细,我就直接截图了.
1.垂直边缘检测
这里先说明计算方法,具体为什么选择6×6,3×3得到4×4再说
卷积计算第一行第一个元素
注意这里不是矩阵乘法,行乘列相加,而是直接对应相乘相加.
往右走一步,计算第一行第二个元素:
第一行其余类似.
回到最左边,计算第二行第一个元素:
其余元素都类似计算就得到卷积的结果.
编程时,卷积运算函数:
Python:conv_forward
TensorFlow:tf.nn.conv2d
tf.nn.conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=True,
data_format='NHWC',
dilations=[1, 1, 1, 1],
name=None
)
Keras:Conv2D
keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
为什么
是垂直过滤器?
先验知识①灰度值:数字越小越黑,一般255为白,0为黑
先验知识②:
有了以上两条,再看课程中为什么1,0,-1,1,0,-1,1,0,-1是垂直过滤器的例子:
将它们卷积后可视化,结果把原图像中间的垂直轮廓以白色勾勒出来了.
另一种,原图像从暗到亮的卷积结果轮廓不太直观
2.水平边缘检测
正边缘:从亮到暗.负边缘:从暗到亮.
一个水平边缘检测的例子:
原图:
结果(示意图):
3.过滤器
①Sobel filter
②Scharr filter
在深度学习中,面对不同领域的项目,过滤器要通过训练得到,就是权值矩阵
在本节中,6×6的图片经过3×3的过滤器后变为4×4,图片缩水了
下一部分将学习padding和stride,填充和步长,来应对这种情况