记录牛客上计算机视觉面试相关面经的题目

  由于要准备秋招,感觉一些经典的面试问题可以记录下来,本人在一些问题下会附上原文链接,相关答案来自本人百度或者自己答的,可能不准确。 

  下列问题来自: https://www.nowcoder.com/discuss/277098?type=all&order=time&pos=&page=2&channel=1000&source_id=search_all (大佬面经)

Q1: SSD,YOLO有啥区别?

记录牛客上计算机视觉面试相关面经的题目

SSD相比YOLO有以下突出的特点:
  1.多尺度的feature map:基于VGG的不同卷积段,输出feature map到回归器中。这一点试图提升小物体的检测精度。
  2.更多的anchor box,每个网格点生成不同大小和长宽比例的box,并将类别预测概率基于box预测(YOLO是在网格上),得到的输出值个数为(C+4)×k×m×n,其中C为类别数,k为box个数,m×n为feature map的大小。
 
Q2:R-CNN系列和SSD本质有啥不一样吗?
  R-CNN 系列属于two stage detector ,先提取出目标候选框,然后再进行目标的分类和目标的包围框回归。 
  SSD 属于 One Stage detector , 直接输入图像然后出来目标的类别和包围框。 
 
Q3:RPN。
  RPN的结构是一个 卷积层(256维) + relu + 左右两个层的(cls layer 和 reg layer)的小网络。
    1,它是一个将 3 x 3 x channels的输入 通过256个 3 x 3 大小的卷积核 生成 1 * 1 * 256的feature map,即得到的是256维的特征;
    2,它的输入就是滑动窗口3x3对应的特征图区域,经过它卷积后 特征图变成1 x 1了;
    3,由于经过卷积后此时的输出是 1 * 1 *256,所有cls layer 和reg layer是用 1 x 1的卷积核进行进一步的特征提取。
  这里1 x 1卷积核卷积时,对各个通道都有不同的参数,因为输入又是1 x 1的图片,所以相当于全连接的功能,相当于把 1 * 1 * 256展平成 256,然后进行全连接。
 
Q4:SSD和Faster rcnn 的区别和联系?
 区别: 
  不同于Faster R-CNN,这个anchor是在多个feature map上,这样可以利用多层的特征并且自然的达到多尺度(不同层的feature map 3*3滑窗感受野不同)。
SSD中的dafault bounding box类似于RPN中的anchor,但是,SSD在不同的特征层中考虑不同的尺度,RPN在一个特征层考虑不同的尺度。
 联系: 
  都使用了Anchor 。
Q5:说下mobile net和resnet在特征提取上的本质不同。
  相同点
  * MobileNet V2 借鉴 ResNet,都采用了 记录牛客上计算机视觉面试相关面经的题目  的模式。
  * MobileNet V2 借鉴 ResNet,同样使用 Shortcut 将输出与输入相加(未在上式画出)
  不同点:Inverted Residual Block
  * ResNet 使用 标准卷积 提特征,MobileNet 始终使用 DW卷积 提特征。
  * ResNet 先降维 (0.25倍)、卷积、再升维,而 MobileNet V2 则是 先升维 (6倍)、卷积、再降维。直观的形象上来看,ResNet 的微结构是沙漏形,而 MobileNet V2 则是纺锤形,刚好相反。因此论文作者将 MobileNet V2 的结构称为 Inverted Residual Block。这么做也是因为使用DW卷积而作的适配,希望特征提取能够在高维进行。
 
Q6:YOLOv3框是怎么聚出来的?
  通过VOC 数据集 和 COCO数据集的标签聚类而来。
 
Q7:YOLOv3有没有很致命的问题?
  YOLO在训练时ground truth和bbox是一一对应的关系(ground truth对应到其中心位置所在区域中IOU最大的那个bbox来计算loss),如果有两个ground truth的尺寸和位置都比较相近,就很有可能对应到同一个区域的同一个bbox,这种场景下必然会有一个目标无法识别。
  也有这样说的: YOLO的问题是中心点grid采样算正样本,其余周边区域都算负样本(正样本是中心grid中iou最大的且超过阈值的anchor,周边的区域的确是负样本)不参与loss计算。
  另外一个我觉得, 对于小目标,由于太小了,又使用了anchor 机制,造成小目标与anchor的iou 太小。
 
Q8:SSD的致命缺点,如何改进?
  缺点
  SSD的缺点是对小尺寸的目标识别仍比较差,还达不到Faster R-CNN的水准。这主要是因为小尺寸的目标多用较低层级的anchor来训练(因为小尺寸目标在较低层级IOU较大),较低层级的特征非线性程度不够,无法训练到足够的精确度。
  改进: 
  1.针对既要较大的featuremap,又要较为丰富的语义信息的问题,可以借鉴FPN 的思想,采用特征融合策略
  2.采用detnet。使用专门的目标检测主干网络,代替当前针对分类任务的主干网络,分类强的网络不一定适合检测,因为取得强语义信息可能丢失空间信息造成回归效果不好。 DetNet不仅保持较高分辨率的特征图,同时具有较大的感受野。
 
Q9: SSD的优点
  通过在不同层级选用不同尺寸、不同比例的anchor,能够找到与ground truth匹配最好的anchor来进行训练,从而使整个结构的精确度更高。
 
Q10: 针对Faster R-cnn的问题,如何解决后面FC过多的情况(就是想问R FCN,Light Head R-CNN论文)?
  1.提出Position-sensitive score maps来解决目标检测的位置敏感性问题 (讨论了分类的平移不变性和检测的平移可变性);
  2.区域为基础的,全卷积网络的二阶段目标检测框架(解决Faster rcnn 后面FC过多的情况);
  3.将ROI层后的卷积都移到了ROI层前,比Faster-RCNN快2.5-20倍(在K40GPU上面使用ResNet-101网络可以达到 0.17 sec/image);
 
Light Head R-CNN
  提出原因: 
  1.Faster RCNN因为要将每个ROI都单独传递给后面的RCNN subnet做计算,因此存在较多重复计算,所以比较耗时;Faster RCNN 中的RoI pooling 之后的特征通道很多,使得第一个全连接层消耗大量内存,影响计算速度。
  2.基于区域的全卷积网络(R-FCN)尝试在所有 RoI 中共享计算。但是,R-FCN 需要使用 #classes × p × p(p 是随后的池化规模)通道生成非常大的额外得分图(score map),这同样需要大量内存和时间。 
  提出目的:
  两阶段检测的 R-CNN系列如何在物体检测中平衡精确度和速度 
  提出改进点: 
  使用一个大内核可分卷积和少量通道(实验中使用的是α × p × p,且α ≤ 10)生成稀疏的特征图。该设计的计算量使随后的 RoI 子网络计算量大幅降低,检测系统所需内存减少。将一个廉价的全连接层附加到池化层上,充分利用分类和回归的特征表示。
 
Q11:YOLOv1到v3的发展历程以及解决的问题?
  详细原理和对比可以参考:https://zhuanlan.zhihu.com/p/80855877
YOLO V1
图像分割成网格,每个单元格负责去检测那些中心点落在该格子内的目标;
每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score);
每个边界框的预测值实际上包含5个元素:(x, y,w, h , C),其中前4个表征边界框的大小与位置,而最后一个值是置信度;
对于每一个单元格其还要给出预测出个类别概率值,该单元格负责预测的边界框其目标属于各个类别的概率;
边界框类别置信度表征的是该边界框中目标属于各个类别的可能性大小以及边界框匹配目标的好坏;
YOLOV1将目标检测看成回归问题,所以采用的是均方差损失函数,包括区分定位误差和分类误差。
YOLO V2
引入Anchor(VOC 与 COCO数据集聚类得到size);
New Network: Darknet-19;
YOLOv2借鉴RPN网络使用anchor boxes来预测边界框相对先验框的offsets;
SSD使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体,YOLOv2提出了一种passthrough层来利用更精细的特征图;
多尺度训练。
YOLO V3
Darknet-53网络结构,采用残差结构; 
利用FPN结构实现多尺度特征检测; 
YOLOv3每个位置使用3个先验框,所以使用k-means得到9个先验框。 
YOLO V4 https://www.cnblogs.com/E-Dreamer-Blogs/p/12814665.html
 
Q12: faster rcnn和ssd 中为什么用smooth l1 loss,和l2有什么区别?
为了从两个方面限制梯度:
1. 当预测框与 ground truth 差别过大时,梯度值不至于过大;
2. 当预测框与 ground truth 差别很小时,梯度值足够小。
考察如下几种损失函数,其中 x为预测框与 groud truth 之间 elementwise 的差异:
记录牛客上计算机视觉面试相关面经的题目

 损失函数对 x 的导数分别为:

记录牛客上计算机视觉面试相关面经的题目

再附上smooth l1 loss 的函数图像:

 记录牛客上计算机视觉面试相关面经的题目

 Q13: 影响目标检测算法的好坏因素

  • 特征提取网络(VGG, ResNet, Inception, MobileNet);
  • 输出的步长,越大分类数目越多,相应的速度也会受影响;
  • IOU的评判方式;
  • nms的阈值;
  • 难样本挖掘的比率(正样本和负样本的比率);
  • 生成的proposal的数目(不同的方法输出是不同的);
  • bbox的编码方式,是预测offset还是相对位置?
  • 数据预处理的数据增广方法;
  • 用哪个特征层来做检测;
  • 定位误差函数的实现方法;
  • 不同的框架;
  • 训练时候的不同设置参数,如batch_size, 输入图片大小,学习率,学习衰减率等因素;
Q14:Anchor 的定义 和 Anchor 机制
Anchor:
  在检测任务中,输入图像经过骨干网络提取得到特征图,该图上的每个像素点,即为anchor锚点。
Anchor机制:
       以每个anchor为中心点,人为设置不同的尺度(scale)和长宽比(aspect ratio),即可得到基于anchor的多个anchor box,用以框定图像中的目标,这就是所谓的anchor 机制。
 
Q15: Anchor机制的优缺点
a. 优点:
(1)使用anchor机制产生密集的anchor box,使得网络可直接在此基础上进行目标分类及边界框坐标回归;
(2)密集的anchor box可有效提高网络目标召回能力,对于小目标检测来说提升非常明显。
b.  缺点:
(1)anchor机制中,需要设定的超参:尺度(scale)和长宽比( aspect ratio)是比较难设计的。这需要较强的先验知识。
(2)冗余框非常之多:一张图像内的目标毕竟是有限的,基于每个anchor设定大量anchor box会产生大量的easy-sample,即完全不包含目标的背景框。这会造成正负样本严重不平衡问题,也是one-stage算法难以赶超two-stage算法的原因之一。
(3)网络实质上是看不见anchor box的,在anchor box的基础上进行边界回归更像是一种在范围比较小时候的强行记忆。
(4)基于anchor box进行目标类别分类时,IOU阈值超参设置也是一个问题,0.5?0.7?
 
Q16: Single stage detector不好的原因
1. 极度不平衡的正负样本比例: anchor近似于sliding window的方式会使正负样本接近1000:1,而且绝大部分负样本都是easy example,这就导致下面一个问题:
2. gradient被easy example dominant的问题:往往这些easy example虽然loss很低,但由于数 量众多,对于loss依旧有很大贡献,从而导致收敛到不够好的一个结果。
 
Q17:直接使用IOU的弊端
1.如果两个框没有相交,根据定义,IoU=0,不能反映两者的距离大小(重合度)。同时因为loss=0,没有梯度回传,无法进行学习训练。
 2.IoU无法精确的反映两者的重合度大小。如图 1所示,IoU的变化无法反馈定位框的重合度和调整方向。
 
Q18: L2 loss的弊端
       L2损失需要同时去优化四个独立的变量,这就会导致一个预测框的一个或两个变量非常接近真实框,但整体来看却不是那么好!另外一个原因,给定两个像素点,一个落在较大的bounding box,另外一个落在较小的bounding box,这样去计算L2 loss时,显而易见,前者对于bounding box影响更大,这就导致模型优化更加关注较大的物体,而忽略较小的物体。
 
Q19: 目标检测RCNN系列发展史
RCNN
1. 在图像中确定约 1000-2000 个候选框 (使用选择性搜索)
2. 每个候选框内图像块缩放至相同大小,并输入到 CNN 内进行特征提取
3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4. 对于属于某一特征的候选框,用回归器进一步调整其位置
Fast-RCNN
1. 在图像中确定约 1000-2000 个候选框 (使用选择性搜索)
2. 对整张图片输进 CNN,得到 feature map
3. 找到每个候选框在 feature map 上的映射 patch,将此 patch 作为每个候选框的卷
积特征输入到 SPP layer 和之后的层
4. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
5. 对于属于某一特征的候选框,用回归器进一步调整其位置
Faster-RCNN
1. 对整张图片输进 CNN,得到 feature map
2. 卷积特征输入到 RPN,得到候选框的特征信息
3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4. 对于属于某一特征的候选框,用回归器进一步调整其位置
 
 注: 后续还会添加的。。。