news 2026/2/22 14:41:30

Yolov5 v6.2实例分割在Labview工业应用中的惊艳表现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Yolov5 v6.2实例分割在Labview工业应用中的惊艳表现

yolov5v6.2 实例分割 Labview工业应用,封装dll后labview调用,支持openvino dnn onnxruntime和tensorrt四种方式推理,500万像素图像:cpu下openvino推理只要85ms、GPU下tensorrt推理只要25ms,最强实例分割模型。

在工业视觉领域,精准且高效的目标检测与分割一直是追求的目标。今天咱们就来聊聊Yolov5 v6.2实例分割在Labview工业应用中的精彩实践,而且还支持OpenVINO、DNN、ONNXRuntime和TensorRT四种推理方式,简直不要太强大。

Yolov5 v6.2的实力

Yolov5本身就是目标检测领域的明星模型,v6.2版本在性能上更是有了进一步提升。它能够在各种复杂场景下准确识别和分割目标物体,对于工业应用中常见的500万像素图像,处理起来游刃有余。就比如在一些生产线上对零部件的检测,无论是形状、尺寸还是表面缺陷,Yolov5 v6.2实例分割都能清晰地分辨出来。

封装DLL与Labview调用

为了能在Labview环境中方便地使用Yolov5 v6.2,我们需要将其封装成DLL。这一步其实就像是给一个功能强大的工具做了一个标准化的接口,让Labview这个平台能够轻松调用。

下面简单说下大概的封装思路(这里以C++为例,实际操作会更复杂些):

// 假设这里有已经训练好的Yolov5模型相关代码 #include <iostream> // 引入相关的深度学习库头文件,例如OpenCV用于图像处理 #include <opencv2/opencv.hpp> // 定义导出函数,Labview将通过这个函数调用Yolov5的推理功能 extern "C" __declspec(dllexport) void yolov5_inference(cv::Mat& input_image, std::vector<DetectedObject>& results) { // 这里加载Yolov5模型,假设模型文件路径已知 // 实际中需要根据模型格式和使用的推理框架来正确加载 // 例如如果是ONNX模型结合ONNXRuntime加载方式类似这样 Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "Yolov5_Env"); Ort::SessionOptions session_options; Ort::Session session(env, "yolov5.onnx", session_options); // 获取输入输出节点信息等操作 // 对输入图像进行预处理,这是很关键的一步,要符合模型输入要求 cv::Mat preprocessed_image = preprocess(input_image); // 进行推理 Ort::Value input_tensor = create_input_tensor(env, preprocessed_image); std::vector<Ort::Value> output_tensors; session.Run(Ort::RunOptions{ nullptr }, input_node_names.data(), &input_tensor, 1, output_node_names.data(), output_tensors.size(), output_tensors.data()); // 对推理结果进行后处理,得到检测到的物体信息,填充到results中 postprocess(output_tensors, results); }

这段代码简单展示了一个导出函数yolov5_inference,它接收一个输入图像并输出检测结果。这里面涉及到模型加载、图像预处理、推理以及结果后处理等关键步骤。当然,实际工程中还需要处理更多的细节,比如错误处理、内存管理等。

在Labview中调用这个封装好的DLL也不难,通过Labview的“调用库函数节点”,设置好相应的参数,就能顺利调用Yolov5的推理功能,实现对图像的实例分割。

四种推理方式的魅力

OpenVINO推理

OpenVINO是英特尔推出的一个强大的推理框架,在CPU上表现出色。对于500万像素图像,OpenVINO推理只要85ms。这得益于OpenVINO对英特尔CPU指令集的优化。它能够高效地利用CPU的多核性能,对模型计算进行加速。在代码层面,使用OpenVINO加载模型和推理的过程如下(简化示例):

// 引入OpenVINO相关头文件 #include <inference_engine.hpp> // 使用OpenVINO进行推理 void openvino_inference(cv::Mat& input_image, std::vector<DetectedObject>& results) { // 创建Core对象 InferenceEngine::Core ie; // 读取模型,这里假设模型文件路径已知 auto network = ie.ReadNetwork("yolov5.xml"); // 设置输入输出信息等操作 // 加载模型到设备(这里是CPU) auto executable_network = ie.LoadNetwork(network, "CPU"); // 创建推理请求 auto infer_request = executable_network.CreateInferRequest(); // 图像预处理,转换为OpenVINO要求的格式 InferenceEngine::Blob::Ptr input = InferenceEngine::make_shared_blob<InferenceEngine::PrecisionTrait<InferenceEngine::Precision::FP32>::value_type>(input_dims); input->allocate(); InferenceEngine::MemoryBlob::CPtr minput = InferenceEngine::as<InferenceEngine::MemoryBlob>(input); if (!minput) { throw std::logic_error("We expect input to be inherited from MemoryBlob"); } auto minputHolder = minput->wmap(); preprocess(input_image, minputHolder); // 设置输入数据 infer_request.SetBlob(input_name, input); // 进行推理 infer_request.Infer(); // 获取输出结果并后处理,填充到results中 InferenceEngine::Blob::Ptr output = infer_request.GetBlob(output_name); auto outputHolder = output->rmap(); postprocess(outputHolder, results); }

从代码中可以看到,OpenVINO通过Core对象来管理模型的加载和推理,整个流程比较清晰,而且对CPU的优化效果显著。

TensorRT推理

TensorRT则是NVIDIA推出的针对GPU的高性能推理优化引擎。在GPU环境下,TensorRT对500万像素图像的推理只要25ms,速度惊人。TensorRT会对模型进行优化,比如层融合、量化等操作,减少计算量和内存占用。下面是使用TensorRT推理的简单代码结构(实际更复杂,且需要NVIDIA相关环境支持):

// 引入TensorRT相关头文件 #include "NvInfer.h" #include "NvOnnxParser.h" // 使用TensorRT进行推理 void tensorrt_inference(cv::Mat& input_image, std::vector<DetectedObject>& results) { // 创建TensorRT相关对象,如Logger、Builder等 Logger gLogger; auto builder = nvinfer1::createInferBuilder(gLogger); auto network = builder->createNetworkV2(1U << static_cast<uint32_t>(NetworkDefinitionCreationFlag::kEXPLICIT_BATCH)); auto parser = nvonnxparser::createParser(*network, gLogger); // 解析ONNX模型 parser->parseFromFile("yolov5.onnx", static_cast<int>(ILogger::Severity::kWARNING)); // 设置Builder相关参数,如最大批处理大小、最大工作空间等 builder->setMaxBatchSize(1); builder->setMaxWorkspaceSize(1 << 30); // 创建推理引擎 auto engine = builder->buildEngineWithConfig(*network, config); auto context = engine->createExecutionContext(); // 图像预处理,转换为TensorRT要求的格式 float* inputBuffer = preprocess(input_image); // 设置输入输出缓冲区等操作 void* buffers[2]; buffers[0] = inputBuffer; buffers[1] = outputBuffer; // 进行推理 context->enqueueV2(buffers, stream, nullptr); // 对输出结果进行后处理,填充到results中 postprocess(outputBuffer, results); // 释放相关资源 parser->destroy(); network->destroy(); engine->destroy(); context->destroy(); }

TensorRT的代码流程围绕着模型解析、引擎创建、推理执行等核心步骤,充分发挥了GPU的并行计算能力,实现了超快速的推理。

至于DNN和ONNXRuntime,它们也各有优势。DNN是OpenCV中集成的深度学习模块,使用方便,能利用OpenCV的图像处理优势。ONNXRuntime则是一个跨平台的推理框架,支持多种硬件和模型格式,通用性很强。

Yolov5 v6.2实例分割结合这四种推理方式,在Labview工业应用中展现出了超强的实力,无论是对实时性要求极高的生产流水线,还是对精度有严格要求的质量检测环节,都能提供可靠的解决方案,堪称最强实例分割模型在工业领域的完美应用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 10:30:49

LC.846 | 一手顺子 | 有序集合| map计数

输入&#xff1a; 整数数组 hand 表示手里的牌面值整数 groupSize 表示每组顺子的长度 要求&#xff1a; 把所有牌分成若干组每组必须是 groupSize 张连续牌能分完返回 true&#xff0c;否则 false 输出&#xff1a; bool思路&#xff1a; 这题的关键不是“怎么凑一组顺子”&am…

作者头像 李华
网站建设 2026/2/8 9:06:22

SSH免密码登录配置:提升PyTorch镜像操作效率

SSH免密码登录配置&#xff1a;提升PyTorch镜像操作效率 在现代深度学习开发中&#xff0c;一个常见的场景是&#xff1a;你正坐在本地工作站前&#xff0c;准备调试一段训练脚本。远程服务器上的容器已经跑起来了&#xff0c;GPU 也已就绪&#xff0c;但每次 ssh 连接、每次 s…

作者头像 李华
网站建设 2026/2/19 10:46:51

Git rebase vs merge:PyTorch项目协作规范建议

Git rebase vs merge&#xff1a;PyTorch项目协作规范建议 在深度学习项目的实际开发中&#xff0c;一个看似微不足道的 Git 操作选择——是用 merge 还是 rebase&#xff0c;往往会在几个月后成为团队回溯 bug 时的“灾难源头”。尤其当多个研究员同时在 PyTorch 项目上迭代模…

作者头像 李华
网站建设 2026/2/5 5:53:16

GitHub Issue模板设计:收集用户关于镜像的反馈

GitHub Issue模板设计&#xff1a;收集用户关于镜像的反馈 在深度学习项目开发中&#xff0c;一个常见的痛点是环境配置——明明在本地跑得好好的模型&#xff0c;换到服务器上却“水土不服”。PyTorch 与 CUDA 的版本兼容性问题、驱动缺失、依赖库冲突……这些问题让不少开发者…

作者头像 李华
网站建设 2026/2/19 4:07:39

《机器学习SVM从零到精通:图解最优超平面与软间隔实战》

文章目录 SVM一.SVM是什么&#xff1f;二.怎么学习SVM&#xff1f;三.为什么学习SVM&#xff1f;四.深入理解SVMdata -> 数据classifier -> 分类器optimization -> 最优化kernelling -> 核函数hyperplane -> 超平面 如何选取一个最佳的超平面Small Margin&#…

作者头像 李华