我想通过使用Khosla等人的memnet caffemodel提取记忆分数和记忆热图。在链接查看prototxt模型时,我可以理解最终的内部产品输出应该是可记忆性评分,但是如何获得给定输入图像的可记忆性图呢?这里一些例子。
提前感谢
发布于 2017-01-23 17:36:06
正如他们在论文1中所描述的那样,CNN (MemNet)为记忆输出一个真实值的输出。因此,他们制作的公开可得网络计算了这个单一的记忆分数,给出了一个输入图像,而不是一个热图。
在论文的第五节中,他们描述了如何使用经过训练的CNN来预测记忆热图:
为了生成可记忆的地图,我们只需放大图像并将MemNet应用于图像的重叠区域。我们这样做的多尺度图像和平均结果的可记忆性地图。
让我们考虑这里的两个重要步骤:
问题1:让CNN与任何输入大小一起工作。
为了使CNN在任意大小的图像上工作,它们使用了2.卷积层可以应用于任意大小的图像,从而产生较小或更大的输出,而内部积层具有固定的输入和输出大小。要使内部产品层与任何输入大小一起工作,您可以像应用卷积内核一样应用它。对于输出为4096的FC层,您可以将其解释为带有4096个特征映射的1x1卷积。
要在Caffe中做到这一点,您可以直接遵循净外科教程。创建一个新的.prototxt文件,用Convolution层替换InnerProduct层。现在,Caffe将不再识别.caffemodel中的权重,因为层类型不再匹配。因此,您将旧的net及其参数加载到Python中,加载新的网络,并将旧的参数分配给新的网络,并将其保存为一个新的.caffemodel文件。
现在,我们可以通过网络运行任意维度的图像(大于或等于227x227)。
问题2:生成热图
正如在论文1中所解释的,您将这个从问题1到同一图像的完全卷积网络在不同的尺度上应用。MemNet是一个经过重新训练的AlexNet,因此默认的输入维度是227x227。他们提到,451x451输入提供了8x8输出,这意味着应用层的步幅为28。所以一个简单的例子可以是:
结果如下:

因此,您只需对这些输出进行平均值,就可以得到最终的8x8热图。从上面的图像中,应该清楚地知道如何平均不同规模的输出:您将不得不将低分辨率输出的平均值提高到8x8,然后才是平均值。
从论文中,我假设他们使用非常高分辨率的刻度,所以他们的热图将与最初的图像大小大致相同。他们写道,它需要一个“正常”的GPU 1。这是一个相当长的时间,这也表明他们很可能把输入的图像提升到相当高的维度。
书目:
1: A. Khosla、A. S. Raju、A. Torralba和A. Oliva,“大规模理解和预测图像记忆”,载于: ICCV,2015年。[PDF]
2: J. Long,E. Shelhamer和T. Darrell,“语义分割的完全卷积网络”,载于: CVPR,2015。[PDF]
https://stackoverflow.com/questions/41807416
复制相似问题