FastDeploy 模型转换,案例测试
其他模型转paddle,PaddlePaddle/X2Paddle: Deep learning model converter for PaddlePaddle. (『飞桨』深度学习模型转换工具) (github.com)
- 方式一,api转换,X2Paddle/x2paddle_api.md at develop · PaddlePaddle/X2Paddle (github.com)
- 方式二,可视化工具VisualDL,网络结构 - VisualDL (paddlepaddle.org.cn)
paddle转onnx,PaddlePaddle/Paddle2ONNX: ONNX Model Exporter for PaddlePaddle (github.com)
- 方式同上
【案例测试-win10】
1、OCR测试
模型下载 PaddleOCR/deploy/fastdeploy/cpu-gpu at dygraph · PaddlePaddle/PaddleOCR (github.com)
案例位置 C:\aa\FastDeploy-release-1.0.5\examples\vision\ocr\PP-OCR\cpu-gpu\cpp\infer.cc
2、YOLOv8测试
模型下载 PaddleYOLO/configs/yolov8 at release/2.5 · PaddlePaddle/PaddleYOLO (github.com)
2.1 案例位置 C:\aa\FastDeploy-release-1.0.5\examples\vision\detection\paddledetection\cpp\infer_yolov8.cc
2.2 案例位置 C:\aa\FastDeploy-release-1.0.5\examples\vision\detection\yolov8\cpp\infer.cc
对官方代码略微修改,方便落地:
#include "fastdeploy/vision.h" const std::string& model_file = "yolov8s.onnx"; fastdeploy::vision::detection::YOLOv8 model = fastdeploy::vision::detection::YOLOv8(model_file);//官方没有默认构造,只能这样创建对象了 bool ModelInit(const std::string& model_file, const int i) { auto option = fastdeploy::RuntimeOption(); if (i==0) { option.UseCpu(); //默认 } else if(i==1) { option.UseGpu(); } else if (i == 2) { option.UseGpu(); option.UseTrtBackend(); option.SetTrtInputShape("images", { 1, 3, 640, 640 }); } model = fastdeploy::vision::detection::YOLOv8(model_file, "", option); if (!model.Initialized()) { std::cerr << "Failed to initialize." << std::endl; return false; } return true; } //预测,输出带框图、框位置信息 bool ModelInfer(const cv::Mat& image_in, cv::Mat& image_out, fastdeploy::vision::DetectionResult& res) //引用传参,不开辟内存,提高效率 { if (!model.Predict(image_in, &res)) { std::cerr << "Failed to predict." << std::endl; return false; } image_out = fastdeploy::vision::VisDetection(image_in, res); //输出带框图 return true; } int main() { if (ModelInit(model_file,0)) //0 cpu(openvino),1 gpu(onnxruntime),2 gpu(tensorrt) { const std::string& image_file = "000000014439.jpg"; auto im = cv::imread(image_file); cv::Mat image_result; bool isInfered = false; fastdeploy::vision::DetectionResult res; //预测并统计耗时 double t = (double)cv::getTickCount(); for (int i = 0; i < 50; i++) { isInfered=ModelInfer(im, image_result, res); } t = ((double)cv::getTickCount() - t) / cv::getTickFrequency(); std::cout<< "执行时间(秒): " << t << std::endl; //存图 if (isInfered) { cv::imwrite("vis_result.jpg", image_result); std::cout << "Visualized result saved in ./vis_result.jpg" << std::endl; std::cout << res.Str() << std::endl; //输出框的位置、得分、label_id } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
2022-03-30 onnxruntime、cuda、cudnn、显卡驱动
2020-03-30 Halcon丢帧
2019-03-30 GroupBox、TextBox、CheckBox、ToolStrip、RichTextBox、Timer控件
2019-03-30 WinForm文件说明
2019-03-30 ListView控件