CV面试题目--基础理论部分

1. 如何应对图片光照变化大

1、直方图均衡化

2、对比度拉伸,或者调节

3、若受光源影响,使得图片整体色彩往一方面移动,用白平衡算法进行修正,使其发黄、发蓝、发红的照片更加趋于自然光下的图像

4、若是过爆或者过暗,可是设计阈值函数,不用全局阈值,对特定区域进行特定阈值分割。

5、若是太暗,可以采用对数变化,对数图像增强是图像增强的一种常见方法,其公式为:S = c log (r+1),对数使亮度比较低的像素转换成亮度比较高的,而亮度较高的像素则几乎没有变化,这样就使图片整体变亮。

6、采用拉普拉斯算子增强 , filter2D (src,dst)

7 . 实际中自己采用的是多采集数据,不进行任何处理,让模型去处理过亮过暗的情况,只有在模型处理不了 的情况下,再进行类似于上面的辅助处理操作.

2. 为什么使用许多3*3卷积核,而不是更大的?

这在 VGGNet 的原始论文中得到了很好的解释。原因有二:首先,您可以使用几个较小的核而不是几个较大的核来获得相同的感受野并捕获更多的空间上下文,但是使用较小的内核时,您使用的参数和计算量较少。其次,因为使用更小的核,您将使用更多的滤波器,您将能够使用更多的激活函数,从而使您的 CNN 学习到更具区分性的映射函数。

3. 梯度消失的原因

1 . 隐藏层太多
2 . 激活函数不合适

4. 梯度爆炸的原因

1 . 激活函数不合适
2 .权重 参数初始化太大
3 . 个人实际遇到的: (1)输入数据未进行归一化处理 (2) 标签打的有问题

5. 如何解决梯度爆炸和梯度消失

1 . 采用预训练模型
3、用 ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout 等替代 sigmoid 函数。

4、使用 batchnorm

5、使用残差结构
梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。

6. 过拟合要怎么解决?

1 . dropout / BN / Early Stop
2 . 减少模型参数/层数
3 . 数据增强

7. Batch Normalization 的原理和作用?

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

8. L1 L2正则化的区别以及应用场景

添加链接描述

添加链接描述

9. 常见的激活函数以及其优缺点

见此网站

10.Loss 优化的几个方法?

见此网址

11.常见的模型加速方法

模型加速通常是指模型训练完成后,对模型推理速度的提高。

常用思路有:
l 网络剪枝系列思路

l 模型量化系列思路

12. Detection 你觉得还有哪些可做的点

(1).模型backbone
(2).整体的识别思路,如同rcnn 到 yolo的思路改变

13.mini-Batch SGD 相对于 GD 有什么优点

优点:
每次迭代计算量小,对硬件算力要求低

训练更大的数据集

14.人体姿态估计主流的两个做法是啥?简单介绍下

1、先整体后局部:第一步先检测到人,得到人身体区域。第二步,在身体区域内检测骨 骼关键点。

2、先局部后整体:第一步对图像上所有得骨骼关键点进行检测。第二部,将属于一个身 体得骨骼关键点合并。

15.卷积的实现原理以及如何快速高效实现局部 weight sharing 的卷积操作方式

添加链接描述

16.卷积核的工作原理

添加链接描述

17.反卷积

1.反卷积又叫做转置卷积,在计算机中计算的时候,转置卷积先将卷积核转为稀疏矩阵C的形式,然后计算的时候正向传播的时候左乘这个稀疏矩阵C的转置,反向传播的时候左乘这个稀疏矩阵C。
一般的卷积运算可以看成是一个其中非零元素为权重的稀疏矩阵C与输入的图像进行矩阵相乘,反向传播时的运算实质为C的转置与loss对输出y的导数矩阵的矩阵相乘
反卷积的运算过程与卷积正好相反,是正向传播时左乘C的转置,反向传播时左乘C

2、反卷积的用途
实现上采样;近似重构输入图像,卷积层可视化

18. Batch Normalization 和 Group Normalization有何区别?

Batch Normalization就是在batch纬度上做正交归一化,GN就是在channel维度上对每个group做正交归一化。
添加链接描述

19. 模型压缩的主要方法有哪些?

(1)从模型结构上来说分为:模型剪枝,模型蒸馏,NAS自动学习模型结构等。
(2)模型参数量化上包括数值精度量化到FP16等。
注:模型剪枝的例子很多出现在轻量化网络上面,比如mobilenet v3里面出现的group conv,更改网络末端计算量大的层。深度分离卷积等。
模型蒸馏就是迁移学习。
参数量也在mobilenet v3里面有体现,减少网络头部的卷积核的数量。

20. 目标检测中IOU是如何计算的?

交并比。

IOU GIOU DIOU CIOU详解1
IOU GIOU DIOU CIOU详解2

21.使用深度卷积网络做图像分类如果训练一个拥有1000万个类的模型会碰到什么问题?

提示:内存/显存占用;模型收敛速度等

22. 深度学习中为什么不用二阶导去优化?

Hessian矩阵是n*n, 在高维情况下这个矩阵非常大,计算和存储都是问题。

23.深度机器学习中的mini-batch的大小对学习效果有何影响?

mini-batch太小会导致收敛变慢,太大内存利用率提高了,但是内存容量可能撑不住了,精度降低。泛化性不好。

24. dropout的原理,为什么可以防止过拟合?

dropout的原理就是在网络前向传播的时候,让神经元的激活值以一定的概率变为零,这样可以使模型的泛化性能更强。

前向:训练时,利用伯努利分布,随机选出一个只包含0,1的mask矩阵,然后用这个mask矩阵去对应乘上每个输入得到的就是Dropout后的结果,再除以(1-p);测试的时候不用Dropout
反向:训练时根据mask来求对应的梯度,测试时无Dropout

dropout为什么可以防止过拟合呢?
1、dropout其实相当于我们日常用到的基于平均的ensemble,ensemble有两种方式,基于平均的ensemble和投票的ensemble。对于网络中的部分神经元进行概率暂时舍弃,这样相当于训练了多个网络。
2、dropout还取消了神经元之间的共适应关系,使得网络的输出不依赖于网络中的某些隐含节点的固定作用,使模型的鲁棒性更好。
3、类似于生物进化的角色,环境的变化不会对物种造成毁灭性的影响。

def dropout(x,p):
    if p<0 or p>1:
        raise Exception('The p must be in interval [0,1]')
    retrain_prob = 1-p
    sample = np.random.binomial(n=1,p=retrain_prob,size=x.shape)
    x *=sample
    x /=retrain_prob
    return x

25. 为什么SSD对小目标检测效果不好:

1、小目标对应的anchor(4-6)比较少,其对应的feature map上的pixel难以得到训练,这也是为什么SSD在augmentation之后精确度上涨(因为crop之后小目标就变为大目标)
2、要检测小目标需要足够大的feature map来提供精确特征,同时也需要足够的语义信息来与背景作区分

26. 空洞卷积及其优缺点

1、pooling操作虽然能增大感受野,但是会丢失一些信息。空洞卷积在卷积核中插入权重为0的值,因此每次卷积中会skip掉一些像素点;

2、空洞卷积增大了卷积输出每个点的感受野,并且不像pooling会丢失信息,在图像需要全局信息或者需要较长sequence依赖的语音序列问题上有着较广泛的应用。

添加链接描述

27. 简述一下数据增强的方法

主要分为离线增强和在线增强的方法。
离线增强是指数据集在本地进行处理。
在线增强:翻转(水平,垂直),旋转,缩放,裁剪,平移,添加噪声等。

28. 超参数搜索方法

1、网格搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。
2、贝叶斯优化:贝叶斯优化其实就是在函数方程不知的情况下根据已有的采样点预估函数最大值的一个算法。该算法假设函数符合高斯过程(GP)。

添加链接描述

28. 如何理解卷积、池化等、全连接层等操作

卷积的作用:相当于滤波器,提取图片不同的特征,生成feature_map
激活函数的作用:引入非线性因素
池化的作用:1、减少特征维度大小,使特征更加可控,减少参数个数,从而控制过拟合程度,增加网络对略微变换后的图像的鲁棒性;2、达到一种不变性,包括translation,rotation,scale等。3、会造成梯度稀疏,丢失信息,GAN网络中通常使用带步长的卷积,进行下采样来替代pooling。
全连接的作用:对提取到的特征进行分类和回归。

29. 1x1大小的卷积核的作用

通过控制卷积核个数实现升维或者降维,从而减少模型参数
对不同特征进行归一化操作(BN),增加非线性(relu)
用于不同channel上特征的融合

30. 常见激活函数特点

激活函数分为两类,饱和激活函数和不饱和激活函数。
饱和激活函数的代表是sigmoid,tanh。特点是:收敛慢,容易梯度消失。
非饱和激活函数的特点是:收敛快,抑制梯度消失,抑制过拟合。
sigmoid:计算量大。梯度消失,会改变原始数据分布。
tanh:计算量大,梯度消失比sigmoid好点
relu:计算简单,有效防止了梯度消失和梯度爆炸,会出现神经元死亡。
leakrelu:解决了神经元死亡的问题,但是多了一个参数a
ELU:避免dying神经元,并且处处连续,从而加速SGD,但是计算比较复杂

31. 训练过程中,若一个模型不收敛,那么是否说明这个模型无效?导致模型不收敛的原因有哪些?

并不能说明这个模型无效,导致模型不收敛的原因可能有数据分类的标注不准确;样本的信息量太大导致模型不足以fit整个样本空间;

学习率设置的太大容易产生震荡,太小会导致不收敛;可能复杂的分类任务用了简单的模型;数据没有进行归一化的操作。

32. python读取图像可以用什么库,pytorch和tensorflow怎么增加图像的纬度?

Python可以用opencv,pillow和SKimage库来读取图片并处理。
pytorch可以用unsequeeze(0),tensorflow可以用expand dim来增加维度。

33. BP

信号前向传播,误差反向传播,通过不断调节网络的权重,使得网络的最终输出与期望输出尽可能接近。前项过程中通过与正确的标签计算损失,反向传递损失,更新参数,优化至最后的参数。

34. 在机器学习中为什么经常使用梯度下降而不使用牛顿法?

1、牛顿法的目标函数是二阶导数,在高维的情况下这个矩阵非常大,计算和储存都是问题。
2、在小批量的情况下,牛顿法对噪声的估计太大。
3、在目标函数非凸的情况下,牛顿法易受到鞍点和极大值点的吸引。

35. finetune(微调)

finetune就是通过修改预训练网络模型结构(如修改模型类别输出个数等)选择性的载入预训练网络模型的权重(载入除最后的全连接层之前的所有层)再用自己的数据集重新训练模型。

finetune的实践建议:
预训练模型的限制,不能随意修改模型的网络架构,但是可以输入任意的图片。
学习率:与重新训练相比,finetune需要使用更小的学习率。

36. 简述一下GooleNet的Inception模块的原理?

对输入图像用多个不同尺寸的卷积核,池化操作进行同时处理,然后将输出结果进行通道拼接。

37. 简述一下SVM核函数的原理

核函数将数据映射到更高维的空间后处理,但是不用这种显式的映射,而是现将两个向量做内积,然后再用核函数做映射。这样做等价于先做映射,再做内积,而且避免了高维空间复杂的内积运算。

38. 为什么mobileNet在理论上速度很快,工程上并没有特别大的提升?

mobileNet虽然在计算量上减少了很多,但是由于深度可分离卷积的操作,使得网络的层数增加了很多,而我们的GPU计算是并行数据处理,假设GPU内存足够大的话所以GPU计算的速度核心是网络的层数。

39.训练过程中的问题汇总。

loss的问题:
1、训练过程中loss为负数:
【原因】输入的训练数据没有归一化造成
【解决方法】把输入数值通过下面的函数过滤一遍,进行归一化
inputdata = (inputdata-inputdata.min())/(inputdata.max()-inputdata.min())
2、怎么看loss和acc的变化
train loss 不断下降,test loss不断下降,说明网络仍在学习;
train loss 不断下降,test loss趋于不变,说明网络过拟合;
train loss 趋于不变,test loss不断下降,说明数据集100%有问题;
train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;
train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。
3、初始学习率设置的问题:
可以从0.0001到0.1每次扩大10倍试验,直到验证集上的loss增大。
一般0.01-0.1左右
mmdetection上面有自己的学习率设置方式,一般为0.125batch_sizegpus。
4、样本不平衡问题。(具体的我会另外再开一篇博文)
样本不平衡呈现长尾分布,解决方案:
a、上采样增强
b、下采样增强
c、训练动态加权采样
d、稀少数据专家模型

40. 什么样的函数可用作激活函数

满足非线性,几乎处处可导,单调的函数可以用作激活函数

41.过拟合和欠拟合

过拟合就是训练集上表现好但是验证集上表现不好。
欠拟合就是训练集上loss不降低,学习能力弱。

产生原因:
过拟合产生的原因:模型太复杂,样本噪声多,决策树容易过拟合,iou阈值过高,训练集迭代次数太多。
欠拟合:模型复杂度低。数据不纯净。

解决方案:
过拟合:
1、正则化,l1,l2
2、dropout
3、早停,earlystoping
4、数据增广

欠拟合:
1、增加模型复杂度
2、数据预处理

42. 分布式训练

同步训练存在木桶效应,需要各个设备的计算能力要均衡,而且要求集群的通信也要均衡。

异步模式理论上存在缺陷,容易发生梯度失效问题,但因为mini-batch随机梯度下降本身就是梯度下降的一个近似解法,且即使是梯度下降也无法保证全局最优。

在实际应用中,在相同时间内使用异步模式训练的模型不一定比同步模式差。所以这两种训练模式在实践中都有非常广泛的应用。

43. 如何解决不收敛的问题。

首先loss出现nan,由于loss函数的使用不正确。
loss震荡,检查数据是否归一化,调整学习率,查看是否有梯度回传,使用大的模型。

44. SVM解决多分类问题

可以采用多个二分类组合的方式。例如:1对1,1对多,多对多等。

45.偏差和方差

偏差描述的是网络的真实输出和期望输出之间的差距,方差描述的是训练模型中各个预测结果之间的差异。所以:高方差,说明拟合程度好,但是过拟合风险较高;高偏差,说明拟合程度差,欠拟合,有很大的误差。
当模型较为复杂的时候。偏差变小,方差变大。(模型复杂容易导致过拟合)

46.简述一下常用的网络模型训练技巧

1、增大batch_size同时增大学习率,若初始学习率为0.1,则学习率变化为
0.1*batch_szie/256
2、lr warm up
3、residual的BN中γ初始化为0
4、no bias decay
5、降低精度 float16
6、cos退火 学习率
7、label smoothing
8、知识蒸馏
9、mix_up cutout 随机裁剪,数据增强等

47. attention机制

48. CNN中的卷积层的反向传播

添加链接描述

49. 取多维列表偶行偶列

CV面试题目--基础理论部分_第1张图片

50. pytorch的函数

1、DataLoader()加载数据
2、初始化权重和bais
3、optim 优化方式,学习率学习方式
4、损失函数 torch.nn.
5、Conv,pool,relu,dropout,FC等
6、反向传播 loss.backword
7、保存模型 torch.save 加载模型 torch.load

51. 交叉熵

52. CTCloss

与交叉熵的区别:
交叉熵就是简单地分类one_hot,ctcloss的话会包含序列的信息,提升分类准确率。
CTCLOSS解决的问题就是:输入与输出的label不需要完全对齐,CTC允许我们的神经网络在任意一个时间段预测label,只有一个要求—输出序列的顺序是正确的就好。
CTCLoss中两个重复字符中间的blank不会消除这两个重复字符:
ab_bc ------abbc

53. 神经网络中使用sigmoid激活函数怎么实现非线性性?

首先sigmoid是一个非线性的激活函数,神经网络的非线性是通过非线性的激活函数和多层网络的融合叠加实现的。

54.K-means算法不知道有多少个聚类中心怎么办?

1、手肘法:计算每个聚类的均方误差和,画出曲线图,拐点处即为。
2、计算每个聚类的 gap = 类内距离/类间距离
3、随机采样进行聚类。
4. 个人办法:
(1)遍历所有的框,把长宽花在坐标图上,得到如下的图,找到点集中的几个
(2)测试多个不同个数的聚类,然后计算误差

  1. 个人问题:什么情况下会不知道聚类中心个数呢. 自己打标签会知道的.
    CV面试题目--基础理论部分_第2张图片

55. 线性回归 和 逻辑回归

添加链接描述

56.如何提高模型检测的召回率

增加数据集,数据增广,降低iou阈值,模型融合。
添加链接描述

57.CNN的卷积核为什么一般是方形?奇数?

奇数, 可以定位锚点,偶数没有锚点
实际工作用遇到腐蚀膨胀,中设置的卷积核,当时设置的是偶数, 膨胀后,风向杆发生了偏移, 所以奇数可以使特征不发生偏移
添加链接描述

58. 感受野

添加链接描述

59. 说一下非极大值抑制(NMS)(non maximum suppression) NMS实现细节 手写NMS代码

用处:本质是搜索局部极大值,抑制非极大值元素。

原理:NMS为非极大值抑制,用来抑制检测时冗余的框。

大致算法流程为:1.对所有预测框的置信度降序排序2.选出置信度最高的预测框,确认其为正确预测,并计算他与其他预测框的IOU 3.根据2中计算的IOU去除重叠度高的,IOU>threshold阈值就删除 4.剩下的预测框返回第1步,直到没有剩下的为止

(需要注意的是:Non-Maximum Suppression一次处理一个类别,如果有N个类别,Non-Maximum Suppression就需要执行N次。)

假设两个目标靠的很近,则会识别成一个bbox,会有什么问题,怎么解决?

当两个目标靠的非常近时,置信度低的会被置信度高的框抑制掉,从而两个目标靠的非常近时会被识别成一个bbox。为了解决这个问题,可以使用softNMS(基本思想:用稍低一点的分数来代替原有的分数,而不是直接置零)

60. 归一化 标准化 区别

添加链接描述

61. KNN

添加链接描述

62. 朴素贝叶斯

添加链接描述

你可能感兴趣的:(图像算法面试)