无法从灰度转换为 RGB 以使用 FER2013 数据集进行迁移学习
Unable to convert to RGB from Grayscale for transfer learning with FER2013 dataset
我这里的 post 也有类似的问题:
本质上,我正在训练使用迁移学习(使用 Inception)在 FER2013 上进行训练,以构建预测图片情绪的模型。不幸的是,图像是灰度的,Inception 模型使用 rgb 作为输入。
我尝试使用建议的解决方案,但是 returns 我出错了,我没有足够的声誉来评论原始解决方案。
这是原始解决方案:
def to_grayscale_then_rgb(image):
image = tf.image.rgb_to_grayscale(image)
image = tf.image.grayscale_to_rgb(image)
return image
我将其插入到我的数据生成器中。我也试过最初只使用灰度到 rgb,但也返回了一个错误。
train_rgb_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255,
preprocessing_function= to_grayscale_then_rgb ,
#preprocessing_function=tf.image.grayscale_to_rgb,
vertical_flip= True)
train_dataflow_rgb = train_rgb_datagen.flow_from_directory(train_root,
target_size = (48,48),
seed = seed_num)
test_rgb_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255,
preprocessing_function= to_grayscale_then_rgb,
#preprocessing_function=tf.image.grayscale_to_rgb,
vertical_flip= True)
test_dataflow_rgb = test_rgb_datagen.flow_from_directory(test_root,
target_size = (48,48),
shuffle = False,
seed = seed_num)
当我尝试训练模型时,出现以下错误:
epochs = 50
steps_per_epoch = 1000
tl_Incept_history = tl_Incept_model.fit(train_dataflow_rgb,
epochs = epochs,
validation_data=(test_dataflow_rgb),
#steps_per_epoch=steps_per_epoch,
callbacks=[early_callback, myCallback])
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_10932/801602138.py in <module>
2 steps_per_epoch = 1000
3
----> 4 tl_Incept_history = tl_Incept_model.fit(train_dataflow_rgb,
5 epochs = epochs,
6 validation_data=(test_dataflow_rgb),
~\Venv\testpy39\lib\site-packages\keras\utils\traceback_utils.py in error_handler(*args, **kwargs)
65 except Exception as e: # pylint: disable=broad-except
66 filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67 raise e.with_traceback(filtered_tb) from None
68 finally:
69 del filtered_tb
~\Venv\testpy39\lib\site-packages\tensorflow\python\eager\execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
56 try:
57 ctx.ensure_initialized()
---> 58 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
59 inputs, attrs, num_outputs)
60 except core._NotOkStatusException as e:
InvalidArgumentError: input depth must be evenly divisible by filter depth: 1 vs 3
预处理代码很好,只是尺寸似乎不匹配。它需要 image_size[0], image_size[1], num_channels
,其中 num_channels = 3 如果是 rgb(每个 r、g、b 一个),如果是灰度则 = 1。
您有两个 target_size = (48,48),
的实例 - 如果将它们更改为 target_size = (48,48,3),
会起作用吗?
如果不是,要进一步调试,请单独尝试 def to_grayscale_then_rgb(image):
图像并查看返回图像的尺寸。如果它是二维的(例如 image_size[0]、image_size[1]),您可以探索在函数内重塑图像,如下所示:XXX = tf.convert_to_tensor(XXX[:,:,:3])
如 [=16= 中所示],尽管 grayscale_to_rgb
应该输出最终维度 3...
我这里的 post 也有类似的问题:
本质上,我正在训练使用迁移学习(使用 Inception)在 FER2013 上进行训练,以构建预测图片情绪的模型。不幸的是,图像是灰度的,Inception 模型使用 rgb 作为输入。
我尝试使用建议的解决方案,但是 returns 我出错了,我没有足够的声誉来评论原始解决方案。
这是原始解决方案:
def to_grayscale_then_rgb(image):
image = tf.image.rgb_to_grayscale(image)
image = tf.image.grayscale_to_rgb(image)
return image
我将其插入到我的数据生成器中。我也试过最初只使用灰度到 rgb,但也返回了一个错误。
train_rgb_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255,
preprocessing_function= to_grayscale_then_rgb ,
#preprocessing_function=tf.image.grayscale_to_rgb,
vertical_flip= True)
train_dataflow_rgb = train_rgb_datagen.flow_from_directory(train_root,
target_size = (48,48),
seed = seed_num)
test_rgb_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255,
preprocessing_function= to_grayscale_then_rgb,
#preprocessing_function=tf.image.grayscale_to_rgb,
vertical_flip= True)
test_dataflow_rgb = test_rgb_datagen.flow_from_directory(test_root,
target_size = (48,48),
shuffle = False,
seed = seed_num)
当我尝试训练模型时,出现以下错误:
epochs = 50
steps_per_epoch = 1000
tl_Incept_history = tl_Incept_model.fit(train_dataflow_rgb,
epochs = epochs,
validation_data=(test_dataflow_rgb),
#steps_per_epoch=steps_per_epoch,
callbacks=[early_callback, myCallback])
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_10932/801602138.py in <module>
2 steps_per_epoch = 1000
3
----> 4 tl_Incept_history = tl_Incept_model.fit(train_dataflow_rgb,
5 epochs = epochs,
6 validation_data=(test_dataflow_rgb),
~\Venv\testpy39\lib\site-packages\keras\utils\traceback_utils.py in error_handler(*args, **kwargs)
65 except Exception as e: # pylint: disable=broad-except
66 filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67 raise e.with_traceback(filtered_tb) from None
68 finally:
69 del filtered_tb
~\Venv\testpy39\lib\site-packages\tensorflow\python\eager\execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
56 try:
57 ctx.ensure_initialized()
---> 58 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
59 inputs, attrs, num_outputs)
60 except core._NotOkStatusException as e:
InvalidArgumentError: input depth must be evenly divisible by filter depth: 1 vs 3
预处理代码很好,只是尺寸似乎不匹配。它需要 image_size[0], image_size[1], num_channels
,其中 num_channels = 3 如果是 rgb(每个 r、g、b 一个),如果是灰度则 = 1。
您有两个 target_size = (48,48),
的实例 - 如果将它们更改为 target_size = (48,48,3),
会起作用吗?
如果不是,要进一步调试,请单独尝试 def to_grayscale_then_rgb(image):
图像并查看返回图像的尺寸。如果它是二维的(例如 image_size[0]、image_size[1]),您可以探索在函数内重塑图像,如下所示:XXX = tf.convert_to_tensor(XXX[:,:,:3])
如 [=16= 中所示],尽管 grayscale_to_rgb
应该输出最终维度 3...