使用 ImageDataGenerator 时出错,flow_from_dataframe 其中 y_col 是一个列表
error using ImageDataGenerator,flow_from_dataframe where y_col is a list
我正在尝试训练模型以学习生成边界框。
为此,我创建了一个如下所示的数据框。
xmin,ymin,xmax,ymax中的值为整数
filepaths labels xmin ymin xmax ymax
0 C:\Temp\whales\test_images[=12=]0110707af0ba.jpg whale 25 81 183 118
1 C:\Temp\whales\test_images[=12=]06287ec424cb.jpg whale 65 154 114 176
2 C:\Temp\whales\test_images[=12=]0809ecb2ccad.jpg whale 77 118 156 144
3 C:\Temp\whales\test_images[=12=]098d1376dab2.jpg whale 9 61 220 176
4 C:\Temp\whales\test_images[=12=]0b8d89c738bd.jpg whale 3 12 223 222
xmin、ymin、xmax、ymax中的值为整数。然后我尝试使用
从数据框中创建一个火车生成器
train_gen=gen.flow_from_dataframe(train_df,x_col='filepaths', ycol=['xmin','ymin', 'xmax','ymax'],
target_size=img_size,color_mode='rgb',
class_mode='multi_output', batch_size=batch_size, shuffle=True,
seed=123)
执行此代码会引发如下所示的错误
TypeError: If class_mode="multi_output", y_col must be a list. Received str.
我已经阅读了所有类似的问题,但没有找到解决方案。还详细阅读了文档,但没有解决他的问题。在我看来 y_col 是文档指定的列表。我还尝试将上面的代码与 class_mode='raw' 一起使用。抛出一个错误
KeyError: 'class'
我正在使用 tensorflow 2.4.0 和 python 3.7。任何帮助将不胜感激。
是的,刚刚发现您应该通过 y_col
而不是 ycol
。这是一个工作示例:
import tensorflow as tf
import pandas as pd
train_df = pd.DataFrame(
data = {
'filepaths': ['/content/result_image0.png', '/content/result_image1.png', '/content/result_image2.png'],
'labels': ['whale', 'whale', 'whale'],
'xmin': [25, 65, 77],
'ymin': [81, 154, 118],
'xmax': [183, 114, 156],
'ymax': [118, 176, 144]
}
)
img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
columns = ['xmin','ymin', 'xmax','ymax']
train_gen=img_gen.flow_from_dataframe(train_df,x_col='filepaths', y_col = columns,
target_size=(100, 100), color_mode='rgb',
class_mode='multi_output', batch_size=2, shuffle=True,
seed=123)
使用 class_mode
'multi_output' 和 'raw' 测试。
我正在尝试训练模型以学习生成边界框。 为此,我创建了一个如下所示的数据框。 xmin,ymin,xmax,ymax中的值为整数
filepaths labels xmin ymin xmax ymax
0 C:\Temp\whales\test_images[=12=]0110707af0ba.jpg whale 25 81 183 118
1 C:\Temp\whales\test_images[=12=]06287ec424cb.jpg whale 65 154 114 176
2 C:\Temp\whales\test_images[=12=]0809ecb2ccad.jpg whale 77 118 156 144
3 C:\Temp\whales\test_images[=12=]098d1376dab2.jpg whale 9 61 220 176
4 C:\Temp\whales\test_images[=12=]0b8d89c738bd.jpg whale 3 12 223 222
xmin、ymin、xmax、ymax中的值为整数。然后我尝试使用
从数据框中创建一个火车生成器train_gen=gen.flow_from_dataframe(train_df,x_col='filepaths', ycol=['xmin','ymin', 'xmax','ymax'],
target_size=img_size,color_mode='rgb',
class_mode='multi_output', batch_size=batch_size, shuffle=True,
seed=123)
执行此代码会引发如下所示的错误
TypeError: If class_mode="multi_output", y_col must be a list. Received str.
我已经阅读了所有类似的问题,但没有找到解决方案。还详细阅读了文档,但没有解决他的问题。在我看来 y_col 是文档指定的列表。我还尝试将上面的代码与 class_mode='raw' 一起使用。抛出一个错误
KeyError: 'class'
我正在使用 tensorflow 2.4.0 和 python 3.7。任何帮助将不胜感激。
是的,刚刚发现您应该通过 y_col
而不是 ycol
。这是一个工作示例:
import tensorflow as tf
import pandas as pd
train_df = pd.DataFrame(
data = {
'filepaths': ['/content/result_image0.png', '/content/result_image1.png', '/content/result_image2.png'],
'labels': ['whale', 'whale', 'whale'],
'xmin': [25, 65, 77],
'ymin': [81, 154, 118],
'xmax': [183, 114, 156],
'ymax': [118, 176, 144]
}
)
img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
columns = ['xmin','ymin', 'xmax','ymax']
train_gen=img_gen.flow_from_dataframe(train_df,x_col='filepaths', y_col = columns,
target_size=(100, 100), color_mode='rgb',
class_mode='multi_output', batch_size=2, shuffle=True,
seed=123)
使用 class_mode
'multi_output' 和 'raw' 测试。