NAFNet

NAFNet es una red convolucional para restauración de imágenes que elimina las funciones de activación no lineales del bloque UNet típico y las sustituye por una multiplicación elemento a elemento. LibreYOLO lo soporta para una tarea, la restauración, con un checkpoint publicado de eliminación de ruido en imágenes reales entrenado sobre SIDD.

Tareas
restore
Tamaños
s, l at 256 px
Instalación
pip install libreyolo
Nivel de compatibilidad
Compatible, desde v. Modelos entrenables de apoyo: se mantienen operativos en CI y reciben funciones cuando surge la oportunidad.
Proyecto original
NAFNet de Megvii, MIT. Artículo, fuente
Licencias
Código MIT, pesos MIT. Uso comercial

Instalación

NAFNet no necesita ningún extra opcional. Todo lo que importa está en la instalación base.

bash
pip install libreyolo

Predicción

Los pesos se descargan de Hugging Face en el primer uso y se guardan en la caché local.

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
Guardar la imagen restaurada
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")result = model.predict("noisy.jpg") result.restored.save("denoised.png")

El objeto Results devuelto lleva un único campo para esta familia, restored, una imagen RGB uint8 densa en formato HWC sobre el lienzo original; no hay boxes que recorrer. save=True escribe esa imagen restaurada directamente en disco en lugar de dibujar una anotación sobre la entrada. conf, iou y max_det se aceptan por paridad de firma con el resto de familias, pero no tienen efecto, ya que la restauración no produce detecciones que filtrar. Consulta predicción para fuentes, streaming y manejo de resultados.

Variantes

Dos anchos comparten esta arquitectura: s (ancho 32) y l (ancho 64), ambos construidos en torno a un parche de entrenamiento de 256 px. La predicción y la validación se ejecutan a la resolución nativa de la imagen sea cual sea su tamaño, con padding solo hasta el factor de submuestreo de la red. De momento solo está publicado el ancho l, como checkpoint de eliminación de ruido en imágenes reales entrenado sobre SIDD.

Entrenamiento

NAFNet hace fine-tuning sobre tus propias parejas de imágenes degradada/limpia: un YAML de dataset que apunte a una carpeta inputs/<split>/ con las imágenes degradadas y a una carpeta targets/<split>/ con los objetivos limpios, emparejadas por el nombre de archivo sin extensión. degradation y dataset son cadenas opcionales que se registran en el checkpoint guardado como procedencia; no intervienen en el entrenamiento.

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
Procedencia del checkpoint
from libreyolo import LibreYOLO # degradation y dataset se registran en el checkpoint guardado; no# cambian lo que se entrena.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

Si no lo tocas, el trainer ejecuta 100 epochs con AdamW a lr0=1e-3, un batch de 16, recortes de 256 px y parada temprana tras 50 epochs sin mejora de PSNR. Esta familia no tiene camino LoRA: lora=True lanza un error en lugar de ejecutarse, porque NAFNetTrainer nunca se acoge al fine-tuning con adaptadores.

Durante el entrenamiento la red funciona con global-average pooling normal. El pooling local por ventanas de NAFNet, exclusivo de inferencia (Test-time Local Converter), se desconecta antes del primer epoch y se vuelve a conectar cuando termina el entrenamiento, ya que retropropagar a través de un pooling local de ventana fija no se correspondería con la forma en que se usa el checkpoint en inferencia.

Consulta entrenamiento para datasets, aumento de datos, multi-GPU y loggers.

Validación

val() devuelve un diccionario con metrics/PSNR y metrics/SSIM, calculados en RGB sobre todo el lienzo válido: SSIM usa una ventana gaussiana de 11x11 con sigma 1.5, y el fitness con el que se elige el mejor checkpoint es el valor de PSNR. data apunta al mismo formato de dataset de imágenes emparejadas que se usa para entrenar.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt") # val() devuelve un dict simple, no un objetometrics = 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

Exportación

TareaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
restorerestore to ONNX: compatiblerestore to TorchScript: compatiblerestore to ExecuTorch: compatiblerestore to TensorRT: compatiblerestore to OpenVINO: compatiblerestore to Paddle: no compatiblerestore to MNN: no compatiblerestore to RKNN: no compatiblerestore to ncnn: compatiblerestore to TFLite: no compatiblerestore to CoreML: no compatiblerestore to Core AI: compatible

Un artefacto exportado se vuelve a cargar con LibreYOLO() según su extensión de archivo, así que un archivo .onnx o .engine se comporta como un checkpoint y devuelve el mismo Results, con restored llevando la imagen de salida. NAFNet se exporta a una resolución espacial fija: imgsz debe ser divisible por el factor de submuestreo de la red (16 para ambos anchos de la arquitectura), y solo la dimensión de batch es dinámica cuando dynamic=True; el alto y el ancho quedan fijados en el momento de la exportación.

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
Usar el archivo exportado
from libreyolo import LibreYOLO # La factoría enruta según la extensión del archivo, así que un artefacto# exportado se carga como cualquier checkpoint y devuelve el mismo Results.model = LibreYOLO("LibreNAFNetl-restore-sidd.onnx")result = model("noisy.jpg") result.restored.save("denoised.png")

Checkpoints

Todos los archivos de pesos publicados de esta familia.

ArchivoEntrada (px)Licencia de los pesos
restore
LibreNAFNetl-restore-sidd.ptmit

Todos los archivos anteriores existen hoy en la organización de LibreYOLO y se descargan la primera vez que se usan.

Licencia

Comprueba la licencia en el repositorio de Hugging Face de los pesos concretos que descargues. Cada checkpoint de la organización de LibreYOLO incluye una, y no siempre es la misma en toda una familia. Ese repositorio es la fuente autorizada; el resumen siguiente describe qué se aplicaba cuando se verificó esta página por última vez.

Esta es una descripción de las licencias implicadas, no asesoramiento legal. Si la respuesta es importante a nivel comercial, lee las licencias y busca tu propio asesoramiento.

Trabajo original
NAFNet, Megvii
Licencia del proyecto original
MIT
Fuente del proyecto original
github.com/megvii-research/NAFNet
Código de LibreYOLO
MIT
Pesos
MIT, republicados en huggingface.co/LibreYOLO
Interpretación
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.

Cita

@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}
}

Copiado del bloque de cita de los autores en github.com/megvii-research/NAFNet#citations.

Verificado con LibreYOLO v1.5.0. Las tablas de compatibilidad, los checkpoints y las cifras de rendimiento de esta página se generan a partir de la biblioteca publicada y los pesos publicados; no se escriben a mano.