AutoGluon多模态预测入门教程:图像+文本+表格数据联合建模

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在背后自动完成了以下工作:

  1. 推断问题类型(分类或回归)
  2. 检测数据模态(图像、文本、表格)
  3. 从模型池中选择合适的模型组合
  4. 训练选定的模型
  5. 如果需要,在多个骨干模型上添加后期融合模型(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),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石玥含Lane

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值