我想提取对象检测中感兴趣区域的特征向量。我使用的是Faster RCNN与Inception-v2,基本上是按照这个教程进行的,但我在其中添加了detection_features
作为键。
我原本以为特征向量是卷积神经网络在被分类之前的输出。通过查看Inception-v2论文中的表1,我预期这应该是1x1x1000的大小。然而,在我的代码中,output_dict['detection_features'][0]
的大小是4x4x1024,这让我感到困惑,因为这似乎并不是Inception-v2任何步骤中出现的向量大小。
如果有人能指出为什么大小不匹配,我将不胜感激,我担心自己可能误解了某些内容,但在Tensorflow的对象检测中关于特征向量的文档并不多见。
非常感谢
回答:
每层中的单元数量并不是架构法则;遵循Inception V2架构的网络首先是信息流的问题。你的情况看起来很好。Keras的创始人曾经写道,使用8的倍数作为单元数量可能会提供一些计算上的优势,所以你的最后一层单元数可能比论文中的稍微好一些。至于4,4
部分,这可能是输入尺寸的结果。这就是为什么存在最小可能的输入尺寸(否则某些操作将没有像素可处理)。更大的输入(图像)遵循相同的Inception V2过程将导致更大的输出尺寸。这没问题,它只意味着直接展平(在cnn和分类器之间)会导致更多的单元,或者,另一种选择是全局池化会丢弃更多的信息。
总之:你所做的一切完全没问题。架构是图操作的问题,而具体实现(网络内的尺寸)是应用的问题。
编辑:更详细的解释
卷积层由其核形状和单元数量(核的数量)定义。如果一个架构使用具有(3,3)矩阵核的卷积层,它将应用这一核,无论提供给它的内容大小如何(至少与核一样大)。所以,如果像VGG这样的网络架构(图表)要求一定数量的具有(3,3)核的卷积层后跟一个(2,2)池化层,那么无论你将网络输入形状设置为(299,299,3)还是(32,32,32)都没有关系。相同的操作将应用于输入,只是沿轴的次数不同(当然包括最后一个轴,即单元数量,即唯一核的数量),导致不同的输出形状。