NAFNet
NAFNet to sieć konwolucyjna do rekonstrukcji obrazów, która usuwa nieliniowe funkcje aktywacji z typowego bloku UNet i zastępuje je mnożeniem element po elemencie. LibreYOLO obsługuje ją w jednym zadaniu, rekonstrukcji, z opublikowanym punktem kontrolnym do odszumiania rzeczywistych obrazów wytrenowanym na SIDD.
- Zadania
- restore
- Rozmiary
- s, l at 256 px
- Instalacja
pip install libreyolo- Poziom obsługi
- Obsługiwany, od wersji v. Dodatkowe trenowalne modele: testy CI pozostają zielone, a funkcje są dodawane w miarę możliwości.
- Projekt źródłowy
- NAFNet, autorzy: Megvii, licencja: MIT. Publikacja, kod źródłowy
- Licencje
- Kod: MIT, wagi: MIT. Użycie komercyjne
Instalacja
NAFNet nie wymaga opcjonalnych dodatków. Wszystkie importowane przez nią elementy znajdują się w instalacji podstawowej.
pip install libreyoloPredykcja
Przy pierwszym użyciu wagi są pobierane z Hugging Face i zapisywane w lokalnej pamięci podręcznej.
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")Zwracany obiekt Results zawiera dla tej rodziny jedno pole, restored, czyli
gęsty obraz RGB uint8 w układzie HWC na oryginalnym płótnie. Nie ma ramek do
iterowania. Ustawienie save=True zapisuje zrekonstruowany obraz bezpośrednio
na dysku zamiast rysować adnotację na obrazie wejściowym. Parametry conf,
iou i max_det są przyjmowane dla zgodności sygnatury z każdą inną rodziną,
ale nie mają wpływu na wynik, ponieważ rekonstrukcja nie tworzy detekcji do
filtrowania. Informacje o źródłach, strumieniowaniu i obsłudze wyników znajdziesz
w sekcji predykcja.
Warianty
Ta architektura ma dwie szerokości: s (szerokość 32) i l (szerokość 64),
obie zbudowane wokół fragmentu treningowego 256 px. Predykcja i walidacja
działają w natywnej rozdzielczości obrazu niezależnie od rozmiaru, z dopełnieniem
wyłącznie do współczynnika zmniejszania rozdzielczości sieci. Obecnie opublikowano
tylko szerokość l, jako punkt kontrolny do odszumiania rzeczywistych obrazów
wytrenowany na SIDD.
Trenowanie
NAFNet dostraja się na własnych parach obrazów zdegradowanych i czystych. Plik
YAML zbioru danych wskazuje folder inputs/<split>/ ze zdegradowanymi obrazami
oraz folder targets/<split>/ z czystymi obrazami docelowymi, dopasowanymi według
rdzenia nazwy pliku. degradation i dataset to opcjonalne ciągi zapisywane
w punkcie kontrolnym jako informacja o pochodzeniu. Nie biorą udziału w trenowaniu.
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 # Rodzaj degradacji i zbiór danych są zapisywane w punkcie kontrolnym;# nie zmieniają trenowanych elementów.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=32Przy ustawieniach domyślnych trener wykonuje 100 epok z optymalizatorem AdamW,
lr0=1e-3, partiami po 16, wycinkami 256 px oraz wczesnym zatrzymaniem po 50
epokach bez poprawy PSNR. Ta rodzina nie ma ścieżki LoRA: lora=True zgłasza
błąd zamiast rozpoczynać działanie, ponieważ NAFNetTrainer nie obsługuje
dostrajania adapterów.
Podczas trenowania sieć używa zwykłego globalnego uśredniania. Przeznaczone wyłącznie do wnioskowania lokalne uśrednianie okienkowe NAFNet (Test-time Local Converter) jest odłączane przed pierwszą epoką i ponownie dołączane po zakończeniu trenowania, ponieważ propagacja wsteczna przez lokalne uśrednianie o stałym oknie nie odpowiadałaby sposobowi użycia punktu kontrolnego podczas wnioskowania.
Informacje o zbiorach danych, augmentacji, wielu GPU i loggerach znajdziesz w sekcji trenowanie.
Walidacja
Metoda val() zwraca słownik z metrics/PSNR i metrics/SSIM, obliczanymi w RGB
na całym prawidłowym płótnie. SSIM używa okna Gaussa 11x11 z sigma 1,5, a fitness
do wyboru najlepszego punktu kontrolnego jest wartością PSNR. Parametr data
wskazuje ten sam format zbioru sparowanych obrazów, którego używa trenowanie.
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt") # val() zwraca zwykły słownik, a nie obiektmetrics = model.val(data="my-dataset.yaml") print(metrics["metrics/PSNR"])print(metrics["metrics/SSIM"])libreyolo val model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yamlEksport
| Zadanie | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| restore | restore to ONNX: obsługiwane | restore to TorchScript: obsługiwane | restore to ExecuTorch: obsługiwane | restore to TensorRT: obsługiwane | restore to OpenVINO: obsługiwane | restore to Paddle: brak obsługi | restore to MNN: brak obsługi | restore to RKNN: brak obsługi | restore to ncnn: obsługiwane | restore to TFLite: brak obsługi | restore to CoreML: brak obsługi | restore to Core AI: obsługiwane |
Wyeksportowany artefakt jest ponownie ładowany przez LibreYOLO() na podstawie
rozszerzenia pliku, więc plik .onnx lub .engine zachowuje się jak punkt
kontrolny i zwraca ten sam obiekt Results, a restored zawiera obraz wynikowy.
NAFNet jest eksportowany ze stałą rozdzielczością przestrzenną: imgsz musi być
podzielne przez współczynnik zmniejszania rozdzielczości sieci (16 dla obu
szerokości architektury), a przy dynamic=True dynamiczny jest tylko wymiar partii.
Wysokość i szerokość są ustalane podczas eksportu.
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 # Fabryka wybiera ścieżkę na podstawie rozszerzenia pliku, dlatego# artefakt ładuje się jak punkt kontrolny i zwraca ten sam obiekt Results.model = LibreYOLO("LibreNAFNetl-restore-sidd.onnx")result = model("noisy.jpg") result.restored.save("denoised.png")Punkty kontrolne
Wszystkie opublikowane pliki wag dla tej rodziny.
| Plik | Wejście (px) | Licencja wag |
|---|---|---|
| restore | ||
| LibreNAFNetl-restore-sidd.pt | mit | |
Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.
Licencjonowanie
Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.
To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.
- Oryginalna praca
- NAFNet, Megvii
- Licencja projektu źródłowego
- MIT
- Kod źródłowy projektu
- github.com/megvii-research/NAFNet
- Kod LibreYOLO
- MIT
- Wagi
- MIT, ponownie opublikowane w huggingface.co/LibreYOLO
- Interpretacja
- 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.
Cytowanie
@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}
}Skopiowano z bloku cytowania autorów w github.com/megvii-research/NAFNet#citations.