一、卷积核大小、图片大小、感受野、目标大小之间关系。
感受野:神经网络每一层输出的特征图上的像素点在原始图像上映射区域的大小。
感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次。
因此,多次卷积后的特征图越小,证明每点像素对应的感受野越大,可以检测原图像中较大的物体。
同样卷积核越大,对应得到的感受野越大,看到的图片信息更多。
感受野大于被检测物体,会忽略被检测的物体,导致物体成为背景,提取不到物体特征。感受野小于被检测物体,获得的局部信息过多,导致全局信息的丢失,影响识别率。
卷积层的结构参数
卷积核大小(Kernel Size):定义卷积操作的感受野。
步幅(Stride):定义卷积核遍历图像时的步幅大小。其默认值通常设置为1。设置大于1的值后对图像进行下采样,这种方式类似池化操作。
边界扩充(Padding):定义了网络层处理样本边界的方式。当卷积核大于1且不进行边界扩充,输出尺寸将相应缩小;当卷积核以标准方式进行边界扩充,则输出数据的空间尺寸将与输入相等。
输入与输出通道(Channels):构建卷积层时需定义输入通道 I,并由此确定输出通道 O 。这样,可算出每个网络层的参数量 I × O × K ,其中 K 为卷积核的参数个数。例如,某个网络层有64个大小为 3 × 3 的卷积核,则对应 K 值为 3 × 3。
卷积实际上是 加权叠加,输出的维度小于输人的维度。如果需要输出的维度和输入的维度相等,就需要填充(padding)。
计算公式
o = ( i + 2 p − k ) / s + 1
i:输入图像尺寸
o:输出特征图尺寸
k:卷积核kernel尺寸
p:填充数padding大小
s:步长大小
二、卷积种类。
卷积的矩阵表示:
1、普通卷积
2、深度可分离卷积。
传统标准卷积:
同时考虑了图像的区域和通道,即一个卷积核需要对所有的通道进行相同的卷积操作,然后再进行加和,最后得到这个卷积核的一个输出。假设有一个 3 × 3 的卷积层,输入通道数为16,输出通道数为32,每个卷积核同16个输入通道数据分别卷积,然后叠加每一个通道对应位置的值,得到一个通道上的数据,那么32输出通道数需要 3 × 3 × 16 × 32 = 4608 个参数。
深度可分离卷积:
深度可分离卷积的成功应用是Google的Xception网络。首先对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道feature map后,再对这些通道feature map进行标准的 1 × 1 跨通道卷积操作。针对上面的例子应用深度可分离卷积,用1个 3 × 3 大小的卷积核遍历16个通道的数据,得到16个特征图,然后用32个 1 × 1 的卷积核遍历这16个特征图,进行相加融合。这个过程使用了 16 × 3 × 3 + 16 × 32 × 1 × 1 = 656 个参数,远少于4608个参数。
先对应通道分别卷积,再进行信息融合。n*n*J ——> 1*1*K。减少所需参数个数。
深度可分离卷积的优点
神经可分离卷积与普通卷积相比,减少了所需要的参数。
深度可分离卷积将以往普通卷积操作同时考虑通道和区域变成先只考虑区域,在考虑通道,实现了通道和区域的分离。
深度可以分离卷积也有通道信息融合,它的过程分为两个部分:depthwise(逐层)+pointwise(逐像素)。前者负责卷积运算,后者使用 1 × 1 卷积核进行通道的像素融合。
3、分组卷积。
分组卷积将输入数据在深度(即通道上)进行了分组,即某几个通道编为一组,相应的卷积核也需要作出同样的改变,而卷积核大小不需要改变。每组的卷积核同它们对应组内的输入数据卷积,得到输出数据后,再用concatenate的方式组合起来。
分为g组,输入为H*W*C1/g,每次卷积共c2/g个h*w*c1/g的卷积核。
Group conv本身就极大的减少了参数。比如当输入通道维256,输出通道维256,kernel size为 3 × 3 ,不做group conv参数为 256 × 3 × 3 × 256 。实施分组卷积时,若group为8,每个group的input channel和output channel均为32,参数为 8 × 32 × 3 × 3 × 32 ,是原来的八分之一。而group conv最后每一组输出的feature maps应该是以concatenate的方式组合。Alex认为group conv的方式能够增加filter之间的对角相关性,而且能够减少训练参数,不容易过拟合,这类似于正则的效果。
4、空洞卷积。
空洞卷积(atrous convolutions)又名扩张卷积(dilated convolutions),在ICLR 2016上提出,其主要作用是在不增加参数和模型复杂度的条件下,可以指数倍的扩大视觉感受野(每一个输出是由诗句感受野大小的输入决定的)的大小。是针对图像语义分割问题中下采样会降低图像分辨率、丢失信息而提出的一种卷积思路。利用添加空洞扩大感受野,向卷积层引入了一个称为“扩张率(dilate rate)”的超参数,该参数定义了卷积核处理数据时各值的间距。
空洞卷积是对卷积核的操作,这样可以在参数数量不变的情况下,具有更大的感受野。空洞卷积常用在图像分割中。
空洞卷积诞生于图像分割领域,图像输入到网络中经过CNN提取特征,再经过pooling降低图像尺度的同时增大感受野。由于图像分割是pixel-wise预测输出,所以还需要通过upsampling将变小的图像恢复到原始大小。upsampling通常是通过deconv(转置卷积)完成。因此图像分割FCN有两个关键步骤:池化操作增大感受野,upsampling操作扩大图像尺寸。虽然经过upsampling操作恢复了大小,但是很多细节还是被池化操作丢失了。Dilated Conv可满足既增大感受野又不减小图像大小的操作。
引入扩张率,在不增大参数量下,提高感受野,避免下采样导致图像信息丢失问题。
但是当连续使用空洞卷积后, kernel 并不连续,也就是并不是所有的 pixel 都用来计算了,因此这里将信息看做 checker-board 的方式会损失信息的连续性。这对 pixel-level dense prediction 的任务来说是致命的。同时该卷积对小物体目标不友好。
5、转制卷积(反卷积)。
转置卷积(transposed convolutions)又名反卷积(deconvolutions)或是分数步长卷积(fractially straced convolutions)。反卷积的概念第一次出现在Zeiler在2010年发表的论文Deconvolutional Networks中。
深度学习中的deconv是一种上采样upsampling过程,可以还原图像的大小形状,但是不能够完全恢复原来的像素值,因此并不是严格的逆运算。
反卷积从字面上理解就是卷积的逆过程。反卷积虽然存在,但是在深度学习中并不常用。而转置卷积虽然又名反卷积,却不是真正意义上的反卷积。因为根据反卷积的数学含义,通过反卷积可以将通过卷积的输出信号,完全还原输入信号。而事实上,转置卷积只能还原shape大小,而不能还原value。至少在数值方面上,转置卷积不能实现卷积操作的逆过程。所以转置卷积与真正的反卷积有点相似,因为两者产生了相同的空间分辨率。
矩阵运算
转置卷积应用领域
CNN可视化,通过转置卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern响应最大,即可视化哪些特征是卷积操作提取出来的;
FCN全卷积网络中,由于要对图像进行像素级分割,需要将图像尺寸还原到原来的大小,类似upsampling的操作,所以需要采用转置卷积;
GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要转置卷积操作。
6、可变形卷积。
传统的卷积核一般是长方形或正方形,但MSRA提出了一个相当反直觉的见解,认为卷积核的形状可以是变化的,变形的卷积核能让让只看感兴趣的图像区域,这样识别出来的特征更佳。可变形的卷积核,可以看成是视觉领域的新视界。
7、3D卷积。
8、因果卷积。
三、常用图像卷积核种类。
参考资料:
https://blog.csdn.net/studyeboy/article/details/106839396?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162822606816780274138921%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162822606816780274138921&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-20-106839396.first_rank_v2_pc_rank_v29&utm_term=空洞卷积&spm=1018.2226.3001.4187