使用 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' 测试。