1.卷积 1.1卷积原理 从本质上讲,卷积的计算过程其实同全连接一样,也是各个神经元之间的线性组合。只是卷积操作在进行线性组合时选择的是特定位置上的神经元。 如上图所示,卷积操作其实就是每次取一个特定大小的矩阵F(蓝色矩阵中的阴影部分),然后将其对输入X(图中蓝色矩阵)依次扫描并进行内积的运算过程。可以看到,阴影部分每移动一个位置就会计算得到一个卷积值(绿色矩阵中的阴影部分),当F扫描完成后就得到了整个卷积后的结果Y(绿色矩阵)。 同时,我们将这个特定大小的矩阵F称为卷积核,即convolutional kernel或kernel或filter或detector,它可以是一个也可以是多个;将卷积后的结果Y]称为特征图,即feature map,并且每一个卷积核卷积后都会得到一个对应的特征图;最后,对于输入X的形状,都会用三个维度来进行表示,即宽(width),高(high)和通道(channel)。例如图1中输入x的形状为[7,7,1]。
1.2为什么多卷积核 对于一个卷积核,可以认为其具有识别某一类元素(特征)的能力;而对于一些复杂的数据来说,仅仅只是通过一类特征来进行辨识往往是不够的。因此,通常来说我们都会通过多个不同的卷积核来对输入进行特征提取得到多个特征图,然再输入到后续的网络中。不同的卷积核对其进行卷积特征提取,最后便能得到不同的特征图。 (1)原始输入有多少个通道,其对应的一个卷积核就必须要有多少个通道,这样才能与输入进行匹配,也才能完成卷积操作。换句话说,如果输入数据的形状为[n,n,c],那么对应每个卷积核的通道数也必须为c。
(2)用k个卷积核对输入进行卷积处理,那么最后得到的特征图一定就会包含有k个通道。例如,输入为[n,n,c],且用k个卷积核对其进行卷积,则卷积核的形状必定为[w1,w2,c,k],最终得到的特征图形状必定为[h1,h2,k];其中w1,w2为卷积核的宽度,h1,h2为卷积后特征图的宽度。
2.池化 池化过程在一般卷积过程后。池化(pooling) 的本质,其实就是采样。Pooling 对于输入的 Feature Map,选择某种方式对其进行降维压缩,以加快运算速度。 2.1最大池化(Max pooling) 池化过程类似于卷积过程,如上图所示,表示的就是对一个 44 feature map邻域内的值,用一个22的filter,步长为2进行‘扫描’,选择最大值输出到下一层,这叫做 Max Pooling。 max pooling常用的s=2,f=2的效果:特征图高度、宽度减半,通道数不变。
2.2平均池化(Average Pooling) 就是从以上取某个区域的最大值改为求这个区域的平均值。 如上图所示,表示的就是对一个 [公式] feature map邻域内的值,用一个 [公式] 的filter,步长为2进行‘扫描’,计算平均值输出到下一层,这叫做 Mean Pooling。 【池化层没有参数、池化层没有参数、池化层没有参数】 池化的作用: (1)保留主要特征的同时减少参数和计算量,防止过拟合。 (2)invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺度)。
3.VGG16 所有的卷积层全部使用3*3大小的卷积核,随着模型的变深,每一个模型的channel(或者说卷积核)的个数都翻倍。
红色表示max pooling,最大池化下采样层,下采样层并不包含参数,所以并不包含在16或者19中。 白色表示卷积层。 像素层面的长宽越来越小,语义层面的通道数越来越深(长宽越来越小,通道数越来越多)。 VGG16和VGG19本质上并没有什么区别,只是VGG19比VGG16在后面三个block中各多了一个卷积层 。
1.最常用的迁移学习的骨干模型 2.输入时2242243的RGB彩色图像 3.第一个block输出的feature map是22422464,有64个卷积核,每一个卷积核生成一个channel,每一个channel还是224224 4.下采样后长宽减半,然后继续用128个卷积核进行卷积,得到128个channel 以此类推 5.第五个block输出的feature map是77512,经过下采样将它展平成为一个长向量,再经过3个全连接层(第一二层有4096个神经元,第三层有1000个神经元) 6.经过最后一个全连接层输出1000个类别的logic分数,这1000个分数经过softmax处理,得到1000个类别的后验概率. 7.长宽信息逐渐减小,通道信息逐渐增加(将像素空间的信息转化成语义信息) D表示VGG16,E表示VGG19,都有5个block,输入的是224224*3的RGB的彩色图像,输出的是[0,1]的概率。 A-LRN(通过对比发现添加LRN并没有什么用)
VGG全部使用33的卷积 带权重的卷积核在原图上进行滑动,它所覆盖到的区域叫做感受野* 感受野上的像素和对应的卷积核上对应的权重相乘并求和,最终得到feature map
55的输入通过一个33的卷积核(步长为1)得到一个33的feature map,再通过一个33的卷积核(不用进行滑动)进行卷积,最后得到一个值,这个值反映的是原来的55的输入的信息,即2个33的卷积可以代替1个5*5的卷积。这样做的好处,经过两层之后模型深度变深了,非线性次数变多了,学习能力会变得更好,表示空间会变得更大而且参数的数量减少了 。
3个33的卷积核进行堆叠可以等价于1个77的卷积核 所以VGG中全部使用33的卷积 33本身也有一个好处:他是最小的能够包含左右、上下和中心点的最基本的单元
这种结构在inception中也用到了:用两个33的卷积核来代替一个55的卷积核。 一个33卷积也可以分解为一个31卷积和一个3*1卷积,相当于不对称卷积,这样也能够减少参数数量 。
VGG的特点 1.它的准确率并不是最优秀的(经典神经网络结构,深度并不是很深),准确率处于中游水平。 2.臃肿:计算量和参数量都特别大
参考: [1]https://zhuanlan.zhihu.com/p/268179286 [2]https://www.bilibili.com/video/BV1fU4y1E7bY?p=4&spm_id_from=pageDriver [3]https://zhuanlan.zhihu.com/p/78760534
|