这里写目录标题
- 参考文章
- 全连接神经网络
- 全连接神经网络的瓶颈
- 全连接神经网络应用场景
- 卷积神经网络
- 卷积层(CONV)
- 卷积核
- 卷积操作
- 卷积层设计
- 卷积步长(stride)
- 边界填充
- 特征响应图组尺寸计算
- 激活层
- 池化层(POOL)
- 池化操作定义
- 池化操作作用
- 池化层超参数
- 常见池化操作
- 全连接层(FC)
- 样本增强
- 翻转
- 随机缩放& 抠图
- 色彩抖动
参考文章
计算机视觉与深度学习-05-纹理表示&卷积神经网络-北邮鲁鹏老师课程笔记
全连接神经网络
全连接神经网络的瓶颈
参数过多易过拟合&显存压力大
如果图像大小为200 * 200 * 3,隐层每个神经元权值个数是多少?
对于输入层,则输入层神经元个数 d 为 120000,对于全连接神经网络,后一层的每个神经元都会与前一层的所有神经元相连,所以隐层每个神经元就有120000个权值,同时再加上自身的一个偏置值。
参数过多易过拟合&显存压力大
参数越多,计算量越大。
前向传播数据需要存入显存,参数越大,显存压力越大。
全连接神经网络应用场景
全连接神经网络仅适合参数少的情况,
- 例如:处理小图像。
- 或者前置输出已经表示为向量的场景,例如:接在卷积神经网络之后对cnn得到的特征(该处的特征可以类比纹理表示中的48维向量)进行处理。
卷积神经网络
可以将卷积神经网络类比为纹理表示例子中的卷积核组,最后得到表示特征响应图组的48维向量,之后接全连接神经网络进行分类(全连接神经网络适合处理小输入)。
卷积层(CONV)
卷积核
卷积操作
卷积结果还是一个实数
对图像所有位置进行卷积
特征响应图中每个位置上的值反映了图像上对应位置是否存在卷积核所记录的基元结构信息。
使用多个卷积核 得到多个特征响应图
卷积层设计
卷积核深度 = 前一层图像的深度(前层决定,不是自定义)
卷积核个数 = 自己自定义
特征图个数 = 卷积核个数
注意:卷积层输入不局限于图像,可以是任意三维数据;该层的卷积核深度要求与输入的三维矩阵的深度一致。
卷积步长(stride)
卷积神经网络中,卷积核可以按照指定的间隔进行卷积操作,这个间隔就是卷积步长。
步长为1,卷积核每次移动1个位置
步长为2,卷积核每次移动2个位置
卷积步长对卷积结果的影响
输入数据矩阵尺寸:W1 x H1
输出数据矩阵尺寸:W2 x H2
W2与W1关系:
- W 2 = W 1 − F S + 1 W2 = \tfrac{W1-F}{S} + 1 W2=SW1−F+1
- H 2 = H 1 − F S + 1 H2 = \tfrac{H1-F}{S} + 1 H2=SH1−F+1
F 卷积核尺寸
S 卷积核步长
边界填充
卷积神经网络中最常用的填充方式是零值填充。
没有填充
填充后
作用:保持输入、输出尺寸的一致!
填充对卷积结果的影响
输入数据矩阵尺寸:W1 x H1
输出数据矩阵尺寸:W2 x H2
W2与W1关系:
- W 2 = W 2 − F + 2 P S + 1 W2 = \tfrac{W2-F+2P}{S} + 1 W2=SW2−F+2P+1
- H 2 = H 1 − F + 2 P S + 1 H2 = \tfrac{H1-F+2P}{S} + 1 H2=SH1−F+2P+1
F 卷积核尺寸
S 卷积核步长
P 零填充数量
特征响应图组尺寸计算
卷积核尺寸,卷积步长,填充数量,以及卷积核数量最好经过周密的设计,到自己输出层时正好是自己需要的尺寸,最好不要中间出现除不尽的情况,如果出现除不尽的情况,就忽略几个像素。
激活层
池化层(POOL)
池化操作定义
对特征响应图某个区域进行池化就是在该区域上指定一个值来代表整个区域。
- 池化操作对每个特征响应图独立进行。
- 池化操作不改变特征图响应图个数。
池化操作作用
对每一个特征响应图独立进行,降低特征响应图组中每个特征响应图的宽度和高度,减少后续卷积层的参数的数量,降低计算资源耗费,进而控制过拟合。
卷积运算复杂度 O ( k m 2 n 2 ) O(km^{2}n^{2} ) O(km2n2),其中k为卷积核个数,m为卷积核边长,n为图像边长。
减少后续卷积层计算量
神经网络中为了反向计算梯度,需要在显存中保存前向计算结果。
如果卷积之后特征响应图和原图像的长宽相同,卷积核多的情况下,特征响应图组的层数增多,需要保存的数据就变多。可能超出显存存储能力范围。
池化操作可以减少特征响应图的长宽,达到减少计算量的效果。
缩小特征响应图像 & 增大感受野
卷积核的尺寸相对变大,粗粒度提取,使得卷积核在图像上的视野更广,即感受野更大,可以提取更多信息。
池化层超参数
池化窗口(pooling window)
池化窗口是指在进行池化操作时,对输入数据进行采样的窗口大小。通常,池化窗口是正方形的,其尺寸可以通过指定边长来定义。
例如,一个池化窗口大小为2x2的池化层将在输入数据中以2x2的窗口进行采样。
池化步长(pooling stride)
池化步长是指池化窗口在输入数据上滑动的步幅。它决定了池化操作的重叠程度和输出尺寸。
- 如果池化步长为1,表示池化窗口每次滑动1个单位;
- 如果池化步长大于1,表示窗口每次滑动的距离更大,因此输出的尺寸会相应减小。
常见池化操作
最大池化
使用区域内的最大值来代表这个区域。
此次最大池化操作后,特征响应图中的75%的响应信息都丢掉,但不改变特征响应图的个数。
类似于非最大化抑制操作,保留原图中对卷积核响应比较高的地方,其他地方舍弃。
平均池化
采用区域内所有值的均值作为代表。
全连接层(FC)
全连接层(Fully Connected Layer),也被称为密集连接层或全连接层,是神经网络中常见的一种层类型。全连接层的每个神经元都与前一层的所有神经元相连接。
在全连接层中,每个神经元接收来自前一层的所有输入,并通过使用权重和偏置进行线性变换,然后将变换后的结果输入到激活函数中进行非线性变换。这样,全连接层能够学习到输入数据中的复杂特征和关系。
全连接层通常用于神经网络的末尾,将前面的特征提取层与最终的输出层连接起来。
在图像分类任务中,经常在卷积层之后使用全连接层,将卷积层提取到的特征映射转换为一个或多个类别的概率输出。
样本增强
样本增强(Data Augmentation)是一种在机器学习和计算机视觉领域中常用的技术,旨在增加训练数据的多样性和数量,以改善模型的泛化能力和鲁棒性。通过对原始数据应用一系列的变换和扩展操作,可以生成与原始数据不同但具有相似特征的新样本。
样本增强的目的是通过引入数据的多样性来增强模型的鲁棒性,使其在不同的环境、角度、光照条件等下都能产生良好的预测结果。
翻转
翻转(Flipping)是样本增强中常用的一种技术,通过对图像进行水平或垂直方向的翻转操作来增加数据的多样性。
通过翻转操作,可以增加数据集的样本数量,并且不会改变图像的语义信息。这有助于减轻过拟合的问题,提高模型的泛化能力。
-
水平翻转:水平翻转是指将图像沿着垂直中轴线进行翻转,即左右调换。这种操作可以模拟镜像效果,从而增加数据的多样性。例如,对于人脸识别任务,可以通过水平翻转来扩充训练数据,使模型能够更好地适应不同的人脸朝向。
-
垂直翻转:垂直翻转是指将图像沿着水平中轴线进行翻转,即上下调换。这种操作也可以增加数据的多样性。例如,在某些图像分类任务中,垂直翻转可以模拟倒置的物体,使模型更具鲁棒性。
需要注意的是,对于一些特定任务,如文本识别或者物体检测,翻转操作可能不适用,因为翻转后的图像可能会改变文本的方向或物体的位置。在应用翻转操作时,需要根据具体任务的需求进行判断和调整。
随机缩放& 抠图
-
随机缩放:随机缩放是指对图像进行随机放大或缩小的操作。通过随机选择缩放比例或目标尺寸,可以改变图像的大小。这种操作可以模拟不同距离、不同视角下的图像变化,增加数据的多样性。在应用随机缩放时,可以保持图像的宽高比,或者在特定情况下进行非等比例缩放。
-
抠图:抠图是指从原始图像中随机裁剪出一个子区域作为新的图像。通过随机选择裁剪位置和尺寸,可以改变图像的视野和内容。抠图操作可以模拟不同的视角、不同的目标尺寸和位置,增加数据的多样性。在应用抠图时,通常需要保证裁剪后的图像仍具有足够的信息来表示图像中的目标。
这两种操作可以结合使用,例如先随机缩放图像,然后在缩放后的图像上进行随机抠图。这样可以进一步增加数据的多样性,提高模型的鲁棒性和泛化能力。
需要注意的是,在进行随机缩放和抠图时,应该保持数据的一致性和合理性。例如,在目标检测任务中,图像的缩放和抠图操作应该与目标的尺寸和位置相对应,以避免引入错误的标注信息。此外,也应该避免过度缩放或抠图导致关键信息丢失的情况发生。
色彩抖动
色彩抖动(Color Jittering)是样本增强中常用的一种技术,用于改变图像的颜色分布,增加数据多样性。通过对图像的颜色通道进行随机的扰动,可以引入一定程度的颜色变化,从而增强模型的鲁棒性。
在色彩抖动中,常用的颜色通道操作包括亮度调整、对比度调整、饱和度调整和色相调整。这些操作可以单独应用,也可以组合使用。具体的操作方式如下:
-
亮度调整(Brightness Adjustment):通过增加或减小图像的亮度值,改变图像的明暗程度。
-
对比度调整(Contrast Adjustment):通过增加或减小图像的对比度,改变图像中不同区域的亮度差异。
-
饱和度调整(Saturation Adjustment):通过增加或减小图像的饱和度,改变图像的色彩鲜艳程度。
-
色相调整(Hue Adjustment):通过旋转图像的色相角度,改变图像中的颜色。