卷积神经网络基础与经典模型-Task4

本文深入探讨了卷积神经网络的基础知识,包括卷积运算、互相关运算、特征图、感受野的概念及其计算公式。同时介绍了LeNet和GoogLeNet等经典模型,以及卷积核尺寸选择的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 卷积神经网络基础

从本节讲解才知道,卷积神经网络中的Conv2d函数中,实现的滤波器与图像element-wise相乘并累加其实是互相关运算,二维互相关的解释如下:

二维互相关(cross-correlation)运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。图1展示了一个互相关运算的例子,阴影部分分别是输入的第一个计算区域、核数组以及对应的输出。

卷积运算,实际上是指:

将核数组上下翻转、左右翻转,再与输入数组做互相关运算。

由于卷积层的核数组是可学习的,所以使用互相关运算与使用卷积运算并无本质区别。

1.1 特征图与感受野

二维卷积层输出的二维数组可以看作是输入在空间维度(宽和高)上某一级的表征,也叫特征图(feature map)。影响元素x的前向计算的所有可能输入区域(可能大于输入的实际尺寸)叫做x的感受野(receptive field)。

Image Name
图1 二维互相关运算

二维卷积层输出的二维数组可以看作是输入在空间维度(宽和高)上某一级的表征,也叫特征图(feature map)。影响元素xxx的前向计算的所有可能输入区域(可能大于输入的实际尺寸)叫做xxx的感受野(receptive field)。

以图1为例,输入中阴影部分的四个元素是输出中阴影部分元素的感受野。我们将图中形状为2×22 \times 22×2的输出记为YYY,将YYY与另一个形状为2×22 \times 22×2的核数组做互相关运算,输出单个元素zzz。那么,zzzYYY上的感受野包括YYY的全部四个元素,在输入上的感受野包括其中全部9个元素。可见,我们可以通过更深的卷积神经网络使特征图中单个元素的感受野变得更加广阔,从而捕捉输入上更大尺寸的特征。

1.2 卷积层计算公式

假设原输入的高和宽是nhn_hnhnwn_wnw,卷积核的高和宽是khk_hkhkwk_wkw,在高的两侧一共填充php_hph行,在宽的两侧一共填充pwp_wpw列,则输出形状为:

输出层形状计算

一般来说,当高步幅(stride in height dim)为shs_hsh,宽步幅为sws_wsw时,输出形状为:

⌊(nh+ph−kh+sh)/sh⌋×⌊(nw+pw−kw+sw)/sw⌋ \lfloor(n_h+p_h-k_h+s_h)/s_h\rfloor \times \lfloor(n_w+p_w-k_w+s_w)/s_w\rfloor (nh+phkh+sh)/sh×(nw+pwkw+sw)/sw

如果ph=kh−1p_h=k_h-1ph=kh1pw=kw−1p_w=k_w-1pw=kw1,那么输出形状将简化为⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋\lfloor(n_h+s_h-1)/s_h\rfloor \times \lfloor(n_w+s_w-1)/s_w\rfloor(nh+sh1)/sh×(nw+sw1)/sw。更进一步,如果输入的高和宽能分别被高和宽上的步幅整除,那么输出形状将是(nh/sh)×(nw/sw)(n_h / s_h) \times (n_w/s_w)(nh/sh)×(nw/sw)

ph=pw=pp_h = p_w = pph=pw=p时,我们称填充为ppp;当sh=sw=ss_h = s_w = ssh=sw=s时,我们称步幅为sss

参数量计算

不考虑偏置的情况下,一个形状为(ci,co,h,w)(c_i, c_o, h, w)(ci,co,h,w)的卷积核的参数量是ci×co×h×wc_i \times c_o \times h \times wci×co×h×w,与输入图像的宽高无关。假如一个卷积层的输入和输出形状分别是(c1,h1,w1)(c_1, h_1, w_1)(c1,h1,w1)(c2,h2,w2)(c_2, h_2, w_2)(c2,h2,w2),如果要用全连接层进行连接,参数数量就是c1×c2×h1×w1×h2×w2c_1 \times c_2 \times h_1 \times w_1 \times h_2 \times w_2c1×c2×h1×w1×h2×w2。使用卷积层可以以较少的参数数量来处理更大的图像。

LeNet

其结构如下所示:

LeNet分为卷积层块和全连接层块两个部分。下面我们分别介绍这两个模块。
Image Name

卷积层块里的基本单位卷积层后接平均池化层:卷积层用来识别图像里的空间模式,如线条和物体局部,之后的平均池化层则用来降低卷积层对位置的敏感性。

卷积层块由2个这样的基本单位重复堆叠构成。在卷积层块中,每个卷积层都使用5×55 \times 55×5的窗口+valid padding+步长1,上图中的图片尺寸应为32×3232\times3232×32,否则算出来第一层卷积的输出无法得到28。

经典的LeNet-5网络在池化后进行了非线性函数处理,使用了sigmod函数。第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。

全连接层块含3个全连接层。它们的输出个数分别是120、84和10,其中10为输出的类别个数。

可以看到,在卷积层块中输入的高和宽在逐层减小。卷积层由于使用高和宽均为5的卷积核,从而将高和宽分别减小4,而池化层则将高和宽减半,但通道数则从1增加到16。全连接层则逐层减少输出个数,直到变成图像的类别数10。

Image Name

3. 近期经典模型

LeNet之后,12年出现了AlexNet,之后又陆续出现了VGG,Inception系列,Resnet系列,EfficientNet等等,这里以GoogLeNet为例:

  1. 由Inception基础块组成。
  2. Inception块相当于⼀个有4条线路的子网络。它通过不同窗口形状的卷积层和最⼤池化层来并⾏抽取信息,并使⽤1×1卷积层减少通道数从而降低模型复杂度。
  3. 可以⾃定义的超参数是每个层的输出通道数,我们以此来控制模型复杂度。

Image Name
完整模型结构 :

Image Name

卷积核(滤波器)的尺寸kkk为甚么一般是奇数?

计算机视觉中,kkk通常是奇数,甚至可能都是这样。很少看到一个偶数的滤波器在计算机视觉里使用,我认为有两个原因。

其中一个可能是,如果kkk是一个偶数,那么你只能使用一些不对称填充。只有kkk是奇数的情况下,Same卷积才会有自然的填充,我们可以以同样的数量填充四周,而不是左边填充多一点,右边填充少一点,这样不对称的填充。

第二个原因是当你有一个奇数维滤波器,比如3×3或者5×5的,它就有一个中心点。有时在计算机视觉里,如果有一个中心像素点会更方便,便于指出滤波器的位置。

也许这些都不是为什么通常kkk是奇数的充分原因,但如果你看了卷积的文献,你经常会看到3×3的滤波器,你也可能会看到一些5×5,7×7,1×1的滤波器。但是习惯上,我推荐你只使用奇数的滤波器。我想如果你使用偶数kkk也可能会得到不错的表现,如果遵循计算机视觉的惯例,我通常使用奇数值的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值