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.
- 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ở.
pip install libreyoloDự đ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ộ.
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")Đố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, iou và
max_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. degradation và dataset 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.
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 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",)libreyolo train model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yaml \ epochs=100 device=0,1 batch=32Nế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/PSNR và metrics/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.
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"])libreyolo val model=LibreNAFNetl-restore-sidd.pt data=my-dataset.yamlXuất
| Tác vụ | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| restore | restore 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.
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 # 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.pt | mit | |
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.