自定义AutoMM

Open In Colab Open In SageMaker Studio Lab

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

  • 优化

  • 环境

  • 模型

  • 数据

  • 蒸馏器

优化

优化.学习率

学习率。

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

optimization.optim_type

优化器类型。

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

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

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

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

optimization.weight_decay

权重衰减。

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

优化.学习率衰减

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

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

优化.学习率倍数

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

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

优化.学习率选择

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

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

优化.学习率调度

学习率调度。

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

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

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

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

optimization.max_epochs

一旦达到这个数量的训练周期,停止训练。

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

optimization.max_steps

在此步骤数后停止训练。如果达到optimization.max_stepsoptimization.max_epochs(以最早者为准),训练将停止。 默认情况下,我们通过将其设置为-1来禁用optimization.max_steps

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

optimization.warmup_steps

在训练开始时,将学习率从0预热到optimization.learning_rate,在此步骤的百分比内完成。

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

optimization.patience

在没有改进的情况下,经过此数量的检查后停止训练。检查频率由 optimization.val_check_interval 控制。

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

optimization.val_check_interval

在一个训练周期内检查验证集的频率。可以指定为浮点数或整数。

  • 传递一个在范围 [0.0, 1.0] 内的浮点数,以在训练周期的某个部分之后进行检查。

  • 传递一个整数以在固定数量的训练批次后进行检查。

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

优化.梯度裁剪算法

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

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

优化.梯度裁剪值

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

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

优化.跟踪梯度范数

在训练过程中跟踪梯度的p-范数。可以设置为‘inf’表示无穷范数。如果使用自动混合精度(AMP),在记录梯度之前会取消缩放。

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

optimization.log_every_n_steps

在步骤中记录日志的频率。

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

optimization.top_k

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

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

optimization.top_k_average_method

使用什么策略来平均前k个模型检查点。

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

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

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

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

优化.高效微调

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

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

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

  • "lora": LoRA 适配器。详情请参见 这篇论文

  • "lora_bias": LoRA 适配器 + 偏置参数。

  • "lora_norm": LoRA 适配器 + 归一化参数 + 偏置参数。

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

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

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

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

optimization.skip_final_val

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

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

环境

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})

每个GPU的批量大小

每个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})

环境评估批量大小比例

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

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

环境精度

支持双精度(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数据加载器在训练中使用的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_evaluation

Pytorch数据加载器在预测或评估时使用的工作进程数量。

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

环境策略

分布式训练模式。

  • "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"})

环境加速器

支持 "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"})

环境编译开启

是否通过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})

环境编译模式

可以是 “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”})

环境编译.动态

是否使用动态形状追踪(默认值为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})

环境编译后端

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

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

模型

模型名称

选择要使用的模型类型。

  • "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

指定一个由Hugginface 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: 平均所有标记的特征向量来表示一个句子。

# 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

选择文本分词器。建议使用默认的自动分词器。

# 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

在标记序列中使用了多少个文本段。每个文本段都有一个token type 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 骨干中的变压器块数量。

# 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中分类和数值标记化后的标记维度。

# 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

FFN(前馈)层在ft_transformer块中的隐藏层维度。在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),或者传递可调用且可序列化的变换对象列表。例如,您可以使用torchvision的变换(https://pytorch.org/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,支持字符串列表或可调用且可序列化的对象来转换图像。

# 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.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": True})
# turn off the conversion
predictor.fit(hyperparameters={"data.categorical.convert_to_text": False})

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})

数据数值标准化

如果为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})

数据标签的数值标签预处理

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

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

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

# default used by AutoMM
predictor.fit(hyperparameters={"data.label.numerical_label_preprocessing": "standardscaler"})
# scale numerical labels to (0, 1)
predictor.fit(hyperparameters={"data.label.numerical_label_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

当两者都激活时,切换到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

在达到这个数量的周期后停止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.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"})

蒸馏器温度

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

# 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})