Motion deblur
NAFNet-REDS
Recover a sharp image from a single motion-blurred frame.
About this model
NAFNet is a small image-restoration network from Megvii. The "REDS" checkpoint is trained on the REDS motion-blur benchmark, where blur comes from camera shake and fast subject motion. One forward pass takes a blurred frame and returns the deblurred copy.
The build the SDK ships is OpenCV's int8 ONNX export of NAFNet width-64. About 87 MB on disk, runs on CPU on every supported platform.
What you can build
- Recover a readable license plate from a single CCTV grab.
- Sharpen doorbell-camera frames before OCR or face matching.
- Clean up handheld field photos taken in poor light.
- Pre-process archival scans before downstream pipelines.
Variants & downloads
Choose the build for your appModel files are being prepared.
Explore the model’s examples, source links, and integration notes while download variants are added.
Example inference
Performance
Results depend on the device, runtime, and test conditions. Each measurement keeps its own context.
M1 Max, macOS 15, ONNX Runtime 1.17
See original catalog hardware notes · CPU
1.67 s
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
M1 Max, macOS 15, ONNX Runtime 1.17
See original catalog hardware notes · CoreML
10.21 s
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
Integration examples
Vision SDK integration
cpp
#include "imaged/sdk.hpp"
#include "imaged/families/deblur/deblur_family.hpp"
imaged::SDK::AI ai;
auto& config = ai.getOptions();
config.set("deblur.model", "weights/nafnet-reds.onnx");
config.set("deblur.inference.provider", "cpu");
imaged::SDK::DeblurFamily family;
family.load(config);
imaged::SDK::Image image;
image.load("blurry.jpg");
auto result = family.run(&image);
auto* sharp = std::get_if<imaged::SDK::ImageResult>(&result);
sharp->image.save("sharp.jpg");