多维度卷积、rpn、fpn网络相关知识点记录

有一些记了又忘,忘了又记的东西,在这里留存一下。大概我快老年痴呆了。

一 多维度卷积

对于卷积的计算,思维常常停留在一个维度上,很少去考虑实际上,在卷积的时候是多维度的。多维度的计算也总是迷迷糊糊。
多维度卷积、rpn、fpn网络相关知识点记录_第1张图片
这张图可以说的很清楚,当我们要对一个3通道的图像(也就是上图中的蓝色框)进行卷积时,则使用3通道的卷积核(即上图中粉色的方框),对上述27个计算得到的三维数字求和,即得到中间像素的卷积结果。如果我们想要得到一个64维度的卷积结果,则需要如上的卷积核64个。每一个卷积核可以得到一张300*300*1的特征图,则64个卷积核可以得到300*300*64的特征图。

二 RPN是如何具体操作的

根据卷积神经网络,可以得到多维度的特征图,这里假设rpn网络使用的是VGG16,即我们通过卷积可以得到一张维度为512维的特征图。RPN在这个特征图上使用一个3*3大小的滑窗,则对于每一个pixel,我们通过滑窗计算,能够得到一个长度为512的特征向量。在我的理解里,这个滑窗计算就是,在每一个维度上,在以这个pixel为中心的3*3大小的窗口计算得到一个数值,共有512个维度,则可以得到长度为512的向量。这个长度为512的向量,就是我们之后计算类别和位置修正的基础。


此外,我们还会对特征图上的每一个像素,回归到该像素在原始图像上的位置,并以这个位置为中心,生成9个大小,比例各不相同的anchor。设计这么多anchor的作用是想尽量覆盖我们一开始设定的真实目标。
根据这些anchor和真实目标位置的对比,我们可以得到这些anchor是否为正例或负例。如此,每一个得到的anchor都有了标签(除去那些被认为既不是正例也不是负例的)


这里我存在一个一直以来的疑问,一个pixle,我们得到一个长度为512的向量,但是这个位置上我们对应了9个anchor,我们就只根据一个 长度为512的向量,计算9个anchor的位置回归和类别判断吗?由此训练得到9个anchor的参数,之后在测试的时候,一个anchor对应一个参数吗?
损失函数就是两个部分的加和,分别是类别判断的损失函数和位置回归的损失函数。

三 fpn网络是如何在多层特征图上是如何预测的
作者认为,不同层次的特征图上包含的物体大小也不同,因此,不同尺度的ROI,使用不同特征层作为ROI pooling层的输入。大尺度ROI就用后面一些的金字塔层,比如P5;小尺度ROI就用前面一点的特征层,比如P4。但是如何确定不同的roi对应的不同特征层呢?作者提出了一种方法。
224是ImageNet的标准输入,k0是基准值,设置为5,代表P5层的输出(原图大小就用P5层),w和h是ROI区域的长和宽,假设ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味着该ROI应该使用P4的特征层。k值做取整处理。这意味着如果RoI的尺度变小(比如224的1/2),那么它应该被映射到一个精细的分辨率水平。

四 fpn网络如何应用到faster rcnn上的
现有的网络结构是将faster rcnn网络中的卷积神经网络换成了resnet 101
resnet101的网络结构如下图
多维度卷积、rpn、fpn网络相关知识点记录_第2张图片
相比于vgg16来说,池化层少了很多。

多维度卷积、rpn、fpn网络相关知识点记录_第3张图片

一位博主自己画了faster rcnn结合fpn的网络结构。其中卷积神经网络用的是resnet 101.主要的改变就是roi pooling的输入不是固定在一个层上的,而是来自于不同的层。rpn的输入还是不变的。

参考:https://blog.csdn.net/dcxhun3/article/details/59055974
          

你可能感兴趣的:(深度学习,图像处理)