AI算法面试题总结三(计算机视觉)

计算机视觉

>仅供学习使用,侵删
参考链接
https://mp.weixin.qq.com/s/1GavvCY7wUetMvC61gxkLg
https://zhuanlan.zhihu.com/p/190223015
https://mp.weixin.qq.com/s/IdqcRI3dNcPJkbeCWhGpEA

1 - 如何计算 mIoU?

一些定义:在计算机视觉深度学习图像分割领域中,mIoU值是一个衡量图像分割精度的重要指标。mIoU可解释为平均交并比,即在每个类别上计算IoU值(即真正样本数量/(真正样本数量+假负样本数量+假正样本数量))
解答:假设如下:共有k+1个类(从L0到Lk,其中包含一个空类或背景), p i j p_{ij} pij表示本属于类 i i i 但被预测为类 j j j 的像素数量。即, p i i p_{ii} pii 表示真正的数量,而 p i j , p j i p_{ij},p_{ji} pij,pji 则分别被解释为假负和假正,尽管两者都是假正与假负之和。
Pixel Accuracy(PA,像素精度):为标记正确的像素占总像素的比例,公式如下:
P A = ∑ i = 0 k p i i ∑ i = 0 k ∑ j = 0 k p i j P A=\frac{\sum_{i=0}^{k} p_{i i}}{\sum_{i=0}^{k} \sum_{j=0}^{k} p_{i j}} PA=i=0kj=0kpiji=0kpii
Mean Pixel Accuracy(MPA,均像素精度):是PA的一种简单提升,计算每个类内被正确分类像素数的比例,之后求所有类的平均,公式如下:
M P A = 1 k + 1 ∑ i = 0 k p i i ∑ j = 0 k p i j M P A=\frac{1}{k+1} \sum_{i=0}^{k} \frac{p_{i i}}{\sum_{j=0}^{k} p_{i j}} MPA=k+11i=0kj=0kpijpii
Mean Intersection over Union(MIoU,均交并比):为语义分割的标准度量。其计算两个集合的交集和并集之比,在语义分割的问题中,这两个集合为真实值(ground truth)和预测值(predicted segmentation)。这个比例可以变形为正真数(intersection)比上真正、假负、假正(并集)之和。在每个类上计算IoU,之后平均,数学公式如下:
M I o U = 1 k + 1 ∑ i = 0 k p i i ∑ j = 0 k p i j + ∑ j = 0 k p j i − p i i < = > 1 k + 1 ∑ i = 0 k T P F N + F P + T P MIoU=\frac{1}{k+1} \sum_{i=0}^{k} \frac{p_{i i}}{\sum_{j=0}^{k} p_{i j}+\sum_{j=0}^{k} p_{j i}-p_{i i}} <=>\frac{1}{k+1} \sum_{i=0}^{k} \frac{T P}{F N+F P+T P} MIoU=k+11i=0kj=0kpij+j=0kpjipiipii<=>k+11i=0kFN+FP+TPTP
Frequency Weighted Intersection over Union(FWIoU,频权交并比):为MIoU的一种提升,这种方法根据每个类出现的频率为其设置权重,公式如下:
F W I o U = 1 ∑ i = 0 k ∑ j = 0 k p i j ∑ i = 0 k p i i ∑ j = 0 k p i j + ∑ j = 0 k p j i − p i i FWIoU=\frac{1}{\sum_{i=0}^{k} \sum_{j=0}^{k} p_{i j}} \sum_{i=0}^{k} \frac{p_{i i}}{\sum_{j=0}^{k} p_{i j}+\sum_{j=0}^{k} p_{j i}-p_{i i}} FWIoU=i=0kj=0kpij1i=0kj=0kpij+j=0kpjipiipii
参考链接https://blog.csdn.net/u014593748/article/details/71698246
代码参考https://blog.csdn.net/jiongnima/article/details/84750819
https://blog.csdn.net/baidu_27643275/article/details/90445422

2 - 如何计算 mAP?

一些定义mAP: mean Average Precision, 即各类别AP的平均值;AP: PR曲线下面积,其实是在 0~1之间所有recall值的precision的平均值;PR曲线: Precision-Recall曲线(其横轴是召回率,纵轴是精确率。);
Precision: TP / (TP + FP);Recall: TP / (TP + FN)
解答:评估一个分类器的性能,一个比较好的方法就是:观察当阈值变化时,Precision与Recall值的变化情况。如果一个分类器的性能比较好,那么让Recall值增长的同时保持Precision的值在一个很高的水平。而性能比较差的分类器可能会损失很多Precision值才能换来Recall值的提高。通常情况下,文章中都会使用Precision-recall曲线,来显示出分类器在Precision与Recall之间的权衡。
计算步骤https://www.cnblogs.com/ywheunji/p/13376090.html
参考链接https://cloud.tencent.com/developer/article/1167638
https://www.jianshu.com/p/8848a1441c0f

3 - 介绍一下非极大值抑制NMS及其变体

一些定义非极大值抑制NMS顾名思义是抑制不是极大值的元素,可以理解为局部最大搜索是,目标检测常用的后处理算法,用于剔除冗余检测框。
解答传统NMS算法步骤:
(1)将所有的框按类别划分,并剔除背景类,因为无需NMS。
(2)对每个物体类中的边界框(B_BOX),按照分类置信度降序排列。
(3)在某一类中,选择置信度最高的边界框B_BOX1,将B_BOX1从输入列表中去除,并加入输出列表。
(4)逐个计算B_BOX1与其余B_BOX2的交并比IoU,若IoU(B_BOX1,B_BOX2) > 阈值TH,则在输入去除B_BOX2。
(5)重复步骤3~4,直到输入列表为空,完成一个物体类的遍历。
(6)重复2~5,直到所有物体类的NMS处理完成。
(7)输出列表,算法结束

缺点:
顺序处理的模式,计算IoU拖累了运算效率。
剔除机制太严格,依据NMS阈值暴力剔除,且阈值是经验选取的。
评判标准是IoU,即只考虑两个框的重叠面积,这对描述box重叠关系或许不够全面。

NMS变体:
1)Soft-NMS是Traditional NMS的推广,主要旨在缓解Traditional NMS的第二条缺点;
2)IoU-Guided NMS出现于IoU-Net一文中,研究者认为框的定位与分类得分可能出现不一致的情况,特别是框的边界有模棱两可的情形时。因而提出了IoU预测分支,来学习定位置信度,进而使用定位置信度来引导NMS。
3)DIOU-NMS,研究者认为若相邻框的中心点越靠近当前最大得分框M的中心点,则其更有可能是冗余框。
参考链接https://blog.csdn.net/weixin_47196664/article/details/106754955
https://cloud.tencent.com/developer/article/1658418

4 - 介绍一下Anchor的概念

一些定义:**anchor字面意思是锚,指固定船的东西,anchor在计算机视觉中有锚点或锚框,目标检测中常出现的anchor box是锚框,表示固定的参考框,参考框的意思肯定是会带来先验的知识,Anchor的本质可认为是多尺度的滑动窗口(sliding window in multi-scale)。
解答:目标检测是"在哪里有什么"的任务,在这个任务中,目标的类别不确定、数量不确定、位置不确定、尺度不确定,传统非深度学习方法如VJ和DPM,和早期深度学习方法如OverFeat,都要金字塔多尺度+遍历滑窗的方式,逐尺度逐位置判断"这个尺度的这个位置处有没有认识的目标",非常笨重耗时。近期顶尖(SOTA)的目标检测方法几乎都用了anchor技术。首先预设一组不同尺度不同位置的固定参考框,覆盖几乎所有位置和尺度,每个参考框负责检测与其交并比大于阈值 (训练预设值,常用0.5或0.7) 的目标,anchor技术将问题转换为"这个固定参考框中有没有认识的目标,目标框偏离参考框多远",不再需要多尺度遍历滑窗,真正实现了又好又快,如在Faster R-CNN和SSD两大主流目标检测框架及扩展算法中anchor都是重要部分。
参考网址:https://zhuanlan.zhihu.com/p/55824651
https://zhuanlan.zhihu.com/p/84398108

5 - 有哪些可以解决目标检测中正负样本不平衡问题的方法
解答:方法大致可以分为两种:
1)Hard Sampling: 从所有样本中选择自己来训练模型: hard negative mining, OHEM
2)Soft sampling: 为样本赋予不同的权值: Focal Loss, GHM, PISA
Focal Loss认为正负样本的不平衡,本质上是因为难易样本的不平衡,于是通过修改交叉熵,使得训练过程更加关注那些困难样本,而GHM在Focal Loss的基础上继续研究,发现难易样本的不平衡本质上是因为梯度范数分布的不平衡,和Focal Loss的最大区别是GHM认为最困难的那些样本应当认为是异常样本,让检测器强行去拟合异常样本对训练过程是没有帮助的。PISA则是跳出了Focal Loss的思路,认为采样策略应当从mAP这个指标出发,通过IoU Hierarchical Local Rank (IoU-HLR),对样本进行排序并权值重标定,从而使得recall和precision都能够提升。
参考网址:https://blog.csdn.net/u014630987/article/details/96646662

6 - 介绍一下RoI Pooling 和RoI Align
**一些定义:**ROI Align 是在Mask-RCNN这篇论文里提出的一种区域特征聚集方式, 很好地解决了ROI Pooling操作中两次量化造成的区域不匹配(mis-alignment)的问题。实验显示,在检测测任务中将 ROI Pooling 替换为 ROI Align 可以提升检测模型的准确性。
解答:在常见的两级检测框架(比如Fast-RCNN,Faster-RCNN,RFCN)中,ROI Pooling 的作用是根据预选框的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,以便进行后续的分类和包围框回归操作。
ROI Align的思路是:取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作,在具体的算法操作上,ROI Align并不是简单地补充出候选区域边界上的坐标点,然后将这些坐标点进行池化,而是重新设计了一套比较优雅的流程。
参考网址:https://blog.csdn.net/qq_41375609/article/details/102695832

7 - YOLOv4相较于YOLOv3有哪些改进?速度更快还是更慢,为什么?
解答
用于backbone的BoF:CutMix和Mosaic数据增强,DropBlock正则化,Class label smoothing
用于backbone的BoS:Mish激活函数,CSP,MiWRC
用于检测器的BoF:CIoU-loss,CmBN,DropBlock正则化,Mosaic数据增强,Self-Adversarial 训练,消除网格敏感性,对单个ground-truth使用多个anchor,Cosine annealing scheduler,最佳超参数,Random training shapes
用于检测器的Bos:Mish激活函数,SPP,SAM,PAN,DIoU-NMS
参考网址:https://blog.csdn.net/weixin_42206075/article/details/113352277
https://zhuanlan.zhihu.com/p/135909702
https://www.freesion.com/article/61651115460

8 - U-Net神经网络为什么会在医学图像分割表现好 ?
一些定义UNet的encoder下采样4次,一共下采样16倍,对称地,其decoder也相应上采样4次,将encoder得到的高级语义特征图恢复到原图片的分辨率。 相比于FCN和Deeplab等,UNet共进行了4次上采样,并在同一个stage使用了skip connection,而不是直接在高级语义特征上进行监督和loss反传,这样就保证了最后恢复出来的特征图融合了更多的low-level的feature,也使得不同scale的feature得到了的融合,从而可以进行多尺度预测和DeepSupervision。4次上采样也使得分割图恢复边缘等信息更加精细。
解答
至于为什么U-Net神经网络为什么会在医学图像分割表现好 ,大概是因为医疗影像的特点
1)医疗影像的图像语义较为简单,结构较为固定; 由于器官本身结构固定和语义信息没有特别丰富,所以高级语义信息和低级特征都显得很重要(UNet的skip connection和U型结构就派上了用场)
2)数据量少。医学影像的数据获取相对难一些,很多比赛只提供不到100例数据。所以设计的模型不宜多大,参数过多,很容易导致过拟合。原始UNet的参数量在28M左右(上采样带转置卷积的UNet参数量在31M左右),而如果把channel数成倍缩小,模型可以更小。缩小两倍后,UNet参数量在7.75M。缩小四倍,可以把模型参数量缩小至2M以内,非常轻量.
3)多模态。相比自然影像,医疗影像比较有趣和不同的一点是,医疗影像是具有多种模态的。以ISLES脑梗竞赛为例,其官方提供了CBF,MTT,CBV,TMAX,CTP等多种模态的数据。
4)可解释性重要。由于医疗影像最终是辅助医生的临床诊断,所以网络告诉医生一个3D的CT有没有病是远远不够的,医生还要进一步的想知道,病灶在哪一层,在哪一层的哪个位置,分割出来了吗,能求体积嘛?同时对于网络给出的分类和分割等结果,医生还想知道为什么,所以一些神经网络可解释性的trick就有用处了,比较常用的就是画activation map。看网络的哪些区域被激活了
参考网址:https://www.zhihu.com/question/269914775

9 - 为什么图像分割要先encode,再decode?
解答
分割任务是对每个图片像素进行分类,但在现实世界中,相邻像素点很大概率上是属于同一物体,降采样的这个过程有利于结合邻域,建立单个像素点与它所属物体整体间的联系(也就是扩大了感受野)。但是这可能会带来的一个问题就是物体的边缘或者小物体的分类效果不佳。
1)首先是计算资源的限制,下采样降低了图的尺寸,进而降低了显存和计算量
2)增大感受野,大的感受野对分割任务比较重要,分割任务需要高级的语义信息,所以需要下采样
3)而上采样可以恢复原始图像的大小,如转置卷积和线性插值,大部分主流网络采样双线性插值的形式进行上采样
4)另外上采样的同时,也可以通过跳连(skip connection)将解码层和相应的编码层特征进行融合,既考虑了高级语义特征,也考虑了低级语义特征,提高了分割效果。
参考链接:https://www.zhihu.com/question/322191738

10 - 介绍一下目标检测中的多尺度训练/测试
解答
多尺度训练对全卷积网络有效,一般设置几种不同尺度的图片,训练时每隔一定iterations随机选取一种尺度训练。这样训练出来的模型鲁棒性强,其可以接受任意大小的图片作为输入;
多尺度训练/测试作为一种提升性能的有效技巧被应用在MS COCO等比赛中。输入图片的尺寸对检测模型的性能影响相当明显,事实上,多尺度是提升精度最明显的技巧之一。在基础网络部分常常会生成比原图小数十倍的特征图,导致小物体的特征描述不容易被检测网络捕捉。通过输入更大、更多尺寸的图片进行训练,能够在一定程度上提高检测模型对物体大小的鲁棒性,仅在测试阶段引入多尺度,也可享受大尺寸和多尺寸带来的增益。
参考链接:https://www.zhihu.com/question/271781123

11 - 如何提高小目标检测?
解答:小目标检测研究思路
1)数据增强
数据增强是一种提升小目标检测性能的最简单和有效的方法,通过不同的数据增强策略可以扩充训练数据集的规模,丰富数据集的多样性,从而增强检测模型的鲁棒性和泛化能力。在相对早期的研究中,Yaeger等通过使用扭曲变形、旋转和缩放等数据增强方法显著提升了手写体识别的精度。之后,数据增强中又衍生出了弹性变形、随机裁剪和平移等策略。目前,这些数据增强策略已被广泛应用于目标检测中。
2)多尺度学习
小目标与常规目标相比可利用的像素较少,难以提取到较好的特征,而且随着网络层数的增加,小目标的特征信息与位置信息也逐渐丢失,难以被网络检测。这些特性导致小目标同时需要深层语义信息与浅层表征信息,而多尺度学习将这两种相结合,是一种提升小目标检测性能的有效策略
3)上下文学习
在真实世界中,“目标与场景”和“目标与目标”之间通常存在一种共存关系,通过利用这种关系将有助于提升小目标的检测性能。在深度学习之前,已有研究证明通过对上下文进行适当的建模可以提升目标检测性能,尤其是对于小目标这种外观特征不明显的目标。
4)在小目标检测这一领域,还有诸多优秀的方法。针对小目标训练样本少的问题,Kisantal等提出了一种过采样策略,通过增加小目标对于损失函数的贡献,以此提升小目标检测的性能。除了增加小目标样本权重这一思路之外,另一种思路则是通过增加专用于小目标的锚框数量来提高检测性能
参考链接:https://mp.weixin.qq.com/s/zvKxi0b-D0fXzx928Wp51A
https://zhuanlan.zhihu.com/p/163374916

12 - 什么是Anchor-free?
解答:Anchor free based method一般采用bottom-up的思路,先生成带有类别信息和位置信息的feature map,再根据这些feature map得到最后的bounding boxes。总结起来,其关键部分包含一下几方面:
1 - 如何生成高质量的feature map,这是得到精准的bounding boxes的前提,主要是backbone的设计。众所周知,CNN的多层stride会损失很多位置信息,而这些信息对于pixel-level的任务至关重要。
2 -因为没有提前设定feature map上哪些points负责预测哪个ground-truth box,需要一个grouping操作将属于同一个object的points划分到一起。
3 -训练过程loss的设计。loss函数既需要考虑预测的feature map能学到discriminative的类别置信度,还需要输出准确的位置信息。
参考链接:https://zhuanlan.zhihu.com/p/58183628
https://zhuanlan.zhihu.com/p/62339345

13 - 介绍你了解的Anchor-free检测网络,并说明优缺点
解答
参考链接:https://zhuanlan.zhihu.com/p/163266388
https://zhuanlan.zhihu.com/p/62103812

14 - 如何解决多尺度问题??
解答:网络的图像输入,应该不拘泥于尺寸大小的才对,卷积操作对输入尺寸是无必须要求的,任意尺寸均可。但是,如果加上全连接层,该层必须要求是固定尺寸的输入。
1) 将全连接去掉;对最后的feature-map做global average pooling,直接加softmax,如 NIN;
2)将变尺寸划为固定尺寸,在feature-map后,加入spatial pyramid pooling layer,将不固定尺寸变为固定尺寸,如 SPPnet, Faster R-CNN都是这样的思路。
3)全部使用卷积层;如FCN(Fully Conv Network),多尺寸输入完全不成问题。FCN,主要应用在图像语义切分上
4)借助anchor在输出上做多尺度。给输出提前约定尺寸的候选范围集,分别在不同尺寸上给出输出结果。
5)多尺度filter,在卷积核上做多尺度。上面这2种方法,是在输出上做尺寸的约束,当时不改变输出的结构,将不变尺寸translate为变换尺寸。
6)输入多尺寸放缩图像。高分辨率的风格迁移,有对输入做pyramid process(高斯低通滤波),得到多个尺度的输入图像。上面的这种方法,则是在输入上直接做文章,直接是训练多个具有共享参数的网络了
参考链接:https://blog.csdn.net/yujianmin1990/article/details/80446864

15 - 介绍一下Focal Loss
解答:针对类别不均衡问题,作者提出一种新的损失函数:focal loss,这个损失函数是在标准交叉熵损失基础上修改得到的。这个函数可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。
参考链接; https://zhuanlan.zhihu.com/p/49981234

16 - 介绍一下batchnorm原理
解答
Batchnorm主要解决的问题:
深度学习任务尤其是在CV上都需要对数据做归一化,因为深度神经网络主要就是为了学习训练数据的分布,并在测试集上达到很好的泛化效果,但是,如果我们每一个batch输入的数据都具有不同的分布,显然会给网络的训练带来困难。另一方面,数据经过一层层网络计算后,其数据分布也在发生着变化,此现象称为Internal Covariate Shift,会给下一层的网络学习带来困难。batchnorm直译过来就是批规范化,就是为了解决这个分布变化问题。
但是仅仅对神经网络的每一层做归一化并不可行,因为假设将每一层输出后的数据都归一化到0均值,1方差,满足正太分布,但是,此时有一个问题,每一层的数据分布都是标准正太分布,导致其完全学习不到输入数据的特征,因为,费劲心思学习到的特征分布被归一化了,因此,直接对每一层做归一化显然是不合理的。但是如果稍作修改,加入可训练的参数做归一化,那就是BatchNorm的实现了;
Batchnorm的优点:
1 -没有它之前,需要小心的调整学习率和权重初始化,但是有了BN可以放心的使用大学习率,但是使用了BN,就不用小心的调参了,较大的学习率极大的提高了学习速度
2 -Batchnorm本身上也是一种正则的方式,可以代替其他正则方式如dropout等
3 -另外,batchnorm降低了数据之间的绝对差异,有一个去相关的性质,更多的考虑相对差异性,因此在分类任务上具有更好的效果。
但是BN并不是适用于所有任务的,在image-to-image这样的任务中,尤其是超分辨率上,图像的绝对差异显得尤为重要,所以batchnorm的scale并不适合。
参考链接;https://blog.csdn.net/qq_25737169/article/details/79048516

17 - Batch Normalization 和 Group Normalization有何区别?
解答
BN是在 batch这个维度上进行归一化,GN是计算channel方向每个group的均值方差,然后进行归一化。
GN的归一化方式避开了batch size对模型的影响,特征的group归一化同样可以解决 I n t e r n a l Internal Internal C o v a r i a t e Covariate Covariate S h i f t Shift Shift的问题,并取得较好的效果。
参考链接;https://zhuanlan.zhihu.com/p/35005794

18 - 什么是反卷积?
解答
反卷积也称为转置卷积,如果用矩阵乘法实现卷积操作,将卷积核平铺为矩阵,则转置卷积在正向计算时左乘这个矩阵的转置WT,在反向传播时左乘W,与卷积操作刚好相反,需要注意的是,反卷积不是卷积的逆运算。
一般的卷积运算可以看成是一个其中非零元素为权重的稀疏矩阵C与输入的图像进行矩阵相乘,反向传播时的运算实质为C的转置与loss对输出y的导数矩阵的矩阵相乘。
逆卷积的运算过程与卷积正好相反,是正向传播时做成C的转置,反向传播时左乘C
反卷积的用途:实现上采样;近似重构输入图像,卷积层可视化。
参考链接;https://www.zhihu.com/search?type=content&q=%E5%8F%8D%E5%8D%B7%E7%A7%AF

19 - 解释神经网络的万能逼近定理?
解答
只要激活函数选择得当,神经元的数量足够,至少有一个隐含层的神经网络可以逼近闭区间上任意一个连续函数到任意指定的精度。

20 - 神经网络是生成模型还是判别模型?
解答
判别模型,直接输出类别标签,或者输出类后验概率p(y|x)

21 - 模型压缩的主要方法有哪些?
解答
从模型结构上优化:模型剪枝、模型蒸馏、automl(自动机器学习)直接学习出简单的结构
模型参数量化将FP32的数值精度量化到FP16、INT8、二值网络、三值网络等。
二值网络:卷积计算中主要就是乘法和加法运算,如果将权重变成二值,即只有1和-1,那么就可以把所有的乘法运算消除,只剩下加法运算和取反操作。因为任何数乘以1或者-1都是它自身或其相反数。
算法流程:
1)对所有权重进行二值化处理(bias不进行二值化,因为二值化是为了减少乘法运算,而bias本来就是加法操作,没有乘法)
2)进行前向和反向传播,过程中所有的操作均为浮点运算。
3)根据反向传播时计算的梯度更新权重,注意更新的是二值化前的权重,更新后做权重做clip。
一个batch结束,取下一个batch的数据并返回1

链接:https://www.jianshu.com/p/ca6bdaffa62f

22 - 目标检测中IOU是如何计算的??
解答
检测结果与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU;
链接

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值