nndeploy是一款最新上线的支持多平台、简单易用、高性能的机器学习部署框架,一套实现可在多端(云、边、端)完成模型的高性能部署。
作为一个多平台模型部署工具,我们的框架最大的宗旨就是简单贴心(^‹^),目前nndeploy已完成TensorRT、OpenVINO、ONNXRuntime、MNN、TNN、NCNN六个业界知名的推理框架的继承,后续会继续接入tf-lite、paddle-lite、coreML、TVM、AITemplate,在我们的框架下可使用一套代码轻松切换不同的推理后端进行推理,且不用担心部署框架对推理框架的抽象而带来的性能损失。
如果您需要部署自己的模型,目前nndeploy可帮助您在一个文件(大概只要200行代码)之内完成多端部署,提供了一些的前后处理和推理模板可供选择帮助您简化流程;如果只需使用已有主流模型进行自己的推理,目前nndeploy已完成YOLO系列等多个开源模型的部署,可供直接使用,目前我们还在积极部署其它开源模型(如果您或团队有需要部署的开源模型或者其他部署相关的问题,欢迎随时来和我们探讨(^-^))
nndeploy具有如下优势特性:
支持的平台和推理框架如下表所示
| OS/Inference | Linux | Windows | Android | MacOS | iOS | 开发人员 | 备注 |
|---|---|---|---|---|---|---|---|
| TensorRT | yes | no | no | no | no | Always | |
| OpenVINO | yes | yes | no | no | no | Always | |
| ONNXRuntime | yes | yes | no | no | no | Always | |
| MNN | yes | yes | yes | no | no | Always | |
| TNN | yes | yes | yes | no | no | 02200059Z | |
| ncnn | no | no | yes | no | no | Always |
注: yes:完成在该平台的验证,no:目前正在验证中
| 算法 | Inference | 开发人员 | 备注 |
|---|---|---|---|
| YOLOV5 | TensorRt/OpenVINO/ONNXRuntime/MNN | 02200059Z、Always | |
| YOLOV6 | TensorRt/OpenVINO/ONNXRuntime | 02200059Z、Always | |
| YOLOV8 | TensorRt/OpenVINO/ONNXRuntime/MNN | 02200059Z、Always |
- 通过切换推理配置,一套代码可在多端部署,算法的使用接口简单易用
- 新增算法简单,将AI算法部署抽象为有向无环图Pipeline,前处理为一个任务Task,推理也为一个任务Task,后处理也为一个任务Task,也可以将多个Pipeline组合成一个新的Pipeline
- 通用的推理模板和前后处理模板
- 可配置推理框架所有参数,不会因为对推理框架的抽象而带来性能损失
- 可直接操作理框架内部分配的输入输出,实现前后处理的零拷贝,目前正在不断完善不同格式的Tensor的零拷贝
- 线程池正在开发完善中,可实现多任务流水线并行
- 一组高性能的算子正在开发中,完成后将加速你模型前后处理速度
- 在根目录创建
build目录,将cmake/config.cmake复制到该目录mkdir build cp cmake/config.cmake build cd build - 编辑
build/config.cmake来定制编译选项- 将
set(ENABLE_NNDEPLOY_OPENCV OFF)改为set(ENABLE_NNDEPLOY_OPENCV PATH/linux/OpenCV),nndeploy会启用并链接OpenCV,如果你想启用并链接的其他第三方库,也是做同样的处理 - 将
set(ENABLE_NNDEPLOY_DEVICE_CPU OFF)改为set(ENABLE_NNDEPLOY_DEVICE_CPU ON),nndeploy会启用CPU设备。如果你想启用其他设备(ARM、X86、CUDA …),也是做同样的处理 - 将
set(ENABLE_NNDEPLOY_INFERENCE_ONNXRUNTIME OFF)改为set(ENABLE_NNDEPLOY_INFERENCE_ONNXRUNTIME "PATH/linux/onnxruntime-linux-x64-1.15.1"),nndeploy会启用并链接推理后端ONNXRuntime。如果你想启用并链接其他推理后端(OpenVINO、TensorRT、TNN …),也是做同样的处理 启用并链接第三方库有两种选择- 开关
ON- 当你安装了该库,并且可以通过find_package找到该库,可以采用该方式,例如CUDA、CUDNN、OpenCV、TenosrRT - 路径
PATH- 头文件以及库的根路径,其形式必须为- 头文件:
PATH/include - 库:
PATH/lib - windows dll:
PATH/bin
- 头文件:
- 开关
- 将
- 开始
make nndeploy库cmake .. make -j4 - 安装,将nndeploy相关库可执行文件、第三方库安装至
build/install/libmake install
已验证模型、第三方库、测试数据放在HuggingFace上,如果您有需要可以去下载,下载链接。但强烈建议您自己去管理自己的模型仓库、第三方库、测试数据。
- 第三方库编译文档以及官方下载链接
| 第三方库 | 主版本 | 编译文档 | 官方库下载链接 | 备注 |
|---|---|---|---|---|
| opencv | 4.8.0 | 链接 | 链接 | |
| TensorRT | 8.6.0.12 | 链接 | 链接 | 支持TensorRT 7、支持jetson-orin-nano |
| OpenVINO | 2023.0.1 | 链接 | 链接 | |
| ONNXRuntime | v1.15.1 | 链接 | 链接 | |
| MNN | 2.6.2 | 链接 | 链接 | |
| TNN | v0.3.0 | 链接 | 链接 | |
| ncnn | v0.3.0 | 链接 | 链接 |
- 补充说明
- 我使用第三方库的上述版本,通常使用其他版本的也没有问题
- TensorRT
- Windows链接
- 安装前请确保 显卡驱动、cuda、cudnn均已安装且版本一致
- Linux下需安装opencv
- sudo apt install libopencv-dev
- 参考链接
- 下载模型,解压
wget https://huggingface.co/alwaysssss/nndeploy/resolve/main/model_zoo/detect/yolo/yolov5s.onnx
- 下载第三方库,ubuntu22.04,windows, android。 解压
# ubuntu22.04_x64 wget https://huggingface.co/alwaysssss/nndeploy/resolve/main/third_party/ubuntu22.04_x64.tar # windows wget https://huggingface.co/alwaysssss/nndeploy/blob/main/third_party/windows_x64.7z # android wget https://huggingface.co/alwaysssss/nndeploy/resolve/main/third_party/android.tar
- 下载测试数据
wget https://huggingface.co/alwaysssss/nndeploy/resolve/main/test_data/detect/sample.jpg
- 在根目录创建
build目录,将cmake/config_demo.cmake复制到该目录,修改名称为config.cmakemkdir build cp cmake/config.cmake build mv config_yolov5s.cmake config.cmake cd build - 编辑
build/config.cmake来定制编译选项 - 将所有第三方库的路径改为您的路径,例如set(ENABLE_NNDEPLOY_INFERENCE_ONNXRUNTIME "PATH/third_party/ubuntu22.04_x64/onnxruntime-linux-x64-1.15.1")改为set(ENABLE_NNDEPLOY_INFERENCE_ONNXRUNTIME "PATH/third_party/ubuntu22.04_x64/onnxruntime-linux-x64-1.15.1")。
PATH为您下载第三方库后的解压路径 - 开始
make nndeploy库cmake .. make -j4 - 安装,将nndeploy相关库可执行文件、第三方库安装至
build/install/libmake install
cd PATH/nndeploy/build/install/lib
export LD_LIBRARY_PATH=PATH/nndeploy/build/install/lib:$LD_LIBRARY_PATH
// onnxruntime 推理
./demo_nndeploy_detect --name NNDEPLOY_YOLOV5 --inference_type kInferenceTypeOnnxRuntime --device_type kDeviceTypeCodeX86:0 --model_type kModelTypeOnnx --is_path --model_value PATH/model_zoo/detect/yolo/yolov5s.onnx --input_type kInputTypeImage --input_path PATH/test_data/detect/sample.jpg --output_path PATH/temp/sample_output.jpg
// openvino 推理
./demo_nndeploy_detect --name NNDEPLOY_YOLOV5 --inference_type kInferenceTypeOpenVino --device_type kDeviceTypeCodeX86:0 --model_type kModelTypeOnnx --is_path --model_value PATH/model_zoo/detect/yolo/yolov5s.onnx --input_type kInputTypeImage --input_path PATH/test_data/detect/sample.jpg --output_path PATH/temp/sample_output.jpg
// tensorrt 推理
./demo_nndeploy_detect --name NNDEPLOY_YOLOV5 --inference_type kInferenceTypeTensorRt --device_type kDeviceTypeCodeCuda:0 --model_type kModelTypeOnnx --is_path --model_value PATH/model_zoo/detect/yolo/yolov5s.onnx --input_type kInputTypeImage --input_path PATH/test_data/detect/sample.jpg --output_path PATH/temp/sample_output.jpg
// tensorrt 推理
./demo_nndeploy_detect --name NNDEPLOY_YOLOV5 --inference_type kInferenceTypeMnn --device_type kDeviceTypeCodeX86:0 --model_type kModelTypeMnn --is_path --model_value PATH/model_zoo/detect/yolo/yolov5s.onnx.mnn --input_type kInputTypeImage --input_path PATH/test_data/detect/sample.jpg --output_path PATH/temp/sample_output.jpg注:请将上述PATH更换为自己对应的目录
cd PATH/nndeploy/build/install/bin
export LD_LIBRARY_PATH=PATH/nndeploy/build/install/bin:$LD_LIBRARY_PATH
// onnxruntime 推理
./demo_nndeploy_detect --name NNDEPLOY_YOLOV5 --inference_type kInferenceTypeOnnxRuntime --device_type kDeviceTypeCodeX86:0 --model_type kModelTypeOnnx --is_path --model_value PATH/model_zoo/detect/yolo/yolov5s.onnx --input_type kInputTypeImage --input_path PATH/test_data/detect/sample.jpg --output_path PATH/temp/sample_output.jpg
// openvino 推理
./demo_nndeploy_detect --name NNDEPLOY_YOLOV5 --inference_type kInferenceTypeOpenVino --device_type kDeviceTypeCodeX86:0 --model_type kModelTypeOnnx --is_path --model_value PATH/model_zoo/detect/yolo/yolov5s.onnx --input_type kInputTypeImage --input_path PATH/test_data/detect/sample.jpg --output_path PATH/temp/sample_output.jpg
// tensorrt 推理
./demo_nndeploy_detect --name NNDEPLOY_YOLOV5 --inference_type kInferenceTypeTensorRt --device_type kDeviceTypeCodeCuda:0 --model_type kModelTypeOnnx --is_path --model_value PATH/model_zoo/detect/yolo/yolov5s.onnx --input_type kInputTypeImage --input_path PATH/test_data/detect/sample.jpg --output_path PATH/temp/sample_output.jpg
// MNN 推理
./demo_nndeploy_detect --name NNDEPLOY_YOLOV5 --inference_type kInferenceTypeMnn --device_type kDeviceTypeCodeX86:0 --model_type kModelTypeMnn --is_path --model_value PATH/model_zoo/detect/yolo/yolov5s.onnx.mnn --input_type kInputTypeImage --input_path PATH/test_data/detect/sample.jpg --output_path PATH/temp/sample_output.jpg注:请将上述PATH更换为自己对应的目录
- 欢迎大家参与,一起打造最简单易用、高性能的机器学习部署框架
- 微信:titian5566,备注:nndeploy