AutoTrain 文档
图像分类与回归
并获得增强的文档体验
开始使用
图像分类与回归
图像分类是一种监督学习形式,其中模型经过训练以识别和分类图像中的对象。AutoTrain 简化了此过程,使您只需上传标记的示例图像即可训练最先进的图像分类模型。
图像回归/评分是一种监督学习形式,其中模型经过训练以预测图像的分数或值。AutoTrain 简化了此过程,使您只需上传标记的示例图像即可训练最先进的图像评分模型。
准备您的数据
为确保您的图像分类模型有效训练,请遵循以下准备数据的指南
组织图像以进行图像分类
准备一个包含您分类图像的 zip 文件。每个类别都应有其自己的子文件夹,并以其代表的类命名。例如,要区分“猫”和“狗”,您的 zip 文件结构应类似于以下内容
cats_and_dogs.zip
├── cats
│ ├── cat.1.jpg
│ ├── cat.2.jpg
│ ├── cat.3.jpg
│ └── ...
└── dogs
├── dog.1.jpg
├── dog.2.jpg
├── dog.3.jpg
└── ...
您还可以使用来自 Hugging Face Hub 的数据集。来自 Hugging Face Hub 的数据集示例: truepositive/hotdog_nothotdog。
组织图像以进行图像回归/评分
准备一个包含您的图像和 metadata.jsonl 的 zip 文件。
Archive.zip
├── 0001.png
├── 0002.png
├── 0003.png
├── .
├── .
├── .
└── metadata.jsonl
metadata.jsonl
的示例
{"file_name": "0001.png", "target": 0.5}
{"file_name": "0002.png", "target": 0.7}
{"file_name": "0003.png", "target": 0.3}
请注意,metadata.jsonl 应该包含每个图像的 file_name
和 target
值。
您还可以使用来自 Hugging Face Hub 的数据集。来自 Hugging Face Hub 的数据集示例: abhishek/img-quality-full。
图像要求
格式:确保所有图像均为 JPEG、JPG 或 PNG 格式。
数量:每个类别至少包含 5 张图像,以便为模型提供足够的学习示例。
独占性:zip 文件应仅包含以类别命名的文件夹,并且这些文件夹应仅包含相关图像。不应包含其他文件或嵌套文件夹。
其他提示
统一性:虽然不是必需的,但拥有大小和分辨率相似的图像可以帮助提高模型性能。
多样性:为每个类别包含各种图像,以涵盖模型在实际场景中可能遇到的外观和上下文范围。
需要记住的一些要点
- zip 文件应包含多个文件夹(类别),每个文件夹应包含单个类别的图像。
- 文件夹的名称应为类别的名称。
- 图像必须是 jpeg、jpg 或 png 格式。
- 每个类别应至少有 5 张图像。
- zip 文件中不得有任何其他文件。
- zip 文件夹内不得有任何其他文件夹。
当 train.zip 解压缩时,它会创建两个文件夹:cats 和 dogs。这些是用于分类的两个类别。两个类别的图像都位于各自的文件夹中。您可以根据需要设置任意数量的类别。
列映射
对于图像分类,如果您使用 zip
数据集格式,则列映射应为默认值,不应更改。
data:
.
.
.
column_mapping:
image_column: image
target_column: label
对于图像回归,列映射必须如下所示
data:
.
.
.
column_mapping:
image_column: image
target_column: target
对于图像回归,metadata.jsonl
应该包含每个图像的 file_name
和 target
值。
如果您使用来自 Hugging Face Hub 的数据集,则应根据数据集设置适当的列映射。
训练
本地训练
要在本地训练模型,请创建一个配置文件 (config.yaml),内容如下
task: image_classification
base_model: google/vit-base-patch16-224
project_name: autotrain-cats-vs-dogs-finetuned
log: tensorboard
backend: local
data:
path: cats_vs_dogs
train_split: train
valid_split: null
column_mapping:
image_column: image
target_column: label
params:
epochs: 2
batch_size: 4
lr: 2e-5
optimizer: adamw_torch
scheduler: linear
gradient_accumulation: 1
mixed_precision: fp16
hub:
username: ${HF_USERNAME}
token: ${HF_TOKEN}
push_to_hub: true
在这里,我们使用来自 Hugging Face Hub 的 cats_and_dogs
数据集。模型训练 2 个 epoch,批次大小为 4,学习率为 2e-5
。我们使用 adamw_torch
优化器和 linear
调度器。我们还使用混合精度训练,梯度累积为 1。
为了使用本地数据集,您可以将 data
部分更改为
data:
path: data/
train_split: train # this folder inside data/ will be used for training, it contains the images in subfolders.
valid_split: valid # this folder inside data/ will be used for validation, it contains the images in subfolders. can also be null.
column_mapping:
image_column: image
target_column: label
同样,对于图像回归,您可以使用以下配置文件
task: image_regression
base_model: microsoft/resnet-50
project_name: autotrain-img-quality-resnet50
log: tensorboard
backend: local
data:
path: abhishek/img-quality-full
train_split: train
valid_split: null
column_mapping:
image_column: image
target_column: target
params:
epochs: 10
batch_size: 8
lr: 2e-3
optimizer: adamw_torch
scheduler: cosine
gradient_accumulation: 1
mixed_precision: fp16
hub:
username: ${HF_USERNAME}
token: ${HF_TOKEN}
push_to_hub: true
要训练模型,请运行以下命令
$ autotrain --config config.yaml
这将启动训练过程,并在训练完成后将模型保存到 Hugging Face Hub。如果您不想将模型保存到 hub,可以在配置文件中将 push_to_hub
设置为 false
。
在 Hugging Face Spaces 上训练
要在 Hugging Face Spaces 上训练模型,请按照 快速入门
部分中的描述创建一个训练空间。
下面显示了在 Hugging Face Spaces 上训练图像评分模型的 UI 示例
在此示例中,我们使用 microsoft/resnet-50
模型在 abhishek/img-quality-full
数据集上训练图像评分模型。我们训练模型 3 个 epoch,批次大小为 8,学习率为 5e-5
。我们使用 adamw_torch
优化器和 linear
调度器。我们还使用混合精度训练,梯度累积为 1。
请注意列映射现在是如何更改的,并且 target
指向数据集中的 quality_mos
列。
要训练模型,请单击 Start Training
按钮。这将启动训练过程,并在训练完成后将模型保存到 Hugging Face Hub。
参数
图像分类参数
class autotrain.trainers.image_classification.params.ImageClassificationParams
< source >( data_path: str = None model: str = 'google/vit-base-patch16-224' username: typing.Optional[str] = None lr: float = 5e-05 epochs: int = 3 batch_size: int = 8 warmup_ratio: float = 0.1 gradient_accumulation: int = 1 optimizer: str = 'adamw_torch' scheduler: str = 'linear' weight_decay: float = 0.0 max_grad_norm: float = 1.0 seed: int = 42 train_split: str = 'train' valid_split: typing.Optional[str] = None logging_steps: int = -1 project_name: str = 'project-name' auto_find_batch_size: bool = False mixed_precision: typing.Optional[str] = None save_total_limit: int = 1 token: typing.Optional[str] = None push_to_hub: bool = False eval_strategy: str = 'epoch' image_column: str = 'image' target_column: str = 'target' log: str = 'none' early_stopping_patience: int = 5 early_stopping_threshold: float = 0.01 )
参数
- data_path (str) — 数据集的路径。
- model (str) — 预训练模型名称或路径。默认为 “google/vit-base-patch16-224”。
- username (Optional[str]) — Hugging Face 帐户用户名。
- lr (float) — 优化器的学习率。默认为 5e-5。
- epochs (int) — 训练的轮数。默认为 3。
- batch_size (int) — 训练的批次大小。默认为 8。
- warmup_ratio (float) — 学习率调度器的预热比率。默认为 0.1。
- gradient_accumulation (int) — 梯度累积步数。默认为 1。
- optimizer (str) — 优化器类型。默认为 “adamw_torch”。
- scheduler (str) — 学习率调度器类型。默认为 “linear”。
- weight_decay (float) — 优化器的权重衰减。默认为 0.0。
- max_grad_norm (float) — 梯度裁剪的最大梯度范数。默认为 1.0。
- seed (int) — 用于可重复性的随机种子。默认为 42。
- train_split (str) — 训练数据分割的名称。默认为 “train”。
- valid_split (Optional[str]) — 验证数据分割的名称(可选)。
- logging_steps (int) — 日志记录之间的步数。默认为 -1。
- project_name (str) — 输出目录的项目名称。默认为 “project-name”。
- auto_find_batch_size (bool) — 自动查找最佳批次大小。默认为 False。
- mixed_precision (Optional[str]) — 混合精度训练模式(fp16、bf16 或 None)。
- save_total_limit (int) — 要保留的最大检查点数量。默认为 1。
- token (Optional[str]) — 用于身份验证的 Hugging Face Hub 令牌(可选)。
- push_to_hub (bool) — 是否将模型推送到 Hugging Face Hub。默认为 False。
- eval_strategy (str) — 训练期间的评估策略。默认为 “epoch”。
- image_column (str) — 数据集中图像的列名。默认为 “image”。
- target_column (str) — 数据集中目标标签的列名。默认为 “target”。
- log (str) — 用于实验跟踪的日志记录方法。默认为 “none”。
- early_stopping_patience (int) — 提前停止的无改进 epoch 数。默认为 5。
- early_stopping_threshold (float) — 提前停止的阈值。默认为 0.01。
ImageClassificationParams 是用于图像分类训练参数的配置类。
图像回归参数
class autotrain.trainers.image_regression.params.ImageRegressionParams
< source >( data_path: str = None model: str = 'google/vit-base-patch16-224' username: typing.Optional[str] = None lr: float = 5e-05 epochs: int = 3 batch_size: int = 8 warmup_ratio: float = 0.1 gradient_accumulation: int = 1 optimizer: str = 'adamw_torch' scheduler: str = 'linear' weight_decay: float = 0.0 max_grad_norm: float = 1.0 seed: int = 42 train_split: str = 'train' valid_split: typing.Optional[str] = None logging_steps: int = -1 project_name: str = 'project-name' auto_find_batch_size: bool = False mixed_precision: typing.Optional[str] = None save_total_limit: int = 1 token: typing.Optional[str] = None push_to_hub: bool = False eval_strategy: str = 'epoch' image_column: str = 'image' target_column: str = 'target' log: str = 'none' early_stopping_patience: int = 5 early_stopping_threshold: float = 0.01 )
参数
- data_path (str) — 数据集路径。
- model (str) — 要使用的模型名称。默认为 “google/vit-base-patch16-224”。
- username (Optional[str]) — Hugging Face 用户名(可选)。
- lr (float) — 学习率。默认为 5e-5。
- epochs (int) — 训练轮数。默认为 3。
- batch_size (int) — 训练批次大小。默认为 8。
- warmup_ratio (float) — 预热比例。默认为 0.1。
- gradient_accumulation (int) — 梯度累积步数。默认为 1。
- optimizer (str) — 使用的优化器。默认为 “adamw_torch”。
- scheduler (str) — 使用的调度器。默认为 “linear”。
- weight_decay (float) — 权重衰减。默认为 0.0。
- max_grad_norm (float) — 最大梯度范数。默认为 1.0。
- seed (int) — 随机种子。默认为 42。
- train_split (str) — 训练拆分名称。默认为 “train”。
- valid_split (Optional[str]) — 验证拆分名称。
- logging_steps (int) — 日志记录步数。默认为 -1。
- project_name (str) — 输出目录名称。默认为 “project-name”。
- auto_find_batch_size (bool) — 是否自动查找批次大小。默认为 False。
- mixed_precision (Optional[str]) — 混合精度类型 (fp16, bf16, 或 None)。
- save_total_limit (int) — 保存总数限制。默认为 1。
- token (Optional[str]) — Hub Token。
- push_to_hub (bool) — 是否推送到 hub。默认为 False。
- eval_strategy (str) — 评估策略。默认为 “epoch”。
- image_column (str) — 图像列名。默认为 “image”。
- target_column (str) — 目标列名。默认为 “target”。
- log (str) — 使用实验跟踪进行日志记录。默认为 “none”。
- early_stopping_patience (int) — 早停耐心。默认为 5。
- early_stopping_threshold (float) — 早停阈值。默认为 0.01。
ImageRegressionParams 是用于图像回归训练参数的配置类。