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