我们正在研究将我们的 ML 管道从一组手动步骤转换为 TFX 管道。然而,我确实有一些问题,我想对此有一些额外的见解。
我们通常执行以下步骤(对于图像分类任务):
- 加载图像数据和元数据
- 根据元数据过滤掉“坏”数据
- 确定基于图像的统计信息(Python 中的经典图像处理):
- 图像级特征
- 图像区域特征(区域基于微调的 EfficientDet 模型确定)
- 根据图像统计过滤掉“坏”数据
- 从此图像和元数据生成 TFRecords
- 对某些 TFRecord 进行过采样以进行类平衡(使用 tf.data)
- 训练图像分类器
- …</li>
现在,我正在尝试将其映射到典型的示例 TFX 管道上。
然而,这提出了一些问题:
我看到两个选项:
ExampleGen 使用一个 CSV 文件,其中包含指向要加载的图像和要加载的元数据的指针(在步骤“1”之上)。然而:
- 如果此 CSV 文件包含图像文件的路径,ExampleGen 是否可以加载图像数据并将其添加到其输出中?
- ExampleGen 的输出是流输出,还是所有示例数据的转储?
ExampleGen 将 TFRecords 作为输入(上述步骤“5”的输出)
-> 这意味着我们仍然需要在 TFX 之外实施步骤 1-5……这会降低我们对 TFX 的价值……</p>
你能建议什么是最好的前进方式吗?
StatisticsGen 是否还可以生成基于每个示例的统计信息(例如基于经典图像处理的某些图像(区域)特征)?还是应该在 ExampleGen 中实现?或者…?
可以使用元数据存储缓存计算的统计信息吗?如果是,是否有可用的示例?
使用经典图像处理计算基于图像的特征很慢。如果新数据可用,触发要执行的 TFX 输入组件,理想情况下应该从缓存中加载已经计算的统计信息。
ExampleValidator 可能会拒绝某些示例(例如缺失数据、异常值……)是否正确?
如何在此设置中实现网络输入端的类平衡(不是通过损失函数)(通常我们通过使用 tf.data 对我们的 TFRecord 进行过采样来做到这一点)?如果这是在 ExampleGen 级别完成的,那么 ExampleValidator 可能仍会拒绝一些可能再次不平衡数据的示例。对于大数据 ML 任务,这似乎不是一个大问题,但对于小数据 ML 任务(通常在医疗保健环境中就是这种情况)而言,它变得至关重要。所以我希望在 Transform 组件之前有一个 TFX 组件,但是这个块应该可以访问所有数据,而不是以流的方式(参见我之前关于 ExampleGen 输出的问题)......</p>
感谢您的见解。