Initial commit — gin-config strict-pattern coding standard
Code-style guide and reference patterns for DL/CV research at the ЛИСАД laboratory (NADEZHDA / SOFIA CVGL projects). Files: - Стандарт написания кода для DL CV исследований (CVGL).md - Правила написания Python-кода (Gin-Config Strict Pattern).md - REQUIREMENTS_GIN_STYLE.md - Gin-Config Strict Pattern Reference Examples.md - Переход от argparse и dataclass к gin-config.md - gin-parse.md - Рекомендуемые gin-config категории.md - config_loader_reference.py - README.md (this commit) - .gitignore (Python artifacts)
This commit is contained in:
99
Рекомендуемые gin-config категории.md
Normal file
99
Рекомендуемые gin-config категории.md
Normal file
@@ -0,0 +1,99 @@
|
||||
В REQUIREMENTS_GIN_STYLE.md уже есть 5 конфигов. Но для задачи аннотирования World-UAV я бы рекомендовал **именно эти 5** — они хорошо разделены по ответственности. Вот мой анализ:
|
||||
|
||||
## Рекомендуемые gin-config категории
|
||||
|
||||
**5 конфигов — оптимальное число.** Каждый отвечает за одну ось изменчивости:
|
||||
|
||||
|#|Конфиг|Ось изменчивости|Когда меняется|
|
||||
|:--|:--|:--|:--|
|
||||
|1|**PipelineConfig**|Что обрабатывать и куда сохранять|При смене датасета или запуске на новом subset'е|
|
||||
|2|**HardwareConfig**|На чём запускать|При переходе между GPU (4090 → A100 → Jetson)|
|
||||
|3|**ModelsConfig**|Какими моделями генерировать|При замене DA3→DA2, SegEarth→SegFormer|
|
||||
|4|**InputConfig**|Как предобрабатывать вход|При изменении resolution (256→384), edge метода|
|
||||
|5|**SegConfig**|Что сегментировать|При изменении OV-промптов для другого региона|
|
||||
|
||||
**Принцип разделения:** если два параметра меняются **вместе** — в одном конфиге. Если **независимо** — в разных. Например: `batch_size` и `use_fp16` меняются вместе (при смене GPU), поэтому оба в `HardwareConfig`. А `prompts` и `image_size` независимы — разные конфиги.
|
||||
|
||||
### Содержимое каждого конфига:
|
||||
|
||||
**1. `pipeline.gin` → PipelineConfig**
|
||||
|
||||
```gin
|
||||
# ЧТО и КУДА
|
||||
PipelineConfig.input_root = '/data/UAV-GeoLoc'
|
||||
PipelineConfig.output_root = '/data/UAV-GeoLoc-aug'
|
||||
PipelineConfig.stages = ['depth', 'edges', 'segmentation']
|
||||
PipelineConfig.subset = 'Rot' # Country | Terrain | Rot | None
|
||||
PipelineConfig.source = None # query | db | None
|
||||
PipelineConfig.save_npy = True
|
||||
PipelineConfig.save_vis = True
|
||||
PipelineConfig.save_concat = False # 6ch concat (экономия 1.4TB)
|
||||
PipelineConfig.resume = True # пропуск обработанных
|
||||
PipelineConfig.log_level = 'INFO'
|
||||
```
|
||||
|
||||
**2. `hardware.gin` → HardwareConfig**
|
||||
|
||||
```gin
|
||||
# НА ЧЁМ
|
||||
HardwareConfig.profile_name = 'rtx4090'
|
||||
HardwareConfig.total_ram_gb = 24.0
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.use_fp16 = True
|
||||
HardwareConfig.batch_size = 32 # None = auto
|
||||
HardwareConfig.num_workers = 4
|
||||
```
|
||||
|
||||
**3. `models.gin` → ModelsConfig**
|
||||
|
||||
```gin
|
||||
# КАКИМИ МОДЕЛЯМИ
|
||||
ModelsConfig.depth_model_id = 'depth-anything/DA3-BASE'
|
||||
ModelsConfig.depth_fallback_id = 'depth-anything/Depth-Anything-V2-Large-hf'
|
||||
ModelsConfig.seg_model_type = 'segearth-ov3'
|
||||
ModelsConfig.seg_fallback_type = 'segformer-b5'
|
||||
ModelsConfig.seg_fallback_id = 'nvidia/segformer-b5-finetuned-ade-640-640'
|
||||
```
|
||||
|
||||
**4. `input.gin` → InputConfig**
|
||||
|
||||
```gin
|
||||
# КАК ПРЕДОБРАБАТЫВАТЬ
|
||||
InputConfig.image_size = 256
|
||||
InputConfig.sobel_kernel_size = 3
|
||||
InputConfig.edge_normalize = True
|
||||
InputConfig.imagenet_mean = [0.485, 0.456, 0.406]
|
||||
InputConfig.imagenet_std = [0.229, 0.224, 0.225]
|
||||
```
|
||||
|
||||
**5. `segmentation.gin` → SegConfig**
|
||||
|
||||
```gin
|
||||
# ЧТО СЕГМЕНТИРОВАТЬ
|
||||
SegConfig.prompts = ['background', 'building', 'road', 'tree', 'water', 'vegetation', 'bare soil', 'grass', 'vehicle', 'shadow']
|
||||
SegConfig.threshold = 0.3
|
||||
SegConfig.default_resolution = 1008 # SAM3 input size
|
||||
```
|
||||
|
||||
### Что НЕ стоит выносить в gin
|
||||
|
||||
|Параметр|Почему НЕ в gin|
|
||||
|:--|:--|
|
||||
|`INCOMPLETE_SCENES` (16 сцен)|Привязано к конкретному датасету, не параметр — константа в коде|
|
||||
|`EXCLUDE_DIRS`|Инфраструктурная константа, не меняется между экспериментами|
|
||||
|`EXTENSIONS` (.png, .jpg)|Константа формата данных|
|
||||
|Sobel-ядра (матрицы)|Математическая константа, не параметр|
|
||||
|Palette seed (42)|Определённость визуализации, не влияет на результат|
|
||||
|
||||
### Когда какой .gin менять
|
||||
|
||||
|Сценарий|Какие .gin трогать|
|
||||
|:--|:--|
|
||||
|Запуск на Rot для smoke test|`pipeline.gin` (subset='Rot')|
|
||||
|Переход на A100|`hardware.gin` (total_ram_gb=80, batch_size=128)|
|
||||
|Замена DA3 на DA V2|`models.gin` (depth_model_id)|
|
||||
|Обработка только query (дрон)|`pipeline.gin` (source='query')|
|
||||
|Добавить класс "parking" в сегментацию|`segmentation.gin` (prompts)|
|
||||
|Изменить resolution на 384×384|`input.gin` (image_size=384)|
|
||||
|
||||
Эта схема из REQUIREMENTS_GIN_STYLE.md корректна — я рекомендую её без изменений.
|
||||
Reference in New Issue
Block a user