计算机视觉
相关问题:
1)图像分类:
2)目标检测:
3)图像风格迁移:
挑战:数据输入可能会非常大
输入10001000的彩色图像,则需要输入的数据量为100010003 =3M,这意味着特征向量X的维度高达3M ,如果在第一隐藏层有1000个神经元,使用标准全连接,那么权值矩阵中将会有10003M=3B的参数。参数量过于庞大,难以获得足够的数据用来防止过拟合,并且需要存储3B数据的内存巨大,让人无法接受。
卷积神经网可以处理大图像
边缘检测示例
卷积运算是卷积神经网络最基本的组成部分。
神经网络前几层检测边缘,后面几层检测到物体的部分,更后面检测到完整的物体。
计算机检测目标时,最开始应是边缘检测,例如垂直边缘或水平边缘。
如何检测边缘?
tensorflow
tf.nn.conv2d
边缘检测
在输出图像中间区域的亮出,表示在图像中间有一个特别明显的垂直边缘。
垂直边缘检测器:
水平边缘检测器:
sobel:
增加中间一行的权重使得结果的鲁棒性更高
Padding
一个基本的卷积操作——padding
一个ff的卷积核取卷积一个66的图像。可能会得到一个(n-f+1)(n-f+1)的输出。
缺点:
1.每次卷积操作,图像会缩小
2.角落的像素点只被一个输出所使用,丢失掉许多边缘信息。
为了解决这个问题,需要填充这幅图像(习惯上,用0填充)
将66的图像填充为88输出则为66
“Vaild” convolution:No padding:
nXn * fXf = n-f+1 X n-f+1
“Same” convolution:No padding:
nXn * fXf = n+2p-f+1 X n+2p-f+1
n+2p-f+1 =n
p = (f-1)/2(f一般为奇数)
卷积步长
卷积步长是卷积神经网络的基本操作
卷积为何有效
假设想检测一个彩色图像的特征,大小为66,三个通道,为了检测图像的边缘或一些其他特征,不是把它和原来33的卷积核做卷积,而是和一个三维的卷积核做卷积。
如果想检测不同的特征,用不同的卷积核:
单层卷积网络
例如:10给我卷积核,大小为333,
参数=(333+1)*10=280
不论输入图像有多大,参数只有280个,这就是卷积神经网络的一个特征——“避免过拟合”
f^[l]:卷积核尺寸
p^[l]:padding
s^[l]:步长
nc^[l]:卷积核个数
简单卷积网络示例
要做图像分类或图像识别,输入一张39393的图像,让计算机识别图像中是否有猫
输入39393
卷积核3310,stride=1 ,padding = 0
第一隐藏层:37373(39-3+1=37)
卷积核5520,stride=2 ,padding = 0
第二隐藏层:171720((37-5)/2+1=17)
卷积核5540,stride=2 ,padding = 0
第二隐藏层:7740((17-5)/2+1=7)
7740=1960
将全部1960个数字展开形成一个很长的向量,为了预测的结果将这个长向量填充到softmax回归函数中
随着神经网络计算深度的不断增加,图像不断缩小,39->37->17->7,但通道数目不断增加3->10->20->40
一个典型的CNN有:卷积层、池化层、全连接层
池化层
除了卷积层,CNN经常使用池化层缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。
最大池化:
均值池化:
目前,用的最多的是最大池化
最大池化是计算神经网络某一层的静态属性
卷积神经网络示例(lenet-5)
尽量不要自己设置超参数,查看文献中别人用了哪些超参数,选一个在别人任务中效果很好的架构,它有可能也适用于你自己的应用程序。
池化层没有参数
卷积层参数少
随着NN的加深,激活值会减小,如果激活值下降太快,也会影响网络性能
为什么使用卷积?
参数少
原因:
1.参数共享
2.稀疏连接