IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 面试问题总结——关于面试中可能提问的问题及解答(一) -> 正文阅读

[Python知识库]面试问题总结——关于面试中可能提问的问题及解答(一)

  1. 前面几篇博客我已经陆续整理了YOLO系列、OpenCV系列、C++系列的面试题知识点,若有需要直接访问以下链接。
  2. 面试问题总结——关于YOLO系列(一)
  3. 面试问题总结——关于YOLO系列(二)
  4. 面试问题总结——关于YOLO系列(三)
  5. 面试问题总结——关于OpenCV
  6. 面试问题总结——编程题关于IOU、NMS
  7. 面试问题总结——关于C++(一)
  8. 面试问题总结——关于C++(二)

  • 作为最后一个系列,主要介绍深度学习、机器学习、Python相关的一些面试题,其中包括秋招时遇到的问题还有牛客网面经上我搜集整理的一些面试高频题。
    在这里插入图片描述

1.YOLOv4相比于YOLOv3,做了哪些改进,能讲讲吗?

(详解可以看面试问题总结——关于YOLO系列(三)中 四.YOLOv4
??YOLOv4的改进方法分为两类:BoF和BoSBoF方法只改变训练策略或者只增加训练的成本与时间,但不会影响测试阶段的性能;BoS方法只会增加少量的推理成本但却能显著提高对象检测精度的插入组件和后处理方法。

??BoF中比如马赛克数据增强,通过读取四张图片,然后分别进行翻转、缩放等操作,接着拼成一张图片。这种方法可以丰富图片背景,大大扩充训练数据集。而且随机缩放操作增加了很多小目标,使得训练出的模型更加鲁棒。还有标签平滑处理,比如对于一个标签矩阵 [0,0,1] 转化为-> [0.01,0.01,0.98],分类标签的平滑,将0,0,1转变成0.01,0.01,0.98,这样会提高识别精度。

??BoS中主要是修改了原先的NMS,改成了DIoU-NMS,不仅考虑了检测区域的重叠,而且还考虑了检测区域间的中心点距离。还有激活函数改成了Mish激活函数,理论上对负值的轻微允许更好的梯度流,而不是像ReLU中那样的硬零边界。

??在主干网络中,CSPDarknet53的特征采用SPP层的方式,能更有效的增加主干网络的感受野,SPP的结构是三层最大池化,这里说一下感受野的定义。
感受野(Receptive Field),指的是神经网络中神经元“看到的”输入区域,在卷积神经网络中,feature map上某个元素的计算受输入图像上某个区域的影响,这个区域即该元素的感受野。
卷积神经网络中,越深层的神经元看到的输入区域越大,即越深层的神经元的感受野越大。
所以,感受野是个相对概念,某层feature map上的元素看到前面不同层上的区域范围是不同的,通常在不特殊指定的情况下,感受野指的是看到输入图像上的区域。);
??同时,我个人还觉得,通过SPP还可以有效减少特征提取的参数量,因为SPP是在主干网络之后,主干网络用来提取特征信息,对于提取到的信息肯定会有很多冗余,采用SPP即最大池化可以减少冗余,这是我个人观点。

2.你在模型训练的过程中,对于loss值若没有收敛,该有哪些操作呢?该使用什么办法?

??①如果loss突然一直很大:可能是学习率learning rate设大了,适当把学习率调低,或者每迭代10个epoch,学习率依次减小,在开始阶段不能把学习率设置的太低否则loss不会收敛,我的做法是逐渐尝试,从0.1,0.08,0.06,0.05 …逐渐减小直到正常为止

??②如果数据太少就尽量缩小模型复杂度,考虑减少层数。

??③train loss与test loss结果分析
??train loss 不断下降,test loss不断下降,说明网络仍在学习;
??train loss 不断下降,test loss趋于不变,说明网络过拟合;
??train loss 趋于不变,test loss不断下降,说明数据集100%有问题;
??train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;
??train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。

??④训练网络的时候loss一直居高不下或者准确度时高时低,震荡趋势,反正要保证自己的训练次数够多,只要总体上收敛就行,就像我跑Darknet的YOLOv4模型时,虽然设置的迭代次数是4000次,但模型实际在2800次的时候就已经趋于平稳进入震荡期了。

有些面试官还会问一些深度学习调参心得的问题,这个问题也确实能够体现是不是真正自己去炼过丹。

3.在数字图像处理中,腐蚀和膨胀的原理是什么?

??腐蚀和膨胀都是针对白色区域即亮的区域的膨胀就是将亮的区域变大,腐蚀就是将亮的区域变小

??膨胀就是求局部最大值的操作,因为要将亮的区域变大嘛,即灰度值变大,类似于卷积操作,将图像和核进行卷积,核的大小可以自己定义,将图像A与核B进行图形卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素,这样就会使图像中的高亮区域逐渐增长。

??腐蚀就是求局部最小值的操作。

4.关于NMS,简单讲讲?

??NMS就是非极大值抑制,依靠分类器得到多个候选框,以及关于候选框中属于类别的概率值,根据分类器得到的类别分类概率做排序,具体算法流程如下:

??①将所有框的得分排序,选中最高分及其对应的框;
??②遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除。(为什么要删除,是因为超过设定阈值,认为两个框的里面的物体属于同一个类别,比如都属于狗这个类别。我们只需要留下一个类别的可能性框图即可。)
??③从未处理的框中继续选一个得分最高的,重复上述过程。

5.关于K-means算法的相关知识

K-means算法思想:

??根据给定的n个数据对象的数据集,构建k个划分聚类的方法,每个划分聚类即为一个簇。该方法将数据划分为n个簇,每个簇至少有一个数据对象,每个数据对象必须属于而且只能属于一个簇,同时要满足同一簇中的数据对象相似度高,不同簇中的数据对象相似度较小,聚类相似度是利用各簇中对象的均值来进行计算的。

K-means算法的处理流程:

??①随机选取k个中心点;
??②遍历所有数据,将每个数据划分到最近的中心点中;
??③计算每个聚类的平均值,并作为新的中心点;
??④重复2-3,直到这k个中线点不再变化(收敛了)。

??时间复杂度:O(k×n×d×t),其中k表示聚类中心个数,n表示数据量即总共的点数,d表示距离计算的复杂度,t表示迭代次数。

??空间复杂度:O(n)
??关于评估聚类的效果,可以有欧式距离(即两点的距离,根号下的平方)、曼哈顿距离(|x1-x2|-|y1-y2|)。

在yolo中anchor的选取—K-means算法

??在anchor框聚类中,如果用欧式距离来度量的话,显示是不合理的,因为大的预测框会产生大的欧式距离,小的预测框会产生小的欧氏距离,但我们需要大小框产生同样的效果影响,所以使用IOU,IOU是和box的大小无关的,公式如下:
?????d(box, centroid) = 1 - IOU(box, centroid)

其中box表示某个类别的ground truth,centroid表示聚类中心框。

K-means算法的优缺点

??优点:
??该算法简单高效,易于理解和实现,我还是挺喜欢这个算法的,在我的项目里面也多次用到了这个算法。

??缺点:
??①需要人为事先确定簇的个数,k 的选择往往会是一个比较困难的问题,对于某些数据集,一开始并不知道究竟可以分成几类;
??②对噪声和异常数据非常敏感,如果某个异常值具有很大的数值,则会严重影响数据分布;
??③不能解决非凸形状的数据分布聚类问题;
??④主要用于发现圆形或者球形簇,不能识别非球形的簇
??⑤对初始值的设置很敏感,算法的结果与初始值的选择有关。

K值怎么确定,有什么方法吗?

??解决办法:因为Kmeans聚类的效果评估方法是误差项平方和,就是计算所有点到相应簇中心的距离均值,当然,k值越大,SSE(误差项平方和)越小,我们就是要求出随着k值的变化SSE的变化规律,找到SSE减幅最小的k值,这时k应该是相对比较合理的值。

??比如,在如下这张图中,最佳的k值是3。
在这里插入图片描述

6.你项目中用的拍照相机分辨率是3072×2048的,而YOLOv4网络的输入尺寸是608×608×3,这么做的话,图像的尺寸会被压缩,小的目标可能会被忽略,那如果要识别小的目标你怎么办?既要保证识别的速度,如何做?

??首先要考虑的是YOLOv4中的输入尺寸大小是608×608,而我的训练图片大小是3072×2048的,如果缩放图片到608×608,待检测的目标可能就会被缩放没了。

??解决办法:把图片切下来,按照一批一批的来训练,比如原图是(C、H、W),切成N份,就是(N、C、H、W),切的过程中就一个要求,就是不能把目标一分为二切坏了,对于不足608大小的图像的补全就好了比如填充为黑色。

7.SPP,YOLO了解吗?

??SPP-net对R-CNN最大的改进就是特征提取步骤做了修改,其他模块仍然和R-CNN一样。特征提取不再需要每个候选区域都经过CNN,只需要将整张图片输入到CNN就可以了,ROI特征直接从特征图获取。R-CNN中候选区域需要变形缩放,事实上,只是网络的最后阶段—全连接层需要固定的尺寸输入,因此引入空间金字塔池化SPP来移除对网络固定尺寸的限制,避免输入的裁剪或者变形。SPP-net的缺点也很明显,它仍然属于R-CNN的框架,离端到端的距离还很远。

??YOLO的核心思想在于将目标检测问题视作回归问题解决。用一个卷积神经网络结构就可以从输入图像直接预测bounding box和类别概率。算法首先把输入图像划分成S×S的格子,然后对每个格子都预测B个bounding boxes,每个bounding box都包含5个预测值:x,y,w,h和confidence。缺点:对靠的很近的物体以及小群体检测效果并不好。

8.目标检测正负样本不均衡怎么解决?

??因为正负样本总是相差悬殊的,可以通过设置损失函数前面的权重来解决,比如YOLOv3中的损失函数,对于检测到的目标权重系数给的是5,对于非目标的权重系数给的是0.5。

9.one-stage与two-stage都有哪些?具体各自优势在哪里?one-stage和two-stage两者有什么特点?

??One-stage:YOLO系列、SSD等。
??特点:特点是一步到位,直接输入图像之后,就能输出目标检测的结果,速度相对较快,非常适合移动端;因为anchor大小的原因所以检测效果较差。

??Two-stage:R-CNN、Fast R-CNN、Faster R-CNN等。
??特点:使用了复杂的网络用于每个候选区域的分类和回归,内存消耗和计算量都比较大,且Two-stage算法中会对目标进行resize,小目标的特征会被放大,因此检测效果较好。
(补充:R-CNN是对于输入图像会提取2000个区域候选框;而Fast R-CNN是先不着急提取候选框,它是直接先把图像喂到神经网络中去,获得一个共享的特征,然后所有的候选框都能共享这一套特征,这样就能提高速度;Faster R-CNN则是采用了更深层的网络来提取特征。)

10.简单介绍下残差层

残差结构的提出的为了解决深层网络难以训练的问题。

??背景知识:
??①之所以要构建深层网络,是因为神经网络的每一层分别对应于提取不同层次的特征信息,有低层,中层和高层,而网络越深的时候,提取到的不同层次的信息会越多,而不同层次间的层次信息的组合也会越多。

??②深度学习对于网络深度遇到的主要问题是梯度消失和梯度爆炸,传统对应的解决方案则是数据的初始化正则化(BN层),但是这样虽然解决了梯度的问题,深度加深了,却带来了另外的问题,就是网络性能的退化问题,深度加深了,错误率却上升了,而残差用来设计解决退化问题,其同时也解决了梯度问题,更使得网络的性能也提升了。

??③从理论上分析,网络深度越深越好。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练。实际上,随着网络深度的增加,训练误差会越来越多,这被描述为网络退化
??ResNet的突破技巧:加入skip connection;即一层的输出,直接跳跃多层,链接给另一层。

残差块的结构(Residual block)

在这里插入图片描述
??上图中,可以看到a[l]是这一层残差块的输入,经过第一层线性变化并激活后的输出得到a[l+1],再经过第二层线性变化并激活后的输出得到a[l+2]。残差结构是将输入a[l]直接链接到第二层ReLU激活函数之前,这条路径称作shortcut连接

残差结构有效的原理

??因为在设计的深层次网络是有很多网络层是冗余的,那么我们希望这些冗余层能够完成恒等映射,保证经过该恒等层的输入和输出完全相同,具体哪些层是恒等层,这个会有网络训练的时候自己判断出来。

解决问题的数学原理:

①为什么可以解决梯度消失?
??以上图为例,假设输入是a[l],正常的计算经过两层的线性变换和激活函数之后变成了a[l+2]=F(a[l]),再加上残差结构的输出a[l],最终输出a[l+2]=F(a[l]) + a[l],可以发现,链式求导之后不管F括号部分的参数有多小,因为a[l]对自身求导等于1,都能保证该节点参数更新不会发生梯度消失或梯度爆炸现象。

②为什么可以解决网络退化问题?
??前面已经说了,随着网络的层数增加,错误率也会增加且存在一个累计的趋势,如果网络自行决定了哪些层是冗余层后,通过学习残差F(a[l])=0来让该层网络恒等映射上一层的输入,使得有了这些冗余层的网络效果与没有这些冗余层的网络效果相同,这样很大程度上解决了网络的退化问题

11.YOLOv1的网格为什么是7×7?

??因为只有网格是奇数的情况下,其整个图像的中心点会确定在中心的一个grid cell中,如果网格是偶数,中心点就会落在四个grid cell的交界点,无法确定到底属于哪个grid cell,YOLOv2是分成了13×13个网格。

12.YOLOv3优点/缺点

??优点:
??①检测速度快;
??②背景的误检率低,因为YOLO的候选框提取是基于全图的,而RCNN系列都是先提取一定数量的候选框,有点类似于管中窥豹,不能综合整张图的信息;
??③通用性强。

??缺点:
??相比RCNN系列物体检测方法,仍然存在识别物体位置精确性差、召回率低的缺点。

(Recall(召回率):指的是所有真实目标中被检测出来的比例。)

13.张量、向量和矩阵

??0维的张量就是标量1维的张量就是向量2维的张量就是矩阵,大于等于3维的张量没有名称,统一叫做张量

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 11:53:45  更:2021-09-30 11:55:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:33:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码