我希望为目标检测中感兴趣的区域提取特征向量。我正在使用更快的RCNN & Inception-v2,基本上遵循本教程,但我添加了detection_features作为密钥。
我的印象是,特征向量是CNN的输出,然后再进行分类。通过查看起始-v2纸中的表1,我预计它的大小为1x1x1000。然而,在我的代码中,output_dict['detection_features'][0]的大小是4x4x1024,这让我感到困惑,因为它似乎不是出现在“盗梦空间-v2”的任何步骤中的向量大小。
任何关于为什么大小不匹配的提示都是非常感谢的,我担心我可能误解了一些东西,但是我在Tensorflow的对象检测中找不到很多关于特征向量的文档。
非常感谢
发布于 2020-03-01 02:37:57
每层单位的具体数量并不是一种体系结构规则;遵循初始V2体系结构的网络首先是信息流的问题。你的情况看起来很好。Keras的创建者曾经写道,在8的倍数中使用单位可能会提供一点计算优势,所以您的最后一层单元可能比纸张的略好一些。至于4,4位,这可能是输入维度的结果。这就是为什么有一个最小的可能的输入大小(否则一些操作将没有任何像素来处理)。遵循相同的初始V2过程的更大的输入(图像)将导致更大的输出维度。这很好,它只是意味着一个直接的扁平( cnn和分类器之间)导致更多的单位,或者,或者,全球池丢弃更多的信息。
总之:你所做的一切都是非常好的。架构是图形操作的问题,而特定的实现(网络中的维度)则是应用程序的问题。
编辑:一个更彻底的解释
卷积层由其核形状和单位数(核数)来定义。如果体系结构使用具有(3,3)矩阵内核的卷积层,则不管提供给它的内容大小如何(至少与内核一样大),它都会应用这一点。因此,如果像VGG (图表)这样的网络体系结构需要一定数量的卷积层,然后是(3,3)内核,然后是(2,2)池层,那么不管您是创建网络输入形状(299,299,3)还是(32,32,32)。同样的操作将在输入上执行,只是沿轴执行不同的次数(当然包括最后一个轴,即单元数,也就是唯一的核数),从而产生不同的输出形状。
https://stackoverflow.com/questions/60401655
复制相似问题