簡體   English   中英

使用 6 個通道將圖像傳遞給 Keras 的 CNN 模型

[英]Passing images to Keras' CNN model with 6 channels

我在使用Keras imagedatagenerator類時遇到了問題。 我想通過 6 個通道的圖像來訓練背景減法 - 我將圖像與其背景深度堆疊,這是使用 SubSense 算法計算的。 這給出了形狀為(X,X,6)的圖像,而不是具有(X,X,3)的兩個圖像

但是opencv並不能真正讓你保存它,所以我不得不將它保存為一個numpy文件。 現在我想將該numpy文件作為圖像用於訓練 CNN,最終將僅返回前景蒙版,但顯然嘗試通過 ImageDataGenerator 運行它返回 0 個圖像,因為它有太多通道。

我的代碼是:

all_files = os.listdir("null/train")
arr=[]

for i in all_files:
    file_path= "null/train/" + i
    X = np.load(file_path)
    arr.append (X)

datagen = ImageDataGenerator(
    featurewise_center=True,
    featurewise_std_normalization=True,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True)

datagen.fit(arr)

由此產生的錯誤是:

null/anaconda3\\envs\\tensorflow\\lib\\site-packages\\keras_preprocessing\\image\\image_data_generator.py:940: UserWarning: 按照數據格式約定“channels_last”(軸 3 上的通道),預期輸入為圖像(作為 Numpy 數組) ,即預期軸 3 上有 1、3 或 4 個通道。但是,它傳遞了一個形狀為 (451, 321, 321, 6)(6 個通道)的數組。 '頻道).')

有沒有辦法強制它使用 6 個通道的numpy文件?

對於您的情況,您需要修改將您的第 3 級圖像作為輸入讀取的 preprocessing_function。 無論您正在做什么以使其成為 6 通道圖像,請在該函數內進行更改。 請看一個例​​子(我在 ImageGenerator 中傳遞了一個 3 通道圖像)。

見下文,ARR是3個通道image.I寫信preProsFunc並將其分配到ImageGenerator的preprocessing_function。 我只是連接以便制作 6 通道圖像。 同樣,您可以在 proprocessing_function 中編寫邏輯

import tensorflow as tf
import numpy as np

arr = np.zeros((4,4,3))
arr = np.expand_dims(arr, axis=0)

def preProsFunc(arr):
  arr1 = np.zeros((4,4,3))
  arr1 = np.expand_dims(arr1, axis=0)
  return np.concatenate((arr, arr1), axis=2)

datagen = tf.keras.preprocessing.image.ImageDataGenerator(
    featurewise_center=True,
    featurewise_std_normalization=True,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True,
    preprocessing_function=preProsFunc
    )

datagen.fit(arr)

讓我知道任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM