![](/img/trans.png)
[英]Error while passing images to a CNN model made from TensorFlow and Keras
[英]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.