计算机视觉面试(三)
1. 使用大卷积核的好处
在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域,如下图所示:
个人感觉使用大卷积核的作用是增大感受野。
但是相比于使用一个大卷积核的卷积运算,比如5X5 的卷积运算,跟推荐使用2个3X3的卷积替代,其感受野是一样的。
先回顾一下卷积神经网络特征图大小的计算:
再回顾如何计算感受野:
先可视化一下感受野,举一个例子,原始图像为5X5,卷积核(Kernel Size)为 3X3,padding 为 1 ,stride为 2 ,依照此卷积规则,连续做两次卷积。熟悉卷积过程的朋友都知道第一次卷积结果是3x3 大小的feature map,第二次卷积结果是 2x2大小的feature map。整个过程如图所示:
自顶向下的计算公式:
(N-1)_RF = f(N_RF, stride, kernel) = (N_RF - 1) * stride + kernel
其中,RF是感受野。N_RF和RF有点像,N代表 neighbour,指的是第n层的 一个 feature在n-1层的RF,记住N_RF只是一个中间变量,不要和RF混淆。 stride是步长,ksize是卷积核大小。
回到原来的问题:
例如:对于一个特征图A为28X28,卷积核大小为5X5,stride=1,padding=0,卷积运算后得到特征图B:24X24,特征图B 的每一个1X1的区域感受到了特征图A每个5X5区域。
同样的以2个3X3的卷积举例:
对于第一个3X3的卷积 特征图A为28X28,stride=1,padding=0,得到特征图B:26X26,特征图B 的每一个3X3的区域感受到了特征图A每个5X5区域,对于第二个3X3的卷积,得到特征图24X24,特征图C 的每一个1X1的区域感受到了特征图B每个3X3区域,也即是特征图C 的每一个1X1的区域感受到了特征图A每个5X5区域。
对于第一个3X3卷积后解读:
使用33的卷积核连续卷积2次可以达到55的卷积核卷积1次提取特征图的能力!
优势一:
减少了网络参数。
以2个33的级联卷积代替1个55的卷积为例:可以减少55-23*3=7个参数,减少了28%的参数。
优势二:
减少了计算量
以2个33的级联卷积代替1个55的卷积为例:可以减少55L-233L=7L次计算,减少了28%的计算量。
优势三:
整合了两个非线性激活层,代替单一非线性激活层,增加了判别能力。
使用大卷积核的好处只是个人见解,有更好的想法可在评论区指出,在这里抛砖引玉,等待大佬的评论。
2.SVM 如何实现多分类?
SVM本身是一个二值分类器
SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。
目前,构造SVM多类分类器的方法主要有两类
(1)直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;
(2)间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。
一对多法(one-versus-rest,简称OVR SVMs)
训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。
假如我有四类要划分(也就是4个Label),他们是A、B、C、D。
于是我在抽取训练集的时候,分别抽取
(1)A所对应的向量作为正集,B,C,D所对应的向量作为负集;
(2)B所对应的向量作为正集,A,C,D所对应的向量作为负集;
(3)C所对应的向量作为正集,A,B,D所对应的向量作为负集;
(4)D所对应的向量作为正集,A,B,C所对应的向量作为负集;
使用这四个训练集分别进行训练,然后的得到四个训练结果文件。
在测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试。
最后每个测试都有一个结果f1(x),f2(x),f3(x),f4(x)。
于是最终的结果便是这四个值中最大的一个作为分类结果。
评价:
这种方法有种缺陷,因为训练集是1:M,这种情况下存在biased.因而不是很实用。可以在抽取数据集的时候,从完整的负集中再抽取三分之一作为训练负集。
一对一法(one-versus-one,简称OVO SVMs或者pairwise)
其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。
当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。
Libsvm中的多类分类就是根据这个方法实现的。
假设有四类A,B,C,D四类。在训练的时候我选择A,B; A,C; A,D; B,C; B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结果。
投票是这样的:
A=B=C=D=0;
(A,B)-classifier 如果是A win,则A=A+1;otherwise,B=B+1;
(A,C)-classifier 如果是A win,则A=A+1;otherwise, C=C+1;
…
(C,D)-classifier 如果是A win,则C=C+1;otherwise,D=D+1;
The decision is the Max(A,B,C,D)
评价:这种方法虽然好,但是当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的。
层次支持向量机
层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。
其他多类分类方法
除了以上几种方法外,还有有向无环图SVM(Directed Acyclic Graph SVMs,简称DAG-SVMs)和对类别进行二进制编码的纠错编码SVMs。
3.双边滤波为什么能保留边缘?
一、高斯滤波
高斯滤波的含义:高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯滤波的作用:高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
高斯滤波计算方式如下:
假设有一个卷积核h,就一般为33的矩阵:
有一个待处理矩阵x:
hx的计算过程:
第一步,将卷积核翻转180°,也就是成为了:
第二步,将卷积核h的中心对准x的第一个元素,然后对应元素相乘后相加,没有元素的地方补0。
最后结果:
高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:
(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.
(2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.
(3)高斯函数的傅立叶变换频谱是单瓣的.这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.
(4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.
(5)由于高斯函数的可分离性,较大尺寸的高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.
缺陷:
高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。
高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的边缘上,因为只使用了距离来确定滤波权重,导致边缘被模糊
双边滤波:
空间距离:当前点距离滤波模板中心点的欧式距离。
灰度距离:当前点距离滤波模板中心点的灰度的差值的绝对值。
双边滤波的核函数是空间域核与像素范围域核的综合结果:
1)在图像的平坦区域,像素值变化很小,那么像素差值接近于0,对应的像素范围域权重接近于1,此时空间域权重起主要作用,相当于进行高斯模糊;
2)在图像的边缘区域,我们知道,边缘会有较大的灰度变化,而这个公式就会使边缘和边缘另一边的区域生成比较小的权值,与被卷积像素的灰度值类似的区域会生成比较大的权值,像素值变化很大,那么像素差值大,对应的像素范围域权重变大,即使距离远空间域权重小,加上像素域权重总的系数也较大,从而保护了边缘的信息。
双边滤波的效果如下图,在突变的边缘上,使用了像素差权重,所以很好的保留了边缘。
双边滤波的原理如下图所示:
4.池化层的反向传播是怎么实现的?
池化层pooling操作常见的有平均池化mean pooling和最大池化max pooling,前者取某特征区域的平均值进行输出,而后者则取某特征区域的最大值进行输出,池化层的一般作用是对特征图进行下采样,它本身没有参数权重,计算也简单,但它可达到降维特征、突显特征、减少参数量、减少计算量、增加非线性、防止过拟合及提升模型泛化能力等作用,池化层的前向传播我们都比较好理解,但是其是如何参与反向传播的呢?
原理很简单,看下图:
mean pooling
max pooling
思考:
- 手撕NMS
- 手撕ResNet残差块
- 常用的边缘提取算子
- Adam, AdaGrad的区别