NAFNet
NAFNet є згортковою мережею для відновлення зображень, яка вилучає нелінійні функції активації з типового блока UNet і замінює їх поелементним множенням. LibreYOLO підтримує її для одного завдання, відновлення, з опублікованою контрольною точкою усунення шуму зі справжніх зображень, навченою на SIDD.
- Задачі
- restore
- Розміри
- s, l at 256 px
- Встановлення
pip install libreyolo- Рівень підтримки
- Підтримуваний, починаючи з v. Додаткові придатні до навчання моделі: тести CI підтримують справними, а функції додають за нагоди.
- Ліцензії
- Код: MIT, ваги: MIT. Комерційне використання
Встановлення
NAFNet не потребує додаткових пакетів. Усі її імпорти входять до базового встановлення.
pip install libreyoloПередбачення
Під час першого використання ваги завантажуються з Hugging Face та кешуються локально.
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")result = model("noisy.jpg", save=True) restored = result.restoredprint(restored.array.shape)libreyolo predict model=LibreNAFNetl-restore-sidd.pt source=noisy.jpg save=Truefrom 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 є необов'язковими рядками, які
записуються у збереженій контрольній точці для фіксації походження; вони не
беруть участі в навчанні.
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)libreyolo train model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yaml \ epochs=100 imgsz=256 batch=16 lr0=1e-3from libreyolo import LibreYOLO # degradation і dataset записуються у збереженій контрольній точці;# вони не змінюють процес навчання.model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")model.train( data="my-dataset.yaml", epochs=100, degradation="denoise", dataset="MyDataset",)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 вказує на той самий формат датасету пар зображень, який використовується
для навчання.
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"])libreyolo val model=LibreNAFNetl-restore-sidd.pt data=my-dataset.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, а restored містить вихідне зображення. NAFNet експортується
з фіксованою просторовою роздільною здатністю: imgsz має бути кратним
коефіцієнту зменшення дискретизації мережі (16 для обох ширин архітектури), і за
dynamic=True динамічним є лише вимір батча; висота й ширина фіксуються під час
експорту.
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")model.export(format="onnx", imgsz=256)model.export(format="tensorrt", imgsz=256, half=True)libreyolo export model=LibreNAFNetl-restore-sidd.pt format=onnx imgsz=256libreyolo export model=LibreNAFNetl-restore-sidd.pt format=tensorrt imgsz=256 half=Truefrom libreyolo import LibreYOLO # Фабрика виконує маршрутизацію за суфіксом файлу, тому експортований артефакт# завантажується як будь-яка контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("LibreNAFNetl-restore-sidd.onnx")result = model("noisy.jpg") result.restored.save("denoised.png")Контрольні точки
Усі опубліковані файли ваг для цього сімейства.
| Файл | Вхід (пікс.) | Ліцензія ваг |
|---|---|---|
| restore | ||
| LibreNAFNetl-restore-sidd.pt | mit | |
Кожен наведений вище файл уже доступний у організації 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.