Files
style_code_lisad/Рекомендуемые gin-config категории.md
Pikaliov 3278322a17 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)
2026-04-27 17:12:38 +03:00

99 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
В 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 корректна — я рекомендую её без изменений.