Keras 3 API 文件 / 資料載入 / 影像資料載入

影像資料載入

[原始碼]

image_dataset_from_directory 函數

keras.utils.image_dataset_from_directory(
    directory,
    labels="inferred",
    label_mode="int",
    class_names=None,
    color_mode="rgb",
    batch_size=32,
    image_size=(256, 256),
    shuffle=True,
    seed=None,
    validation_split=None,
    subset=None,
    interpolation="bilinear",
    follow_links=False,
    crop_to_aspect_ratio=False,
    pad_to_aspect_ratio=False,
    data_format=None,
    verbose=True,
)

從目錄中的影像檔案產生 tf.data.Dataset

如果您的目錄結構如下

main_directory/
...class_a/
......a_image_1.jpg
......a_image_2.jpg
...class_b/
......b_image_1.jpg
......b_image_2.jpg

那麼呼叫 image_dataset_from_directory(main_directory, labels='inferred') 將會傳回一個 tf.data.Dataset,其會產生來自子目錄 class_aclass_b 的影像批次,以及標籤 0 和 1(0 對應於 class_a,而 1 對應於 class_b)。

支援的影像格式:.jpeg.jpg.png.bmp.gif。動畫 gif 會截斷為第一幀。

引數

  • directory:資料所在的目錄。如果 labels"inferred",則應包含子目錄,每個子目錄包含一個類別的影像。否則,目錄結構會被忽略。
  • labels:可以是 "inferred"(標籤從目錄結構產生)、None(無標籤),或是與目錄中找到的影像檔案數量相同大小的整數標籤清單/元組。標籤應根據影像檔案路徑的字母數字順序排序(透過 Python 中的 os.walk(directory) 取得)。
  • label_mode:描述 labels 編碼方式的字串。選項為
    • "int":表示標籤編碼為整數(例如,用於 sparse_categorical_crossentropy 損失)。
    • "categorical" 表示標籤編碼為類別向量(例如,用於 categorical_crossentropy 損失)。
    • "binary" 表示標籤(只能有 2 個)編碼為值為 0 或 1 的 float32 純量(例如,用於 binary_crossentropy)。
    • None(無標籤)。
  • class_names:僅在 labels"inferred" 時有效。這是類別名稱的明確清單(必須與子目錄的名稱相符)。用於控制類別的順序(否則使用字母數字順序)。
  • color_mode"grayscale""rgb""rgba" 其中之一。影像是否將轉換為具有 1、3 或 4 個通道。預設為 "rgb"
  • batch_size:資料批次的大小。預設為 32。如果為 None,則資料將不會批次處理(資料集將產生個別樣本)。
  • image_size:從磁碟讀取影像後要調整大小的尺寸,指定為 (height, width)。由於管線處理的影像批次都必須具有相同的大小,因此必須提供此尺寸。預設為 (256, 256)
  • shuffle:是否要隨機排序資料。預設為 True。如果設定為 False,則以字母數字順序排序資料。
  • seed:用於隨機排序和轉換的可選隨機種子。
  • validation_split:介於 0 和 1 之間的可選浮點數,保留用於驗證的資料比例。
  • subset:要傳回的資料子集。"training""validation""both" 其中之一。僅在設定 validation_split 時使用。當 subset="both" 時,實用工具會傳回兩個資料集的元組(分別為訓練和驗證資料集)。
  • interpolation:字串,調整影像大小時使用的插值方法。支援 "bilinear""nearest""bicubic""area""lanczos3""lanczos5""gaussian""mitchellcubic"。預設為 "bilinear"
  • follow_links:是否訪問符號連結指向的子目錄。預設為 False
  • crop_to_aspect_ratio:如果為 True,則在不失真長寬比的情況下調整影像大小。當原始長寬比與目標長寬比不同時,輸出影像將被裁剪,以便傳回影像中與目標長寬比相符的最大可能視窗(大小為 image_size)。預設情況下(crop_to_aspect_ratio=False),長寬比可能不會保留。
  • pad_to_aspect_ratio:如果為 True,則在不失真長寬比的情況下調整影像大小。當原始長寬比與目標長寬比不同時,輸出影像將被填充,以便傳回影像中與目標長寬比相符的最大可能視窗(大小為 image_size)。預設情況下(pad_to_aspect_ratio=False),長寬比可能不會保留。
  • data_format:如果為 None,則使用 keras.config.image_data_format(),否則使用 'channel_last' 或 'channel_first'。
  • verbose:是否顯示關於類別和找到的檔案數量的資訊。預設為 True

傳回

tf.data.Dataset 物件。

  • 如果 label_modeNone,則會產生形狀為 (batch_size, image_size[0], image_size[1], num_channels)float32 張量,編碼影像(請參閱下方關於 num_channels 的規則)。
  • 否則,它會產生一個元組 (images, labels),其中 images 的形狀為 (batch_size, image_size[0], image_size[1], num_channels),而 labels 遵循下方描述的格式。

關於標籤格式的規則

  • 如果 label_mode"int",則標籤是形狀為 (batch_size,)int32 張量。
  • 如果 label_mode"binary",則標籤是形狀為 (batch_size, 1) 的 1 和 0 的 float32 張量。
  • 如果 label_mode"categorical",則標籤是形狀為 (batch_size, num_classes)float32 張量,表示類別索引的 one-hot 編碼。

關於產生影像中通道數量的規則

  • 如果 color_mode"grayscale",則影像張量中有 1 個通道。
  • 如果 color_mode"rgb",則影像張量中有 3 個通道。
  • 如果 color_mode"rgba",則影像張量中有 4 個通道。

[原始碼]

load_img 函數

keras.utils.load_img(
    path,
    color_mode="rgb",
    target_size=None,
    interpolation="nearest",
    keep_aspect_ratio=False,
)

將影像載入 PIL 格式。

範例

image = keras.utils.load_img(image_path)
input_arr = keras.utils.img_to_array(image)
input_arr = np.array([input_arr])  # Convert single image to a batch.
predictions = model.predict(input_arr)

引數

  • path:影像檔案的路徑。
  • color_mode"grayscale""rgb""rgba" 其中之一。預設值:"rgb"。所需的影像格式。
  • target_size:可以是 None(預設為原始大小)或整數元組 (img_height, img_width)
  • interpolation:如果目標大小與載入的影像大小不同,則用於重新取樣影像的插值方法。支援的方法為 "nearest""bilinear""bicubic"。如果安裝了 PIL 版本 1.1.3 或更新版本,則也支援 "lanczos"。如果安裝了 PIL 版本 3.4.0 或更新版本,則也支援 "box""hamming"。預設情況下,使用 "nearest"
  • keep_aspect_ratio:布林值,是否在不失真長寬比的情況下將影像調整為目標大小。影像在調整大小之前,會以目標長寬比在中心裁剪。

傳回

PIL 影像實例。


[原始碼]

img_to_array 函數

keras.utils.img_to_array(img, data_format=None, dtype=None)

將 PIL 影像實例轉換為 NumPy 陣列。

範例

from PIL import Image
img_data = np.random.random(size=(100, 100, 3))
img = keras.utils.array_to_img(img_data)
array = keras.utils.image.img_to_array(img)

引數

  • img:輸入 PIL 影像實例。
  • data_format:影像資料格式,可以是 "channels_first""channels_last"。預設為 None,在這種情況下,會使用全域設定 keras.backend.image_data_format()(除非您已變更,否則預設為 "channels_last")。
  • dtype:要使用的 Dtype。None 表示使用全域設定 keras.backend.floatx()(除非您已變更,否則預設為 "float32")。

傳回

3D NumPy 陣列。


[原始碼]

save_img 函數

keras.utils.save_img(
    path, x, data_format=None, file_format=None, scale=True, **kwargs
)

將儲存為 NumPy 陣列的影像儲存到路徑或檔案物件。

引數

  • path:路徑或檔案物件。
  • x:NumPy 陣列。
  • data_format:影像資料格式,"channels_first""channels_last"
  • file_format:可選的檔案格式覆寫。如果省略,則使用的格式會從檔名副檔名判斷。如果使用檔案物件而不是檔名,則應始終使用此參數。
  • scale:是否將影像值重新縮放到 [0, 255] 範圍內。
  • **kwargs:傳遞給 PIL.Image.save() 的其他關鍵字引數。

[原始碼]

array_to_img 函數

keras.utils.array_to_img(x, data_format=None, scale=True, dtype=None)

將 3D NumPy 陣列轉換為 PIL 影像實例。

範例

from PIL import Image
img = np.random.random(size=(100, 100, 3))
pil_img = keras.utils.array_to_img(img)

引數

  • x:輸入資料,可以是任何可以轉換為 NumPy 陣列的形式。
  • data_format:影像資料格式,可以是 "channels_first""channels_last"。預設為 None,在這種情況下,會使用全域設定 keras.backend.image_data_format()(除非您已變更,否則預設為 "channels_last")。
  • scale:是否重新縮放影像,使最小值和最大值分別為 0 和 255。預設為 True
  • dtype:要使用的 Dtype。None 表示使用全域設定 keras.backend.floatx()(除非您已變更,否則預設為 "float32")。預設為 None

傳回

PIL 影像實例。