CV领域的应用
1图像识别
2目标检测
3风格重绘
卷积运算寻找边缘
例:我要在这个6*6的图像上进行边缘检测,这时候我可以建立一个3*3的过滤器:
注意,这个图像是个灰度图,因为没有RGB三色通道。
这样的过滤器(卷积核)拿去求6*6的卷积。
得到的结果是这个4*4矩阵(图片):
计算左上角那个值的时候:
对应位置相乘然后加起来...
其他位置同理:
寻找边缘的原理:
这样就能找到垂直的边缘了,检测的是“变化”。
其他边缘检测器
比如soble和scharr filter,给中间的值赋予了更高的权重,研究的一个点就是卷积核的数值怎么取?
后来有学者认为可以把卷积核的值设置为参数,通过反向传播来学习获得它们的值。
填充
为什么使用填充?
1:使用卷积操作时,图会缩小:比如前文的6*6图片使用3*3去卷积,得到了4*4的结果(降维了)。
2:边角上的像素,在每次计算时只会被使用一次,但是图像中间的像素会被多次计算。这样可能会丢失边缘的信息。
所以在卷积之前,我们先对原图进行填充:把6*6填充为8*8,在通过3*3的卷积后得到的还是6*6。
通常在填充的时候,用0来填。
填充多少?
1.valid:不填(就会越变越小)
2.same:希望输出和输入一样大,即:p=(f-1)/2,通常过滤器f*f的f都是奇数,甚至大多选择3*3
卷积步长
例。步长=2:
结果图片的维度
输入图片n*n,卷积核f*f,填充p,步长s,则结果是【(n+2p-f)÷s+1】*【(n+2p-f)÷s+1】
这里要考虑步长取整的问题,因为不能这样计算:
如果(n+2p-f)÷s+1不是整数的话,那就向下取整(丢弃边缘?)
三维卷积
不再仅仅对灰度图像卷积,换成rgb图像
然后得到一个三维过滤器:
两者的通道数必须一致。
当你使用多个过滤器,你就可以检测不同的特征:
比如第一个测水平,第二个测垂直...最后输出图像的通道数(多少个过滤器)有时候也叫立方体的 深度,为了不和神经网络的深度混淆,这里用通道数来说。
CNN中的一层:过滤器就是参数W,后面可以加一个偏置(通过广播),再利用非线性函数ReLU就能得到输出的a了。
池化层
输入图片:
选用一个2*2的过滤器,步长设为2,保留最大的值,得到
保留最大值是因为他是这一部分区域内最显著的特征。这种不常用。
另一种采样方式:均值采样(池化?)
这层没有任何要学习的,因为它就是个固定的函数。
CNN示例
输入一个32*32*3的彩色图像,卷积核5*5*3,步长1,6个核,得到28*28*6的一个输出,然后使用最大值池化,参数设置为2*2,步长=2,那么结果是14*14*6(通道保持不变,池化不会改变特征数,也没有需要靠反向传播学习的参数)。
接下来输入卷积2层,使用卷积核5*5*6,步长1,16个核,得到10*10*16的结果,再输入f=2,s=2的池化层,得到5*5*16的结果。
最后放一个全连接层(fc),意味着每一个单元都和lay2输出的400(5*5*16)个单元相连,需要120+120*400个参数。(就是120个单元,一个单元里要输入400个特征,要计算400个权重,然后每个单元有一个偏置b)。再通过softmax进行分类预测(比如你要做手写数字识别)。
常见的网络模型:
conv-pool-conv-pool-fc-fc-fc-softmax。
今天就到这里吧,效率有点低,明天去图书馆继续看