| --- |
| library_name: onnx |
| license: apache-2.0 |
| tags: |
| - foundation |
| - amd |
| - rocm |
| - image-to-image |
| pipeline_tag: image-to-image |
| --- |
| |
|  |
|
|
| # ESRGAN: Optimized for AMD ROCm |
|
|
| ESRGAN (Enhanced Super-Resolution Generative Adversarial Network) reconstructs a high-resolution image from a low-resolution input, upscaling 4× (250×250 → 1000×1000). This repository packages inference for image super-resolution using **ONNX Runtime**, exported and validated for **AMD ROCm** so it runs efficiently on AMD GPUs, CPUs, and NPUs. |
|
|
| This is based on the implementation of ESRGAN found [here](https://arxiv.org/abs/1809.00219). |
| This repository contains configurations and scripts optimized for **AMD® ROCm™** platforms. You can use the [esrgan AMD scripts](https://github.com/AMD-PAVS/physical_ai_sdk/blob/main/models/esrgan) to reproduce results or export with custom configurations. More details on model performance can be found [here](#accuracy-pipeline). |
|
|
| --- |
|
|
| ## Task Overview |
|
|
| **Task:** Image super-resolution (4× upscaling) |
|
|
| **Dataset:** DIV2K validation set (100 HR images; 20 center-cropped 1000×1000 HR / 250×250 LR pairs prepared by default) |
|
|
| **Output metrics:** PSNR (dB), SSIM, latency/throughput |
|
|
| > **Backend note:** The shipped model is an INT8 QDQ-quantized ONNX model with static NHWC shapes for cross-device compatibility; benchmark/profile precision flags select the execution/quantization path applied at run time. |
|
|
| --- |
|
|
| ## AMD ROCm Optimization |
|
|
| This model export has been adapted and validated for **AMD Instinct™ / Radeon™ GPUs** running **ROCm**, as well as AMD CPUs and AMD Ryzen AI NPUs. Key points: |
|
|
| - Validated backends: **ONNX Runtime** across CPU (FP32/INT8), GPU (MIGraphX execution provider — FP32/FP16/INT8), and NPU (VitisAI execution provider, auto-quantized internally). |
| - No code changes required versus the upstream ESRGAN implementation — only environment/runtime configuration differs. |
| - GPU and NPU both degrade output quality relative to CPU on this particular model — see Accuracy Pipeline for measured results. |
|
|
| | Runtime | Precision | Backend | Hardware | Notes | |
| |---|---|---|---|---| |
| | ONNX Runtime | FP32 / INT8 | CPU Execution Provider | AMD CPU | Reference quality path | |
| | ONNX Runtime | FP32 / FP16 / INT8 | MIGraphX Execution Provider | AMD Instinct™ / Radeon™ GPU (ROCm) | Quality degrades vs. CPU on this model | |
| | ONNX Runtime | Auto | VitisAI Execution Provider | AMD Ryzen AI NPU | Auto-quantized internally; quality degrades further | |
|
|
| --- |
|
|
| ## Getting Started |
|
|
| For setup instructions, evaluation scripts, and custom configuration options, see the [esrgan on GitHub](https://github.com/AMD-PAVS/physical_ai_sdk/blob/main/models/esrgan). |
|
|
| --- |
|
|
| ## Model Details |
|
|
| **Model Type:** Generative adversarial network for image super-resolution |
|
|
| **Base Model:** ESRGAN (INT8 QDQ-quantized ONNX export) |
|
|
| **Model Stats:** |
| - Input: `(1, 250, 250, 3)` float32, NHWC, normalized to [0, 1] |
| - Output: `(1, 1000, 1000, 3)` float32, NHWC (4× upscaled) |
| - Precision tested: FP32, FP16, INT8 (shipped model is INT8-QDQ) |
|
|
| --- |
|
|
| ## Accuracy Pipeline |
|
|
| Higher is better for both metrics — they measure how closely the upscaled image matches the ground truth. PSNR has no fixed ceiling (an exact match is infinite dB; typical super-resolution scores fall in the ~20–35 dB range), while SSIM is bounded in [0, 1] where 1.0 is a perfect structural match. |
|
|
| ### Metrics Explained |
|
|
| | Metric | Description | |
| |--------|-------------| |
| | PSNR (dB) | Peak Signal-to-Noise Ratio — a pixel-level fidelity measure derived from mean squared error. Higher means less per-pixel distortion, but can rate a blurry-but-aligned image well even when fine texture is lost — which is why it is paired with SSIM. | |
| | SSIM | Structural Similarity Index — compares local luminance, contrast, and structure rather than raw pixel error. Higher means the output preserves edges and texture the way a human viewer perceives structure. | |
|
|
| ### Accuracy Results |
|
|
| **Full Dataset Evaluation (DIV2K validation, 20 image pairs, INT8-QDQ model)** — filled from `evaluation_results/eval_results_<device>_int8.json`; run `make metrics` to refresh: |
|
|
| <!-- accuracy-table-start --> |
| | Device | Precision | PSNR (dB) | SSIM | Images | |
| |--------|-----------|-----------|------|--------| |
| | CPU | INT8 | 22.68 | 0.7152 | 20 | |
| | GPU | INT8 | 11.29 | 0.1701 | 20 | |
| | NPU | INT8 | 5.06 | 0.1775 | 20 | |
| <!-- accuracy-table-end --> |
|
|
| --- |
|
|
| ## Dig Deeper |
|
|
| Want to explore the full evaluation scripts, config options, and other AMD-optimized model examples? |
|
|
| 📂 **[View the full project on GitHub](https://github.com/AMD-PAVS/physical_ai_sdk/blob/main/models/esrgan)** |
|
|
| The GitHub repository includes: |
| - Benchmark, profile, and evaluation Makefile targets for CPU, GPU, and NPU |
| - DIV2K dataset staging and PSNR/SSIM evaluation pipeline |
| - INT8-QDQ ONNX export used across all device targets |
| - Benchmarking and reproduction instructions |
|
|