Advertisement

SLAM面试笔记(8) — 计算机视觉面试题

阅读量:

目录

问题1:目标检测的算法分类

问题2:卷积神经网络的组成

问题3:输入层的作用

问题4:卷积层作用

问题5:卷积核类型

问题6:1×1卷积核作用

问题7:卷积核是否越大越好

问题8:棋盘效应及解决办法

问题9:如何减少卷积层参数

问题10:神经网络可视化工具

问题11:池化层作用

问题12:卷积层和池化层的区别

问题13:激活函数层作用

问题14:全连接层作用

问题15:如何提高卷积神经网络的泛化能力

问题16:讲一下BN、LN、IN、GN这几种归一化方法

问题17:softmax公式,如果乘上一个系数a, 则概率分布怎么变?

问题18:如何解决正负样本不平衡问题

问题19:训练网络不收敛的原因

问题20:优化算法,Adam, Momentum, Adagard,SGD特点

问题21:小目标难检测原因


问题1:目标检测的算法分类

在深度学习框架下,目标检测算法主要可分为两组。
two-stage目标检测算法

  • 主要思路:首先通过区域建议(Region Proposal, RP)机制来生成候选区域;随后利用卷积神经网络对这些候选区域进行样本分类。
  • 任务路线:首先从特征提取开始,在此之后生成一系列的目标候选区域;接着利用这些候选区域来进行分类和定位。

one-stage 目标检测算法

  • 主要思路:不用进行区域生成,直接在网络中提取特征来预测物体分类和位置
  • 任务路线:特征提取一分类/定位回归。

问题2:卷积神经网络的组成

卷积神经网络的主要架构包含以下几个关键组件:输入端负责接收数据并传递给第一层;随后依次排列着若干个卷积核用于特征提取;每个池化单元负责对上一层的特征进行降维处理;接着通过非线性激活函数模块引入复杂的人工神经元关系;最后的全连接块完成数据的深度学习融合。

问题3:输入层的作用

在卷积神经网络处理图像时,在处理图像的过程中

问题4:卷积层作用

在卷积神经网络中占据核心地位的是卷须层
而该结构中发挥关键作用的是执行卷须操作的部分。
具体而言,
将图像中的不同数据窗口与滤波矩阵中的固定权重进行计算,
即为所谓的点乘求和运算
这也是为什么这种运算被称为**点乘求和运算的原因。
值得注意的是,
由于每个神经元都具有固定的权重参数,
因此这一过程能够有效地提取图像特征。
其名称来源于此。

在CNN架构中,滤波器通过局部区域与输入数据进行卷积运算。每当完成一个数据窗口内的计算后,该窗口沿着一定方向逐步滑动至边缘位置。这个过程中涉及以下几个关键参数:

  • 深度(depth):表示神经元的数量层,并决定了输出层的厚度。同时它也代表了滤波器的数量。
  • 步长(stride):决定了每次滑动移动的距离。
  • **填充值(zero-padding)**在外围边界补充了一层零填充层。这使得从起始位置开始每隔一定步长移动一次直到到达终点成为可能。简单来说是为了确保总长度能够被步长整除。

问题5:卷积核类型

转置(Transposed)卷积

有时我们需要对输入进行如增加尺寸(也称为“上采样”)等处理。先对原始特征矩阵进行填充,使其维度扩大到适配卷积目标输出维度,然后进行普通的卷积操作的一个过程。转置卷积常见于目标检测领域中对小目标的检测和图像分割领域中还原输入图像的尺度。

扩张/空洞(Dilated/Atrous)卷积
通过引入一个称为扩张率(Dilation Rate)的概念,使得同样尺寸的卷积核能够覆盖更大的区域,在同一覆盖范围内却仅使用较少数量的参数.同样采用3×3尺寸的卷积核,这种设计能够提取5×5范围内的区域特征,在实时图像分割等应用领域中得到了广泛的应用.

可分离卷积

问题6:1×1卷积核作用

对于1x1卷积核的作用主要可以归纳为以下几点

  • 提升网络计算深度(增加非线性映射次数)
  • 实现维度转换(升维/降维)
  • 优化多通道数据交流(跨通道的信息交互)
  • 降低计算量(减少卷积核参数)

问题7:卷积核是否越大越好

采用大尺寸的卷积核能够提供更广大的感受野。然而这种大尺寸的卷积核会导致计算负担显著加重,并不利于构建更深的网络结构。尽管如此,在某些特定场景下仍可考虑使用较大尺寸的滤波器以获得更好的效果。

在自然语言处理领域中,由于文本特征通常需要较广的感受野来捕捉词组和字符等复杂信息,在这种情况下选择较大的滤波器将会更加有效。

综上所述,在深度学习模型设计中,并不存在绝对意义上的最优解;过大或过小尺寸均不合适。具体而言,最小的一维滤波器仅适合作为分离操作而不具备组合原始特征的能力;而过大的滤波器则可能融合过多无意义特征并浪费大量计算资源。

问题8:棋盘效应及解决办法

基于上述观察可知,在滤波器大小无法整除卷积步长的情况下,转置卷积操作会导致转置滤波器出现不均匀覆盖。这将导致图像某区域的颜色深度高于其他区域,并最终产生棋盘状的 artifacts。

如何规避并减弱棋盘效应的影响:
(1) 确认使用的过滤器尺寸是否能被卷积步长整除, 以此来规避出现重叠的情况
(2) 建议使用步长为1的转置卷积层, 这样能够有效缓解棋盘效应的问题

问题9:如何减少卷积层参数

  • 替代大尺寸滤波器: 在VGG网络架构中采用两个3x3的小尺寸滤波器相当于单个5x5的大尺寸滤波器。
  • 实现深度可分离架构: 将标准的K×K×C深度可分离卷积分解为深度方向上的K×K×1与逐点展开方向上的1×1×C计算。
  • 增补低秩映射层: 在执行标准K×K×C深度可分离卷积之前增补一个低秩映射层(即附加一个K×K×(C2)深度方向上的滤波器)能够有效扩展通道空间。
  • 引入池化机制: 在各层开始时应用池化操作有助于减少计算复杂度并维持信息完整性。

问题10:神经网络可视化工具

深度学习 | 机器学习

问题11:池化层作用

池化层也被称为下采样层(Downsampling Layer),其主要作用是从感受野内提取最具代表性的特征,并通过筛选这些特征来实现对输入数据的压缩。这种操作不仅能够有效降低输出特征的空间尺度,从而降低模型所需参数数量。 pool layer is also known as downsampling layer, which is mainly responsible for extracting the most representative features from the input data through feature selection and compression.

pool layer主要包括平均池化(Average Pooling)和最大池化(Max Pooling)等基本类型。 pool layer's key hyperparameters include pooling window size and pooling stride interval.

pool operation can also be viewed as a convolution operation with a learnable kernel.

问题12:卷积层和池化层的区别

卷积层和池化层在结构上具有一定的相似性,都是对感受野内的特征进行提取,并且根据步长设置获取到不同维度的输出,但是其内在操作是有本质区别

卷积层 池化层
结构 零填充时输出维度不变,而通道数改变 通常特征维度会降低,通道数不变
稳定性 输入特征发生细微改变时,输出结果会改变 感受野内的细微变化不影响输出结果
作用 感受野内提取局部关联特征 感受野内提取泛化特征,降低维度
参数量 与卷积核尺寸、卷积核个数相关 不引入额外参数

问题13:激活函数层作用

激活函数(即非线性激活函数,在采用线性激活函数的情况下其输出结果仍为一个线性值)。然而,在实际应用中采用非线性激活函数能够获得更为丰富的输出结果。

常见的激活函數包括Sigmoid、tanh和ReLU等 neuron activation functions.

在卷积神经网络中通常建议采用ReLU activation function 。

该方法提供了一种极其简单的非线性变换方案,并通过以下图形展示了其实现过程:

问题14:全连接层作用

在经过多轮卷积与池化操作后,在CNN模型中通常会设置1至2个全连接神经元用于生成最终分类结果。
通过数次卷积与池化操作后,在CNN中所获取的信息逐渐被提炼为更具区分力的关键特征。
从CNN的角度来看,卷积与池化操作本质上充当着自动生成图像特征提取器的角色。
在特征提取完成后,则依靠后续设置好的全连接神经元进行具体的分类判断。

问题15:如何提高卷积神经网络的泛化能力

  • 使用更多的数据: 竟可能标注更多的训练数据,这是提高泛化能力最理想的方法,更多的数据让模型得到更充分的学习,自然提高了泛化能力。
  • 使用更大的batch_size: 在相同迭代次数和学习率的条件下,每批次采用更多的数据将有助于模型更好的学习到正确的模式,模型输出结果也会更加稳定。
  • 数据过采样: 很多情况下我们拿到手的数据都存在类别不均匀的情况,模型这个时候过多的拟合某类数量多的数据导致其输出结果偏向于该类数据,此时如果我们过采样其他类别的数据,使得数据量比较均衡可以一定程度提高泛化能力。
  • 数据增强: 数据增强是指在数据有限的情况通过一些几何操作对图像进行变换,使得同类数据的表现形式更加丰富,以此提高模型的泛化能力。
  • 修改损失函数: 这方面有大量的工作,如目标检测中的Focal Loss, GHM Loss,IOU Loss等都是为了提升模型的泛化能力。
  • 修改网络: 如果网络过浅并且参数量过少往往会使得模型的泛化能力不足导致欠拟合,此时一般考虑使用简单的堆叠卷积层增加网络的参数,提高模型的特征提取能力。而如果网络过深且训练数据量比较少,那么就容易导致模型过拟合,此时一般需要简化网络结构减少网络层数或者使用resnet的残差结构以及BN层。
  • 权重惩罚: 权重惩罚也即是正则化操作,一般是在损失函数中添加一项权重矩阵的正则项作为惩罚项,用来惩罚损失值较小时网络权重过大的情况,此时往往是网络权值过拟合了数据样本。
  • Dropout策略: 如果网络最后有全连接层可以使用Dropout策略,相当于对深度学习模型做了Ensemble,有助于提高模型的泛化能力。

问题16:讲一下BN、LN、IN、GN这几种归一化方法

BN

  • 假设特征在不同输入以及H和W层级上呈现均匀分布,则在N×H×W的维度上计算每个通道的均值和方差;该方法总计拥有2C个参数;
  • 该方法的一个显著缺点在于其对batch内部的数据分布较为敏感;当batch_size较小时... 该特性可能导致计算出的均值与方差缺乏代表性;
  • 此外该算法不适用于处理序列数据的情形;因为通常情况下各输入样本之间的序列长度存在显著差异;
  • 当训练集与测试集的数据分布存在差异时同样不可行;

LN

  • Layer Normalization,LN是独立于batch size的算法,样本数多少不会影响参与LN计算的数据量,从而解决BN的两个问题;
  • 缺点是在BN和LN都能使用的场景中,BN的效果一般优于LN,原因是基于不同数据,同一特征得到的归一化特征更不容易损失信息。

IN

  • Instance Normalization,IN的计算就是把每个HW单独拿出来归一化处理,不受通道和batch_size 的影响,常用在风格化迁移,因为它统计了每个样本的每个像素点的信息;
  • 缺点是如果特征图可以用到通道之间的相关性,那么就不建议使用它做归一化处理。

GN

  • Group Normalization,其首先将channel分为许多组(group),对每一组做归一化,及先将feature的维度由[N, C, H, W]reshape为[N, G,C//G , H, W],归一化的维度为[C//G , H, W];
  • GN的归一化方式避开了batch size对模型的影响,特征的group归一化同样可以解决 I n t e r n a l InternalInternal C o v a r i a t e CovariateCovariate S h i f t ShiftShift 的问题,并取得较好的效果。

问题17:softmax公式,如果乘上一个系数a, 则概率分布怎么变?

当a>1时变陡峭,当a<1是变平滑

问题18:如何解决正负样本不平衡问题

  • 过采样: 针对训练集中分布不均衡的少数类(小样本类别),通过重新抽样的方式生成补充样本,从而平衡各类别的分布。
  • 欠采样: 针对训练集中存在过多样本的多数类(大样本类别),采用降维处理的方法减少冗余样本的数量,在一定程度上缓解数据不平衡问题。
  • 生成补充样本: 通过算法手段合成新的数据实例来补充少数类别的代表性。

问题19:训练网络不收敛的原因

数据处理原因

  • 没有做数据归一化;
  • 没有做数据预处理;
  • 没有使用正则化;

参数设置原因

  • Batch Size设的太大;
  • 学习率设的不合适;

网络设置原因

  • 网络存在异常梯度现象:例如,在使用ReLU激活函数时,默认对负值输出产生零梯度,在反向传播过程中该梯度不起作用;
  • 参数初始化不当导致训练效果不佳;
  • 网络结构设计存在明显缺陷:例如网络深度不足或过于复杂;

问题20:优化算法,Adam, Momentum, Adagard,SGD特点

  • Adagard在训练过程中能够自动调整学习速率,并设定一个全局的学习率;其实际学习速率与样本梯度历史平方和开平方后的值呈反比关系。
  • 借鉴物理动量概念,Momentum将前期计算出的多个梯度纳入当前运算过程;前期计算出的梯度会在当前运算中逐步衰减以减少振荡。
  • SGD是一种随机梯度下降方法,在每次迭代中使用数据集的小批量样本计算梯度并更新参数。其优势在于更新迅速但训练过程可能不稳定且准确性不高。
  • Adam通过一阶矩和二阶矩估计动态调整各参数的学习速率;经过偏差校正后确定了一个明确的学习速率区间,并融合了Momentum与Adagrad的优势。

问题21:小目标难检测原因

小目标在原图中的尺寸较小,在通用的目标检测模型中,默认的基础骨干神经网络(如VGG系列和ResNet系列)经过多次下采样处理后,在特征图上的尺寸通常仅为个位数像素大小。这使得设计的目标检测分类器对这些小目标的分类效果受到影响。

由于小目标在原图中的数量较少,在检测器提取的特征数量有限的情况下难以实现精确检测。

神经网络的学习过程主要被大物体主导,在整个学习过程中忽视了小物体的存在这一现象会导致小物体检测效果差。

技巧(1)数据增强:相对直接的方法是放大图像并采用多尺度特征检测的方式将结果进行融合处理后得到最终结果;
缺点是操作复杂计算量大不适用于实际应用;

(2)特征融合方法:使用FPN等多尺度特征映射预测架构通过更精细的特征组合策略提升模型性能;

(3)训练方法选择:CVPR2018年提出的SNIP以及SNIPER算法为解决此类问题提供了有效的解决方案;

(4)设置更细粒度的小锚框以提高定位精度同时参考S3FD的相关研究设计更适合的小锚框匹配策略;

(5)利用GAN放大缩小的方式实现对小型物体的增强再结合目标检测技术相关研究有相应的解决方案;

(6)结合物体与背景之间的关系建立关联机制如基于关系网络的方法能够有效提升检测性能;

(7)针对存在遮挡的情况如何平衡定位精度与分类准确性需要参考IoU损失函数以及反斥损失函数等相关的改进方法;

(8)在卷积神经网络的设计阶段尽量采用步长为1的方式尽可能多地提取各层次的目标特征;

(9)采用灵活的匹配策略避免过于严格的IoU阈值限制或者借鉴Cascade R-CNN的思想逐步优化检测流程从而提高整体精度。

问题22:描述YOLOv5框架

1 网络架构

基于yolov5l.yaml文件绘制的网络整体架构图中展示了YOLOv5框架的具体实现细节。该框架在不同大小(n,s,m,l,x)上采用了统一的设计方案,并根据需求对各个子模块进行深度与宽度的优化配置。值得注意的是,默认版本之外还有n6,s6,m6,l6,x6等特殊化版本可供选择;这些特殊化版本主要针对更高分辨率的图像输入(如1280x1280),并且在结构设计上也有所差异:后者会下采样至更高倍率的同时采用更多数量的预测特征层;而前者则相对较为简洁仅采用3个预测特征层并维持较低的分辨率水平。

与YOLOv4相比,在Backbone模块上,YOLOv5的变化并不显著。然而,在v6.0版本之后,YOLOv5相对于之前的版本仅进行了一个细微的改进。具体而言,在之前的架构中(类似于Swin Transformer中的Patch Merging),每个2x2的相邻像素被划分为一个patch。接着,在同一个patch中具有相同位置且相同颜色的所有像素被整合后生成了四个特征图。随后替换了SPP结构为SPPF模块。

该结构通过连续使用多个5×5尺寸的最大池化(MaxPool)层来处理输入数据。需要注意的是,在网络设计中连续应用两个5×5尺寸的最大池化(MaxPool)层的效果等同于使用一个9×9尺寸的最大池化(MaxPool)层的效果。同样地,在网络设计中连续应用三个5×5尺寸的最大池化(MaxPool)层的效果等同于使用一个13×13尺寸的最大池化(MaxPool)层的效果。

在YOLOv5源码中,其数据增强策略丰富多样,在该框架下列举了几种主要的方法:包括 mosaic 技术:将四副图像拼接成一副图像等

  • Copy paste ,将部分目标随机地复制粘贴至图片中(前提是每个目标必须具备segments数据)。下面是Copy paste原论文中的示意图。
  • MixUp 通过特定的透明度混合实现两种图像的有效融合,在现有研究中缺乏相关的理论支持和实验验证。目前在实际应用中发现仅有较大规模的模型采用了此技术,并且其在应用过程中的采用率相对较低。

Albumentations 主要应用于图像预处理领域的各种增强操作, 包括噪声过滤、对比度调整以及细节增强等多方面功能, 并结合不同的数据分布特性进行优化设计.
*
*
Augment HSV(Hue, Saturation, Value) 通过随机调节色调(Hue)、明暗(Saturation)和亮度(Value)来实现图像的质量提升. 这种增强方法能够有效改善色彩表现力并平衡不同通道的信息分布情况.

Random horizontal flip ,随机水平翻转

3 训练策略

在YOLOv5源码中使用到了很多训练的策略,这里简单总结几个我注意到的点,还有些没注意到的请大家自己看下源码:

  • Multi-scale training(0.5~1.5x) ,多尺度训练,假设设置输入图片的大小为640 × 640,训练时采用尺寸是在0.5 × 640 ∼ 1.5 × 640之间随机取值,注意取值时取得都是32的整数倍(因为网络会最大下采样32倍)。
  • AutoAnchor(For training custom data) ,训练自己数据集时可以根据自己数据集里的目标进行重新聚类生成Anchors模板。
  • Warmup and Cosine LR scheduler ,训练前先进行Warmup热身,然后在采用Cosine学习率下降策略。
  • EMA(Exponential Moving Average) ,可以理解为给训练的参数加了一个动量,让它更新过程更加平滑。
  • Mixed precision ,混合精度训练,能够减少显存的占用并且加快训练速度,前提是GPU硬件支持。
  • Evolve hyper-parameters ,超参数优化,没有炼丹经验的人勿碰,保持默认就好。

4 损失计算

全部评论 (0)

还没有任何评论哟~