Object Detection application for Windows on Snapdragon® with YOLO-X using ONNX runtime.
The app demonstrates how to use the QNN execution provider to accelerate the model using the Snapdragon® Neural Processing Unit (NPU).
- Snapdragon® Platform (e.g. X Elite)
- Windows 11+
- Visual Studio 22
- Download any variant of Visual Studio here
- Make sure Desktop development with C++ tools are selected during installation or installed separately later
Download the float/onnx variant of YOLO-X from AI Hub. Rename it and place it into:
<project directory>/assets/models/detection.onnx
-
Open
ObjectDetection.sln -
Setting up dependencies
-
NuGet packages
- NuGet packages should automatically restore in Visual Studio during build
- If packages are not restored automatically, try the following:
- If prompted by Visual Studio to
restoreNuGet packages- Click on
restoreto restore allNuGetpackages
- Click on
- Otherwise,
- Go to
Project -> Manage NuGet packagesin Visual studio - Install ONNX-Runtime-QNN 1.19.0
- Go to
- If prompted by Visual Studio to
-
vcpkg packages
-
Project is configured to work with vcpkg in manifest mode
-
If opencv headers are missing, vcpkg is not setup correctly.
-
Integrate vcpkg with Visual Studio:
- Go to
View -> Terminalin Visual studio - Run the following command in terminal
vcpkg integrate install
- Go to
-
-
-
Build project in Visual Studio
Visual studio project is configured with the following command arguments:
--model .\assets\models\detection.onnx --image .\assets\images\kitchen.jpgYou can simply run the app from Visual Studio to run object detection on sample image.
.\ARM64\Debug\ObjectDetection.exe --model .\assets\models\detection.onnx --image .\assets\images\kitchen.jpgYou can additionally run --help to get more information about all available options:
.\ARM64\Debug\ObjectDetection.exe --helpPlease refer to QNN EP options that can be provided as --qnn_options to the app.
- Model input resolution: 640x640
- If input image is of different shape, it's resized to 640x640
- You can override model input dimensions if model uses different spatial image dimensions
- App is built to work with post-processed outputs
- App processes output logits and produces consumable output as follows:
- Output boxes
- Output scores
- Output labels
- If you want to try out any other model than Yolo (with post-processing included in model), please update output handling accordingly.
- App processes output logits and produces consumable output as follows:
- If you get a DLL error message upon launch (for instance that
opencv_core4d.dllwas not found). Try Build -> Clean Solution and re-build. If this still happens, please go over the NuGet and vcpkg instructions again carefully. - How do I use a model with different input shape than 640x640?
- Use
--model_input_ht/--model_input_wtto model input dimensions.
- Use
- I have a model that does not have post-processing embedded into the model. Can I still use the app?
- You will have to modify the app and add the necessary post-processing to accommodate that models.
Please see the Classification app for instructions of how to set up a project with ONNXRuntime QNN Execution Provider from scratch.

