from dataclasses import dataclass from typing import Dict, List, Union @dataclass class AnchorConfig: reg_max: int strides: List[int] @dataclass class Model: anchor: AnchorConfig model: Dict[str, List[Dict[str, Union[Dict, List, int]]]] @dataclass class Download: auto: bool path: str @dataclass class DataLoaderConfig: batch_size: int shuffle: bool num_workers: int pin_memory: bool image_size: List[int] class_num: int @dataclass class OptimizerArgs: lr: float weight_decay: float @dataclass class OptimizerConfig: type: str args: OptimizerArgs @dataclass class SchedulerArgs: step_size: int gamma: float @dataclass class SchedulerConfig: type: str args: SchedulerArgs @dataclass class EMAConfig: enabled: bool decay: float @dataclass class MatcherConfig: iou: str topk: int factor: Dict[str, int] @dataclass class TrainConfig: optimizer: OptimizerConfig scheduler: SchedulerConfig ema: EMAConfig matcher: MatcherConfig @dataclass class HyperConfig: data: DataLoaderConfig train: TrainConfig @dataclass class Dataset: file_name: str num_files: int @dataclass class Datasets: base_url: str images: Dict[str, Dataset] @dataclass class Download: auto: bool save_path: str datasets: Datasets @dataclass class Config: model: Model download: Download hyper: HyperConfig