定制 AutoMM

Open In Colab Open In SageMaker Studio Lab

AutoMM 拥有强大且易于使用的配置设计。本教程将引导您了解各种 AutoMM 配置,以增强您的定制灵活性。具体来说,AutoMM 配置包含以下几个部分:

  • optim

  • env

  • model

  • data

  • distiller

优化 (Optimization)

optim.lr

学习率。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.lr": 1.0e-4})
# set learning rate to 5.0e-4
predictor.fit(hyperparameters={"optim.lr": 5.0e-4})

optim.optim_type

优化器类型。

  • "sgd": 带动量的随机梯度下降。

  • "adam": 一种基于一阶和二阶矩自适应估计的随机梯度下降方法。详情参见这篇论文

  • "adamw": 通过将权重衰减与优化步骤解耦来改进 Adam。详情参见这篇论文

# default used by AutoMM
predictor.fit(hyperparameters={"optim.optim_type": "adamw"})
# use optimizer adam
predictor.fit(hyperparameters={"optim.optim_type": "adam"})

optim.weight_decay

权重衰减。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.weight_decay": 1.0e-3})
# set weight decay to 1.0e-4
predictor.fit(hyperparameters={"optim.weight_decay": 1.0e-4})

optim.lr_decay

后面的层可以拥有比前面层更大的学习率。最后一层/头部层具有最大的学习率 optim.lr。对于一个具有 n 层的模型,层 i 的学习率为 optim.lr * optim.lr_decay^(n-i)。要使用统一的学习率,只需将学习率衰减设置为 1

# default used by AutoMM
predictor.fit(hyperparameters={"optim.lr_decay": 0.9})
# turn off learning rate decay
predictor.fit(hyperparameters={"optim.lr_decay": 1})

optim.lr_mult

当我们使用两阶段学习率选择时,最后一层/头部层具有最大的学习率 optim.lr * optim.lr_mult。而其他层具有正常的学习率 optim.lr。要使用统一的学习率,只需将学习率倍数设置为 1

# default used by AutoMM
predictor.fit(hyperparameters={"optim.lr_mult": 1})
# turn on two-stage lr for 10 times learning rate in head layer
predictor.fit(hyperparameters={"optim.lr_mult": 10})

optim.lr_choice

我们可能希望不同的层具有不同的学习率,这里我们有 two_stages 学习率选择策略(详情参见 optim.lr_mult 部分),或 layerwise_decay 学习率选择策略(详情参见 optim.lr_decay 部分)。要使用统一的学习率,只需将其设置为空字符串 ""

# default used by AutoMM
predictor.fit(hyperparameters={"optim.lr_choice": "layerwise_decay"})
# turn on two-stage lr choice
predictor.fit(hyperparameters={"optim.lr_choice": "two_stages"})

optim.lr_schedule

学习率调度器。

  • "cosine_decay": 学习率衰减遵循余弦曲线。

  • "polynomial_decay": 学习率基于多项式函数衰减。

  • "linear_decay": 学习率线性衰减。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.lr_schedule": "cosine_decay"})
# use polynomial decay
predictor.fit(hyperparameters={"optim.lr_schedule": "polynomial_decay"})

optim.max_epochs

达到此 epoch 数后停止训练。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.max_epochs": 10})
# train 20 epochs
predictor.fit(hyperparameters={"optim.max_epochs": 20})

optim.max_steps

在达到此步数后停止训练。如果达到 optim.max_stepsoptim.max_epochs(以先达到者为准),训练将停止。默认情况下,我们将 optim.max_steps 设置为 -1 来禁用它。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.max_steps": -1})
# train 100 steps
predictor.fit(hyperparameters={"optim.max_steps": 100})

optim.warmup_steps

在训练开始时,在此百分比的步数内将学习率从 0 提升至 optim.lr

# default used by AutoMM
predictor.fit(hyperparameters={"optim.warmup_steps": 0.1})
# do learning rate warmup in the first 20% steps.
predictor.fit(hyperparameters={"optim.warmup_steps": 0.2})

optim.patience

在连续此数量的检查点没有改进后停止训练。检查频率由 optim.val_check_interval 控制。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.patience": 10})
# set patience to 5 checks
predictor.fit(hyperparameters={"optim.patience": 5})

optim.val_check_interval

在训练 epoch 内多久检查一次验证集。可以指定为浮点数或整数。

  • 传入 [0.0, 1.0] 范围内的浮点数,表示在训练 epoch 的一定比例后检查。

  • 传入整数,表示在固定数量的训练批次后检查。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.val_check_interval": 0.5})
# check validation set 4 times during a training epoch
predictor.fit(hyperparameters={"optim.val_check_interval": 0.25})

optim.gradient_clip_algorithm

使用的梯度裁剪算法。支持按值或按范数裁剪梯度。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.gradient_clip_algorithm": "norm"})
# clip gradients by value
predictor.fit(hyperparameters={"optim.gradient_clip_algorithm": "value"})

optim.gradient_clip_val

梯度裁剪值,可以是绝对值或梯度范数,取决于 optim.gradient_clip_algorithm 的选择。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.gradient_clip_val": 1})
# cap the gradients to 5
predictor.fit(hyperparameters={"optim.gradient_clip_val": 5})

optim.track_grad_norm

在训练期间跟踪梯度的 p 范数。可以设置为 'inf' 表示无穷范数。如果使用自动混合精度 (AMP),梯度将在记录之前取消缩放。

# default used by AutoMM (no tracking)
predictor.fit(hyperparameters={"optim.track_grad_norm": -1})
# track the 2-norm
predictor.fit(hyperparameters={"optim.track_grad_norm": 2})

optim.log_every_n_steps

每多少步记录一次日志。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.log_every_n_steps": 10})
# log once every 50 steps
predictor.fit(hyperparameters={"optim.log_every_n_steps": 50})

optim.top_k

根据验证分数,选择 top k 个模型检查点进行模型平均。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.top_k": 3})
# use top 5 checkpoints
predictor.fit(hyperparameters={"optim.top_k": 5})

optim.top_k_average_method

使用何种策略来平均 top k 个模型检查点。

  • "greedy_soup": 尝试将检查点从最优到最差添加到平均池中,如果平均后的检查点性能下降则停止。详情参见这篇论文

  • "uniform_soup": 将所有 top k 个检查点平均作为最终检查点。

  • "best": 选择验证性能最优的检查点。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.top_k_average_method": "greedy_soup"})
# average all the top k checkpoints
predictor.fit(hyperparameters={"optim.top_k_average_method": "uniform_soup"})

optim.peft

参数高效微调选项。参数高效微调意味着只微调一小部分参数而不是整个预训练主干网络。

  • "bit_fit": 仅偏置参数。详情参见这篇论文

  • "norm_fit": 归一化参数 + 偏置参数。详情参见这篇论文

  • "lora": LoRA Adaptors。详情参见这篇论文

  • "lora_bias": LoRA Adaptors + 偏置参数。

  • "lora_norm": LoRA Adaptors + 归一化参数 + 偏置参数。

  • "ia3": IA3 算法。详情参见这篇论文

  • "ia3_bias": IA3 + 偏置参数。

  • "ia3_norm": IA3 + 归一化参数 + 偏置参数。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.peft": None})
# finetune only bias parameters
predictor.fit(hyperparameters={"optim.peft": "bit_fit"})
# finetune with IA3 + BitFit
predictor.fit(hyperparameters={"optim.peft": "ia3_bias"})

optim.skip_final_val

训练停止信号发出后是否跳过最终验证。

# default used by AutoMM
predictor.fit(hyperparameters={"optim.skip_final_val": False})
# skip the final validation
predictor.fit(hyperparameters={"optim.skip_final_val": True})

环境 (Environment)

env.num_gpus

使用的 GPU 数量。如果给定 -1,我们将通过 env.num_gpus = torch.cuda.device_count() 计算 GPU 数量。

# by default, all available gpus are used by AutoMM
predictor.fit(hyperparameters={"env.num_gpus": -1})
# use 1 gpu only
predictor.fit(hyperparameters={"env.num_gpus": 1})

env.per_gpu_batch_size

每个 GPU 的批量大小。

# default used by AutoMM
predictor.fit(hyperparameters={"env.per_gpu_batch_size": 8})
# use batch size 16 per GPU
predictor.fit(hyperparameters={"env.per_gpu_batch_size": 16})

env.batch_size

训练每一步使用的批量大小。如果 env.batch_size 大于 env.per_gpu_batch_size * env.num_gpus,我们将累积梯度以达到有效的 env.batch_size,然后再执行一次优化步骤。累积步数通过 env.batch_size // (env.per_gpu_batch_size * env.num_gpus) 计算。

# default used by AutoMM
predictor.fit(hyperparameters={"env.batch_size": 128})
# use batch size 256
predictor.fit(hyperparameters={"env.batch_size": 256})

env.inference_batch_size_ratio

预测或评估使用更大的每 GPU 批量大小 env.per_gpu_batch_size * env.inference_batch_size_ratio

# default used by AutoMM
predictor.fit(hyperparameters={"env.inference_batch_size_ratio": 4})
# use 2x per gpu batch size during prediction or evaluation
predictor.fit(hyperparameters={"env.inference_batch_size_ratio": 2})

env.precision

支持双精度 (64, "64", "64-true"),浮点精度 (32, "32", "32-true"),bfloat16 ("bf16-mixed", "bf16-true"),或 float16 ("16-mixed", "16-true") 精度的训练。更多详情请参阅此处

混合精度,如 "16-mixed",是结合使用 32 位和 16 位浮点数来减少模型训练期间的内存占用。这可以提高性能,在现代 GPU 上实现 +3 倍的加速。

# default used by AutoMM
predictor.fit(hyperparameters={"env.precision": "16-mixed"})
# use bfloat16 mixed precision
predictor.fit(hyperparameters={"env.precision": "bf16-mixed"})

env.num_workers

Pytorch dataloader 在训练中使用的 worker 进程数。请注意,更多 worker 并不总是带来加速,特别是当 env.strategy = "ddp_spawn" 时。更多详情请参阅此处的指南。

# default used by AutoMM
predictor.fit(hyperparameters={"env.num_workers": 2})
# use 4 workers in the training dataloader
predictor.fit(hyperparameters={"env.num_workers": 4})

env.num_workers_inference

Pytorch dataloader 在预测或评估中使用的 worker 进程数。

# default used by AutoMM
predictor.fit(hyperparameters={"env.num_workers_inference": 2})
# use 4 workers in the prediction/evaluation dataloader
predictor.fit(hyperparameters={"env.num_workers_inference": 4})

env.strategy

分布式训练模式。

  • "dp": 数据并行。

  • "ddp": 分布式数据并行 (基于 python 脚本)。

  • "ddp_spawn": 分布式数据并行 (基于 spawn)。

更多详情请参阅此处

# default used by AutoMM
predictor.fit(hyperparameters={"env.strategy": "ddp_spawn"})
# use ddp during training
predictor.fit(hyperparameters={"env.strategy": "ddp"})

env.accelerator

支持 "cpu", "gpu", 或 "auto" (默认)。在自动模式下,如果 CPU 和 GPU 都可用,则 GPU 具有更高的优先级。

更多详情请参阅此处

# default used by AutoMM
predictor.fit(hyperparameters={"env.accelerator": "auto"})
# use cpu for training
predictor.fit(hyperparameters={"env.accelerator": "cpu"})

env.compile.turn_on

是否通过 torch.compile 编译 Pytorch 模型。(默认 False) 请注意,编译模型可能需要一些时间。建议用于大型模型和长时间训练。

# default used by AutoMM
predictor.fit(hyperparameters={"env.compile.turn_on": False})
# turn on torch.compile
predictor.fit(hyperparameters={"env.compile.turn_on": True})

env.compile.mode

可以是 “default”, “reduce-overhead”, “max-autotune”“max-autotune-no-cudagraphs”。详情请参阅 torch.compile

# default used by AutoMM
predictor.fit(hyperparameters={"env.compile.mode": "default"})
# reduces the overhead of python with CUDA graphs, useful for small batches.
predictor.fit(hyperparameters={"env.compile.mode": “reduce-overhead”})

env.compile.dynamic

是否使用动态形状跟踪 (默认 True)。详情请参阅 torch.compile

# default used by AutoMM
predictor.fit(hyperparameters={"env.compile.dynamic": True})
# assumes a static input shape across mini-batches.
predictor.fit(hyperparameters={"env.compile.dynamic": False})

env.compile.backend

编译模型时使用的后端。详情请参阅 torch.compile

# default used by AutoMM
predictor.fit(hyperparameters={"env.compile.backend": "inductor"})

模型 (Model)

model.names

选择使用的模型类型。

  • "hf_text": 来自 Huggingface 的预训练文本模型。

  • "timm_image": 来自 TIMM 的预训练图像模型。

  • "clip": 预训练的 CLIP 模型。

  • "categorical_mlp": 用于分类数据的 MLP。

  • "numerical_mlp": 用于数值数据的 MLP。

  • "ft_transformer": 用于表格 (分类和数值) 数据的FT-Transformer

  • "fusion_mlp": 基于 MLP 的多主干网络特征融合。

  • "fusion_transformer": 基于 Transformer 的多主干网络特征融合。

  • "sam": 来自 Huggingface 的预训练 Segment Anything Model。

如果检测不到某种模态的数据,训练中将自动移除相关的模型类型。

# default used by AutoMM
predictor.fit(hyperparameters={"model.names": ["hf_text", "timm_image", "clip", "categorical_mlp", "numerical_mlp", "fusion_mlp"]})
# use only text models
predictor.fit(hyperparameters={"model.names": ["hf_text"]})
# use only image models
predictor.fit(hyperparameters={"model.names": ["timm_image"]})
# use only clip models
predictor.fit(hyperparameters={"model.names": ["clip"]})

model.hf_text.checkpoint_name

指定 Huggingface AutoModel 支持的文本主干网络。

# default used by AutoMM
predictor.fit(hyperparameters={"model.hf_text.checkpoint_name": "google/electra-base-discriminator"})
# choose roberta base
predictor.fit(hyperparameters={"model.hf_text.checkpoint_name": "roberta-base"})

model.hf_text.pooling_mode

Transformer 架构的特征池化模式。

  • cls: 使用 cls 特征向量表示一个句子。

  • mean: 平均所有 token 特征向量表示一个句子。

# default used by AutoMM
predictor.fit(hyperparameters={"model.hf_text.pooling_mode": "cls"})
# using the mean pooling
predictor.fit(hyperparameters={"model.hf_text.pooling_mode": "mean"})

model.hf_text.tokenizer_name

选择文本分词器。推荐使用默认的 auto 分词器。

# default used by AutoMM
predictor.fit(hyperparameters={"model.hf_text.tokenizer_name": "hf_auto"})
# using the tokenizer of the ELECTRA model
predictor.fit(hyperparameters={"model.hf_text.tokenizer_name": "electra"})

model.hf_text.max_text_len

设置最大文本长度。不同的模型可能允许不同的最大长度。如果 model.hf_text.max_text_len > 0,我们选择 model.hf_text.max_text_len 和模型允许的最大长度之间的最小值。设置 model.hf_text.max_text_len <= 0 将使用模型的最大长度。

# default used by AutoMM
predictor.fit(hyperparameters={"model.hf_text.max_text_len": 512})
# set to use the length allowed by the tokenizer.
predictor.fit(hyperparameters={"model.hf_text.max_text_len": -1})

model.hf_text.insert_sep

是否在数据帧不同列的文本之间插入 SEP 标记。

# default used by AutoMM
predictor.fit(hyperparameters={"model.hf_text.insert_sep": True})
# use no SEP token.
predictor.fit(hyperparameters={"model.hf_text.insert_sep": False})

model.hf_text.text_segment_num

标记序列中使用的文本段数量。每个文本段都有一个标记类型 ID。我们选择 model.hf_text.text_segment_num 和模型默认使用数量之间的最小值。

# default used by AutoMM
predictor.fit(hyperparameters={"model.hf_text.text_segment_num": 2})
# use 1 text segment
predictor.fit(hyperparameters={"model.hf_text.text_segment_num": 1})

model.hf_text.stochastic_chunk

如果样本的文本标记数大于 model.hf_text.max_text_len,是否随机切割文本块。如果为 False,则从索引 0 切割标记序列到允许的最大长度。否则,随机采样一个起始索引来切割文本块。

# default used by AutoMM
predictor.fit(hyperparameters={"model.hf_text.stochastic_chunk": False})
# select a stochastic text chunk if a text sequence is over-long
predictor.fit(hyperparameters={"model.hf_text.stochastic_chunk": True})

model.hf_text.text_aug_detect_length

仅当文本标记数不小于 model.hf_text.text_aug_detect_length 时执行文本增强。

# default used by AutoMM
predictor.fit(hyperparameters={"model.hf_text.text_aug_detect_length": 10})
# Allow text augmentation for texts whose token number is no less than 5
predictor.fit(hyperparameters={"model.hf_text.text_aug_detect_length": 5})

model.hf_text.text_trivial_aug_maxscale

设置进行数据增强的文本标记的最大百分比。对于每个文本标记序列,我们随机采样 [0, model.hf_text.text_trivial_aug_maxscale] 范围内的百分比,并从四种简单增强操作(包括同义词替换、随机单词交换、随机单词删除和随机标点符号插入)中选择一种进行文本增强。

# by default, AutoMM doesn't do text augmentation
predictor.fit(hyperparameters={"model.hf_text.text_trivial_aug_maxscale": 0})
# Enable trivial augmentation by setting the max scale to 0.1
predictor.fit(hyperparameters={"model.hf_text.text_trivial_aug_maxscale": 0.1})

model.hf_text.gradient_checkpointing

是否开启梯度检查点以减少计算梯度时的内存消耗。有关梯度检查点的更多信息,请参考相关教程

# by default, AutoMM doesn't turn on gradient checkpointing
predictor.fit(hyperparameters={"model.hf_text.gradient_checkpointing": False})
# Turn on gradient checkpointing
predictor.fit(hyperparameters={"model.hf_text.gradient_checkpointing": True})

model.ft_transformer.checkpoint_name

使用本地预训练权重或链接到预训练权重来初始化 ft_transformer 主干网络。

# by default, AutoMM doesn't use pre-trained weights
predictor.fit(hyperparameters={"model.ft_transformer.checkpoint_name": None})
# initialize the ft_transformer backbone from local checkpoint
predictor.fit(hyperparameters={"model.ft_transformer.checkpoint_name": 'my_checkpoint.ckpt'})
# initialize the ft_transformer backbone from url of checkpoint
predictor.fit(hyperparameters={"model.ft_transformer.checkpoint_name": 'https://automl-mm-bench.s3.amazonaws.com/ft_transformer_pretrained_ckpt/iter_2k.ckpt'})

model.ft_transformer.num_blocks

ft_transformer 主干网络中的 Transformer 块数量。

# default used by AutoMM
predictor.fit(hyperparameters={"model.ft_transformer.num_blocks": 3})
# increase the number of blocks to 5 in ft_transformer
predictor.fit(hyperparameters={"model.ft_transformer.num_blocks": 5})

model.ft_transformer.token_dim

ft_transformer 中分类和数值分词器后的 token 维度。

# default used by AutoMM
predictor.fit(hyperparameters={"model.ft_transformer.token_dim": 192})
# increase the token dimension to 256 in ft_transformer
predictor.fit(hyperparameters={"model.ft_transformer.token_dim": 256})

model.ft_transformer.hidden_size

ft_transformer 主干网络的模型嵌入维度。

# default used by AutoMM
predictor.fit(hyperparameters={"model.ft_transformer.hidden_size": 192})
# increase the model embedding dimension to 256 in ft_transformer
predictor.fit(hyperparameters={"model.ft_transformer.hidden_size": 256})

model.ft_transformer.ffn_hidden_size

ft_transformer 块中 FFN(前馈网络)层的隐藏层维度。在Transformer论文中,FFN 中的隐藏层维度设置为模型隐藏大小的 \(4\times\)。这里,我们默认将其设置为等于模型隐藏大小。

# default used by AutoMM
predictor.fit(hyperparameters={"model.ft_transformer.ffn_hidden_size": 192})
# increase the FFN hidden layer dimension to 256 in ft_transformer
predictor.fit(hyperparameters={"model.ft_transformer.ffn_hidden_size": 256})

model.timm_image.checkpoint_name

TIMM 中选择一个图像主干网络。

# default used by AutoMM
predictor.fit(hyperparameters={"model.timm_image.checkpoint_name": "swin_base_patch4_window7_224"})
# choose a vit base
predictor.fit(hyperparameters={"model.timm_image.checkpoint_name": "vit_base_patch32_224"})

model.timm_image.train_transforms

在训练中增强图像。支持传入支持字符串列表,这些字符串选自 (resize_to_square, resize_shorter_side, center_crop, random_resize_crop, random_horizontal_flip, random_vertical_flip, color_jitter, affine, randaug, trivial_augment),或可调用和可 pickle 化的转换对象列表。例如,您可以使用 torchvision transforms (https://pytorch.ac.cn/vision/stable/transforms.html)。

# default used by AutoMM
predictor.fit(hyperparameters={"model.timm_image.train_transforms": ["resize_shorter_side", "center_crop", "trivial_augment"]})
# use random resize crop and random horizontal flip
predictor.fit(hyperparameters={"model.timm_image.train_transforms": ["random_resize_crop", "random_horizontal_flip"]})
# or use a list of callable and pickle-able objects, e.g., torchvision transforms
predictor.fit(hyperparameters={"model.timm_image.train_transforms": [torchvision.transforms.RandomResizedCrop(224), torchvision.transforms.RandomHorizontalFlip()]})

model.timm_image.val_transforms

在验证/测试/部署中转换图像。与 model.timm_image.train_transforms 类似,支持字符串列表或可调用和可 pickle 化的对象来转换图像。

# default used by AutoMM
predictor.fit(hyperparameters={"model.timm_image.val_transforms": ["resize_shorter_side", "center_crop"]})
# resize image to square
predictor.fit(hyperparameters={"model.timm_image.val_transforms": ["resize_to_square"]})
# or use a list of callable and pickle-able objects, e.g., torchvision transforms
predictor.fit(hyperparameters={"model.timm_image.val_transforms": [torchvision.transforms.Resize((224, 224)]})

model.mmdet_image.checkpoint_name

指定 MMDetection 支持的 MMDetection 模型。请使用 “yolox_nano”, “yolox_tiny”, “yolox_s”, “yolox_m”, “yolox_l”, 或 “yolox_x” 来运行与 Autogluon 兼容的修改版 YOLOX 模型。

# default used by AutoMM
predictor = MultiModalPredictor(hyperparameters={"model.mmdet_image.checkpoint_name": "yolov3_mobilenetv2_8xb24-320-300e_coco"})
# choose YOLOX-L
predictor = MultiModalPredictor(hyperparameters={"model.mmdet_image.checkpoint_name": "yolox_l"})
# choose DINO-SwinL
predictor = MultiModalPredictor(hyperparameters={"model.mmdet_image.checkpoint_name": "dino-5scale_swin-l_8xb2-36e_coco"})

model.mmdet_image.output_bbox_format

输出边界框格式

  • "xyxy": 输出 [x1,y1,x2,y2]。边界框通过角点表示,x1, y1 是左上角,x2, y2 是右下角。这是我们的默认输出格式。

  • "xywh": 输出 [x1,y1,w,h]。边界框通过角点、宽度和高度表示,x1, y1 是左上角,w, h 是宽度和高度。

# default used by AutoMM
predictor = MultiModalPredictor(hyperparameters={"model.mmdet_image.output_bbox_format": "xyxy"})
# choose xywh output format
predictor = MultiModalPredictor(hyperparameters={"model.mmdet_image.output_bbox_format": "xywh"})

model.mmdet_image.frozen_layers

需要冻结的层。所有包含该子字符串的层都将被冻结。

# default used by AutoMM, freeze nothing and update all parameters
predictor = MultiModalPredictor(hyperparameters={"model.mmdet_image.frozen_layers": []})
# freeze the model's backbone
predictor = MultiModalPredictor(hyperparameters={"model.mmdet_image.frozen_layers": ["backbone"]})
# freeze the model's backbone and neck
predictor = MultiModalPredictor(hyperparameters={"model.mmdet_image.frozen_layers": ["backbone", "neck"]})

model.sam.checkpoint_name

指定 Huggingface SAM 支持的 SAM 主干网络。

# default used by AutoMM
predictor.fit(hyperparameters={"model.sam.checkpoint_name": "facebook/sam-vit-huge"})
# choose SAM-Large
predictor.fit(hyperparameters={"model.sam.checkpoint_name": "facebook/sam-vit-large"})
# choose SAM-Base
predictor.fit(hyperparameters={"model.sam.checkpoint_name": "facebook/sam-vit-base"})

model.sam.train_transforms

在训练中增强图像。目前支持传入 random_horizontal_flip

# default used by AutoMM
predictor.fit(hyperparameters={"model.sam.train_transforms": ["random_horizontal_flip"]})

model.sam.img_transforms

处理输入图像用于语义分割。目前支持传入 resize_to_square

# default used by AutoMM
predictor.fit(hyperparameters={"model.sam.img_transforms": ["resize_to_square"]})

model.sam.gt_transforms

处理用于语义分割的真实掩码。目前支持传入 resize_gt_to_square

# default used by AutoMM
predictor.fit(hyperparameters={"model.sam.gt_transforms": ["resize_gt_to_square"]})

model.sam.frozen_layers

在训练中冻结 SAM 的模块。

# default used by AutoMM
predictor.fit(hyperparameters={"model.sam.frozen_layers": ["mask_decoder.iou_prediction_head", "prompt_encoder"]})

model.sam.num_mask_tokens

SAM 掩码解码器的掩码建议数量。

# default used by AutoMM
predictor.fit(hyperparameters={"model.sam.num_mask_tokens": 1})

model.sam.ignore_label

指定一个被忽略且不影响训练损失和指标计算的目标值。

# default used by AutoMM
predictor.fit(hyperparameters={"model.sam.ignore_label": 255})

数据 (Data)

data.image.missing_value_strategy

如何处理缺失图像(打开失败)。

  • "skip": 跳过包含缺失图像的样本。

  • "zero": 使用零图像替换缺失图像。

# default used by AutoMM
predictor.fit(hyperparameters={"data.image.missing_value_strategy": "zero"})
# skip the image
predictor.fit(hyperparameters={"data.image.missing_value_strategy": "skip"})

data.text.normalize_text

是否对存在编码问题的文本进行标准化。如果为 True,TextProcessor 将运行一系列编码和解码操作进行文本标准化。请参考 Kaggle 竞赛的示例以了解如何应用文本标准化。

# default used by AutoMM
predictor.fit(hyperparameters={"data.text.normalize_text": False})
# turn on text normalization
predictor.fit(hyperparameters={"data.text.normalize_text": True})

data.categorical.convert_to_text

是否将分类数据视为文本。如果为 True,将不使用分类模型,例如 "categorical_mlp""categorical_transformer"

# default used by AutoMM
predictor.fit(hyperparameters={"data.categorical.convert_to_text": False})
# turn on the conversion
predictor.fit(hyperparameters={"data.categorical.convert_to_text": True})

data.numerical.convert_to_text

是否将数值数据转换为文本。如果为 True,将不使用数值模型,例如 "numerical_mlp""numerical_transformer"

# default used by AutoMM
predictor.fit(hyperparameters={"data.numerical.convert_to_text": False})
# turn on the conversion
predictor.fit(hyperparameters={"data.numerical.convert_to_text": True})

data.numerical.scaler_with_mean

如果为 True,在缩放前将数值数据(不包括数值标签)中心化。

# default used by AutoMM
predictor.fit(hyperparameters={"data.numerical.scaler_with_mean": True})
# turn off centering
predictor.fit(hyperparameters={"data.numerical.scaler_with_mean": False})

data.numerical.scaler_with_std

如果为 True,将数值数据(不包括数值标签)缩放到单位方差。

# default used by AutoMM
predictor.fit(hyperparameters={"data.numerical.scaler_with_std": True})
# turn off scaling
predictor.fit(hyperparameters={"data.numerical.scaler_with_std": False})

data.label.numerical_preprocessing

在回归任务中如何处理数值标签。

  • "standardscaler": 通过移除均值和缩放到单位方差来标准化数值标签。

  • "minmaxscaler": 通过将每个特征缩放到 (0, 1) 范围来转换数值标签。

# default used by AutoMM
predictor.fit(hyperparameters={"data.label.numerical_preprocessing": "standardscaler"})
# scale numerical labels to (0, 1)
predictor.fit(hyperparameters={"data.label.numerical_preprocessing": "minmaxscaler"})

data.pos_label

二分类任务中的正类标签。用户需要指定此标签才能正确使用某些指标,例如 roc_auc、average_precision 和 f1。

# default used by AutoMM
predictor.fit(hyperparameters={"data.pos_label": None})
# assume the labels are ["changed", "not changed"] and "changed" is the positive label
predictor.fit(hyperparameters={"data.pos_label": "changed"})

data.column_features_pooling_mode

如何将列特征聚合为一个特征向量,用于具有多个特征列的数据帧。目前,仅适用于 few_shot_classification

  • "concat": 将不同列的特征连接成长特征向量。

  • "mean": 平均列特征,使特征维度不随列数增加而增加。

# default used by AutoMM
predictor.fit(hyperparameters={"data.column_features_pooling_mode": "concat"})
# use the mean pooling
predictor.fit(hyperparameters={"data.column_features_pooling_mode": "mean"})

data.mixup.turn_on

如果为 True,在训练中使用 Mixup。

# default used by AutoMM
predictor.fit(hyperparameters={"data.mixup.turn_on": False})
# turn on Mixup
predictor.fit(hyperparameters={"data.mixup.turn_on": True})

data.mixup.mixup_alpha

Mixup alpha 值。如果 data.mixup.mixup_alpha > 0,Mixup 将激活。

# default used by AutoMM
predictor.fit(hyperparameters={"data.mixup.mixup_alpha": 0.8})
# set it to 1.0 to turn off Mixup
predictor.fit(hyperparameters={"data.mixup.mixup_alpha": 1.0})

data.mixup.cutmix_alpha

Cutmix alpha 值。如果 data.mixup.cutmix_alpha > 0,Cutmix 将激活。

# by default, Cutmix is turned off by using alpha 1.0
predictor.fit(hyperparameters={"data.mixup.cutmix_alpha": 1.0})
# turn it on by choosing a number in range (0, 1)
predictor.fit(hyperparameters={"data.mixup.cutmix_alpha": 0.8})

data.mixup.prob

如果启用了 Mixup 或 Cutmix,执行它们的概率。

# default used by AutoMM
predictor.fit(hyperparameters={"data.mixup.prob": 1.0})
# set probability to 0.5
predictor.fit(hyperparameters={"data.mixup.prob": 0.5})

data.mixup.switch_prob

当 Mixup 和 Cutmix 都激活时,切换到 Cutmix 而非 Mixup 的概率。

# default used by AutoMM
predictor.fit(hyperparameters={"data.mixup.switch_prob": 0.5})
# set probability to 0.7
predictor.fit(hyperparameters={"data.mixup.switch_prob": 0.7})

data.mixup.mode

如何应用 Mixup 或 Cutmix 参数(每 "batch""pair" (元素对)、"elem" (元素))。更多详情请参阅此处

# default used by AutoMM
predictor.fit(hyperparameters={"data.mixup.mode": "batch"})
# use "pair"
predictor.fit(hyperparameters={"data.mixup.mode": "pair"})

data.mixup.label_smoothing

对混合标签张量应用标签平滑。

# default used by AutoMM
predictor.fit(hyperparameters={"data.mixup.label_smoothing": 0.1})
# set it to 0.2
predictor.fit(hyperparameters={"data.mixup.label_smoothing": 0.2})

data.mixup.turn_off_epoch

达到此 epoch 数后停止 Mixup 或 Cutmix。

# default used by AutoMM
predictor.fit(hyperparameters={"data.mixup.turn_off_epoch": 5})
# turn off mixup after 7 epochs
predictor.fit(hyperparameters={"data.mixup.turn_off_epoch": 7})

蒸馏器 (Distiller)

distiller.soft_label_loss_type

当使用教师模型的输出(logits)来监督学生模型时,计算哪种损失。

# default used by AutoMM for classification
predictor.fit(hyperparameters={"distiller.soft_label_loss_type": "cross_entropy"})
# default used by AutoMM for regression
predictor.fit(hyperparameters={"distiller.soft_label_loss_type": "mse"})

distiller.temperature

在计算软标签损失之前,用它(教师模型的 logits / temperature,学生模型的 logits / temperature)缩放教师模型和学生模型的 logits。

# default used by AutoMM for classification
predictor.fit(hyperparameters={"distiller.temperature": 5})
# set temperature to 1
predictor.fit(hyperparameters={"distiller.temperature": 1})

distiller.hard_label_weight

用此权重(hard_label_loss * hard_label_weight)缩放学生的硬标签(真实标签)损失。

# default used by AutoMM for classification
predictor.fit(hyperparameters={"distiller.hard_label_weight": 0.2})
# set not to scale the hard label loss
predictor.fit(hyperparameters={"distiller.hard_label_weight": 1})

distiller.soft_label_weight

用此权重(soft_label_loss * soft_label_weight)缩放学生的软标签(教师模型的输出)损失。

# default used by AutoMM for classification
predictor.fit(hyperparameters={"distiller.soft_label_weight": 50})
# set not to scale the soft label loss
predictor.fit(hyperparameters={"distiller.soft_label_weight": 1})