SwinIR

Сеть на основе Swin Transformer для восстановления изображений. В LibreYOLO есть инференс и валидация для её чекпойнтов с увеличением в 4x: официального лёгкого генератора, а также среднего и большого генераторов для реальных изображений.

Задачи
restore
Размеры
s, m, l at 64 px
Установка
pip install libreyolo
Уровень поддержки
Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
Исходный проект
SwinIR от Computer Vision Lab, ETH Zurich, Apache-2.0. Статья, исходный код
Лицензии
Код: Apache-2.0, веса: Apache-2.0. Коммерческое использование

Установка

SwinIR не требует установки дополнительных extra-пакетов. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

Предсказание

Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreSwinIRm-restore.pt")result = model(SAMPLE_IMAGE, save=True) restored = result.restoredprint(restored.array.shape, restored.array.dtype)
CLI
libreyolo predict model=LibreSwinIRm-restore.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Потайловый инференс для больших изображений
from libreyolo import LibreYOLO model = LibreYOLO("LibreSwinIRl-restore.pt") # tile разбивает прямой проход на перекрывающиеся тайлы и сглаживает# стыки между ними; tile_pad — это поля вокруг каждого тайла, которые# потом обрезаются обратно. Оба параметра есть только как именованные# аргументы в Python, а не как флаги CLI.result = model("large-photo.jpg", tile=512, tile_pad=16, save=True)

В результате восстановления нет рамок; result.restored — плотное RGB-изображение (H, W, 3) типа uint8 на холсте, который по каждому измерению в 4 раза больше входного. save=True записывает это изображение напрямую, а не картинку с аннотациями. Вход не масштабируется, а дополняется до размера, кратного 8, поэтому предсказание выполняется в собственном разрешении фотографии; источник, который не помещается в память, можно разбить с помощью tile и tile_pad — они же сглаживают стыки тайлов в итоговом изображении. Об источниках, стриминге и обработке результатов — в разделе предсказание.

Варианты

Три размера, все с фиксированным увеличением в 4x. s — это официальный лёгкий генератор с четырьмя стадиями RSTB (residual Swin Transformer block) и прямым апсемплингом через pixel shuffle. m и l — средний и большой генераторы для реальных изображений, с шестью и девятью стадиями RSTB и апсемплером на основе интерполяции по ближайшему соседу с последующей свёрткой, рассчитанным на реальные искажения, а не только на бикубическое уменьшение.

Валидация

val() считает PSNR и SSIM между восстановленным изображением и чистым эталоном; обе метрики вычисляются в RGB на исходном холсте, без обрезки краёв и без масштабирования. SSIM использует гауссово окно 11x11 с сигмой 1.5 и усредняется по трём цветовым каналам.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSwinIRm-restore.pt")metrics = model.val(data="my-restore-dataset.yaml") print(metrics["metrics/PSNR"])print(metrics["metrics/SSIM"])
CLI
libreyolo val model=LibreSwinIRm-restore.pt data=my-restore-dataset.yaml

Аргумент датасета — это YAML, который связывает каталог повреждённых входных изображений с каталогом чистых эталонных изображений того же разрешения; точные ключи описаны в разделе форматы датасетов.

Экспорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
restorerestore to ONNX: поддерживаетсяrestore to TorchScript: поддерживаетсяrestore to ExecuTorch: не поддерживаетсяrestore to TensorRT: поддерживаетсяrestore to OpenVINO: поддерживаетсяrestore to Paddle: не поддерживаетсяrestore to MNN: не поддерживаетсяrestore to RKNN: не поддерживаетсяrestore to ncnn: не поддерживаетсяrestore to TFLite: поддерживаетсяrestore to CoreML: не поддерживаетсяrestore to Core AI: не поддерживается

Экспортированный артефакт загружается обратно через LibreYOLO() по суффиксу файла, поэтому файл .onnx или .engine ведёт себя как чекпойнт и возвращает тот же Results. ExecuTorch и все форматы, отмеченные в матрице как недоступные, для этого семейства не поддерживаются; ONNX, TorchScript, TensorRT, OpenVINO и TFLite — поддерживаются. В разделе экспорт перечислены аргументы, которые принимает каждый формат, и дополнительные, которые добавляют некоторые из них.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSwinIRm-restore.pt") # если imgsz не указан, берётся небольшой внутренний размер патча, а# не ваше рабочее разрешение, поэтому передавайте тот размер, который# реально подаётся модели при развёртывании.model.export(format="onnx", imgsz=512)model.export(format="tensorrt", imgsz=512, half=True)
CLI
libreyolo export model=LibreSwinIRm-restore.pt format=onnx imgsz=512
Использование экспортированного файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по суффиксу файла, поэтому экспортированный# артефакт загружается как любой чекпойнт и возвращает тот же Results.model = LibreYOLO("LibreSwinIRm-restore.onnx")result = model(SAMPLE_IMAGE) print(result.restored.array.shape)

Чекпойнты

Все опубликованные файлы весов этого семейства.

ФайлВход (пикс.)Лицензия весов
restore
LibreSwinIRs-restore.ptapache-2.0
LibreSwinIRm-restore.ptapache-2.0
LibreSwinIRl-restore.ptapache-2.0

Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
SwinIR, Computer Vision Lab, ETH Zurich
Лицензия исходного проекта
Apache-2.0
Исходный код проекта
github.com/JingyunLiang/SwinIR
Код LibreYOLO
MIT
Веса
Apache-2.0, повторно опубликованы на huggingface.co/LibreYOLO
Толкование
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code. LibreYOLO's checkpoints are format conversions of the official pretrained generators, with the learned parameters unchanged; SwinIR's real-world variants need a degradation and GAN training pipeline that is not wired into this library, so there is no LibreYOLO-trained variant to license separately.

Цитирование

@article{liang2021swinir,
  title={SwinIR: Image Restoration Using Swin Transformer},
  author={Liang, Jingyun and Cao, Jiezhang and Sun, Guolei and Zhang, Kai and Van Gool, Luc and Timofte, Radu},
  journal={arXiv preprint arXiv:2108.10257},
  year={2021}
}

Скопировано из блока цитирования авторов на странице github.com/JingyunLiang/SwinIR#citation.

Проверено с LibreYOLO v1.5.0. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.