NAFNet

NAFNet là mạng tích chập để khôi phục ảnh, loại bỏ các hàm activation phi tuyến khỏi block UNet điển hình và thay bằng phép nhân theo phần tử. LibreYOLO hỗ trợ mô hình cho một tác vụ là khôi phục, với checkpoint khử nhiễu ảnh thực đã công bố và được huấn luyện trên SIDD.

Tác vụ
restore
Kích thước
s, l at 256 px
Cài đặt
pip install libreyolo
Bậc hỗ trợ
Được hỗ trợ, từ v. Các mô hình huấn luyện bổ trợ: luôn giữ CI ở trạng thái xanh, tính năng được bổ sung khi có cơ hội.
Thượng nguồn
NAFNet của Megvii, MIT. Bài báo, mã nguồn
Giấy phép
Mã nguồn MIT, trọng số MIT. Sử dụng thương mại

Cài đặt

NAFNet không cần extra tùy chọn. Mọi thành phần được import đều có trong bản cài đặt cơ sở.

bash
pip install libreyolo

Dự đoán

Trọng số được tải từ Hugging Face ở lần dùng đầu tiên và lưu vào bộ nhớ đệm cục bộ.

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
Lưu ảnh đã khôi phục
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")result = model.predict("noisy.jpg") result.restored.save("denoised.png")

Đối tượng Results trả về chứa một trường cho họ này là restored, một ảnh RGB uint8 HWC dày đặc trên canvas gốc; không có box để duyệt. save=True ghi trực tiếp ảnh đã khôi phục ra đĩa thay vì vẽ chú thích lên đầu vào. conf, ioumax_det được chấp nhận để đồng nhất chữ ký với mọi họ khác nhưng không có tác động vì khôi phục không tạo phát hiện để lọc. Xem dự đoán để biết về nguồn, streaming và xử lý kết quả.

Các biến thể

Hai độ rộng dùng chung kiến trúc này: s (độ rộng 32) và l (độ rộng 64), cả hai được xây dựng quanh patch huấn luyện 256 px. Dự đoán và đánh giá chạy ở độ phân giải ảnh gốc bất kể kích thước, chỉ thêm padding đến hệ số downsample của mạng. Hiện chỉ độ rộng l được công bố dưới dạng checkpoint khử nhiễu ảnh thực được huấn luyện trên SIDD.

Huấn luyện

NAFNet tinh chỉnh trên các cặp ảnh suy giảm/sạch của bạn: YAML tập dữ liệu trỏ đến thư mục inputs/<split>/ chứa ảnh suy giảm và thư mục targets/<split>/ chứa đích sạch, được ghép theo phần gốc tên tệp. degradationdataset là các chuỗi tùy chọn được ghi vào checkpoint đã lưu để theo dõi nguồn gốc; chúng không tham gia vào quá trình huấn luyện.

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
Nguồn gốc checkpoint
from libreyolo import LibreYOLO # degradation và dataset được ghi vào checkpoint đã lưu; chúng# không thay đổi nội dung được huấn luyện.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

Nếu giữ nguyên mặc định, trình huấn luyện chạy 100 epoch với AdamW ở lr0=1e-3, batch 16, các crop 256 px và dừng sớm sau 50 epoch không cải thiện PSNR. Họ này không có luồng LoRA: lora=True phát sinh lỗi thay vì chạy vì NAFNetTrainer không bật tinh chỉnh bằng adapter.

Trong khi huấn luyện, mạng chạy với global-average pooling thông thường. Phép local pooling theo cửa sổ chỉ dành cho suy luận của NAFNet (Test-time Local Converter) được tách ra trước epoch đầu tiên và gắn lại khi huấn luyện hoàn tất, vì lan truyền ngược qua local pool cửa sổ cố định sẽ không khớp với cách dùng checkpoint khi suy luận.

Xem huấn luyện để biết về tập dữ liệu, tăng cường dữ liệu, multi-GPU và logger.

Đánh giá

val() trả về từ điển có metrics/PSNRmetrics/SSIM, được tính trong RGB trên toàn bộ canvas hợp lệ: SSIM dùng cửa sổ Gaussian 11x11 với sigma 1.5, còn fitness để chọn checkpoint tốt nhất là giá trị PSNR. data trỏ đến cùng định dạng tập dữ liệu ảnh ghép cặp dùng cho huấn luyện.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt") # val() trả về dict thông thường, không phải đối tượngmetrics = 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

Xuất

Tác vụONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
restorerestore to ONNX: được hỗ trợrestore to TorchScript: được hỗ trợrestore to ExecuTorch: được hỗ trợrestore to TensorRT: được hỗ trợrestore to OpenVINO: được hỗ trợrestore to Paddle: không được hỗ trợrestore to MNN: không được hỗ trợrestore to RKNN: không được hỗ trợrestore to ncnn: được hỗ trợrestore to TFLite: không được hỗ trợrestore to CoreML: không được hỗ trợrestore to Core AI: được hỗ trợ

Artifact đã xuất được tải lại qua LibreYOLO() dựa trên hậu tố tệp, vì vậy tệp .onnx hoặc .engine hoạt động như checkpoint và trả về cùng Results, trong đó restored chứa ảnh đầu ra. NAFNet xuất ở độ phân giải không gian cố định: imgsz phải chia hết cho hệ số downsample của mạng (16 cho cả hai độ rộng kiến trúc), và chỉ chiều batch là động khi dynamic=True; chiều cao và chiều rộng được cố định tại thời điểm xuất.

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
Dùng tệp đã xuất
from libreyolo import LibreYOLO # Factory định tuyến theo hậu tố tệp, nên artifact đã xuất được tải# như mọi checkpoint và trả về cùng đối tượng Results.model = LibreYOLO("LibreNAFNetl-restore-sidd.onnx")result = model("noisy.jpg") result.restored.save("denoised.png")

Checkpoint

Mọi tệp trọng số đã công bố cho họ này.

TệpĐầu vào (px)Giấy phép trọng số
restore
LibreNAFNetl-restore-sidd.ptmit

Mọi tệp ở trên hiện đều có trong tổ chức LibreYOLO và được tải xuống trong lần sử dụng đầu tiên.

Giấy phép

Hãy kiểm tra giấy phép trong repo Hugging Face của trọng số cụ thể mà bạn tải xuống. Mỗi checkpoint trong tổ chức LibreYOLO đều có giấy phép riêng và giấy phép có thể khác nhau trong cùng một họ. Repo đó là nguồn có thẩm quyền; phần tóm tắt dưới đây mô tả các điều khoản áp dụng khi trang này được kiểm chứng lần gần nhất.

Đây là phần mô tả các giấy phép liên quan, không phải tư vấn pháp lý. Nếu câu trả lời có ý nghĩa về mặt thương mại, hãy tự đọc các giấy phép và tham khảo cố vấn của riêng bạn.

Công trình gốc
NAFNet, Megvii
Giấy phép thượng nguồn
MIT
Nguồn thượng nguồn
github.com/megvii-research/NAFNet
Mã nguồn LibreYOLO
MIT
Trọng số
MIT, được phát hành lại tại huggingface.co/LibreYOLO
Diễn giải
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.

Trích dẫn

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

Được sao chép từ khối trích dẫn của tác giả tại github.com/megvii-research/NAFNet#citations.

Đã kiểm chứng với LibreYOLO v1.5.0. Các bảng hỗ trợ, checkpoint và số liệu benchmark trên trang này được tạo từ thư viện đã phát hành và trọng số đã công bố, không phải viết thủ công.