图像数据与边缘检测
卷积神经网络(Convolutional Neural Network, CNN)
是一种专门用于处理具有类似网格结构的数据的深度学习模型,如时间序列数据、图像数据等。CNN 在计算机视觉任务中表现尤为出色,例如图像分类、目标检测和分割等。以下是关于 CNN 的详细介绍:
架构组成
- 卷积层(Convolutional Layer):
卷积层是 CNN 的核心组成部分,它通过应用多个过滤器(也称为核或卷积核)来提取输入数据中的特征。
每个过滤器在输入上滑动(卷积操作),生成一个特征图(Feature Map),表示该过滤器所捕捉到的特定模式。 - 激活函数(Activation Function):
通常紧跟在卷积层之后,用来引入非线性因素,使得网络可以学习更复杂的映射关系。
常用的激活函数包括 ReLU (Rectified Linear Unit)、Sigmoid 和 Tanh 等。 - 池化层(Pooling Layer):
池化层用于降低特征图的空间尺寸,减少参数数量并控制过拟合。
最常用的池化方法是最大池化(Max Pooling),它取每个局部区域的最大值作为输出。 - 全连接层(Fully Connected Layer):
在 CNN 的最后几层通常是全连接层,它们将前面所有层提取出的特征进行整合,并映射到最终的输出类别。
全连接层的每个节点都与前一层的所有节点相连。 - 输出层(Output Layer):
输出层根据具体任务而定,对于分类问题,它通常包含 Softmax 函数以输出各个类别的概率分布。 - 特点与优势
局部感知野(Local Receptive Fields):每个神经元只与其感受野内的输入相连,这反映了自然图像中的局部相关性。
权重共享(Weight Sharing):同一卷积核在不同位置使用相同的参数,减少了需要训练的参数量。
平移不变性(Translation Invariance):经过多层卷积和池化后,模型对物体的位置变化具有一定容忍度。
应用场景
- 图像识别:如人脸识别、物体分类、医学影像分析等。
- 视频处理:动作识别、行为分析等。
- 自然语言处理:虽然主要用于视觉任务,但也可以应用于文本数据,比如句子分类、情感分析等。
训练过程
- 初始化参数:为网络中的所有可训练参数(如卷积核权重、偏置项等)赋予随机初值。
- 前向传播:从输入开始逐层计算直至得到预测结果。
- 损失计算:利用定义好的损失函数(如交叉熵损失)衡量预测结果与真实标签之间的差异。
- 反向传播:根据损失梯度调整各层参数,使损失最小化。
- 迭代优化:重复上述步骤直到模型收敛或达到预设的训练轮数。
为什么需要卷积神经网络
在计算机视觉领域,通常要做的就是指用机器程序替代人眼对目标图像进行识别等。那么神经网络也好还是卷积神经网络其实都是上个世纪就有的算法,只是近些年来电脑的计算能力已非当年的那种计算水平,同时现在的训练数据很多,于是神经网络的相关算法又重新流行起来,因此卷积神经网络也一样流行。
- 1974年,Paul Werbos提出了误差反向传导来训练人工神经网络,使得训练多层神经网络成为可能。
- 1979年,Kunihiko Fukushima(福岛邦彦),提出了Neocognitron, 卷积、池化的概念基本形成。
- 1986年,Geoffrey Hinton与人合著了一篇论文:Learning representations by back-propagation errors。
- 1989年,Yann LeCun提出了一种用反向传导进行更新的卷积神经网络,称为LeNet。
- 1998年,Yann LeCun改进了原来的卷积网络,LeNet-5。
图像特征数量对神经网络效果压力
假设下图是一图片大小为28 * 28 的黑白图片时候,每一个像素点只有一个值(单通道)。那么总的数值个数为 784个特征。
那现在这张图片是彩色的,那么彩色图片由RGB三通道组成,也就意味着总的数值有28 28 3 = 2352个值。
从上面我们得到一张图片的输入是2352个特征值,即神经网路当中与若干个神经元连接,假设第一个隐层是10个神经元,那么也就是23520个权重参数。
如果图片再大一些呢,假设图片为1000 *1000* 3,那么总共有3百万数值,同样接入10个神经元,那么就是3千万个权重参数。这样的参数大小,神经网络参数更新需要大量的计算不说,也很难达到更好的效果,大家就不倾向于使用多层神经网络了。
所以就有了卷积神经网络的流行,那么卷积神经网络为什么大家会选择它。那么先来介绍感受野以及边缘检测的概念。
感受野
1962年Hubel和Wiesel通过对猫视觉皮层细胞的研究,提出了感受野(receptive field)的概念,Fukushima基于感受野概念提出的神经认知机(neocognitron)可以看作是卷积神经网络的第一个实现网络。
单个感受器与许多感觉神经纤维相联系,感觉信息是通过许多感受神经纤维发放总和性的空间与时间类型不同的冲动,相当于经过编码来传递。
边缘检测
**为了能够用更少的参数,检测出更多的信息,基于上面的感受野思想。**通常神经网络需要检测出物体最明显的垂直和水平边缘来区分物体。比如
看一个列子,一个 6×6的图像卷积与一个3×3的过滤器(Filter or kenel)进行卷积运算(符号为 *),* 也可能是矩阵乘法所以通常特别指定是卷积的时候代表卷积意思。
- 相当于将 Filter 放在Image 上,从左到右、从上到下地(默认一个像素)移动过整个Image,分别计算 ImageImage 被 Filter 盖住的部分与 Filter的逐元素乘积的和
在这个6×6 的图像中,左边一半像素的值全是 10,右边一半像素的值全是 0,中间是一条非常明显的垂直边缘。这个图像与过滤器卷积的结果中,中间两列的值都是 30,两边两列的值都是 0,即检测到了原 6×66×6 图像中的垂直边缘。
注:虽然看上去非常粗,是因为我们的图像太小,只有5个像素长、宽,所以最终得到结果看到的是两个像素位置,如果在一个500 x 500的图当中,就是一个竖直的边缘了。
随着深度学习的发展,我们需要检测更复杂的图像中的边缘,与其使用由人手工设计的过滤器,还可以将过滤器中的数值作为参数,通过反向传播来学习得到。算法可以根据实际数据来选择合适的检测目标,无论是检测水平边缘、垂直边缘还是其他角度的边缘,并习得图像的低层特征。
评论记录:
回复评论: