Skip to main content
 首页 » 编程设计

python之在 Tensorflow 中使用具有多个 channel 的 extract_image_patches

2024年08月20日31dflying

我想将我的 1024x1024x3 大图像分成 32x32x3 block ,因此我认为 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]) 

其中 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)]] 

如果我将图像读取为灰度并使用 1 个 channel ,则没有问题,但我想以全彩色进行训练。我是否只需要做一些 reshape ,还是我遗漏了什么?

Python 3.4、TensorFlow 1.1.0

请您参考如下方法:

我想,你应该试试这个:

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 

(1024, 32, 32, 3)

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

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