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:要使用的資料類型。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:要使用的資料類型。None 表示使用全域設定 keras.backend.floatx() (除非您已更改它,否則它預設為 "float32")。預設為 None

回傳

一個 PIL 圖片實例。