AutoGluon Multimodal (AutoMM) 完全指南:用基础模型三行代码搞定多模态 AutoML
【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon
导读
AutoMM(AutoGluon-Multimodal)是 AutoGluon 项目中面向多模态场景的 AutoML 引擎,它以"三行代码"为核心设计哲学,让开发者无需手动完成数据预处理、模型选择与微调,即可将 HuggingFace、TIMM、MMDetection 等模型库中的基础模型(Foundation Models)适配到自己的领域数据上。本文以 docs/tutorials/multimodal/index.md 为主线,结合 MultiModalPredictor 源码 与 默认配置,系统梳理 AutoMM 支持的数据类型、任务类型、完整教程体系以及核心 API 与配置细节,帮助你快速判断"我的多模态任务应该用哪个教程、走哪条技术路线"。
AutoMM 是什么:面向基础模型的多模态 AutoML
基础模型(Foundation Models)在大规模通用数据上预训练,已在计算机视觉与自然语言处理等领域展现出强大能力。然而,把基础模型真正落地到真实业务场景并非易事:数据模态多种多样、可选的基础模型数量庞大、模型体积又相当可观,这些因素让集成工作充满挑战。
AutoMM 的目标正是打破这些壁垒,它大幅削减了数据预处理、模型选择和微调环节中的人工工程与手动干预。借助 AutoMM,用户只需三行代码,就能把来自主流模型库(如 HuggingFace Transformers、TIMM、MMDetection)的基础模型适配到自己的领域数据上。该工作对应的论文为AutoGluon-Multimodal (AutoMM): Supercharging Multimodal AutoML with Foundation Models(Zhiqiang Tang 等,The International Conference on Automated Machine Learning, 2024)。
在代码层面,AutoMM 的核心入口是MultiModalPredictor类,其类文档明确描述了这一设计定位——"AutoMM is designed to simplify the fine-tuning of foundation models for downstream applications with just three lines of code"(见 predictor.py)。它支持图像、文本、表格(tabular)与文档(document)数据,可单独使用也可任意组合;支持分类、回归、目标检测、命名实体识别(NER)、语义匹配与图像分割等任务。
支持的模型库、数据类型与任务总览
从 constants.py 的常量定义可以清晰地看到 AutoMM 支持的数据列类型与问题类型:
数据列类型:text(文本)、text_ner(NER 文本)、numerical(数值)、categorical(类别)、image_path(图像路径)、image_bytearray、image_base64_str、document(文档)、document_image、document_pdf等。
问题类型(problem_type),在MultiModalPredictor.__init__的参数文档中有完整罗列(predictor.py):
| 问题类型 | 说明 | 对应教程模块 |
|---|---|---|
binary/multiclass/classification | 二分类 / 多分类 | 文本、图像、多模态分类 |
regression | 回归 | 文本、图像、多模态回归 |
object_detection | 目标检测 | Object Detection |
ner/named_entity_recognition | 命名实体识别 | Text / Multimodal NER |
text_similarity/image_similarity/image_text_similarity | 语义匹配 | Semantic Matching |
feature_extraction | 特征抽取(仅推理) | Semantic Matching 系列 |
zero_shot_image_classification | CLIP 零样本图像分类 | Image Prediction |
few_shot_classification | 少样本分类(基础模型 + SVM) | Advanced Topics |
semantic_segmentation | 语义分割(Segment Anything) | Image Segmentation |
需要特别说明的是,部分问题类型默认加载预训练模型后即可进行零样本推理(无需调用.fit()),包括object_detection、text_similarity、image_similarity、image_text_similarity、feature_extraction、zero_shot_image_classification。从 predictor.py 可以看出,MultiModalPredictor会根据问题类型自动选择对应的 Learner 实现(MatchingLearner、ObjectDetectionLearner、NERLearner、FewShotSVMLearner、SemanticSegmentationLearner、BaseLearner)。
按数据与任务分类的实战教程全景
以下是 AutoMM 官方教程的完整分类导览(对应 docs/tutorials/multimodal/index.md 的全部导航卡片,链接已转换为仓库内相对路径,可直接点击阅读对应 Notebook)。
文本数据:分类 / 回归 / NER
- AutoMM for Text Prediction - Quick Start:如何用 AutoMM 训练高质量文本预测模型。教程见 text_prediction/beginner_text.ipynb。
- AutoMM for Text Prediction - Multilingual Problems:如何在非英文数据集上构建模型。教程见 text_prediction/multilingual_text.ipynb。
- AutoMM for Named Entity Recognition - Quick Start:如何使用 AutoMM 做实体抽取。教程见 text_prediction/ner.ipynb。另有中文 NER 示例 text_prediction/chinese_ner.ipynb。
在默认配置中,文本模型由hf_text组件承载,默认 checkpoint 为google/electra-base-discriminator,默认 pooling 方式为cls,max_text_len为 512,并使用快速(Rust 版)tokenizer(model/default.yaml);NER 任务则使用独立的ner_text组件,默认 checkpoint 为bert-base-cased,并通过special_tags(X、O)完成 BIO 标签体系的建模(model/default.yaml)。
图像数据:分类 / 回归
- AutoMM for Image Classification - Quick Start:如何训练图像分类模型。教程见 image_prediction/beginner_image_cls.ipynb。
- Zero-Shot Image Classification with CLIP:如何通过预训练 CLIP 模型在 AutoMM 中启用零样本图像分类。教程见 image_prediction/clip_zeroshot.ipynb。
图像骨干由timm_image组件实现,默认 checkpoint 为swin_base_patch4_window7_224,训练阶段采用resize_shorter_side + center_crop + trivial_augment数据增强管线,图像归一化使用 ImageNet 统计量(model/default.yaml)。CLIP 零样本能力则由clip组件提供,默认 checkpoint 为openai/clip-vit-base-patch32,支持图像与文本两种数据类型(model/default.yaml)。
图像数据:目标检测
- Quick Start on a Tiny COCO Format Dataset:如何在 COCO 格式数据集上 5 分钟内训练高质量目标检测模型。
- Prepare COCO2017 Dataset:如何准备 COCO2017 数据集。
- Prepare Pascal VOC Dataset:如何准备 Pascal VOC 数据集。
- Prepare Watercolor Dataset:如何准备 Watercolor 数据集。
- Convert VOC Format Dataset to COCO Format:如何将 VOC 格式数据转换为 COCO 格式。
- Object Detection with DataFrame:如何使用
pd.DataFrame格式进行目标检测。
上述教程的完整入口与数据准备说明见 object_detection/index.md。目标检测模型由mmdet_image组件承载,默认 checkpoint 为yolov3_mobilenetv2_8xb24-320-300e_coco,支持xyxy/xywh两种 bbox 输出格式(model/default.yaml);同时,仓库还内置了 DINO、Faster R-CNN、YOLOX 等预训练检测配置,位于 configs/pretrain/detection。此外,examples 目录下还有完整的 COCO/VOC 数据集下载脚本(download_coco17.sh、download_voc07.sh)与检测训练、评估、推理示例(detection_train.py、finetune_coco_format.py)。
图像数据:语义分割
- AutoMM for Semantic Segmentation - Quick Start:如何训练语义分割模型。教程见 image_segmentation/beginner_semantic_seg.ipynb。
语义分割由sam组件实现,基于 Segment Anything Model,默认 checkpoint 为facebook/sam-vit-huge,默认冻结mask_decoder.iou_prediction_head与prompt_encoder等层(model/default.yaml)。
文档数据:分类 / 回归
- AutoMM for Scanned Document Classification:如何构建扫描文档分类器。教程见 document_prediction/document_classification.ipynb。
- Classifying PDF Documents with AutoMM:如何构建 PDF 文档分类器。教程见 document_prediction/pdf_classification.ipynb。
文档模型由document_transformer组件实现,默认 checkpoint 为microsoft/layoutlmv3-base,这是一种专门针对文档版面理解的基础模型(model/default.yaml)。文档类型常量(DOCUMENT、DOCUMENT_IMAGE、DOCUMENT_PDF)定义于 constants.py。
图像 / 文本数据:语义匹配
- Text-to-text Semantic Matching - Quick Start:文本-文本语义匹配。教程见 semantic_matching/text2text_matching.ipynb。
- Image-to-Image Semantic Matching - Quick Start:图像-图像语义匹配。教程见 semantic_matching/image2image_matching.ipynb。
- Image-Text Semantic Matching - Quick Start:图像-文本语义匹配。教程见 semantic_matching/image_text_matching.ipynb。
- Zero Shot Image-Text Semantic Matching with AutoMM:零样本图像-文本语义匹配。教程见 semantic_matching/zero_shot_img_txt_matching.ipynb。
- Text Semantic Search with AutoMM:如何用语义嵌入提升搜索排序效果。教程见 semantic_matching/text_semantic_search.ipynb。
语义匹配任务在 API 层面通过query、response、match_label三个参数配置(predictor.py):query/response分别指定查询列与响应列;当不提供标签列时,同一行内的 query-response 对被视作正样本对;match_label用于指定二分类匹配任务中表示"匹配"的标签值。匹配任务的配置集中在 configs/matcher/default.yaml。
多模态数据:分类 / 回归 / NER
- AutoMM for Text + Tabular - Quick Start:如何将 AutoMM 应用于混合文本、数值、类别列的多模态数据表。教程见 multimodal_prediction/multimodal_text_tabular.ipynb。
- AutoMM for Image + Text + Tabular - Quick Start:如何在图像、文本、数值、类别数据上训练模型。教程见 multimodal_prediction/beginner_multimodal.ipynb。
- AutoMM for Entity Extraction with Text and Image - Quick Start:如何训练多模态命名实体识别模型。教程见 multimodal_prediction/multimodal_ner.ipynb。
多模态融合是 AutoMM 的核心能力。当使用多个骨干网络时,AutoMM 会在其上附加一个晚期融合(late-fusion)模型(MLP 或 Transformer)。融合组件在配置文件中定义清晰:fusion_mlp(默认 128 维隐藏层、leaky_relu 激活、layer_norm 归一化)与fusion_transformer(默认 3 个 block、8 个 attention head、GEGLU FFN 激活),见 model/default.yaml;表格侧还有ft_transformer组件,支持对类别与数值列做 Transformer 建模(model/default.yaml)。此外categorical_mlp与numerical_mlp分别负责类别列与数值列的浅层 MLP 编码(model/default.yaml)。
核心 API 深度解析:MultiModalPredictor
MultiModalPredictor定义于 multimodal/src/autogluon/multimodal/predictor.py,是 AutoMM 面向用户的所有功能的统一入口。其构造参数(predictor.py)如下:
| 参数 | 含义 | 默认值 / 说明 |
|---|---|---|
label | 要预测的目标列名 | None |
problem_type | 问题类型(见上文表格) | 不传时自动推断 |
query/response | 语义匹配任务中的查询列 / 响应列 | None |
match_label | 语义匹配中表示"匹配"的标签值 | None |
presets | 质量预设:best_quality、high_quality(默认)、medium_quality,另有对应 HPO 版本 | None |
eval_metric | 评估指标;None时按问题类型自动选择(多分类默认accuracy、二分类默认roc_auc、回归默认root_mean_squared_error) | None |
hyperparameters | 覆盖默认配置,支持字符串 / 字符串列表 / 字典三种写法 | None |
path | 模型与产物保存目录;不指定时在工作目录创建AutogluonAutoMM/ag-[TIMESTAMP] | None |
verbosity | 日志详细程度,0~4 | 2 |
num_classes/classes | 目标检测的类别数 / 全部类别名 | None |
pretrained | 是否使用预训练权重初始化 | True |
use_ensemble/ensemble_size/ensemble_mode | 是否启用集成(仅多模态分类/回归任务),集成规模与模式(one_shot/sequential) | False/2/one_shot |
构造完成后,MultiModalPredictor的核心方法包括:
fit(train_data, tuning_data=None, time_limit=None, hyperparameters=None, column_types=None, holdout_frac=None, teacher_predictor=None, hyperparameter_tune_kwargs=None, ...)(predictor.py):训练模型。tuning_data不传时会自动从训练集按holdout_frac划分验证集用于早停与超参优化;teacher_predictor用于知识蒸馏;hyperparameter_tune_kwargs用于配置 HPO(num_trials、scheduler、searcher)。predict(data)/predict_proba(data):预测标签 / 分类概率。predict_proba(as_multiclass=False)可返回二分类正类概率(对应positive_class属性)。evaluate(data, metrics=None)(predictor.py):在给定数据集上评估模型,可传入指标名列表;不传时仅返回保存的_eval_metric_name对应分数。- 常用属性:
path、label、problem_type、eval_metric、total_parameters、trainable_parameters、model_size、class_labels、positive_class等。
关于hyperparameters参数的三种写法(predictor.py):
# 写法一:空格分隔的字符串 hyperparameters = "model.hf_text.checkpoint_name=google/electra-small-discriminator model.timm_image.checkpoint_name=swin_small_patch4_window7_224" # 写法二:字符串列表 hyperparameters = [ "model.hf_text.checkpoint_name=google/electra-small-discriminator", "model.timm_image.checkpoint_name=swin_small_patch4_window7_224", ] # 写法三:字典 hyperparameters = { "model.hf_text.checkpoint_name": "google/electra-small-discriminator", "model.timm_image.checkpoint_name": "swin_small_patch4_window7_224", }这些键对应 configs/model/default.yaml 中的配置层级(model.<组件名>.<参数>),从而可以在不改源码的情况下灵活替换骨干网络、调整图像尺寸、切换 pooling 方式等。
三行代码实战:以 PetFinder 多模态分类为例
multimodal-quick-start.ipynb 给出了一个端到端的完整示例,使用简化版 PetFinder 数据集(预测宠物领养速度,二分类),数据同时包含图片、文本描述与表格特征。核心流程如下:
第一步:安装并加载数据。通过load_zip下载数据集压缩包,用 pandas 读取train.csv与test.csv,目标列为AdoptionSpeed。AutoGluon 的多模态 DataFrame 格式要求图片列中每个单元格是单个图片文件的路径字符串,因此示例对以;分隔的多图字段取第一张,并用path_expander把相对路径转换为绝对路径。
第二步:三行代码训练。
from autogluon.multimodal import MultiModalPredictor predictor = MultiModalPredictor(label=label_col).fit( train_data=train_data, time_limit=120 )在底层,fit会自动推断问题类型(分类或回归)、检测特征模态、从多模态模型池中挑选模型并完成训练;若使用多个骨干,还会在其上叠加晚期融合模型。
第三步:预测与评估。
predictions = predictor.predict(test_data.drop(columns=label_col)) probs = predictor.predict_proba(test_data.drop(columns=label_col)) scores = predictor.evaluate(test_data, metrics=["roc_auc"])这个示例印证了本文导读中的承诺:加载数据之后,训练、预测、概率输出与指标评估加起来不超过几行代码。
训练配置体系:优化器与训练策略
AutoMM 的训练配置集中在 configs/optim/default.yaml,理解这些参数有助于调优训练效果:
- 优化器:默认
adamw,学习率1e-4,权重衰减0.001。 - 学习率策略:默认
lr_choice: layerwise_decay(逐层衰减,lr_decay: 0.9),调度器为cosine_decay(余弦退火),warmup_steps: 0.1(热身比例),end_lr: 0。 - 训练轮数:
max_epochs: 20;早停patience: 10;val_check_interval: 0.5(每半个 epoch 校验一次)。 - 梯度处理:
gradient_clip_val: 1、gradient_clip_algorithm: "norm"。 - 正则化与损失:
label_smoothing: 0;分类支持focal_loss(gamma: 2.0)应对类别不平衡;top_k与top_k_average_method(支持uniform_soup/greedy_soup/best)实现模型权重平均。 - 参数高效微调(PEFT):
peft支持bit_fit(仅微调 bias)、norm_fit、lora、lora_bias、lora_norm等模式,lora配置块中默认仅适配 query/value 注意力权重(r: 8、alpha: 8)。这是 efficient_finetuning_basic.ipynb 中单卡微调十亿级模型(如 FLAN-T5-XL)的核心支撑。
进阶主题:从微调到生产加速
原文档的 Advanced Topics 板块提供了 11 个进阶教程,覆盖模型训练与部署的完整生命周期(对应 advanced_topics/index.md 目录下的 Notebook):
- 参数高效微调:efficient_finetuning_basic.ipynb —— 组合 IA³、BitFit 与梯度检查点在单 GPU 上微调更大规模的基础模型。
- 超参数优化:hyperparameter_optimization.ipynb —— 基于 Ray Tune 的 HPO(
fit的hyperparameter_tune_kwargs参数)。 - 知识蒸馏:model_distillation.ipynb —— 通过
teacher_predictor参数将教师模型知识迁移给学生模型。 - 持续训练:continuous_training.ipynb —— 在已有模型基础上继续训练。
- 自定义配置:customization.ipynb —— 深度定制 AutoMM 配置。
- Presets 预设:presets.ipynb —— 理解
best_quality/high_quality/medium_quality及对应 HPO 变体。 - 少样本学习:few_shot_learning.ipynb —— 基础模型 + SVM 的少样本分类方案(对应
FewShotSVMLearner)。 - 类别不平衡:focal_loss.ipynb —— 用 Focal Loss 处理类别不平衡。
- TensorRT 加速推理:tensorrt.ipynb —— 用 TensorRT 加速 AutoMM 推理。
- 问题类型与评估指标:problem_types_and_metrics.ipynb —— AutoGluon 支持的完整问题类型与评估指标清单。
- 多标签列:multiple_label_columns.ipynb —— 多标签列处理。
此外,多模态集成学习可通过use_ensemble=True开启(由EnsembleLearner实现),支持one_shot与sequential两种集成模式(predictor.py),适合对精度有更高要求的场景。
结语与学习路线建议
AutoMM 的设计哲学是把"数据预处理、模型选择、微调"这三件最繁琐的事交给框架,让开发者聚焦于业务本身。根据你的任务类型,可以按以下路线快速上手:
- 纯文本任务(分类/回归/NER)→ 从 beginner_text.ipynb 开始;
- 纯图像任务→ 分类看 beginner_image_cls.ipynb,检测看 object_detection/index.md,分割看 beginner_semantic_seg.ipynb;
- 多模态组合(图像+文本+表格)→ 直接阅读 multimodal-quick-start.ipynb 与 beginner_multimodal.ipynb;
- 搜索/匹配类业务→ 进入 semantic_matching 系列;
- 追求极致精度或受限资源→ 再深入 advanced_topics 的微调、蒸馏、HPO 与 TensorRT 加速。
官方评测指标、问题类型与相关实现细节,可结合 predictor.py 与 constants.py 源码对照阅读,以更准确地把握 AutoMM 的能力边界与配置方式。
【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考