将传统机器学习管道迁移到 TFX

问题描述

我们正在研究将我们的 ML 管道从一组手动步骤转换为 TFX 管道。 然而,我确实有一些问题,我想对此有一些额外的见解。

我们通常执行以下步骤(对于图像分类任务):

  1. 加载图像数据和元数据
  2. 根据元数据过滤掉“坏”数据
  3. 确定基于图像的统计数据(Python 中的经典图像处理):
    1. 图像级特征
    2. 图像区域特征 (区域是根据微调的 EfficientDet 模型确定的)
  4. 根据图像统计过滤掉“坏”数据
  5. 从此图像和元数据生成 TFRecords
  6. 对某些 TFRecord 进行过采样以实现类平衡(使用 tf.data)
  7. 训练图像分类

现在,我正在尝试将其映射到典型的 example TFX pipeline

然而,这引发了许多问题:

  1. 我看到两个选项:

    • ExampleGen 使用一个 CSV 文件,其中包含指向要加载的图像和要加载的元数据的指针(上面的步骤“1”)。但是:

      • 如果此 CSV 文件包含图像文件的路径,那么 ExampleGen 能否加载图像数据并将其添加到其输出中?
      • ExampleGen 的输出是流式输出还是所有示例数据的转储?
    • ExampleGen 将 TFRecords 作为输入(上述步骤“5”的输出

      -> 这意味着我们仍然需要在 TFX 之外实施第 1-5 步……这会降低我们 TFX 的价值……

    请您建议最好的方法是什么?

  2. StatisticsGen 是否还可以基于每个示例生成统计信息(例如基于经典图像处理的某些图像(区域)特征)?或者这应该在 ExampleGen 中实现?还是……?

  3. 可以使用元数据存储缓存计算出的统计数据吗?如果是,是否有可用的示例?

    使用经典图像处理计算基于图像的特征很慢。如果有新数据可用,触发要执行的 TFX 输入组件,理想情况下应从缓存加载已计算的统计信息。

  4. ExampleValidator 可能拒绝某些示例(例如缺失数据、异常值等)是否正确?

  5. 在这个设置中如何实现网络输入端的类平衡(而不是通过损失函数)(通常我们通过使用 tf.data 对我们的 TFRecords 进行过采样来实现)? 如果这是在 ExampleGen 级别完成的,那么 ExampleValidator 可能仍会拒绝某些可能再次使数据不平衡的示例。 对于大数据 M​​L 任务来说,这似乎不是什么大问题,但对于小数据 ML 任务(通常在医疗保健环境中就是这种情况)就变得至关重要。 所以我希望在 Transform 组件之前有一个 TFX 组件,但是这个块应该可以访问所有数据,而不是以流式方式(参见我之前关于 ExampleGen 输出的问题)......

感谢您的见解。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)