由于要准备秋招,感觉一些经典的面试问题可以记录下来,本人在一些问题下会附上原文链接,相关答案来自本人百度或者自己答的,可能不准确。
下列问题来自: 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论文)?
R FCN (参考https://blog.csdn.net/a8039974/article/details/83109067)
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 |
注: 后续还会添加的。。。