NAFNet
NAFNet è una rete convoluzionale per il restauro di immagini che elimina le funzioni di attivazione non lineari dal tipico blocco UNet, sostituendole con una moltiplicazione elemento per elemento. LibreYOLO lo supporta per un solo task, il restauro, con un checkpoint pubblicato di denoising su immagini reali addestrato su SIDD.
- Task
- restore
- Dimensioni
- s, l at 256 px
- Installa
pip install libreyolo- Livello di supporto
- Supportato, dalla v. Modelli addestrabili di supporto: mantenuti funzionanti nella CI, ricevono nuove funzionalità quando possibile.
- Licenze
- Codice MIT, pesi MIT. Uso commerciale
Installazione
NAFNet non richiede nessun extra opzionale. Tutto ciò che importa è già nell'installazione base.
pip install libreyoloPredizione
I pesi vengono scaricati da Hugging Face al primo utilizzo e restano in cache in locale.
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")L'oggetto Results restituito porta un solo campo per questa famiglia,
restored, un'immagine RGB uint8 densa in formato HWC sul canvas originale;
non ci sono box da scorrere. save=True scrive quell'immagine restaurata
direttamente su disco invece di disegnare un'annotazione sopra l'input.
conf, iou e max_det sono accettati per parità di firma con tutte le altre
famiglie ma non hanno effetto, dato che il restauro non produce rilevamenti da
filtrare. Vedi predizione per sorgenti, streaming e gestione
dei risultati.
Varianti
Due larghezze condividono questa architettura: s (larghezza 32) e l
(larghezza 64), entrambe costruite attorno a una patch di addestramento da
256 px. La predizione e la validazione girano alla risoluzione nativa
dell'immagine qualunque sia la dimensione, con padding solo fino al fattore di
downsample della rete. Al momento è pubblicata solo la larghezza l, come
checkpoint di denoising su immagini reali addestrato su SIDD.
Addestramento
NAFNet fa fine-tuning sulle tue coppie di immagini degradata/pulita: un YAML di
dataset che punta a una cartella inputs/<split>/ di immagini degradate e a
una cartella targets/<split>/ di target puliti, accoppiate per nome del file
senza estensione. degradation e dataset sono stringhe opzionali registrate
sul checkpoint salvato come provenienza; non intervengono nell'addestramento.
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 e dataset vengono registrati sul checkpoint salvato; non# cambiano ciò che viene addestrato.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=32Se non tocchi niente, il trainer esegue 100 epoche con AdamW a lr0=1e-3, un
batch di 16, ritagli da 256 px ed early stopping dopo 50 epoche senza
miglioramenti del PSNR. Per questa famiglia non esiste un percorso LoRA:
lora=True solleva un errore invece di eseguire, perché NAFNetTrainer non
aderisce mai al fine-tuning con adattatori.
Durante l'addestramento la rete gira con un normale global-average pooling. Il pooling locale a finestre di NAFNet, riservato all'inferenza (Test-time Local Converter), viene staccato prima della prima epoca e riattaccato quando l'addestramento finisce, perché retropropagare attraverso un pooling locale a finestra fissa non corrisponderebbe al modo in cui il checkpoint viene usato in inferenza.
Vedi addestramento per dataset, data augmentation, multi-GPU e logger.
Validazione
val() restituisce un dizionario con metrics/PSNR e metrics/SSIM,
calcolati in RGB su tutto il canvas valido: SSIM usa una finestra gaussiana
11x11 con sigma 1.5, e il fitness con cui si sceglie il miglior checkpoint è
il valore di PSNR. data punta allo stesso formato di dataset a immagini
accoppiate usato per l'addestramento.
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt") # val() restituisce un semplice dict, non un oggettometrics = model.val(data="my-dataset.yaml") print(metrics["metrics/PSNR"])print(metrics["metrics/SSIM"])libreyolo val model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yamlEsportazione
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| restore | restore to ONNX: supportato | restore to TorchScript: supportato | restore to ExecuTorch: supportato | restore to TensorRT: supportato | restore to OpenVINO: supportato | restore to Paddle: non supportato | restore to MNN: non supportato | restore to RKNN: non supportato | restore to ncnn: supportato | restore to TFLite: non supportato | restore to CoreML: non supportato | restore to Core AI: supportato |
Un artefatto esportato si ricarica con LibreYOLO() in base al suffisso del
file, quindi un file .onnx o .engine si comporta come un checkpoint e
restituisce lo stesso Results, con restored che porta l'immagine di output.
NAFNet esporta a una risoluzione spaziale fissa: imgsz deve essere divisibile
per il fattore di downsample della rete (16 per entrambe le larghezze
dell'architettura), e solo la dimensione di batch è dinamica quando
dynamic=True; altezza e larghezza vengono fissate al momento
dell'esportazione.
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 # La factory sceglie in base al suffisso del file, quindi un artefatto# esportato si carica come un qualsiasi checkpoint e restituisce lo stesso Results.model = LibreYOLO("LibreNAFNetl-restore-sidd.onnx")result = model("noisy.jpg") result.restored.save("denoised.png")Checkpoint
Tutti i file di pesi pubblicati per questa famiglia.
| File | Ingresso (px) | Licenza dei pesi |
|---|---|---|
| restore | ||
| LibreNAFNetl-restore-sidd.pt | mit | |
Oggi tutti i file elencati sopra sono presenti nell<link>organizzazione LibreYOLO</link> e vengono scaricati al primo utilizzo.
Licenze
Controlla la licenza nel repository Hugging Face degli specifici pesi che scarichi. Ogni checkpoint nell<link>organizzazione LibreYOLO</link> ne include una e non è sempre la stessa per tutta la famiglia. Quel repository è la fonte autorevole; il riepilogo seguente descrive le condizioni applicabili al momento dellultima verifica di questa pagina.
Questa è una descrizione delle licenze coinvolte, non una consulenza legale. Se la risposta è importante a fini commerciali, leggi personalmente le licenze e chiedi una consulenza indipendente.
- Lavoro originale
- NAFNet, Megvii
- Licenza upstream
- MIT
- Sorgente upstream
- github.com/megvii-research/NAFNet
- Codice LibreYOLO
- MIT
- Pesi
- MIT, ripubblicati su huggingface.co/LibreYOLO
- Interpretazione
- 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.
Citazione
@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}
}Copiato dal blocco di citazione degli autori disponibile su github.com/megvii-research/NAFNet#citations.