Конфигурационные файлы
Обзор
Система конфигурации позволяет описать эксперимент целиком в одном файле (YAML или JSON) и запустить одной командой. Конфиги обеспечивают воспроизводимость экспериментов — один конфиг всегда даёт одинаковый результат.
python run.py --config configs/basic_deconvolution.yaml
Формат файла
Поддерживаются два формата:
YAML (
.yaml,.yml) — рекомендуется, удобен для чтения и редактированияJSON (
.json) — строгий формат, подходит для программной генерации
Структура конфигурации
Полный пример (YAML)
# ── Метаданные эксперимента ──
experiment:
name: "My Experiment"
description: "Описание эксперимента"
# ── Входные данные ──
input:
images_folder: "images/original"
blurred_folder: "images/distorted"
color: false
load_mode: "bind" # "all" | "bind" | "bind_state"
bindings: # Для load_mode: "bind"
- original: "images/original/airplane.png"
blurred: "images/distorted/airplane_blurred.png"
kernel: "images/kernel_data/kernel.npy" # опционально
filter_description: "gaussian_blur" # опционально
# bind_state_path: "dataset/dataset.json" # Для load_mode: "bind_state"
# ── Выходные директории ──
output:
restored_folder: "results/restored"
data_folder: "results/data"
kernel_folder: "results/kernels"
# ── Режим обработки ──
processing:
mode: "process" # "process" | "full_process"
metadata: true
unique_paths: true
# ── Алгоритмы (обязательно) ──
algorithms:
- name: "vabid"
params:
max_iter: 100
kernel_size: 21
# ── Фильтры (для mode: "full_process") ──
filters:
- chain:
- type: "defocus_blur"
params:
psf: "gaussian"
param: 5.0
- type: "gaussian_noise"
params:
param: 10.0
# ── Отчёт ──
report:
generate: false
format: "latex"
output_path: "results/report.tex"
Описание секций
experiment (опционально)
Поле |
Тип |
Описание |
|---|---|---|
|
|
Название эксперимента |
|
|
Описание |
input (обязательно)
Поле |
Тип |
По умолчанию |
Описание |
|---|---|---|---|
|
|
обязательно |
Папка с оригинальными изображениями |
|
|
|
Папка со смазанными |
|
|
|
|
|
|
|
Режим загрузки (см. ниже) |
|
|
|
Список связей (для |
|
|
— |
Путь к JSON (для |
Режимы загрузки (load_mode):
Режим |
Описание |
Когда использовать |
|---|---|---|
|
Загрузить все файлы из |
Режим |
|
Связать конкретные пары оригинал + смазанное |
Режим |
|
Загрузить из сохранённого |
Продолжение эксперимента |
output (опционально)
Поле |
Тип |
По умолчанию |
Описание |
|---|---|---|---|
|
|
|
Куда сохранять восстановленные |
|
|
|
Куда сохранять CSV/метаданные |
|
|
|
Куда сохранять ядра |
processing (опционально)
Поле |
Тип |
По умолчанию |
Описание |
|---|---|---|---|
|
|
|
|
|
|
|
Сохранять JSON-метаданные |
|
|
|
Генерировать уникальные имена файлов |
algorithms (обязательно)
Минимум один алгоритм. Каждый элемент:
Поле |
Тип |
Описание |
|---|---|---|
|
|
Имя из реестра или произвольное |
|
|
(опц.) Полный путь к модулю |
|
|
(опц.) Имя класса |
|
|
(опц.) Параметры конструктора |
Алгоритмы из реестра:
Имя |
Категория |
Класс |
|---|---|---|
|
classic |
|
|
classic |
|
|
classic |
|
|
bayesian |
|
|
bayesian |
|
|
bayesian |
|
|
variational |
|
|
variational |
|
|
variational |
|
|
sparse |
|
Пользовательский алгоритм:
algorithms:
- name: "my_algorithm"
module: "blinddeconv.algorithms.blind_deconvolution.our_company.classic.richardson_lucy"
class_name: "RichardsonLucy"
params:
max_iter: 50
filters (для full_process)
Список цепочек. Каждая цепочка — последовательность фильтров, применяемых к оригиналу.
Поле фильтра |
Тип |
Описание |
|---|---|---|
|
|
Имя из реестра фильтров |
|
|
Параметры конструктора |
Фильтры из реестра:
Имя |
Тип |
Параметры |
|---|---|---|
|
blur |
|
|
blur |
|
|
noise |
|
|
noise |
|
|
noise |
|
|
smooth |
см. документацию |
|
smooth |
см. документацию |
PSF-функции для blur-фильтров:
gaussian, uniform, linear_decay, ring, exponential_decay
report (опционально)
Поле |
Тип |
По умолчанию |
Описание |
|---|---|---|---|
|
|
|
Генерировать LaTeX-отчёт |
|
|
|
Формат отчёта |
|
|
|
Путь к файлу |
Валидация
Конфигурация валидируется автоматически по JSON Schema и логическим правилам:
# Только валидация (без запуска)
python run.py --config configs/experiment.yaml --validate-only
# Dry-run: план выполнения без обработки
python run.py --config configs/experiment.yaml --dry-run
Проверяемые правила:
Обязательные секции
inputиalgorithmsприсутствуютРежим
processтребуетload_mode: "bind"или"bind_state"Режим
full_processтребует непустой секцииfiltersВсе имена алгоритмов и фильтров — из реестра или с указанием
module/class_name
Готовые конфиги
В папке configs/ находятся примеры:
Файл |
Описание |
Режим |
|---|---|---|
|
Базовый пример с парой изображений |
|
|
Медицинские изображения |
|
|
Спутниковые снимки |
|
|
Полный шаблон со всеми полями |
— |
Генерация конфигов через CLI
# Базовый шаблон
python cli.py generate-config --template basic --output my_config.yaml
# Медицинский шаблон (JSON)
python cli.py generate-config -t medical -f json -o config.json
# Просмотр конфига в таблице
python cli.py view-config configs/experiment.yaml
# Интерактивный режим (пошаговые вопросы)
python cli.py interactive