计算机视觉中的细节问题(三)

参考   计算机视觉中的细节问题 - 云+社区 - 腾讯云

目录

(1)、目标检测中NMS使用在哪步?

(2)、epoch、batch size和iterations之间的关系

(3)PASCAL VOC文件中的Main文件

(4)、什么是潜变量?

(5)、L2范数

(6)、小批量梯度下降

(7)、目标检测中anchor和proposal的区别

(8)、静态多尺度的缺点

(9)、TensorFlow里“滑动平均模型”中“影子变量”的理解

(10)、为什么现在大家喜欢用3*3小卷积?


(1)、目标检测中NMS使用在哪步?

非最大抑制(NMS)主要用于基于深度学习的目标检测模型输出的后处理,从而去除冗余的检测框,获得正确的检测结果。示意图如下:

                                           

(2)、epoch、batch size和iterations之间的关系

在深度学习中,epoch、batchsize和iterations是在训练模型时,一定用到的一些概念。那么分别是什么意思呢?
首先,为什么会用到以上概念,是因为“梯度下降”,也就是寻求曲线的一个最小值。其次,梯度下降是迭代的,它是一个需要多次计算的结果来求得最优解。

  • epoch

一个epoch指代所有的数据送入网络中完成一次前向计算及反向传播的过程。在训练模型时,一般会设置多个epoch,比如epoch=50、100、600,甚至等于6000。这么做是因为在寻求最优解时,将数据送入网络进行一次迭代是不够的,一般是需要进行多轮的迭代才会收敛。同时,深度学习中,训练模型时的数据量一般来说是比较大的,也就是说一个epoch是比较大的,计算机一般无法负荷,所以这时,一般会分成几个比较小的batches,每次送入网络一部分数据。

  • batch size

经上面所述,batch就是每次送入网络中训练的一部分数据,batch size就是每个batch中训练样本的数量。所以,至于batch size取多大合适,这取决于设备和运行效率,根据实际情况来进行实际的选择。

  • iterations

iterations就是完成一次epoch所需的batch个数。比如,训练集一共有5000个数据,batch size为500,则iterations=10,epoch是等于1(因为一个epoch是所有数据融入网络中完成一次前向计算及反向传播的过程)。


(3)PASCAL VOC文件中的Main文件


在这里主要考察Main文件夹。


Main文件夹下包含了20个分类的***_train.txt、***_val.txt和***_trainval.txt。
这些txt中的内容都差不多如下:
前面的表示图像的name,后面的1代表正样本,-1代表负样本。
_train中存放的是训练使用的数据,每一个class的train数据都有5717个。
_val中存放的是验证结果使用的数据,每一个class的val数据都有5823个。
_trainval将上面两个进行了合并,每一个class有11540个。
需要保证的是train和val两者没有交集,也就是训练数据和验证数据不能有重复,在选取训练数据的时候 ,也应该是随机产生的。

(4)、什么是潜变量?

潜变量是指不能被直接精确观测或虽能被观测但尚需通过其它方法加以综合的指标。

(5)、L2范数

对两个向量的L2范数为空间的距离:

||\vec{a},\vec{b}||=\sqrt{\sum_{n=1}^n(a_i-b_i)^2}

(6)、小批量梯度下降

小批量梯度下降,是对批量梯度下降以及随机梯度下降的一个折中办法。其思想是:每次迭代 使用 ** batch_size** 个样本来对参数进行更新。

(7)、目标检测中anchor和proposal的区别

首先我们需要知道anchor的本质是什么,本质是SPP(spatial pyramid pooling)思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。

                                  

接下来是anchor的窗口尺寸,这个不难理解,三个面积尺寸(128^2,256^2,512^2),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1).这样一来,我们得到了一共9种面积尺寸各异的anchor。示意图如下:

                                  

至于这个anchor到底是怎么用的,这个是理解整个问题的关键。

下面是整个faster RCNN结构的示意图:

                                 

利用anchor是从第二列这个位置开始进行处理,这个时候,原始图片已经经过一系列卷积层和池化层以及relu,得到了这里的 feature:51x39x256(256是层数)。

在这个特征参数的基础上,通过一个3x3的滑动窗口,在这个51x39的区域上进行滑动,stride=1,padding=2,这样一来,滑动得到的就是51x39个3x3的窗口。

对于每个3x3的窗口,作者就计算这个滑动窗口的中心点所对应的原始图片的中心点。然后作者假定,这个3x3窗口,是从原始图片上通过SPP池化得到的,而这个池化的区域的面积以及比例,就是一个个的anchor。换句话说,对于每个3x3窗口,作者假定它来自9种不同原始区域的池化,但是这些池化在原始图片中的中心点,都完全一样。这个中心点,就是刚才提到的,3x3窗口中心点所对应的原始图片中的中心点。如此一来,在每个窗口位置,我们都可以根据9个不同长宽比例、不同面积的anchor,逆向推导出它所对应的原始图片中的一个区域,这个区域的尺寸以及坐标,都是已知的。而这个区域,就是我们想要的 proposal。所以我们通过滑动窗口和anchor,成功得到了 51x39x9 个原始图片的proposal。接下来,每个proposal我们只输出6个参数:每个 proposal 和 ground truth 进行比较得到的前景概率和背景概率(2个参数)(对应图上的 cls_score);由于每个 proposal 和 ground truth 位置及尺寸上的差异,从 proposal 通过平移放缩得到 ground truth 需要的4个平移放缩参数(对应图上的 bbox_pred)。所以根据我们刚才的计算,我们一共得到了多少个anchor box呢? 51 x 39 x 9 = 17900

(8)、静态多尺度的缺点

多尺度方法,比如FPN,其实在分类和回归问题上是存在矛盾的。对于分类任务来讲网络越深feature map越小越好,但是对于回归任务,网络越浅,feature map越大越好。比如在一幅图像中,同时形状较为复杂和形状较为简单,但是尺寸相近的目标,比如人和远处的车辆,对车辆来讲用更深的尺寸易于分类,但对人来讲使用较深的网络,可能会影响定位效果。

(9)、TensorFlow里“滑动平均模型”中“影子变量”的理解

variable的变量值改变之后,并不是直接给shadow_variable变量赋值的,而是shadow_variable以衰减率decay的程度保持原有值,再加上(1 - decay)部分新变量值variable,这样构成了新的影子变量shadow_variable。也就是说,每次提供一个新变量的时候,影子变量以衰减率decay变化,再加上(1 - decay)倍的新变量,共同构成新的影子变量。下次再提供一个新变量的时候,同样以这种方式生成新的影子变量。

(10)、为什么现在大家喜欢用3*3小卷积?

我们知道现在在构建CNN时大家喜欢用3*3的卷积,而不是早期的5*5,7*7等更大尺寸的卷积,如vgg系列网络中全部使用了3*3的卷积。那么你知道为什么这样做吗?这里既然用3*3卷积来替代更大尺寸的卷积,那么有一个前提,就是要保证两者具有同样大小的输出和感受野。两个3*3的卷积才能代替一个5*5的卷积;三个3*3的卷积才能代替一个7*7的卷积。以stride=1,padding=0我们来看看为何。我们首先看一下采用5*5卷积的方案。

「AI-1000问」为什么现在大家喜欢用3*3小卷积?

假设图像大小为n*n,采用5*5的卷积核其输出为(n-5)/1+1=n-4。我们再看一下采用3*3卷积的方案。

「AI-1000问」为什么现在大家喜欢用3*3小卷积?

同样图像大小为n*n,第一次卷积后输出为(n-3)/1+1=n-2,第二次卷积后输出为(n-2-3)/1+1=n-4。从上面的图可以看出,采用一个5*5卷积核和两个3*3卷积核,它们卷积后的输出是相同大小,输出的每一个像素的感受野也相等。

在这样的前提下,有什么好处呢?

  1. 网络层数增加了,这增加了网络的非线性表达能力。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...