| """Конфигурация проекта детекции дефектов окраски кузова.""" | |
| import os | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parent.parent | |
| DATA_RAW = ROOT / "data" / "raw" # raw/defect/*.jpg, raw/clean/*.jpg | |
| DATA_PATCHES = ROOT / "data" / "patches" # patches/train|val/{defect,clean} | |
| CHECKPOINTS = ROOT / "checkpoints" | |
| RUNS = ROOT / "runs" | |
| # Источник исходного датасета (АвтоВАЗ ТЗ) | |
| SOURCE_DATASET = ROOT.parent / "3_Дефекты_окраски_кузова(детали)" / "3_Дефекты_окраски_кузова(детали)" | |
| SRC_DEFECT = SOURCE_DATASET / "Фото с дефектами" | |
| SRC_CLEAN = SOURCE_DATASET / "Фото без дефектов" | |
| # Архитектура | |
| BACKBONE = os.getenv("PDD_BACKBONE", "tf_efficientnetv2_s.in21k_ft_in1k") # сильный backbone из timm | |
| NUM_CLASSES = 2 # defect / clean | |
| IMG_SIZE = 384 # размер патча на входе модели | |
| PATCH_SIZE = 512 # размер вырезаемого патча из 4000x1846 | |
| PATCH_STRIDE = 256 # шаг при инференсе (50% overlap) | |
| PANEL_CROP = True # автоматически вырезать панель из фона | |
| # Тренировка | |
| BATCH_SIZE = int(os.getenv("PDD_BATCH_SIZE", 16)) | |
| EPOCHS = int(os.getenv("PDD_EPOCHS", 40)) | |
| LR = float(os.getenv("PDD_LR", 3e-4)) | |
| WEIGHT_DECAY = 1e-4 | |
| LABEL_SMOOTH = 0.05 | |
| NUM_WORKERS = 2 | |
| SEED = 42 | |
| # Инференс / порог принятия решения | |
| DEFECT_THRESHOLD = 0.55 # вероятность для отнесения патча к "дефект" | |
| PANEL_DEFECT_RATIO = 0.005 # доля дефектных пикселей, чтобы пометить деталь как дефектную | |
| # REST API | |
| API_HOST = "0.0.0.0" | |
| API_PORT = 8080 | |