我的问题是如何在tensorflow (1.4)中找到一种高效(主要是参数计数)的方法来实现滑动窗口,以便在图像中应用一个神经网络,并生成一个二维映射,每个像素(或区域)表示对应的接收字段(在这种情况下是滑动窗口本身)的网络输出。
实际上,我试图使用tensorflow实现MTANN或PatchGAN,但我无法理解我找到的实现。
这两种架构可以简单地描述为:
虽然我找不到MTANN的任何tensorflow实现,但我找到了PatchGAN 实现,也就是被认为是卷积网络,但是我不知道如何在实践中实现这一点。
假设我有一个预先训练过的网络,我得到输出张量。我知道卷积是可行的,因为卷积层在输入的局部区域上工作,我想要做的事情可以清楚地表示为卷积网络。但是,如果我已经有了从给定的固定大小窗口生成子映射的网络,该怎么办?
我有张量
sub_map = network(input_patch)它从1, 8,8,3图像返回1,2,2,1映射(对应于输入大小为8,过滤器大小为3x3的3层FCN )。我如何在1,64,64,3张图像上扫描这个网络,以便生成一个由每个空间贡献组成的1,64,64,1张地图,就像在卷积中发生的那样?
我已经考虑过这些解决方案:
tf.image.extract_image_patches可以显式提取深度维度中的所有图像补丁和通道,但我认为它会消耗太多的资源,因为由于内存限制,我要从一个完全卷积的网络切换到PatchGAN鉴别器--最终地图的组成也不是那么直接。whole_map = tf.nn.convolution(input=x64_images, filter=sub_map, ...)的东西,但是我不认为这会起作用,因为过滤器是一个操作符,它依赖于接收字段本身。最终目标是将这个小网络应用于大图像(例如。1024x1024)以一种有效的方式,因为我目前的模型逐渐缩小了图像的规模,由于大量的参数无法在内存中使用。
谁能帮我更好地了解我错过了什么?
谢谢
发布于 2018-11-28 11:06:54
我发现了Andrew的一个有趣的关于如何使用卷积层实现滑动窗口的视频。这里的问题是,我认为层数是一个依赖于固定输入/输出形状的变量,而它应该是相反的。
原则上,保存的模型只应包含每个级别的学习滤波器,并且只要滤波器形状与层的输入/输出深度兼容。因此,应用一种不同的(如。(更大的)网络输入的空间分辨率产生不同的输出形状,这可以看作是神经网络在滑动窗口上对输入图像的应用。
https://stackoverflow.com/questions/53410952
复制相似问题