计算机视觉面试宝典--目标检测篇(一)

计算机视觉面试宝典–目标检测篇(一)

Faster-Rcnn网络

1.faster RCNN原理介绍,要详细画出图
请添加图片描述

​ Faster R-CNN是一种两阶段(two-stage)方法,它提出的RPN网络取代了选择性搜索(Selective search)算法后使检测任务可以由神经网络端到端地完成。在结构上,Faster RCNN将特征抽取(feature extraction),候选区域提取(Region proposal提取),边框回归(bounding box regression),分类(classification)都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。

2.RPN(Region Proposal Network)网络的作用、实现细节

**RPN网络的作用:**RPN专门用来提取候选框,一方面RPN耗时少,另一方面RPN可以很容易结合到Fast RCNN中,成为一个整体。

RPN网络的实现细节:一个特征图(Faster RCNN的公共Feature Map)经过sliding window处理,得到256维特征,对每个特征向量做两次全连接操作,一个得到2个分数,一个得到4个坐标{然后通过两次全连接得到结果2k个分数和4k个坐标[k指的是由锚点产生的K个框(K anchor boxes)]}

2个分数,因为RPN是提候选框,还不用判断类别,所以只要求区分是不是物体就行,那么就有两个分数,前景(物体)的分数,和背景的分数; 4个坐标是指针对原图坐标的偏移,首先一定要记住是原图;

预先设定好共有9种组合,所以k等于9,最后我们的结果是针对这9种组合的,所以有H x W x 9个结果,也就是18个分数和36个坐标。

请添加图片描述

写一下RPN的损失函数(多任务损失:二分类损失+SmoothL1损失)

训练RPN网络时,对于每个锚点我们定义了一个二分类标签(是该物体或不是)。

以下两种情况我们视锚点为了一个正样本标签时:

1.锚点和锚点们与标注之间的最高重叠矩形区域

2.或者锚点和标注的重叠区域指标(IOU)>0.7

请添加图片描述

请添加图片描述

RPN损失中的回归损失部分输入变量是怎么计算的?(注意回归的不是坐标和宽高,而是由它们计算得到的偏移量)

请添加图片描述

​ ti 和 ti* 分别为网络的预测值和回归的目标

请添加图片描述

​ 在训练RPN时需要准备好目标t*。它是通过ground-truth box(目标真实box)和anchor box(按一定规则生成的anchor box)计算得出的,代表的是ground-truth box与anchor box之间的转化关系。用这个来训练rpn,那么rpn最终学会输出一个良好的转化关系t。而这个t,是predicted box与anchor box之间的转化关系。通过这个t和anchor box,可以计算出预测框box的真实坐标。

RPN中的anchor box是怎么选取的?

滑窗的中心在原像素空间的映射点称为anchor,以此anchor为中心,生成k(paper中default k=9, 3 scales and 3 aspect ratios/不同尺寸和不同长宽比)个proposals。三个面积尺寸(1282,2562,512^2),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1)

为什么提出anchor box?

主要有两个原因:一个窗口只能检测一个目标、无法解决多尺度问题。

目前anchor box尺寸的选择主要有三种方式:人为经验选取、k-means聚类、作为超参数进行学习

为什么使用不同尺寸和不同长宽比? 为了得到更大的交并比(IOU)。

3.说一下RoI Pooling是怎么做的?有什么缺陷?有什么作用

RoI Pooling的过程就是将一个个大小不同的box矩形框,都映射成大小固定(w * h)的矩形框

具体操作:(1)根据输入image,将ROI映射到feature map对应位置(2)将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);(3)对每个sections进行max pooling操作;

这样可以从不同大小的方框得到固定大小的相应的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度。(在Pooling的过程中需要计算Pooling后的结果对应到feature map上所占的范围,然后在那个范围中进行取max或者取average。)

**优点:**1.允许我们对CNN中的feature map进行reuse;2.可以显著加速training和testing速度;3.允许end-to-end的形式训练目标检测系统。

**缺点:**由于 RoIPooling 采用的是最近邻插值(即INTER_NEAREST) ,在resize时,对于缩放后坐标不能刚好为整数的情况,采用了粗暴的舍去小数,相当于选取离目标点最近的点,损失一定的空间精度。

两次整数化(量化)过程:1.region proposal的xywh通常是小数,但是为了方便操作会把它整数化。2.将整数化后的边界区域平均分割成 k x k 个单元,对每一个单元边界进行整数化。 //经过上述两次整数化,此时的候选框已经和最开始回归出来的位置有一定的偏差,这个偏差会影响检测或者分割的准确度

怎么做的映射: 映射规则比较简单,就是把各个坐标除以“输入图片与feature map的大小的比值”

ROI Pooling与ROI Align(Mask R-CNN)的区别

ROI Align: ROI Align的思路很简单:取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作;1.遍历每一个候选区域,保持浮点数边界不做量化。2.将候选区域分割成k x k个单元,每个单元的边界也不做量化。3.在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。

区别: ROI Align舍去了近似像素取整数的量化方法,改用双线性插值的方法确定特征图坐标对应于原图中的像素位置.ROI Align很好地解决了ROI Pooling操作中两次量化造成的区域不匹配(mis-alignment)的问题。

对于检测图片中大目标物体时,两种方案的差别不大,而如果是图片中有较多小目标物体需要检测,则优先选择RoiAlign,更精准些。

RoI Align中双线性插值计算像素值的具体方法

在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。

请添加图片描述

假如我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。最常见的情况,f就是一个像素点的像素值。首先在 x 方向进行线性插值,得到

请添加图片描述

请添加图片描述

请添加图片描述

​ 综合起来就是双线性插值最后的结果:
请添加图片描述

由于图像双线性插值只会用相邻的4个点,因此上述公式的分母都是1。

每个采样点的特征值由其相邻的4个整型特征点的像素值通过双线性差值得到。

最近邻插值法(图像的内插):在原图中最近得像素点赋值给新的像素点

4.说一下非极大值抑制(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(基本思想:用稍低一点的分数来代替原有的分数,而不是直接置零)

5.Faster R-CNN是如何解决正负样本不平衡的问题?

限制正负样本比例为1:1,如果正样本不足,就用负样本补充,这种方法后面研究工作用的不多。通常针对类别不平衡问题可以从调整样本数或修改loss weight两方面去解决,常用的方法有OHEM、OHNM、class balanced loss和Focal loss。

Faster RCNN怎么筛选正负anchor

我们给两种锚点分配一个正标签:(i)具有与实际边界框的重叠最高交并比(IoU)的锚点,

(ii)具有与实际边界框的重叠超过0.7 IoU的锚点。IoU比率低于0.3,我们给非正面的锚点分配一个负标签。

6.faster-rcnn中bbox回归用的是什么公式,说一下该网络是怎么回归bbox的?

请添加图片描述

其中x,y,w,h分别为bbox的中心点坐标,宽与高。分别是预测box、anchor box、真实box。

前两行是预测的box关于anchor的offset与scales,后两行是真实box与anchor的offset与scales。那回归的目的很明显,即使得请添加图片描述尽可能相近。回归损失函数利用的是Fast-RCNN中定义的smooth L1函数,对外点更不敏感:

请添加图片描述
请添加图片描述

​ 损失函数优化权重W,使得测试时bbox经过W运算后可以得到一个较好的平移量(offsets)与尺度(scales),利用这个平移量(offsets)与尺度(scales)可在原预测bbox上微调,得到更好的预测结果。

为什么要做Bounding-box regression?

边框回归用来微调候选区域/框,使微调后的框更Ground Truth更接近。

7.简述faster rcnn的前向计算过程 简述faster rcnn训练步骤

输入一张待检测图片->vgg16网络conv layers提取整张图片的特征,输出feature map分别输入到RPN和Fast RCNN网络开头->RPN网络得出region proposal,将这些候选框信息送入到Fast RCNN网络开头->利用候选框在之前送到的feature map提取特征,并通过ROI Pooling层得到规定大小的feature map->将这些feature map送入Fast RCNN网络中进行分类和回归坐标,最终得到需检测物体的坐标。

简述faster rcnn训练步骤

第一步,训练RPN,该网络用ImageNet预训练的模型初始化,并端到端微调,用于生成region proposal;

第二步,训练Fast R-CNN,由imageNet model初始化,利用第一步的RPN生成的region proposals作为输入数据,训练Fast R-CNN一个单独的检测网络,这时候两个网络还没有共享卷积层;

第三步,调优RPN,用第二步的fast-rcnn model初始化RPN再次进行训练,但固定共享的卷积层,并且只微调RPN独有的层,现在两个网络共享卷积层了;

第四步,调优Fast R-CNN,由第三步的RPN model初始化fast-RCNN网络,输入数据为第三步生成的proposals。保持共享的卷积层固定,微调Fast R-CNN的fc层。这样,两个网络共享相同的卷积层,构成一个统一的网络。

8. Faster rcnn有什么不足的地方吗?如何改进?

改进:1.更好的特征网络ResNet等;2.更精确的RPN:可以使用FPN网络架构来设计RPN网络3.更好的ROI分类方法:比如ROI分别在conv4和conv5上做ROI-Pooling,合并后再进行分类,这样基本不增加计算量,又能利用更高分辨率的conv4;4.使用softNMS代替NMS;

比较FasterRCNN在RCNN系列中的改进点 RPN提取RP

参考文献

Ren S, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detection with region proposal networks[J]. arXiv preprint arXiv:1506.01497, 2015.

参考链接

https://zhuanlan.zhihu.com/p/137735486

https://zhuanlan.zhihu.com/p/137736076

https://blog.csdn.net/wshdkf/article/details/80456588

猜你喜欢

转载自blog.csdn.net/dwf1354046363/article/details/122375950