面试 | 深度学习CV岗位面试基础问题总结

目标检测与深度学习

共 7989字,需浏览 16分钟

 ·

2021-05-31 20:33

全网搜集目标检测文章,人工筛选最优价值内容

编者荐语
这是一篇介绍深度学习CV岗位面试基础问题总结的文章,作者以自问自答对这些问题进行了分析与总结,希望可以对大家有一定的帮助。
作者丨那年当上博士前@CSDN
链接 | https://blog.csdn.net/qq_39056987/article/details/112104199

理论知识篇面试知识点总结,自问自答,学习、记录、分享和复习。


一、深度学习基础

1. 为什么需要做特征归一化、标准化?

  1. 使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。

  2. 加快学习算法的收敛速度。


2. 常用的归一化和标准化的方法有哪些?

  1. 线性归一化(min-max标准化)

  2. x’ = (x-min(x)) / (max(x)-min(x)),其中max是样本数据的最大值,min是样本数据的最小值

  3. 适用于数值比较集中的情况,可使用经验值常量来来代替max,min

  4. 标准差归一化(z-score 0均值标准化)

  5. x’=(x-μ) / σ,其中μ为所有样本的均值,σ为所有样本的标准差

  6. 经过处理后符合标准正态分布,即均值为0,标准差为1

  7. 非线性归一化

  8. 使用非线性函数log、指数、正切等,如y = 1-e^(-x),在x∈[0, 6]变化较明显, 用在数据分化比较大的场景



3. 介绍一下空洞卷积的原理和作用

空洞卷积也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。

以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样,通过调整扩张率得到不同的感受野不大小:

a是普通的卷积过程(dilation rate = 1),卷积后的感受野为3

b是dilation rate = 2的空洞卷积,卷积后的感受野为5

c是dilation rate = 3的空洞卷积,卷积后的感受野为8

可以这么说,普通卷积是空洞卷积的一种特殊情况


4. 为什么线性回归使用mse作为损失函数?

在使用线性回归的时候的基本假设是噪声服从正态分布,当噪声符合正态分布N(0,delta2)时,因变量则符合正态分布N(ax(i)+b,delta2),其中预测函数y=ax(i)+b。这个结论可以由正态分布的概率密度函数得到。也就是说当噪声符合正态分布时,其因变量必然也符合正态分布。因此,我们使用mse的时候实际上是假设y服从正态分布的。



5. 怎么判断模型是否过拟合,有哪些防止过拟合的策略?

在构建模型的过程中,通常会划分训练集、测试集。


当模型在训练集上精度很高,在测试集上精度很差时,模型过拟合;当模型在训练集和测试集上精度都很差时,模型欠拟合。


预防过拟合策略:

(1)增加训练数据:获取更多数据,也可以使用图像增强、增样等;

(2)使用合适的模型:适当减少网络的层数、降低网络参数量;

(3)Dropout:随机抑制网络中一部分神经元,使的每次训练都有一批神经元不参与模型训练;

(4)L1、L2正则化:训练时限制权值的大小,增加惩罚机制,使得网络更稀疏;

(5)数据清洗:去除问题数据、错误标签和噪声数据;

(6)限制网络训练时间:在训练时将训练集和验证集损失分别输出,当训练集损失持续下降,而验证集损失不再下降时,网络就开始出现过拟合现象,此时就可以停止训练了;

(7)在网络中使用BN层(Batch Normalization)也可以一定程度上防止过拟合(原理不介绍,感兴趣的同学可以去了解)。


6. 除了SGD和Adam之外,你还知道哪些优化算法?

主要有三大类:

  1. 基本梯度下降法,包括 GD,BGD,SGD;

  2. 动量优化法,包括 Momentum,NAG 等;

  3. 自适应学习率优化法,包括 Adam,AdaGrad,RMSProp 等


7. 训练神经网络有哪些调参技巧


8. 阐述一下感受野的概念

感受野指的是卷积神经网络每一层输出的特征图上每个像素点映射回输入图像上的区域的大小,神经元感受野的范围越大表示其接触到的原始图像范围就越大,也就意味着它能学习更为全局,语义层次更高的特征信息,相反,范围越小则表示其所包含的特征越趋向局部和细节。因此感受野的范围可以用来大致判断每一层的抽象层次,并且我们可以很明显地知道网络越深,神经元的感受野越大。


卷积层的感受野大小与其之前层的卷积核尺寸和步长有关,与padding无关。


计算公式为:Fj-1 = Kj + (Fj - 1)*Sj(最后一层特征图的感受野大小是其计算卷积核大小)






9. 神经网路的深度和宽度分别指的是什么?

神经网络的深度决定了网络的表达能力,早期的backbone设计都是直接堆叠卷积层,它的深度指的是神经网络的层数;后来的backbone设计采用了更高效的module(或block)堆叠的方式,每个module是由多个卷积层组成,这时深度指的是module的个数。

神经网络的宽度决定了网络在某一层学习到的信息量,指的是卷积神经网络中最大的通道数,由卷积核数量最多的层决定。通常的结构设计中卷积核的数量随着层数越来越多的,直到最后一层feature map达到最大,这是因为越到深层,feature map的分辨率越小,所包含的信息越高级,所以需要更多的卷积核来进行学习。通道越多效果越好,但带来的计算量也会大大增加,所以具体设定也是一个调参的过程,并且各层通道数会按照8×的倍数来确定,这样有利于GPU的并行计算。



10. 下采样的作用是什么?通常有哪些方式?

下采样层有两个作用,一是减少计算量,防止过拟合;二是增大感受野,使得后面的卷积核能够学到更加全局的信息。下采样的方式主要有两种:

  • 采用stride为2的池化层,如Max-pooling和Average-pooling,目前通常使用Max-pooling,因为他计算简单而且能够更好的保留纹理特征;

  • 采用stride为2的卷积层,下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量。


11. 上采样的原理和常用方式

在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样,它的实现一般有三种方式:

  • 插值,一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提,其他插值方式还有最近邻插值、三线性插值等;

  • 转置卷积又或是说反卷积,通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;

  • Max Unpooling,在对称的max pooling位置记录最大值的索引位置,然后在unpooling阶段时将对应的值放置到原先最大值位置,其余位置补0;




12. 模型的参数量指的是什么?怎么计算?


参数量指的是网络中可学习变量的数量,包括卷积核的权重weights,批归一化(BN)的缩放系数γ,偏移系数β,有些没有BN的层可能有偏置bias,这些都是可学习的参数,即在模型训练开始前被赋予初值,在训练过程根据链式法则不断迭代更新,整个模型的参数量主要是由卷积核的权重weights的数量决定,参数量越大,则该结构对平台运行的内存要求越高。

参数量的计算方式:

Kh × Kw × Cin × Cout (Conv卷积网络)

Cin × Cout (FC全连接网络)


13. 模型的FLOPs(计算量)指的是什么?怎么计算?

神经网络的前向推理过程基本上都是乘累加计算,所以它的计算量也是指的前向推理过程中乘加运算的次数,通常用FLOPs来表示,即floating point operations(浮点运算数)。计算量越大,在同一平台上模型运行延时越长,尤其是在移动端/嵌入式这种资源受限的平台上想要达到实时性的要求就必须要求模型的计算量尽可能地低,但这个不是严格成正比关系,也跟具体算子的计算密集程度(即计算时间与IO时间占比)和该算子底层优化的程度有关。

FLOPs的计算方式:

Kh × Kw × Cin × Cout × H × W = params × H × W (Conv卷积网络)

Cin x Cout (FC全连接网络)

计算量 = 输出的feature map * 当前层filter 即(H × W × Cout) × (K × K × Cin)



14. 深度可分离卷积的概念和作用

深度可分离卷积将传统的卷积分两步进行,分别是depthwise和pointwise。首先按照通道进行计算按位相乘的计算,深度可分离卷积中的卷积核都是单通道的,输出不能改变feature map的通道数,此时通道数不变;然后依然得到将第一步的结果,使用1*1的卷积核进行传统的卷积运算,此时通道数可以进行改变。





Focus模块,将W、H信息集中到通道空间,输入通道扩充了4倍,作用是可以使信息不丢失的情况下提高计算力。具体操作为把一张图片每隔一个像素拿到一个值,类似于邻近下采样,这样我们就拿到了4张图,4张图片互补,长的差不多,但信息没有丢失,拼接起来相当于RGB模式下变为12个通道,通道多少对计算量影响不大,但图像缩小,大大减少了计算量。


计算量的前后对比:

Kh × Kw × Cin × Cout × H × W

变成了 Kh × Kw × Cin × H × W + 1 × 1 × Cin × Cout × H × W

通过深度可分离卷积,当卷积核大小为3时,深度可分离卷积比传统卷积少8到9倍的计算量。


15. 转置卷积的原理

转置卷积又称反卷积(Deconvolution),它和空洞卷积的思路正好相反,是为上采样而生,也应用于语义分割当中,而且他的计算也和空洞卷积正好相反,先对输入的feature map间隔补0,卷积核不变,然后使用标准的卷积进行计算,得到更大尺寸的feature map。


16. 神经网络中Addition / Concatenate区别是什么?

Addition和Concatenate分支操作统称为shortcut,Addition是在ResNet中提出,两个相同维度的feature map相同位置点的值直接相加,得到新的相同维度feature map,这个操作可以融合之前的特征,增加信息的表达,Concatenate操作是在Inception中首次使用,被DenseNet发扬光大,和addition不同的是,它只要求两个feature map的HW相同,通道数可以不同,然后两个feature map在通道上直接拼接,得到一个更大的feature map,它保留了一些原始的特征,增加了特征的数量,使得有效的信息流继续向后传递。



17. 你知道哪些常用的激活函数?

ReLu系列:ReLU、ReLU6和leaky ReLU;ReLU6与ReLU相比也只是在正向部分多了个阈值,大于6的值等于6,而leaky ReLU和ReLU正向部分一样,都是大于0等于原始值,但负向部分却是等于原始值的1/10,浮点运算的话乘个0.1就好了。


  • ReLU函数的优点:

  • 解决了梯度消失的问题;

  • 计算速度和收敛速度非常快;

  • ReLU函数的缺点:

  • 低维特征向高维转换时会部分丢失;

  • 均值为非零;

Sigmoid系列:Sigmoid、swish、h-sigmoid、h-swish;sigmoid对低性能的硬件来说非常不友好,因为涉及到大量的exp指数运算和除法运算,于是有研究人员针对此专门设计了近似的硬件友好的函数h-sigmoid和h-swish函数,这里的h指的就是hardware的意思:

Sigmoid函数的优点:

  1. 输出为 0 到 1 之间的连续实值,此输出范围和概率范围一致,因此可以用概率的方式解释输出;

  2. 将线性函数转变为非线性函数;

Sigmoid函数的缺点:

  1. 幂运算相对来讲比较耗时;

  2. 输出均值为非 0;

    容易出现梯度消失的问题;

tanh  


tanh函数的优点:

Tanh 函数的导数比 Sigmoid 函数导数值更大、梯度变化更快,在训练过程中收敛速度更快;

使得输出均值为 0,可以提高训练的效率;

将线性函数转变为非线性函数;


tanh函数的缺点:

幂运算相对来讲比较耗时;

容易出现梯度消失;



18. 神经网络中1*1卷积有什么作用?

降维,减少计算量;在ResNet模块中,先通过11卷积对通道数进行降通道,再送入33的卷积中,能够有效的减少神经网络的参数量和计算量;

升维;用最少的参数拓宽网络通道,通常在轻量级的网络中会用到,经过深度可分离卷积后,使用1*1卷积核增加通道的数量,例如mobilenet、shufflenet等;

实现跨通道的交互和信息整合;增强通道层面上特征融合的信息,在feature map尺度不变的情况下,实现通道升维、降维操作其实就是通道间信息的线性组合变化,也就是通道的信息交互整合的过程;

1*1卷积核可以在保持feature map尺度(不损失分辨率)不变的情况下,大幅增加非线性特性(利用后接的非线性激活函数)。

卷积神经网络中用1*1 卷积有什么作用或者好处呢?



19. 解释一下目标检测中的anchor机制?它的作用是什么?

目标检测Anchor是什么?



20. BN(Batch Normalization)的原理和作用是什么?

将一个batch的数据变换到均值为0、方差为1的正态分布上,从而使数据分布一致,每层的梯度不会随着网络结构的加深发生太大变化,从而避免发生梯度消失或者梯度爆炸,能够加快模型收敛,同时还有防止过拟合的效果。


实现过程

计算训练阶段mini_batch数量激活函数前结果的均值和方差,然后对其进行归一化,最后对其进行缩放和平移。


作用

限制参数对隐层数据分布的影响,使其始终保持均值为0,方差为1的分布;

削弱了前层参数和后层参数之间的联系,使得当前层稍稍独立于其他层,加快收敛速度;

有轻微的正则化效果。


21. 随机梯度下降相比全局梯度下降好处是什么?

当处理大量数据时,比如SSD或者faster-rcnn等目标检测算法,每个样本都有大量候选框参与训练,这时使用随机梯度下降法能够加快梯度的计算;

每次只随机选取一个样本来更新模型参数,因此每次的学习是非常快速的,并且可以进行在线更新。



22. 如果在网络初始化时给网络赋予0的权重,这个网络能正常训练嘛?

不能,因为初始化权重是0,每次传入的不同数据得到的结果是相同的。网络无法更新



23. 无监督学习方法有哪些?

强化学习、K-means 聚类、自编码、受限波尔兹曼机



24. 增大感受野的方法?

空洞卷积、池化操作、较大卷积核尺寸的卷积操作



25. 神经网络的正则化方法?/过拟合的解决方法?

数据增强(镜像对称、随机裁剪、旋转图像、剪切图像、局部弯曲图像、色彩转换)

early stopping(比较训练损失和验证损失曲线,验证损失最小即为最优迭代次数)

L2正则化(权重参数的平方和)

L1正则化(权重参数的绝对值之和)

dropout 正则化(设置keep_pro参数随机让当前层神经元失活)



26. 梯度消失和梯度爆炸的原因是什么?

原因:激活函数的选择。

梯度消失:令bias=0,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较小时,则权重参数呈指数级减小。

梯度爆炸:令bias=0,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较大时,则权重参数呈指数级增长。


27. 深度学习为什么在计算机视觉领域这么好?

以目标检测为例,传统的计算机视觉方法需首先基于经验手动设计特征,然后使用分类器分类,这两个过程都是分开的。而深度学习里的卷积网络可实现对局部区域信息的提取,获得更高级的特征,当神经网络层数越多时,提取的特征会更抽象,将更有助于分类,同时神经网路将提取特征和分类融合在一个结构中。


28. 为什么神经网络种常用relu作为激活函数?

在前向传播和反向传播过程中,ReLU相比于Sigmoid等激活函数计算量小;

在反向传播过程中,Sigmoid函数存在饱和区,若激活值进入饱和区,则其梯度更新值非常小,导致出现梯度消失的现象。而ReLU没有饱和区,可避免此问题;

ReLU可令部分神经元输出为0,造成网络的稀疏性,减少前后层参数对当前层参数的影响,提升了模型的泛化性能;


29. 卷积层和全连接层的区别是什么?

卷积层是局部连接,所以提取的是局部信息;全连接层是全局连接,所以提取的是全局信息;


当卷积层的局部连接是全局连接时,全连接层是卷积层的特例;



30. 什么是正则化?L1正则化和L2正则化有什么区别?


所谓的正则化,就是在原来 Loss Function 的基础上,加了一些正则化项,或者叫做模型复杂度惩罚项,正则化机器学习中一种常用的技术,其主要目的是控制模型复杂度,减小过拟合。

两者的区别:

L1范式:它的优良性质是能产生稀疏性,导致 W 中许多项变成零。稀疏的解除了计算量上的好处之外,更重要的是更具有“可解释性”。

L2范式:使得模型的解偏向于范数较小的 W,通过限制 W 范数的大小实现了对模型空间的限制,从而在一定程度上避免了过拟合。不过 岭回归并不具有产生稀疏解的能力,得到的系数仍然需要数据中的所有特征才能计算预测结果,从计算量上来说并没有得到改观。

L1、L2正则化的区别


31. 常用的模型压缩方式有哪些?

使用轻量型的特征提取网络,例如:mobileNet、shuffleNet、GhostNet系列等等;

通道、层剪枝;

模型蒸馏;

模型量化。


32. 介绍一下mobileNet轻量型网络的设计思想

33. 介绍一下shuffleNet轻量网络的设计思想,它和mobileNet有什么区别?

34. yolov3相对于yolov2做了哪些改进?v4相对于v3又做了哪些改进?

35. 介绍一下残差网络的设计思想,残差主要是用来解决什么问题?它是怎么去做的?

36. 最近看的一篇论文是什么?能否简单介绍一下论文的内容。

37. 如何处理样本不平衡?




11.yolov4和v5均引入了CSP结构,介绍一下它的原理和作用;

CSP结构是一种思想,它和ResNet、DenseNet类似,可以看作是DenseNet的升级版,它将feature map拆成两个部分,一部分进行卷积操作,另一部分和上一部分卷积操作的结果进行concate。主要解决了三个问题:1. 增强CNN的学习能力,能够在轻量化的同时保持着准确性;2. 降低计算成本;3. 降低内存开销。CSPNet改进了密集块和过渡层的信息流,优化了梯度反向传播的路径,提升了网络的学习能力,同时在处理速度和内存方面提升了不少。


---END---

双一流大学研究生团队创建,一个专注于目标检测与深度学习的组织,希望可以将分享变成一种习惯。 

由于微信公众号试行乱序推送,您可能不再能第一时间收到目标检测与深度学习」的消息可以的话,将公众号设为星标★,并点击右下角在看,可第一时间收到我们的最新分享。

整理不易,点赞三连↓

浏览 82
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报