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.

bash
pip install libreyolo

Vorhersage

Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert.

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
Wiederhergestelltes Bild speichern
from 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.

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
Checkpoint-Herkunft
from 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",)
Multi-GPU
libreyolo train model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yaml \  epochs=100 device=0,1 batch=32

Ohne Ä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.

Python
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"])
CLI
libreyolo val model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yaml

Export

AufgabeONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
restorerestore to ONNX: unterstütztrestore to TorchScript: unterstütztrestore to ExecuTorch: unterstütztrestore to TensorRT: unterstütztrestore to OpenVINO: unterstütztrestore to Paddle: nicht unterstütztrestore to MNN: nicht unterstütztrestore to RKNN: nicht unterstütztrestore to ncnn: unterstütztrestore to TFLite: nicht unterstütztrestore to CoreML: nicht unterstütztrestore 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.

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
Exportierte Datei verwenden
from 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.

DateiEingabe (px)Lizenz der Gewichte
restore
LibreNAFNetl-restore-sidd.ptmit

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
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.

Mit LibreYOLO v1.5.0 verifiziert. Supporttabellen, Checkpoints und Benchmarkwerte auf dieser Seite werden aus der veröffentlichten Bibliothek und den publizierten Gewichten generiert und nicht von Hand geschrieben.