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-пакетов. Всё, что он импортирует, входит в базовую установку.
pip install libreyoloПредсказание
Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.
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)libreyolo predict model=LibreSwinIRm-restore.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom 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 и
усредняется по трём цветовым каналам.
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"])libreyolo val model=LibreSwinIRm-restore.pt data=my-restore-dataset.yamlАргумент датасета — это YAML, который связывает каталог повреждённых входных изображений с каталогом чистых эталонных изображений того же разрешения; точные ключи описаны в разделе форматы датасетов.
Экспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| restore | restore 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 — поддерживаются. В разделе
экспорт перечислены аргументы, которые принимает каждый формат,
и дополнительные, которые добавляют некоторые из них.
from libreyolo import LibreYOLO model = LibreYOLO("LibreSwinIRm-restore.pt") # если imgsz не указан, берётся небольшой внутренний размер патча, а# не ваше рабочее разрешение, поэтому передавайте тот размер, который# реально подаётся модели при развёртывании.model.export(format="onnx", imgsz=512)model.export(format="tensorrt", imgsz=512, half=True)libreyolo export model=LibreSwinIRm-restore.pt format=onnx imgsz=512from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по суффиксу файла, поэтому экспортированный# артефакт загружается как любой чекпойнт и возвращает тот же Results.model = LibreYOLO("LibreSwinIRm-restore.onnx")result = model(SAMPLE_IMAGE) print(result.restored.array.shape)Чекпойнты
Все опубликованные файлы весов этого семейства.
| Файл | Вход (пикс.) | Лицензия весов |
|---|---|---|
| restore | ||
| LibreSwinIRs-restore.pt | apache-2.0 | |
| LibreSwinIRm-restore.pt | apache-2.0 | |
| LibreSwinIRl-restore.pt | apache-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.