AutoGluon 多模态常见问题

AutoGluon MultiModal 如何为多模态数据建模?

我们可以从您的数据中自动检测图像、文本、表格、文档以及它们的任意组合。对于每种模态,我们选择相应的基础模型。如果检测到不止一种模态,将在单模态主干网络之上创建一个融合模块,用于融合它们的特征并进行最终预测,这就是后期融合(late fusion)。

我的部署环境中没有互联网访问。我该怎么办?

训练好预测器后,尝试使用以下方法保存它:

predictor.save(SAVE_PATH, standalone=True)

之后,以下 .load() 调用可以在没有互联网访问的情况下进行

from autogluon.multimodal import MultiModalPredictor

predictor = MultiModalPredictor.load(SAVE_PATH)

哪种机器最适合运行 AutoGluon Multimodal?

AutoGluon Multimodal 主要用于微调预训练的深度学习模型。为了高效训练,强烈建议使用 GPU 机器。默认情况下,AutoGluon Multimodal 会利用单台机器上所有可用的 GPU。但是,如果由于模型或数据较大导致单 GPU 训练太慢,建议切换到多 GPU 机器。使用 AWS 实例时,建议从 G4G5 实例开始。在 GPU 内存不足的情况下,即使 per_gpu_batch_size=1,也可以考虑改用 p3dn.24xlargeP4 实例。P4P5 实例通常提供更快的速度和内存能力,但成本也更高。在性能和成本之间取得平衡是找到最佳解决方案的关键。

多 GPU 训练遇到 RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. 如何解决?

一个简单的解决方案是将您的代码封装在条件 if __name__ == '__main__' 中。默认情况下,我们使用 ddp_spawn 作为策略,它不会 fork 创建子进程。因此,有必要在主模块中使用恰当的 if __name__ == '__main__' 习惯用法。

在使用 AutoGluon Multimodal 之前,我需要预处理我的文本或图像数据吗?

通常您不需要预处理文本/图像数据。AutoGluon Multimodal 内置了对文本/图像预处理的支持。但是,这不妨碍您在将 DataFrame 输入到 AutoGluon Multimodal 之前添加自定义预处理逻辑。

可以自定义 AutoGluon Multimodal 吗?

是的,请查阅多模态自定义教程。

我可以在 Kaggle 竞赛中使用 AutoGluon Multimodal 吗?

是的,我们提供了一个用于构建 AutoGluon 可运行独立包的脚本:AutoGluon 多模态 Kaggle 独立包。我们在关于Petfinder PawpularityFeedback Prize - 预测有效论据 的示例中使用了此脚本。您可以参考这些示例了解更多详情。

AutoGluon MultiModal 如何处理每个样本的多个图像?

我们提供两种选项

  1. 在 DataFrame 中使用多个图像列。

  2. 使用分号连接多个图像路径,并将它们放在一个 DataFrame 列中。

这些选项可以单独使用,也可以组合使用。所有图像列都会自动检测。在处理过程中,我们将所有图像通过一个图像主干网络,并对其特征和 logits 进行平均,以获得最终的表示或预测。请注意,对于选项 2,一个 DataFrame 列允许的最大图像数量可以通过超参数 timm_image.max_image_num_per_column 控制,其默认值为 2。

AutoGluon MultiModal 如何处理 DataFrame 中的多个文本列?

所有文本列的检测都是自动化的。我们对每个文本字段单独进行分词,然后将它们连接成一个单一的 token 序列,再输入到模型中。连接后的序列中文本列的顺序遵循 sorted(X.columns) 的顺序,其中 X 代表 DataFrame。token 序列的最大长度由超参数 hf_text.max_text_len 确定,默认值为 512。如果序列长度超过此限制,我们会通过在每次迭代中从最长的文本字段的末尾删除一个 token 来进行迭代截断。这种方法确保较短的文本字段在序列截断过程中受到的影响较小。此外,您可以通过调整超参数 hf_text.insert_sep 来控制不同文本字段之间是否包含分隔 token,该参数默认设置为 True。