我想通过使用Khosla等人提供的memnet caffemodel来提取记忆力得分和记忆力热图。在link 看一下prototxt模型,我可以理解最终的内积输出应该是可记忆性得分,但是我应该如何获得给定输入图像的可记忆性图? Here一些例子。
提前致谢
答案 0 :(得分:2)
如他们的论文[1]所述,CNN(MemNet)为可记忆性输出单个实值输出。因此,他们制作的网络publicly available,根据输入图像计算这个单一的可记忆性得分 - 而不是热图。
在论文的第5部分中,他们描述了如何使用这个训练有素的CNN来预测可记忆性热图:
要生成可记忆性地图,我们只需放大图像并将MemNet应用于图像的重叠区域。我们对图像的多个比例执行此操作,并对得到的可记忆性图进行平均。
让我们考虑这里的两个重要步骤:
为了使CNN能够处理任意大小的图像,他们使用[2]中提供的方法。 虽然卷积层可以应用于任意大小的图像 - 导致更小或更大的输出 - 内部产品层具有固定的输入和输出大小。 要使内部产品层适用于任何输入大小,您可以像卷积内核一样应用它。对于具有4096个输出的FC层,可将其解释为带有4096个要素贴图的1x1卷积。
要在Caffe中执行此操作,您可以直接关注Net Surgery tutorial。您创建了一个新的.prototxt
文件,用InnerProduct
图层替换Convolution
图层。现在,Caffe不再能够识别.caffemodel
中的权重,因为图层类型不再匹配。因此,您将旧网及其参数加载到Python中,加载新网络,并将旧参数分配给新网络并将其另存为新的.caffemodel
文件。
现在,我们可以通过网络运行任何尺寸(大于或等于227x227)的图像。
如论文[1]中所述,您将问题1中的完全卷积网络应用于不同比例的相同图像。 MemNet是经过重新训练的AlexNet,因此默认输入维度为227x227。他们提到451x451输入提供8x8输出,这意味着应用这些层的步幅为28。所以一个简单的例子可能是:
结果如下:
因此,您只需平均这些输出即可获得最终的8x8热图。从上图中可以清楚地看出如何平均不同规模的输出:你必须将低分辨率的输出上采样到8x8,然后平均。
从论文中,我假设它们使用非常高分辨率的刻度,因此它们的热图将与最初的图像大小相同。他们写道,#34;正常" GPU。这是一个相当长的时间,这也表明他们可能会对输入图像进行相当大的采样以达到相当高的维度。
[1]:A。Khosla,AS Raju,A。Torralba和A. Oliva,"大规模地理解和预测图像可记忆性",in:ICCV,2015。{{3} }
[2]:J。Long,E。Shelhamer和T. Darrell,"用于语义分割的完全卷积网络",在:CVPR,2015。[PDF]