yolov8-obb模型在海思3516DV300上的高效部署与优化实践

手把手教你将YOLOv8-OBB模型部署到海思3516DV300(附完整代码移植指南) 本文详细介绍了如何将YOLOv8-OBB旋转目标检测模型部署到海思3516DV300芯片的完整流程,包括环境配置、模型转换优化、后处理适配等关键步骤。通过ONNX模型调整和海思NNIE引擎适配,实现高效嵌入式部署,为智能安防和边缘计算应用提供实用解决方案。 阅读详情

1. 从零开始:理解我们的目标与挑战

大家好,我是老张,在AI和嵌入式这块摸爬滚打了十来年,今天想和大家聊聊一个非常具体、也非常有挑战性的实战项目:把最新的YOLOv8-OBB模型,塞进海思3516DV300这颗芯片里,并且让它跑得又快又稳。你可能听说过YOLOv8做目标检测很厉害,但这个OBB版本更特别,它不仅能框出物体,还能预测物体的旋转角度,输出一个带方向的矩形框,这在无人机巡检、遥感图像分析、工业质检等场景里简直是神器。而海思3516DV300,作为安防和边缘计算领域的“老兵”,以其高性价比和成熟的工具链,依然是很多量产项目的首选。

那么,问题来了。YOLOv8-OBB是一个比较新的模型,其内部结构(比如DFL、角度预测分支)和传统的YOLOv3/v5差异很大。而海思3516DV300配套的NNIE(神经网络推理引擎)开发套件,其示例和文档往往围绕较旧的模型架构。直接把官方的PyTorch模型丢过去,大概率会碰壁:算子不支持、内存布局不匹配、后处理对不上…… 这就像你想把一台高性能游戏主机的显卡,装进一台老式迷你主机里,直接插是插不进去的,必须得动手改造接口,甚至对显卡本身做一些“瘦身”和“适配”。

我这次实践的核心目标就两个:第一,成功跑通,让模型能在3516DV300上正确推理出带角度的框;第二,追求高效,充分利用芯片的算力,让推理速度满足实时性要求(比如每秒25帧以上)。整个过程,我会带你一步步拆解,重点分享我踩过的坑和验证有效的优化技巧。无论你是刚接触海思平台的新手,还是正在为模型部署头疼的工程师,相信这篇接地气的经验分享都能给你带来实实在在的帮助。

2. 模型转换的“外科手术”:为海思定制ONNX

拿到一个训练好的YOLOv8-OBB模型(通常是.pt文件),我们的第一步是把它转换成海思NNIE能接受的格式。标准的路径是:PyTorch -> ONNX -> Caffe -> NNIE WK模型。听起来流程清晰,但每一步都可能暗藏玄机,尤其是从ONNX到Caffe这一步,是问题高发区。

2.1 剖析模型结构与海思的“禁忌”

首先,你得用Netron等工具好好看看导出的ONNX模型结构。YOLOv8-OBB的输出通常包含多个特征图,用于分类、框回归和角度预测。海思NNIE对算子支持是有明确列表的,一些看似常见的操作,比如某些特定维度的Softmax、复杂的Reshape、或者动态形状的算子,都可能不在支持范围内。

我在第一次转换时就遇到了大麻烦。模型里有一个Softmax操作,它的dim参数不是3(即不是在最后一个维度上做)。海思的Caffe转换工具对Softmax有比较严格的预期,当dim不是3时,它在生成Caffe模型时会自动插入一个Transpose操作来调整维度顺序。问题在于,这个自动插入的Transpose输出的通道顺序,可能不符合海思NNIE内部内存排列的硬性要求(通常是NCHW,但某些情况下要求NHWC或特定变换)。这会导致后续编译WK模型时失败,或者运行时结果完全错误。

我的解决方案是“主动干预”。与其让转换工具“乱动”,不如我们在导出ONNX之前,就对模型动个小手术。我修改了模型定义代码,将这个有问题的Softmax操作替换成了一个兼容性更好的组合:先通过Permute(即Transpose)将目标维度调整到最后一维,然后使用dim=3的Softmax,最后再Permute回来。这样生成的ONNX节点,在转换到Caffe时就会被识别为标准Softmax,避免了工具自动添加不兼容的变换。

2.2 优化DFL与特征图拆分,为速度奠基

另一个关键优化点是DFL(Distribution Focal Loss)模块。YOLOv8用DFL来更精细地预测边界框位置。在原始实现中,DFL可以看作一个卷积后接特定处理。如果完全按照原始结构转换,这个处理部分可能会在芯片上以低效的通用计算方式运行,拖慢整体速度。

我的策略是将计算尽量“压”进卷积层。我修改了模型,将DFL的逻辑融合进其前面的卷积层中,确保DFL的核心计算在NNIE的卷积算子内完成。这样,在芯片上执行的就是一个高效的卷积操作,而不是一串零碎的小操作。同时,为了更精细地控制输出和后续处理,我将模型最终输出的特征图在某个阶段进行了Split(拆分),分成了6个独立的输出分支。这6个分支分别对应不同尺度的特征图,方便我们在后处理时分别解析。

这里有个细节需要注意:当你修改ONNX模型,添加了Split节点后,在将其转换为Caffe模型时,必须同步修改转换配置文件(通常是.prototxt或工具对应的配置文件)。你需要明确指定这6个输出层的名字,并且如果Split操作涉及slice_point参数,也必须在配置文件中准确体现,否则转换过程会报错,提示输出层数量或维度不匹配。我把自己修改后的模型转换代码和配置文件都整理在了yolo_onnx2caffe文件夹里,如果你需要可以参考。

2.3 Caffe到WK模型的最后一步

成功转换成Caffe模型(.caffemodel和.prototxt)后,就可以使用海思提供的RuyiStudio工具进行编译,生成最终的.wk文件。这一步通常比较自动化,但你需要确保在工具中正确选择3516DV300的芯片型号和对应的NNIE版本。编译成功后,建议用工具自带的仿真功能,用一张测试图片跑一下,确认模型能正常加载和推理,输出数据的维度和你预期的(6个输出Blob)一致。这一步的验证能提前发现很多基础问题,避免把问题带到板端。

3. 后处理代码的“移植与再造”

模型在芯片上跑起来,只是成功了三分之一。更烧脑的是后处理——如何把NNIE输出的那一堆原始数据,还原成我们看得懂的、带角度的矩形框。海思SDK里通常只提供YOLOv3或YOLOv5的后处理示例,我们需要以此为基础,为YOLOv8-OBB“再造”一个。

3.1 理解NNIE的输出数据格式

首先,编译好的WK模型,其输出信息是固定的。你需要从RuyiStudio的编译报告或模型的描述文件中,找到这6个输出Blob的具体信息:每一个的维度是什么(例如 [1, 64, 80, 80]),它们分别对应什么物理意义?通常,这6个Blob是不同尺度的特征图,每个Blob的数据排列是密集的,包含了网格点上所有锚框的预测信息(类别置信度、框的4个坐标参数、角度参数等)。

你需要根据你修改后的模型结构,精确地知道每个Blob的数据布局。例如,一个Blob的通道数C可能等于 (分类数 + 4个框坐标 + 1个角度参数) * 锚框数量。这个公式需要和你训练模型时的配置完全对应,一点都不能错。

3.2 适配YOLOv8-OBB的解码函数

海思的示例代码里,SAMPLE_SVP_NNIE_YOLOV3是一个很好的起点。我们的移植工作主要在这里:

  1. 修改定义:在头文件或配置文件中,将SAMPLE_SVP_NNIE_YOLOV8_REPORT_BLOB_NUM这个宏定义的值改为6,因为我们的模型有6个输出。
  2. 实现数据提取:仿照YOLOv3的流程,写一个YOLOV8_GetResult之类的函数。这个函数需要循环处理6个输出Blob。对于每一个Blob,你需要按照其维度(H, W, C)进行三重循环遍历。
  3. 关键的解码计算:
    • 坐标解码:NNIE输出的是相对于网格点和锚框尺寸的偏移量。你需要用sigmoid(或线性变换)和特定的公式将其解码为图像上的绝对坐标(cx, cy, w, h)。这里要注意,YOLOv8的框回归方式可能和v3/v5不同,务必使用你训练模型时相同的解码公式。
    • 角度解码:这是OBB独有的。角度参数通常也是一个预测值,可能需要通过arctan2(sin, cos)或其他方式从两个输出通道计算出来,具体方法取决于你模型的角度表示方式(是弧度制还是角度制,是直接回归还是用DFL)。
    • 类别解码:对类别置信度部分应用softmax或sigmoid(取决于你是多分类还是多标签分类),得到每个类别的分数。
  4. 数据拼接:从6个不同尺度的Blob解码出来的所有候选框(包含坐标、角度、置信度、类别),需要统一添加到一个大的列表或数组中,供后续处理。

这个过程非常考验耐心和细心,一个公式写错,或者维度算错,最终结果就会牛头不对马嘴。我建议在PC上先用Python实现一个完全相同的解码函数,用模型在ONNX Runtime上的输出进行验证,确保你的解码逻辑100%正确,然后再将其“翻译”成C代码。

3.3 非极大值抑制与角度处理

得到所有候选框后,就要进行非极大值抑制。但标准NMS处理的是轴对齐的矩形框(Axis-Aligned Bounding Box, AABB),而我们现在是带角度的矩形框(Oriented Bounding Box, OBB)。这里有两种思路:

  1. 使用旋转框NMS(R-NMS):这是最准确的方法,但计算复杂度稍高。你需要找到或实现一个计算旋转框IoU的函数,然后基于此进行抑制。海思芯片的CPU性能有限,如果框数量很多,纯CPU计算R-NMS可能成为瓶颈。
  2. 使用外接矩形NMS:一种更实用的优化策略是,先计算出每个旋转框的外接水平矩形,用这个水平矩形去做标准的NMS。这样做速度很快,因为水平矩形IoU计算简单。虽然理论上可能误抑制一些角度不同但水平投影重叠的框,但在很多实际场景中(如物体大致水平或垂直),这种影响很小,却能换来显著的性能提升。我在实际项目中就采用了这种方法,在保证精度的前提下,后处理速度提升了近一倍。

解码和NMS之后,别忘了海思芯片对输出数据的一些约束。例如,某些版本的工具链要求输出框的坐标值必须是偶数(“让2整除”),可能是出于内存对齐的考虑。你需要在输出最终结果前,对坐标值做一个取整或对齐操作,否则在后续的图形绘制或传输环节可能会出错。这些细节在海思的官方示例代码中往往有体现,仔细阅读就能解决。

4. 编译、部署与性能调优实战

代码写好了,就到了真刀真枪在板子上跑的环节。这一步会遇到很多环境问题和性能问题。

4.1 交叉编译环境的搭建

在x86的Ubuntu开发机上,你需要搭建针对海思3516DV300的交叉编译工具链。海思会提供这个工具链(通常是arm-himix200-linux或类似版本)。编译你的后处理程序时,需要链接海思的NNIE库(libnnie.so)、媒体处理库等。Makefile里要正确指定头文件路径和库文件路径。

一个常见的坑是内存对齐。海思芯片对内存访问有对齐要求。在代码中,从NNIE输出Blob中读取数据时,要使用海思提供的HI_MPI_SYS_Mmap等API来映射内存,确保获取到的指针是对齐的。直接使用malloc分配的内存地址可能无法满足NNIE数据传递的要求,导致读取数据错误甚至程序崩溃。

4.2 性能瓶颈分析与优化

程序能跑起来之后,就要用工具(如top、海思的Profiler工具)查看性能。瓶颈通常出现在两个地方:NNIE推理本身和后处理。

  • NNIE推理优化:这部分能调整的空间相对较小,主要取决于你之前模型转换时的优化是否到位。确保模型没有使用太多零散的小算子,尽量用卷积、池化等核心算子。在RuyiStudio编译时,可以尝试不同的优化等级,权衡速度和精度。
  • 后处理优化:这是性能调优的主战场。
    • 算法层面:就像前面提到的,用外接矩形NMS代替旋转框NMS,是立竿见影的提速方法。
    • 循环优化:解码函数的循环层数很深。检查内层循环,消除不必要的计算和条件判断。比如,可以在循环早期就根据置信度阈值过滤掉大量负样本,避免为它们进行完整的解码计算。
    • 内存访问:确保对NNIE输出数据的访问是顺序的,避免跳跃式访问,这能更好地利用缓存。
    • 编译器优化:在交叉编译时,开启合适的优化选项,如-O2或-O3,以及针对ARM架构的优化选项(如-mcpu=cortex-a7等)。

4.3 实际运行与调试

将编译好的可执行文件和.wk模型文件通过TFTP或U盘拷贝到板子上。运行程序,你可能第一次看不到任何检测框,或者框的位置乱七八糟。别慌,这是常态。

我的调试方法是“分步验证”:

  1. 先屏蔽NMS,让程序输出所有解码后的原始框。用一幅简单的、只有一个明显物体的测试图,看看框的大概位置对不对。如果完全不对,那肯定是解码公式错了。
  2. 打印中间数据:在解码函数里,把某个特定网格点、特定锚框的所有原始输出值(十几个数字)打印出来。同时在PC上用Python加载同一个模型和同一张图片,打印对应位置的原始输出。对比这两组数字,如果完全一致,说明NNIE推理和数据传输没问题,问题一定在解码代码;如果不一致,说明问题出在模型转换或数据传递上。
  3. 角度验证:如果框的位置对了,但角度不对,就单独聚焦角度解码部分,用同样的方法打印和对比原始角度参数与计算结果。

这个过程可能需要反复多次,就像侦探破案一样,逐步缩小问题范围。当简单的测试图能正确输出后,再换更复杂的图片,开启NMS,观察最终效果。最后,在真实的业务场景视频流中测试,确保稳定性和速度达标。

整个项目做下来,我的感受是,在边缘设备上部署AI模型,技术难点往往不在算法本身,而在于工程适配和性能压榨。你需要深入理解芯片的约束、工具链的脾气,以及模型结构的每一个细节。把YOLOv8-OBB成功部署到海思3516DV300上,并且跑出实时性能,这个过程虽然充满挑战,但当你看到芯片稳定地输出一个个精准的旋转框时,那种成就感是非常实在的。希望我分享的这些具体问题和解决思路,能帮你少走些弯路。如果你在实践过程中遇到新的问题,也欢迎一起交流探讨。

海思3516DV300实战:YOLOv8-OBB模型转换与部署全流程(附避坑指南) 本文详细介绍了在海思3516DV300芯片上部署YOLOv8-OBB模型的全流程,包括模型转换、代码移植和后处理优化。重点解析了ONNX到Caffe模型转换的关键步骤,提供了实用的避坑指南和性能优化技巧,帮助开发者高效实现旋转框目标检测在边缘设备上的应用。 阅读详情

相关推荐

YOLOv8-OBB模型在海思3516DV300芯片上的完整部署指南

本文详细介绍了将YOLOv8-OBB旋转目标检测模型部署到海思3516DV300芯片的全过程。主要内容包括:YOLOv8-OBB的技术原理与优势分析;开发环境配置要求(Python 3.8、PyTorch 1.8等);数据集准备与标注格式转换技巧;模型训练与优化的关键参数设置;从PyTorch到ONNX再到Caffe的模型转换流程;以及针对海思芯片的模型量化与部署优化策略。文章提供了完整的代码示例和配置说明,为开发者解决了模型在边缘设备部署中的常见问题。

FJN110的博客 447

客户端请求总站上下游加速回应:CDN、边缘计算与全链路优化实践

客户端请求总站上下游加速,不是单一技术能解决的问题,而是DNS 调度、CDN 边缘、协议优化、多级缓存、异步并行、熔断降级、全链路观测的组合拳。落地时应遵循"先度量、再优化、后验证"的节奏,优先解决 P99 长尾,再逐步打磨细节。让请求少走路、让数据多缓存、让调用能并行、让故障快隔离。

AshleyCreek的博客 441

边缘端旋转目标检测实战:基于YOLOv8-OBB模型的海思3516DV300芯片部署全流程解析

-1, 3, C3, [512, False]] # 18 - 替换C2f为C3 (P4/16-medium)[-1, 3, C3, [1024, False]] # 21 - 替换C2f为C3 (P5/32-large)[-1, 3, C3, [256, False]] # 15 - 替换C2f为C3 (P3/8-small)[-1, 3, C3, [512, False]] # 12 - 替换C2f为C3。m: [0.75, 0.75, 0.75] # YOLOv8m模型缩放系数。

LXY_LOVE36的博客 319

AI边缘计算如何重塑工业计算机?Wi-Fi 7模组带来哪些连接升级?

随着生成式AI、机器视觉和工业机器人逐步进入工业现场,传统工业计算机正在向AI边缘计算平台转型。本文从Edge AI技术架构、CPU/GPU/NPU异构计算、工业视觉、机器人协同等方向展开分析,进一步解析Wi-Fi 7的320MHz信道带宽、4096-QAM及MLO多链路操作技术,以及其在工业计算机、AI边缘计算盒和智能工业终端中的应用价值。同时结合O2072PM、O2072PB无线模组,探讨新一代工业设备的无线连接设计方向。

Qogrisys无线连接方案商 302

实现边缘端旋转目标检测:YOLOv8-OBB模型在海思3516DV300芯片上的工程化部署实战

YOLOv8-OBB模型在海思3516DV300芯片上的部署指南 摘要:本文详细介绍了将YOLOv8-OBB旋转目标检测模型部署到海思3516DV300芯片的全流程解决方案。首先阐述了YOLOv8-OBB的技术原理及其与传统检测方法的优势对比,重点强调了其对旋转目标的精确检测能力。随后提供了完整的开发环境配置指南,包括硬件要求、软件依赖和YOLOv8的安装步骤。针对数据集准备环节,文章详细说明了YOLOv8-OBB所需的特殊标注格式以及从LabelMe到YOLO-OBB的格式转换方法。通过本文,开发者可获得

LXY_LOVE36的博客 163

嵌入式旋转框检测实战:YOLOv8-OBB在海思3516DV300上的部署指南

YOLOv8-OBB模型在海思3516DV300芯片上的部署指南 本文详细介绍了将YOLOv8-OBB目标检测模型部署到海思3516DV300芯片的完整流程。YOLOv8-OBB作为支持旋转目标检测的先进算法,在遥感图像、文本检测等领域表现优异。部署过程面临的主要挑战包括芯片特殊的硬件架构和算子支持限制。 方案涵盖以下关键步骤: 环境搭建:配置Python 3.8、PyTorch 1.8和ONNX 1.12的开发环境 数据准备:设计特定目录结构并转换标注格式至YOLO-OBB要求的8坐标点格式 模型训练优化

LXY_LOVE36的博客 119

算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错

星上边缘计算正把商业遥感与通信卫星的数据处理模式从"下传-地面处理"推向"在轨筛选-按需下传",由此引入一类新型载荷电子学问题:算力模组的功耗随任务负载剧烈波动,其管理需要独立于高速数据平面的带外管理网络,而该网络自身必须在辐射环境中保持高可信,方能执行对算力模组的监测与恢复。本文以文献综述方式,梳理星上智能载荷的体系结构、带外管理平面的功能定位与辐射容错需求,并以国科安芯ASM1042S系列抗辐射CANFD收发器(型号ASM1042S2S)为样本评估适配性。

ANSILIC的博客 341

面向嵌入式设备的旋转目标检测系统实现:基于YOLOv8-OBB与海思3516DV300的协同优化

本文详细介绍了将YOLOv8-OBB旋转目标检测模型部署到海思3516DV300芯片的完整流程。YOLOv8-OBB相比传统检测方法,通过旋转边界框(x,y,w,h,θ)实现了更精确的目标定位,特别适用于遥感图像、文本检测等场景。文章从开发环境配置、YOLOv8-OBB技术原理入手,重点阐述了数据集的标注格式转换(将LabelMe格式转换为YOLO-OBB要求的8坐标点格式)和预处理方法。同时提供了详细的模型训练、格式转换(PyTorch→ONNX→Caffe)以及在海思平台上的部署优化方案,为嵌入式设备部

LXY_LOVE36的博客 95

忘平科技|边缘计算如何以自适应解算内河航道主动防撞预警系统动态通航净高?

内河航道主动防撞预警系统将桥区雷达水位计采集的数据实时注入边缘大脑,根据汛期与枯水期的水面消长,全天候、高频动态计算桥梁下部通航孔的实际净空限界。无论是面对夏季几十米一遇的特大洪峰过境,还是冬季低水位期的安全通航,海姆达尔系统都能始终如一地将“不可触碰的激光防撞红线”精准悬停在安全高度,在多座内河特大桥梁的实际服役中,彻底终结了超高监测因水位暴涨暴落而引发的漏报与虚警困局。

2601_96546604的博客 228

YOLOv8-OBB在海思3516DV300芯片上的工程化部署:边缘端旋转目标检测实战指南

-1, 3, C3, [512, False]] # 18 - 替换C2f为C3 (P4/16-medium)[-1, 3, C3, [1024, False]] # 21 - 替换C2f为C3 (P5/32-large)[-1, 3, C3, [256, False]] # 15 - 替换C2f为C3 (P3/8-small)[-1, 3, C3, [512, False]] # 12 - 替换C2f为C3。m: [0.75, 0.75, 0.75] # YOLOv8m模型缩放系数。

m0_64661770的博客 150

how2heap 深入学习(1)

how2heap glibc 2.23学习

CoLin的pwn小屋 3180

工业级AIoT实战:基于边缘计算的加油站多模态安全预警架构设计

高危场景的报警延迟需控制在毫秒级,且不能受制于外网状态。 本地AI推理:在加油站机房部署具备NPU算力的边缘计算网关。采用轻量级目标检测模型(如YOLOv8n)对视频流抽帧分析,本地解析出“抽烟”、“未穿防静电服”等事件。 规则引擎与GPIO控制:网关内置本地规则引擎。当解析到可燃气体浓度超标(如超过25% LEL)或AI识别到违章时,不仅通过MQTT上报云端,同时直接触发本地GPIO继电器,联动防爆声光报警器、排风扇或切断非消防电源。

sxyxhwl的博客 161

【一起学UniGUI】--UniGUI的部署选项(5)

uniGUI支持Windows平台下所有主要部署选项。 1.Standalone Server (独立服务器) 最简单的部署方法是独立服务器。在这种模式下,应用程序服务器像桌面应用程序一样直接运行。它也是用于调试应用程序的模式。运行应用程序可执行文件后(它是一个EXE文件),它将最小化到托盘图标,并运行到用户手动终止为止。见下图: 一个独立的应用程序可以...

5777

边缘计算网关接入工业装备,数据接口如何设计与验证?

其中,deviceId表示设备身份,schemaVersion表示数据结构版本,timestamp用于记录数据时间,quality用于说明数据有效性。这一过程的目标并不是让所有PLC使用相同的数据地址,也不是保证一套采集程序适用于所有设备,而是在设备内部实现变化时,尽可能维持上层业务接口的稳定。较合理的设计是在设备出厂时分配稳定的身份标识,并建立与产品序列号、型号、控制程序版本和数据接口版本之间的对应关系。工业装备的数据接口通常包含两个不同层次:控制器内部的数据访问接口,以及业务系统实际使用的数据接口。

Robustel的博客 572

STM32的DMA模块及Protues仿真实验

(一)DMA简介      DMA(Direct Memory Access,直接存储器访问), 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可 供其它操作使用。      STM32F407共有两个 DMA 控制器,总共有 16 个数据流(每个控制器 8 个),每一个 DMA 控制器都用于管理 一个或多

weixin_45930204的博客 2850

Python爬虫实战:5分钟搞定Boss直聘数据抓取(附完整代理IP配置)

本文详细介绍了如何使用Python爬虫高效抓取Boss直聘的招聘数据,包括环境配置、反爬策略、数据采集与存储、数据分析等完整流程。通过实战案例,帮助开发者快速掌握招聘市场数据抓取技术,为职业决策提供数据支持。

weixin_30832143的博客 350

工业物联网实战:基于Modbus与边缘计算的工厂能耗监测系统架构设计

本地推理与报警:在车间部署边缘计算网关(搭载轻量级算力芯片)。网关在本地运行规则引擎,当检测到某条产线能耗异常飙升或水管压力骤降时,直接在本地触发告警,无需等待云端指令。 断网续传机制:网关内置SQLite本地数据库。外网断开时,采集数据暂存本地;网络恢复后,通过MQTT协议按时间戳向上层平台断点续传,确保能耗数据的连续性。

sxyxhwl的博客 207

XGBoost的简单安装及入门使用

XGBoost安装及简单入门 XGBoost支持多种操作系统,如Windows, Linux, MacOS等,并支持多种语言版本,如Python, R, Scale, Java等。XGBoost的安装方式一般有两种,一种是直接通过pip安装(适合用于Python),另外一种是通过源码编译安装 1、通过pip安装 通过pip安装Python包既简单又方便,只需执行如下的命令: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xgboost 使用

qq_41513230的博客 3万+

多台设备接入边缘计算网关,采集周期和负载怎么计算?

本文通过假设性的混合设备采集场景,分别分析变量更新量、协议请求量、RS485轮询时间和CPU处理负载的计算方法,并讨论如何通过实际测试判断系统容量边界。同样是10台PLC,如果另一项目需要每秒读取一次,而且每台PLC的请求数量更多,那么实际通信任务就可能明显增加。因此,在进行容量规划时,至少需要明确每台设备的实际协议请求数、控制器响应时间及采集软件的任务组织方式。答:需要统计每台PLC的变量规模、实际协议请求次数和设备响应情况,再结合采集软件的执行方式判断,不能仅根据20台设备数量推算。

Robustel的博客 379

批处理脚本手动双击可以执行,但计划任务中执行失败

问题现象: 使用批处理脚本从linux端(samba server) 备份一些数据,设置计划任务每天凌晨两点定时备份。 1)、windows系统中映射共享文件夹为S:盘,需要输入共享用户名和密码 2)、脚本中使用xcopy命令复制共享目录中的文件到windows本地目录中。 脚本如下: set Name=%date:~0,4%%date:~5,2%%date:~8,2% chcp 65001 REM chcp防止中文乱码 mkdir "E:\脚本备份\bakscripts%Name%" xco

独孤清扬玩DB 4314

基于深度学习的农作物病虫害检测识别系统:YOLOv8 + UI界面 + 数据集

该系统的目标是使用YOLOv8模型自动检测农作物的病虫害,并通过UI界面提供实时反馈。用户可以通过上传图像,系统会输出图像中是否存在病虫害以及具体种类。数据集准备与处理:收集并准备包含农作物病虫害图像的数据集,并进行标注和数据增强。YOLOv8模型训练:使用YOLOv8训练农作物病虫害检测模型。UI界面设计与开发:开发一个用户友好的界面,支持上传图像并展示检测结果。系统测试与优化:评估模型的准确性、实时性,并对系统进行优化。

YOLO 884

包装设备换型后,边缘计算网关如何设计数据映射与配置版本?

对于有明确追溯要求的项目,可以将新配置先加载到待生效状态,完成基础字段检查后,再根据经过确认的换型状态执行切换,并记录旧配置结束与新配置开始的时间。比如,设备身份、产品标识、运行状态、生产计数和报警信息可以采用统一字段,但不同规格中的原始变量来源、数量单位及状态解释规则,需要根据实际设备设计确定。具体是否需要停止采集任务,应取决于软件架构。PLC及原有控制系统继续负责设备工艺控制,边缘应用依据实际软件设计完成数据采集、映射、规则关联及必要的记录处理,MES等业务系统负责进一步的生产计划、工单及业务统计。

Robustel的博客 555

Spark中Application、Job、Stage和Task区别详解

在Spark中,有一些关键的概念,如Application、Job、Stage和Task,它们描述了Spark作业的不同层次和组成部分。下面我将详细介绍每个概念,并通过示例说明它们之间的区别。

优快云 精品推荐 906

智慧农业IoT实战:基于边缘计算的野外水产养殖高可用预警架构设计

该架构的核心在于算力下沉与本地闭环。通过边缘计算技术,系统在极端断网环境下依然能保障核心的“增氧保命”功能,是野外物联网工程落地的可靠范式。

sxyxhwl的博客 128

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

架构师视角:如何构建高可用的多场景AIoT系统?——基于边缘计算与算法调度的实践

场景化AIoT系统的核心壁垒,在于协议兼容的广度与边缘算力调度的灵活性。通过微服务与边缘计算架构,开发者能够以极低的边际成本,将技术底座复制到千差万别的业务场景中。

sxyxhwl的博客 217

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: FPGA专题-DDS相位累加器实现任意频率信号生成
下一篇: UE4逆向实战:手把手教你用CE定位GName和DumpName(4.23以下版本适用)
vim8coder
博客等级 码龄1天 0粉丝 1693原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值