NAFNet

NAFNet є згортковою мережею для відновлення зображень, яка вилучає нелінійні функції активації з типового блока UNet і замінює їх поелементним множенням. LibreYOLO підтримує її для одного завдання, відновлення, з опублікованою контрольною точкою усунення шуму зі справжніх зображень, навченою на SIDD.

Задачі
restore
Розміри
s, l at 256 px
Встановлення
pip install libreyolo
Рівень підтримки
Підтримуваний, починаючи з v. Додаткові придатні до навчання моделі: тести CI підтримують справними, а функції додають за нагоди.
Першоджерело
NAFNet, автори: Megvii, ліцензія MIT. Стаття, джерело
Ліцензії
Код: MIT, ваги: MIT. Комерційне використання

Встановлення

NAFNet не потребує додаткових пакетів. Усі її імпорти входять до базового встановлення.

bash
pip install libreyolo

Передбачення

Під час першого використання ваги завантажуються з Hugging Face та кешуються локально.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")result = model("noisy.jpg", save=True) restored = result.restoredprint(restored.array.shape)
CLI
libreyolo predict model=LibreNAFNetl-restore-sidd.pt source=noisy.jpg save=True
Зберегти відновлене зображення
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")result = model.predict("noisy.jpg") result.restored.save("denoised.png")

Повернений об'єкт Results містить одне поле для цього сімейства, restored, щільне RGB-зображення uint8 у компонуванні HWC на початковому полотні; рамок для перебирання немає. Параметр save=True записує відновлене зображення безпосередньо на диск, а не малює анотацію поверх вхідного зображення. Параметри conf, iou та max_det приймаються для сумісності сигнатури з усіма іншими сімействами, але не впливають на результат, оскільки відновлення не створює виявлень для фільтрування. Джерела, потокове оброблення та роботу з результатами описано на сторінці передбачення.

Варіанти

Ця архітектура має дві ширини: s (ширина 32) та l (ширина 64), обидві побудовано навколо навчального патча 256 px. Передбачення та валідація працюють із нативною роздільною здатністю зображення незалежно від розміру, додаючи поля лише до коефіцієнта зменшення дискретизації мережі. Наразі опубліковано лише ширину l як контрольну точку усунення шуму зі справжніх зображень, навчену на SIDD.

Навчання

NAFNet донавчається на ваших парах погіршених і чистих зображень: YAML-файл датасету вказує на каталог inputs/<split>/ із погіршеними зображеннями та каталог targets/<split>/ із чистими цільовими зображеннями, зіставленими за основою назви файлу. degradation і dataset є необов'язковими рядками, які записуються у збереженій контрольній точці для фіксації походження; вони не беруть участі в навчанні.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=256, batch=16, lr0=1e-3)
CLI
libreyolo train model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yaml \  epochs=100 imgsz=256 batch=16 lr0=1e-3
Походження контрольної точки
from libreyolo import LibreYOLO # degradation і dataset записуються у збереженій контрольній точці;# вони не змінюють процес навчання.model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")model.train(    data="my-dataset.yaml",    epochs=100,    degradation="denoise",    dataset="MyDataset",)
Кілька GPU
libreyolo train model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yaml \  epochs=100 device=0,1 batch=32

Без додаткових параметрів тренер виконує 100 епох з AdamW та lr0=1e-3, батчем 16, обрізанням 256 px і ранньою зупинкою після 50 епох без покращення PSNR. Для цього сімейства немає шляху LoRA: lora=True спричиняє помилку замість запуску, оскільки NAFNetTrainer ніколи не вмикає донавчання адаптерів.

Під час навчання мережа працює зі звичайним глобальним усереднювальним пулінгом. Віконний локальний пулінг NAFNet лише для інференсу (Test-time Local Converter) від'єднується перед першою епохою та приєднується знову після завершення навчання, оскільки зворотне поширення через локальний пул фіксованого вікна не відповідало б використанню контрольної точки під час інференсу.

Датасети, аугментацію, кілька GPU та системи журналювання описано на сторінці навчання.

Валідація

Метод val() повертає словник із metrics/PSNR та metrics/SSIM, обчисленими в RGB на всьому дійсному полотні: SSIM використовує гауссове вікно 11x11 із sigma 1.5, а fitness для вибору найкращої контрольної точки дорівнює PSNR. data вказує на той самий формат датасету пар зображень, який використовується для навчання.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt") # val() повертає звичайний словник, а не об'єктmetrics = model.val(data="my-dataset.yaml") print(metrics["metrics/PSNR"])print(metrics["metrics/SSIM"])
CLI
libreyolo val model=LibreNAFNetl-restore-sidd.pt data=my-dataset.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, а restored містить вихідне зображення. NAFNet експортується з фіксованою просторовою роздільною здатністю: imgsz має бути кратним коефіцієнту зменшення дискретизації мережі (16 для обох ширин архітектури), і за dynamic=True динамічним є лише вимір батча; висота й ширина фіксуються під час експорту.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")model.export(format="onnx", imgsz=256)model.export(format="tensorrt", imgsz=256, half=True)
CLI
libreyolo export model=LibreNAFNetl-restore-sidd.pt format=onnx imgsz=256libreyolo export model=LibreNAFNetl-restore-sidd.pt format=tensorrt imgsz=256 half=True
Використати експортований файл
from libreyolo import LibreYOLO # Фабрика виконує маршрутизацію за суфіксом файлу, тому експортований артефакт# завантажується як будь-яка контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("LibreNAFNetl-restore-sidd.onnx")result = model("noisy.jpg") result.restored.save("denoised.png")

Контрольні точки

Усі опубліковані файли ваг для цього сімейства.

ФайлВхід (пікс.)Ліцензія ваг
restore
LibreNAFNetl-restore-sidd.ptmit

Кожен наведений вище файл уже доступний у організації LibreYOLO і завантажується під час першого використання.

Ліцензування

Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.

Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.

Оригінальна робота
NAFNet, Megvii
Ліцензія першоджерела
MIT
Джерело першоджерела
github.com/megvii-research/NAFNet
Код LibreYOLO
MIT
Ваги
MIT, повторно опубліковано на huggingface.co/LibreYOLO
Тлумачення
MIT is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep the copyright notice and license text with any copy you redistribute, and places no other obligation on your own application code. Part of the training pipeline is ported from BasicSR under Apache-2.0, which additionally grants a patent license. The published checkpoint is trained on the Smartphone Image Denoising Dataset (SIDD), itself MIT-licensed.

Цитування

@article{chen2022simple,
  title={Simple Baselines for Image Restoration},
  author={Chen, Liangyu and Chu, Xiaojie and Zhang, Xiangyu and Sun, Jian},
  journal={arXiv preprint arXiv:2204.04676},
  year={2022}
}

Скопійовано з блоку цитування авторів на сторінці github.com/megvii-research/NAFNet#citations.

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