Faster RCNN原理及Pytorch代码解读——全连接RCNN模块

经过上一篇的RoI Pooling层之后,大小不一的RoI被池化到相同的维度上,因此接下来我们可以可以利用全连接网络进行分类与回归预测量的计算。在训练阶段,最后需要计算预测量与真值的损失并反传优化,而在前向测试阶段,可以直接将预测量加到RoI上,并输出预测量。

全连接RCNN模块

整个模块的流程图如下:
从图中我们可以看出,原本的256个RoI经过池化之后得到了512×7×7的特征,因为后面接的是一个全连接网络,所以我们需要将其拉成一维,即将。三个维度延展为一维。
在这里插入图片描述
接下来利用VGGNet的两个全连接层,得到长度为4096的256个RoI特征。为了输出类别与回归的预测,将上述特征分别接入分类与回归的全连接网络。在此默认为21类物体,因此分类网络输出维度为21,回归网络则输出每一个类别下的4个位置偏移量,因此输出维度为84。

值得注意的是,虽然是256个RoI放到了一起计算,但相互之间是独立的,并没有使用到共享特征。什么意思呢?这是指送入最后的分类网络和回归网络的特征大小是(batch,256, 4096),是三个维度的数据,而不是我们通常认为两个维度的数据,这相当于训练了256个全连接层,输入大小是4096,输出是21(或者是84),而按我们直觉上只需要训练一个就够了,因此说其造成了重复计算。这也是FasterRCNN的一个缺点。

损失函数

RCNN部分的损失函数计算方法与RPN部分相同,不再重复。只不过在此为21个类别的分类,而RPN部分则是二分类,需要注意回归时至多有64个正样本参与回归计算,负样本不参与回归计算。

源码

由于复现的代码相互嵌套,不好表述出来,所以就不再做介绍了,感兴趣的可以去看源码,这一部分的代码不难理解。

おすすめ

転載: blog.csdn.net/weixin_41693877/article/details/107393123