Addax-Data-Science's picture
Upload 162 files
d9bb75c verified
Raw
History Blame Contribute Delete
3.85 kB
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This software may be used and distributed in accordance with
# the terms of the DINOv3 License Agreement.
from dataclasses import dataclass, field
from enum import Enum
from omegaconf import MISSING
from typing import Any
import torch
from dinov3.data.transforms import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD
from dinov3.eval.segmentation.models import BackboneLayersSet
from dinov3.eval.setup import ModelConfig
DEFAULT_MEAN = tuple(mean * 255 for mean in IMAGENET_DEFAULT_MEAN)
DEFAULT_STD = tuple(std * 255 for std in IMAGENET_DEFAULT_STD)
class ModelDtype(Enum):
FLOAT32 = "float32"
BFLOAT16 = "bfloat16"
@property
def autocast_dtype(self):
return {
ModelDtype.BFLOAT16: torch.bfloat16,
ModelDtype.FLOAT32: torch.float32,
}[self]
@dataclass
class OptimizerConfig:
lr: float = 1e-3
beta1: float = 0.9
beta2: float = 0.999
weight_decay: float = 1e-2
gradient_clip: float = 35.0
@dataclass
class SchedulerConfig:
type: str = "WarmupOneCycleLR"
total_iter: int = 40_000 # Total number of iterations for training
constructor_kwargs: dict[str, Any] = field(default_factory=dict)
@dataclass
class DatasetConfig:
root: str = MISSING # Path to the dataset folder
train: str = "" # Dataset descriptor, e.g. "ADE20K:split=TRAIN"
val: str = ""
@dataclass
class DecoderConfig:
type: str = "m2f" # Decoder type must be one of [linear, m2f]
backbone_out_layers: BackboneLayersSet = BackboneLayersSet.LAST
use_batchnorm: bool = True
use_cls_token: bool = False
use_backbone_norm: bool = True # Uses the backbone's output normalization on all layers
num_classes: int = 150 # Number of segmentation classes
hidden_dim: int = 2048 # Hidden dimension, only used for M2F head
@dataclass
class TrainConfig:
diceloss_weight: float = 0.0
celoss_weight: float = 1.0
@dataclass
class TrainTransformConfig:
img_size: Any = None
random_img_size_ratio_range: tuple[float] | None = None
crop_size: tuple[int] | None = None
flip_prob: float = 0.0
@dataclass
class EvalTransformConfig:
img_size: Any = None
tta_ratios: tuple[float] = (1.0,)
@dataclass
class TransformConfig:
train: TrainTransformConfig = field(default_factory=TrainTransformConfig)
eval: EvalTransformConfig = field(default_factory=EvalTransformConfig)
mean: tuple[float] = DEFAULT_MEAN
std: tuple[float] = DEFAULT_STD
@dataclass
class EvalConfig:
compute_metric_per_image: bool = False
reduce_zero_label: bool = True # For ADE20K, ignores 0 label (=background/unlabeled)
mode: str = "slide"
crop_size: int | None = 512
stride: int | None = 341
eval_interval: int = 40000
use_tta: bool = False # apply test-time augmentation at evaluation time
@dataclass
class SegmentationConfig:
model: ModelConfig | None = None # config of the DINOv3 backbone
bs: int = 2
n_gpus: int = 8
num_workers: int = 6 # number of workers to use / GPU
model_dtype: ModelDtype = ModelDtype.FLOAT32
seed: int = 100
datasets: DatasetConfig = field(default_factory=DatasetConfig)
metric_to_save: str = "mIoU" # Name of the metric to save
decoder_head: DecoderConfig = field(default_factory=DecoderConfig)
scheduler: SchedulerConfig = field(default_factory=SchedulerConfig)
optimizer: OptimizerConfig = field(default_factory=OptimizerConfig)
transforms: TransformConfig = field(default_factory=TransformConfig)
train: TrainConfig = field(default_factory=TrainConfig)
eval: EvalConfig = field(default_factory=EvalConfig)
# Additional Parameters
output_dir: str | None = None
load_from: str | None = None # path to .pt checkpoint to resume training from or evaluate from