在 Tensorflow 中使用具有多个通道的 extract_image_patches

CJx*_*JxD 4 python tensorflow

我想将我的 1024x1024x3 大图像分成 32x32x3 块,因此我认为这extract_image_patches()是正确的想法:

...

patch_size = [1, 32, 32, 3]
patch_batch = tf.extract_image_patches(
    image_batch, patch_size, patch_size, [1, 1, 1, 1], 'VALID')
patch_batch = tf.reshape(patch_batch, [-1, 32, 32, 3])
Run Code Online (Sandbox Code Playgroud)

其中 image_batch 是用tf.train.shuffle_batch(). 但是,正如此错误消息所解释的那样,这似乎是“未实现的”:

UnimplementedError (see above for traceback): Only support ksizes across space.
 [[Node: ExtractImagePatches = ExtractImagePatches[T=DT_FLOAT, ksizes=[1, 32, 32, 3], padding="VALID", rates=[1, 1, 1, 1], strides=[1, 32, 32, 3], _device="/job:localhost/replica:0/task:0/cpu:0"](shuffle_batch)]]
Run Code Online (Sandbox Code Playgroud)

如果我将图像读取为灰度并使用 1 个通道,则没有问题,但我想以全彩色进行训练。我是否只需要进行一些重塑,或者我错过了什么?

Python 3.4,TensorFlow 1.1.0

Har*_*lla 7

我想,你应该试试这个:

imgs = np.random.rand(1,1024,1024,3)
patches = tf.extract_image_patches(images=imgs, ksizes=[1, 32, 32, 1], strides=[1, 32, 32, 1], rates=[1, 1, 1, 1], padding='VALID')
patches = tf.reshape(patches,[-1,32,32,3])
val = sess.run(patches)
print val.shape
Run Code Online (Sandbox Code Playgroud)

(1024, 32, 32, 3)

您不必在 ksizes 中指定 #channels。它将从每个通道中提取补丁,您可以稍后对其进行整形。这对你有帮助吗??

必须分析重塑行为以检查补丁的外观。