AutoGluon多模态预测入门教程:图像+文本+表格数据联合建模
什么是AutoGluon多模态预测
AutoGluon是一个强大的自动化机器学习工具库,其中的多模态预测模块(MultiModalPredictor)能够自动处理包含多种数据类型的复杂数据集。它就像一个"模型动物园的模型动物园",可以智能地组合不同类型的深度学习模型来处理图像、文本和表格数据的联合建模问题。
准备工作
首先需要安装AutoGluon的多模态组件:
!pip install autogluon.multimodal
然后导入必要的库并设置随机种子以保证结果可复现:
import os
import numpy as np
import warnings
warnings.filterwarnings('ignore')
np.random.seed(123)
数据集介绍与准备
本教程使用简化版的PetFinder数据集,任务是预测宠物的被收养速度(分类为0-慢速和1-快速)。数据集包含每只宠物的:
- 图像(宠物照片)
- 文本描述(收养简介)
- 表格数据(年龄、品种、颜色等特征)
数据下载与加载
download_dir = './ag_automm_tutorial'
zip_file = 'https://automl-mm-bench.s3.amazonaws.com/petfinder_for_tutorial.zip'
from autogluon.core.utils.loaders import load_zip
load_zip.unzip(zip_file, unzip_dir=download_dir)
加载CSV文件并处理图像路径:
import pandas as pd
dataset_path = download_dir + '/petfinder_for_tutorial'
train_data = pd.read_csv(f'{dataset_path}/train.csv', index_col=0)
test_data = pd.read_csv(f'{dataset_path}/test.csv', index_col=0)
label_col = 'AdoptionSpeed'
# 处理图像路径
image_col = 'Images'
train_data[image_col] = train_data[image_col].apply(lambda ele: ele.split(';')[0])
test_data[image_col] = test_data[image_col].apply(lambda ele: ele.split(';')[0])
def path_expander(path, base_folder):
path_l = path.split(';')
return ';'.join([os.path.abspath(os.path.join(base_folder, path)) for path in path_l])
train_data[image_col] = train_data[image_col].apply(lambda ele: path_expander(ele, base_folder=dataset_path))
test_data[image_col] = test_data[image_col].apply(lambda ele: path_expander(ele, base_folder=dataset_path))
数据样例展示
让我们查看一条样本数据,包括文本描述和对应的图像:
example_row = train_data.iloc[0]
print(example_row['Description'])
from IPython.display import Image, display
example_image = example_row[image_col]
pil_img = Image(filename=example_image)
display(pil_img)
模型训练
使用MultiModalPredictor进行训练非常简单:
from autogluon.multimodal import MultiModalPredictor
predictor = MultiModalPredictor(label=label_col)
predictor.fit(
train_data=train_data,
time_limit=120 # 为了快速演示,设置120秒时间限制
)
AutoGluon在背后自动完成了以下工作:
- 推断问题类型(分类或回归)
- 检测数据模态(图像、文本、表格)
- 从模型池中选择合适的模型组合
- 训练选定的模型
- 如果需要,在多个骨干模型上添加后期融合模型(MLP或Transformer)
模型评估
训练完成后,我们可以在测试集上评估模型性能:
scores = predictor.evaluate(test_data, metrics=["roc_auc"])
print(scores)
模型预测
对于没有标签的新数据,我们可以进行预测:
predictions = predictor.predict(test_data.drop(columns=label_col))
print(predictions[:5]) # 打印前5个预测结果
对于分类任务,还可以获取每个类别的预测概率:
probas = predictor.predict_proba(test_data.drop(columns=label_col))
print(probas[:5])
特征嵌入提取
有时我们需要将样本转换为嵌入向量用于下游任务:
embeddings = predictor.extract_embedding(test_data.drop(columns=label_col))
print(embeddings.shape) # 打印嵌入向量的维度
模型保存与加载
AutoGluon支持模型的保存和重新加载:
import uuid
model_path = f"./tmp/{uuid.uuid4().hex}-saved_model"
predictor.save(model_path)
loaded_predictor = MultiModalPredictor.load(model_path)
# 验证加载的模型
scores2 = loaded_predictor.evaluate(test_data, metrics=["roc_auc"])
print(scores2)
安全注意事项
加载模型时需要注意:
- MultiModalPredictor.load()内部使用pickle模块
- pickle存在安全风险,可能执行恶意代码
- 只加载可信来源的模型数据
进阶学习
本教程展示了AutoGluon多模态预测的基本用法。要深入了解如何:
- 调整模型架构
- 自定义训练流程
- 优化超参数
- 处理特定领域数据
可以参考AutoGluon的高级定制化文档。AutoGluon的多模态能力非常强大,能够处理各种复杂的现实世界数据建模问题。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考