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