|
# RAI 1.5 ESRGAN Inference (C++)
|
|
|
|
A C++ command-line tool for running ESRGAN (Enhanced Super-Resolution Generative Adversarial Networks) inference using ONNX Runtime with support for both CPU and AMD NPU (Neural Processing Unit) execution via VitisAI Execution Provider.
|
|
|
|
## Overview
|
|
|
|
This tool performs image super-resolution using pre-trained ESRGAN models, taking low-resolution images as input and producing high-resolution upscaled outputs. It supports execution on both CPU and AMD Ryzen AI NPUs for accelerated inference.
|
|
|
|
This is the optimized version for Ryzen AI 1.5. It includes timers for the user to measure inference latency
|
|
|
|
By default the inference will first be run once on cpu before running on NPU.
|
|
### Required Files
|
|
- **ONNX Model**: ESRGAN model file (`esrgan_wint8_auint8_bint8_pot_npu_nhwc.onnx`)
|
|
- **Config JSON**: VitisAI configuration file (`vitisai_config.json`)
|
|
- **Runtime DLLs**: Ryzen AI runtime libraries (automatically copied from Ryzen AI SDK during build)
|
|
- **XCLBIN Files**: NPU binary files (automatically copied from Ryzen AI SDK during build)
|
|
- **OpenCV Dependencies**: OpenCV DLLs (included in `opencv/build/x64/vc16/bin/`)
|
|
|
|
## Building the Project
|
|
|
|
The build process automatically copies the required OpenCV and RyzenAI dlls to the executable directory, post-build.
|
|
|
|
It is assumed that the user has the Ryzen 1.5 AI SDK in the path `C:\Program Files\RyzenAI\1.5.0`
|
|
|
|
### Prerequisites for Building
|
|
It is recommend to use the Developer Command Prompt for Visual Studio 2022.
|
|
|
|
From the command prompt, set the `RYZEN_AI_INSTALLATION_PATH`
|
|
```cmd
|
|
set RYZEN_AI_INSTALLATION_PATH=C:\Program Files\RyzenAI\1.5.0
|
|
```
|
|
|
|
The executable is built by running the included `compile.bat` script
|
|
```cmd
|
|
compile.bat
|
|
```
|
|
After the build is complete the executable (`esrgan_inference.exe`) will be found in the `.\build\Release` directory
|
|
|
|
cd into this directory
|
|
```cmd
|
|
cd build\Release
|
|
```
|
|
|
|
### Setting Up Environment Variables
|
|
|
|
If you are going to compile the model, it is helpful to set the following environment variables
|
|
|
|
```cmd
|
|
DEBUG_VAIML_PARTITION=2
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Command-Line Syntax
|
|
```cmd
|
|
esrgan_inference.exe [OPTIONS]
|
|
```
|
|
|
|
### Required Arguments
|
|
- `-m, --model <file>` : ONNX model filename (relative to executable directory)
|
|
- `-c, --config <file>` : JSON configuration filename (relative to executable directory)
|
|
|
|
### Optional Arguments
|
|
- `-i, --input_image <string>` : Input image file (default: `..\..\input_image.png`)
|
|
- `-o, --output_image <string>` : Output image file (default: `output_image.png`),
|
|
- `-n, --iters <int>` : Output image file (default: `1`),
|
|
- `-k, --cache_key <string>` : Cache key for VitisAI EP (default: empty)
|
|
- `-d, --cache_dir <string>` : Cache directory for VitisAI EP (default: empty)
|
|
- `-x, --xclbin <string>` : XCLBIN filename for NPU (default: auto-selected)
|
|
- `-h, --help` : Show help message
|
|
|
|
### Example Usage
|
|
|
|
```cmd
|
|
esrgan_inference.exe -m esrgan_wint8_auint8_bint8_pot_npu_nhwc.onnx -c vitisai_config.json -d . -k esrgan_cache -i ..\..\input_image.png -o output_image.png
|
|
```
|
|
|
|
This example demonstrates:
|
|
- Using model and config files from the build directory (automatically copied)
|
|
- Relative paths for input images (from project root)
|
|
- Store the model cache in a folder in the current directory named `esrgan_cache`
|
|
|
|
**Note**: The `esrgan_cache/` directory is created automatically during the first NPU inference run if the `enable_cache_file_io_in_mem` is set to `0` in the `vai_ep_options`
|
|
If this option isn't set, the cache will be stored in memory only and the model will be recompiled every time the application is run, which can be slow.
|
|
|
|
The `esrgan_cache` directory contains compiled model artifacts that significantly speed up subsequent runs. You can point to this existing cache after it has been created using the
|
|
`-d` and `-k` parameters.
|
|
|
|
|