File size: 2,067 Bytes
3771fa4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""Конфигурация проекта детекции дефектов окраски кузова."""
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