NAFNet
NAFNet ist ein faltungsbasiertes Netzwerk zur Bildwiederherstellung, das die nichtlinearen Aktivierungsfunktionen eines typischen UNet-Blocks entfernt und durch elementweise Multiplikation ersetzt. LibreYOLO unterstützt eine Aufgabe, Wiederherstellung, mit einem veröffentlichten Checkpoint zum Entrauschen realer Bilder, der auf SIDD trainiert wurde.
- Aufgaben
- restore
- Größen
- s, l at 256 px
- Installation
pip install libreyolo- Supportstufe
- Unterstützt, seit v. Ergänzende trainierbare Modelle: Die CI bleibt grün, Funktionen kommen bei Gelegenheit hinzu.
- Upstream
- NAFNet von Megvii, MIT. Publikation, Quelle
- Lizenzen
- Code MIT, Gewichte MIT. Kommerzielle Nutzung
Installation
NAFNet benötigt kein optionales Zusatzpaket. Alle Importe sind in der Basisinstallation enthalten.
pip install libreyoloVorhersage
Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert.
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")Das zurückgegebene Results-Objekt enthält für diese Familie ein Feld,
restored, ein dichtes HWC-uint8-RGB-Bild auf der ursprünglichen Arbeitsfläche.
Es gibt keine Boxen zum Durchlaufen. save=True schreibt das wiederhergestellte
Bild direkt auf den Datenträger, statt eine Annotation über die Eingabe zu
zeichnen. conf, iou und max_det werden zur Signaturparität mit allen
anderen Familien akzeptiert, haben aber keine Wirkung. Die Wiederherstellung
erzeugt keine zu filternden Erkennungen. Unter Vorhersage
findest du Quellen, Streaming und die Verarbeitung von Ergebnissen.
Varianten
Diese Architektur besitzt zwei Breiten: s (Breite 32) und l (Breite 64),
beide um einen Trainings-Patch von 256 px herum aufgebaut. Vorhersage und
Validierung laufen unabhängig von der Größe mit der nativen Bildauflösung und
füllen nur bis zum Downsampling-Faktor des Netzwerks auf. Derzeit ist nur die
Breite l veröffentlicht, als auf SIDD trainierter Checkpoint zum Entrauschen
realer Bilder.
Training
NAFNet wird mit deinen eigenen gepaarten beeinträchtigten und sauberen Bildern
nachtrainiert. Die Datensatz-YAML verweist auf einen Ordner
inputs/<split>/ mit beeinträchtigten Bildern und einen Ordner
targets/<split>/ mit sauberen Zielbildern, die anhand des Dateinamens ohne
Endung zugeordnet werden. degradation und dataset sind optionale Strings,
die zur Herkunftsangabe im gespeicherten Checkpoint vermerkt werden. Sie
beeinflussen das Training nicht.
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 und dataset werden im gespeicherten Checkpoint vermerkt;# sie ändern nicht, was trainiert wird.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=32Ohne Änderungen läuft der Trainer 100 Epochen mit AdamW bei lr0=1e-3, einem
Batch von 16, Zuschnitten von 256 px und Early Stopping nach 50 Epochen ohne
Verbesserung des PSNR. Für diese Familie gibt es keinen LoRA-Pfad:
lora=True löst einen Fehler aus, statt zu laufen, weil NAFNetTrainer kein
Adapter-Fine-Tuning aktiviert.
Während des Trainings verwendet das Netzwerk einfaches globales Average Pooling. Das nur für die Inferenz verwendete fensterbasierte lokale Pooling von NAFNet (Test-time Local Converter) wird vor der ersten Epoche entfernt und nach Ende des Trainings wieder angehängt. Der Backward-Pass durch einen lokalen Pool mit festem Fenster würde nicht der Verwendung des Checkpoints bei der Inferenz entsprechen.
Unter Training findest du Datensätze, Datenaugmentierung, Multi-GPU und Logger.
Validierung
val() gibt ein Dictionary mit metrics/PSNR und metrics/SSIM zurück,
berechnet in RGB über die gesamte gültige Arbeitsfläche. SSIM verwendet ein
11x11-Gauß-Fenster mit Sigma 1.5. fitness für die Auswahl des besten
Checkpoints ist der PSNR-Wert. data verweist auf dasselbe gepaarte Bildformat
wie beim Training.
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt") # val() gibt ein einfaches dict zurück, kein Objektmetrics = model.val(data="my-dataset.yaml") print(metrics["metrics/PSNR"])print(metrics["metrics/SSIM"])libreyolo val model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yamlExport
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| restore | restore to ONNX: unterstützt | restore to TorchScript: unterstützt | restore to ExecuTorch: unterstützt | restore to TensorRT: unterstützt | restore to OpenVINO: unterstützt | restore to Paddle: nicht unterstützt | restore to MNN: nicht unterstützt | restore to RKNN: nicht unterstützt | restore to ncnn: unterstützt | restore to TFLite: nicht unterstützt | restore to CoreML: nicht unterstützt | restore to Core AI: unterstützt |
Ein exportiertes Artefakt wird anhand seiner Dateiendung wieder über LibreYOLO()
geladen. Eine .onnx- oder .engine-Datei verhält sich daher wie ein Checkpoint,
gibt dasselbe Results-Objekt zurück und enthält das Ausgabebild in restored.
NAFNet wird mit fester räumlicher Auflösung exportiert. imgsz muss durch den
Downsampling-Faktor des Netzwerks teilbar sein, bei beiden Architekturbreiten
16. Wenn dynamic=True gesetzt ist, bleibt nur die Batch-Dimension dynamisch.
Höhe und Breite werden beim Export festgelegt.
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 # Die Factory entscheidet anhand der Dateiendung, daher wird ein Exportartefakt# wie jeder Checkpoint geladen und gibt dasselbe Results-Objekt zurück.model = LibreYOLO("LibreNAFNetl-restore-sidd.onnx")result = model("noisy.jpg") result.restored.save("denoised.png")Checkpoints
Alle veröffentlichten Gewichtsdateien dieser Familie.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| restore | ||
| LibreNAFNetl-restore-sidd.pt | mit | |
Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.
Lizenzierung
Prüfe die Lizenz im Hugging-Face-Repository der konkreten Gewichte, die du herunterlädst. Jeder Checkpoint in der LibreYOLO-Organisation hat eine Lizenz, und sie ist innerhalb einer Familie nicht immer gleich. Dieses Repository ist die maßgebliche Quelle. Die Zusammenfassung unten beschreibt den Stand bei der letzten Verifizierung dieser Seite.
Dies ist eine Beschreibung der beteiligten Lizenzen und keine Rechtsberatung. Wenn die Antwort kommerziell relevant ist, lies die Lizenzen selbst und hole eigenen Rechtsrat ein.
- Originalarbeit
- NAFNet, Megvii
- Upstream-Lizenz
- MIT
- Upstream-Quelle
- github.com/megvii-research/NAFNet
- LibreYOLO-Code
- MIT
- Gewichte
- MIT, erneut unter huggingface.co/LibreYOLO veröffentlicht
- Einordnung
- 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.
Zitieren
@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}
}Aus dem Zitierblock der Autoren unter github.com/megvii-research/NAFNet#citations kopiert.