【问题标题】:Convert image sequences to 4D tensor/ .npy in Python在 Python 中将图像序列转换为 4D 张量/.npy
【发布时间】:2021-06-23 14:11:42
【问题描述】:

我有一系列 2D 图像(它是如何通过每个时间步传播的)描绘了一个模拟。假设我有 1000 组模拟,每组包含 10 个时间帧图像。这不是一个监督学习问题,因为没有类标签。模型必须学习如何随着时间的推移进行仿真。 (每个模拟都有一个单独的文件夹,每个文件夹包含 10 个时间帧图像)。

谁能帮我创建一个合适的 4D 张量/.npy 以 [no_frames_in_each_sample, total_samples, image_height, image_width) 的形式(在我们的示例中为 [10, 1000, 64, 64]。

以后我可以用它把它分成训练和验证。

任何帮助将不胜感激!谢谢。

【问题讨论】:

  • 嘿,只需创建一个 H,W,C 的图像列表(其中 H 高度,W 与,C 通道数)并确保所有图像具有相同的 (H,W,C) ;然后 np.array(list_of_images_HWC) ;如果需要,请发布您的代码示例
  • @Tom,非常感谢您的建议。我已经使用以下代码进行了尝试: import os import numpy as np from PIL import Image data = "Dataset/Simulation 01/" images = sorted(os.listdir(data)) seq = [] for image in images: img = Image.open(data + image) img = img.resize((160, 220)) seq.append(np.asarray(img)) seq = np.array(seq) print(seq.shape)
  • @Tom,非常感谢您的建议。我已使用以下代码尝试过此操作,但生成的形状为 (10, 220, 160, 3)。也就是说,我能够将单个文件夹中的图像转换为 numpy 数组。如何将其转换为 [10, number_of 个文件夹, 220, 160]?如果可行的话,我也可以将所有框架放在一个文件夹中。谢谢。
  • 只是为了澄清,在这种情况下,您的形状必须按以下方式解释(至少这是最可能的情况)。 Nimages,Height,Width,Channels = 10, 220, 160 ,3 ;表示您有 10 张带有 HWC 的图像。要将这个 4d 张量放在单个 numpy 中,假设您已经拥有 numpy 数组,只需使用方法 mynumpyarray.save("mynumpypath.npy") 就可以了。你明白了吗?

标签: python tensorflow image-preprocessing


【解决方案1】:

将图像转换为 4 维数组的示例代码

import tarfile
my_tar = tarfile.open('images.tar.gz')
my_tar.extractall() # specify which folder to extract to
my_tar.close()

import pathlib
data_dir = pathlib.Path('/content/images/')

import tensorflow as tf
batch_size = 32
img_height = 224
img_width = 224

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

class_names = train_ds.class_names

val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="validation",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

val_batches = tf.data.experimental.cardinality(val_ds)
test_dataset = val_ds.take(val_batches // 5)

输出

Found 8 files belonging to 2 classes.
Using 7 files for training.
Found 8 files belonging to 2 classes.
Using 1 files for validation.

for image_batch, labels_batch in train_ds:
  print(image_batch.shape)
  print(labels_batch.shape)

输出

(7, 224, 224, 3)
(7,)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2021-02-19
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2020-08-28
    • 2020-06-13
    相关资源
    最近更新 更多