深度学习基础类问题汇总(二)

本文深入探讨了ROIpooling和ROIAlign在目标检测中的应用,对比了两者之间的区别与联系,详细解析了它们的工作原理,以及如何提高目标检测的速度和准确性。

目录

 

 

ROIpooling解决了那些问题?较之前的技术有那些提升?

ROIpooling的过程请简述一下?

什么是感受野?如何计算?

原始图片中的ROI如何映射到feature map?

能简述下ROI Align的原理吗?(ROI Align对ROI pooling的提升或者它们之间的区别和联系)

目标检测网络中有那些评价指标?

Precision-recall 曲线:

能简述下Faster RCNN用到的损失函数都是什么吗?并简单描述一下他们的更新过程吗?


ROIpooling解决了那些问题?较之前的技术有那些提升?

1)因为之前的技术会得到到大量的resgion proposals会导致performance problems,很难达到实时目标检测

比如说RCNN,它是对每一个框选区域都做一次卷积,并且都分析一次,速度明显慢。

2)处理速度方面消耗大。

3)无法做到end-to-end training。

PS:什么叫end-to-end?:从输入端(输入数据)到输出端会得到一个预测结果,与真实结果相比较会得到一个误差,这个误差会在模型中的每一层传递(反向传播),每一层的表示都会根据这个误差来做调整,直到模型收敛或达到预期的效果才结束,这是端到端的。

而ROI pooling层能实现training和testing的显著加速,并提高检测accuracy

ROIpooling的过程请简述一下?

1)根据输入image,将ROI映射到feature map对应位置;

2)将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);

3)对每个sections进行max pooling操作;

这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度。

举例说明:

输入8*8大小的feature map,一个ROI,规定输出大小为2*2。

则:

region proposal 投影之后位置(左上角,右下角坐标):(0,3),(7,8)。

PS:将ROI映射到feature map对应位置这步,应该是ROI的位置是提前就定好的,个人感觉,这个应该是伴随着输入的标签值,就已经把ROI在原图上的区域位置给定位好了。

因为要得到2*2的输出,那么就将这个划分为(2*2)个sections,可得到

 最后,对每个section做max pooling,可以得到:

这样也就完成的了ROIpooling的操作。

什么是感受野?如何计算?

 感受野其实就是某一层输出结果的一个元素对应于输入层的区域大小。

我们知道后一层感受野H与前一层感受野W之间的关系是H = (W - K + 2P)/ S + 1(其实就是求featumap的公式)。那么反过来已知后一层的感受野要得到前一层的感受野翻解计算即可,可以得到W = SH + K - 2P - S(将公式反推)。

那么后一层的在前一层的(都要说在那那层的感受野)感受野就是W。

这个算法从top往下层层迭代直到追溯回input image,从而计算出RF。

(N-1)_RF = f(N_RF, stride, kernel) = (N_RF - 1) * stride + kernel

上一层的感受野等于(下一层的感受野减一)乘上步长,再加卷积核的值。

其中,RF是感受野。N_RF和RF有点像,N代表 neighbour,指的是第n层的 a feature在n-1层的RF,记住N_RF只是一个中间变量,不要和RF混淆。 stride是步长,ksize是卷积核大小。

从Map3(默认感受野为1)的感受野求Map2的感受野:即 p2 = (7-1)*1 + 7。

 

 

原始图片中的ROI如何映射到feature map?

可以使用角点映射(如:sppnet),映射的基本方式是将原图左上角的点(x,y)映射到feature map上的(x’, y’),通过计算感受野位置的方式, 使得(x’,y’)在原始图上感受野(绿色框的中点)与(x,y)尽可能相近。

能简述下ROI Align的原理吗?(ROI Align对ROI pooling的提升或者它们之间的区别和联系)

ROI Align是对ROI pooling的提升

ROI pooling的不足:

回想ROI pooling的过程,先根据预选框的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,在根据最终输出的尺寸要求,将得到的特征图进分割成对应的section。这个过程中,得到的一定是整数吗?肯定不是,应该说是很容易出现小数(浮点型数),那ROI pooling的处理方式也很简单粗暴,直接给化成整数,再进行处理。这对性能有影响吗?答案是有,有很大:

举个经典的例子:

下图中的图片长宽为800*800,其中有一个665*665的包围框,经过VGG16特征图缩放到原来的原来的1/32,其中800/32=25,但是665/32=20.78,ROI Pooling直接把它量化为20。接下来把框内的特征池化为7*7这么大,因此将上述包围框平均分割成7*7个矩形区域。显然,每个矩形区域的边长为2.86,ROI Pooling直接把它量化为2。经过这两次量化,候选区域已经出现了明显的偏差(图中绿色的部分)。更重要的是,在该层特征图上0.1个像素偏差,缩放到原图就是3.2个,那么0.8的偏差在原图上就是接近30个像素点的偏差,这一点差别不容小觑。

总结以下概况就是,如果下采样的倍数大,每次下采样都取一次整,那对整个的预测偏差是很大的,就像这个例子中说的,一下子少了30个像素点。

这也间接的解释了,为啥ROI Align提高了对小目标的检测精度,那是因为这块儿误差如果大的话,小目标根本就没被框对,更何谈检测到呢?

接着说,ROI Align是如何实现的。

ROI Align的解决方法也很简单,就是不取整值!通俗点说,就是每层都用浮点数计算,不取整数了就,到了最后一层featuremap,该出结果了的时候,用双线性插值,插一个整值出来。

过程描述就是:虚线框表示feature map,实线框表示一个ROI,Pooling输出大小为2*2,每个子区域中有四个采样点。ROI Align基于双线性插值的方法,利用feature map上距离采样点最近的四个像素得到其像素值。比如在这个单元中的采样数是4,那么就把这个单元平均分割成四个小方块,四个位置就是四个小方块的中心点。整个过程中没有对ROI,均分ROI产生的子区域(bins)和采样点进行量化(取整)。通常这些采样点的坐标为浮点数,所以需要用到插值的方法获得其像素值。

PS:相较于ROI pooling直接用最大pooling,这个的最终结果,是靠采样点周围的像素插值得来的。还有,那为什么是4个不是1个或者其他数量呢?作者实现得出4的性能是最好的。

目标检测网络中有那些评价指标?

大致有:

召回率(Recall):被正确识别出来的目标个数与测试集中所有所有的个数的比值

精确率(Precision):在识别出来的图片中,真正对的所占的比率

Precision-recall 曲线:

平均正确率(AP):单纯用 precision 和 recall 都不科学。于是人们想到,哎嘛为何不把 PR曲线下的面积 当做衡量尺度呢?于是就有了 AP值 这一概念。这里的 average,等于是对 precision 进行 取平均 。

 

平均AP值(mAP)::Mean Average Precision,对多个验证集个体 求 平均AP值 ,越高越好?

交除并(IoU):系统预测出来的框与原来图片中标记的真实框的重合程度

 

能简述下Faster RCNN用到的损失函数都是什么吗?并简单描述一下他们的更新过程吗?

第一部分为分类损失,第二部分为bbox regression损失。对应着RPN层的分类和回归两个操作。

先看分类,其实就是一个交叉熵函数:

 

 交叉熵过程,可以返回一个值,对于每一个anchor计算对数损失,最后,求和除以总的anchor数量Ncls

第二部分为回归损失,针对的是边框回归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值