当前位置: 首页 > news >正文

YOLOv8 优化:基于 Damo-YOLO 与 DyHead 检测头融合的创新研究

文章目录

    • YOLOv8 的背景与发展
    • Damo-YOLO 的优势与特点
    • DyHead 检测头的创新之处
    • 融合 Damo-YOLO 与 DyHead 检测头的思路
    • 融合后的模型架构
    • 融合模型的代码实现
      • 导入必要的库
      • 定义 Damo-YOLO 的主干网络
      • 定义特征金字塔网络(FPN)
      • 定义 DyHead 检测头
      • 定义融合后的 YOLOv8 模型
    • 融合模型的训练与优化
    • 实验结果与分析
    • 总结与展望

YOLOv8 的背景与发展

YOLO(You Only Look Once)系列目标检测算法一直以来在计算机视觉领域备受关注。从最初的 YOLO 到如今的 YOLOv8,每个版本都在不断地优化和创新。YOLOv8 在继承了前几代的优点基础上,进一步提升了检测速度和精度,成为目前目标检测任务中的热门选择。它采用了更高效的网络结构、改进的训练策略以及优化的损失函数等技术手段,使其在各种数据集上都取得了出色的表现。

Damo-YOLO 的优势与特点

Damo-YOLO 是一种新型的目标检测框架,具有独特的优势。其采用了模块化的设计理念,将不同功能的模块进行组合,从而实现高效的检测任务。Damo-YOLO 在模型结构上进行了优化,通过深度可分离卷积、特征金字塔网络等技术,提高了模型的计算效率和特征提取能力。此外,Damo-YOLO 还在训练过程中引入了一些先进的技巧,如混合精度训练、渐进式训练等,使得模型能够更快地收敛并获得更好的性能。Damo-YOLO 在保持较高检测精度的同时,能够显著降低模型的计算复杂度和内存占用,使其更适合在资源受限的设备上运行。

DyHead 检测头的创新之处

DyHead(Dynamic Head)检测头是一种具有创新性的检测头结构。与传统的固定参数检测头不同,DyHead 能够根据不同的输入特征动态地调整其参数和结构,从而更好地适应不同的检测任务和场景。DyHead 通过引入动态卷积、注意力机制等技术,使得检测头能够自适应地关注图像中的关键区域和特征,提高检测的准确性和鲁棒性。DyHead 还能够与多种主干网络和检测框架进行结合,进一步提升整个检测系统的性能。

融合 Damo-YOLO 与 DyHead 检测头的思路

将 Damo-YOLO 与 DyHead 检测头进行融合,旨在充分发挥两者的优势,实现更高效、更准确的目标检测。具体思路如下:

  • 特征提取与融合 :首先利用 Damo-YOLO 的主干网络提取图像的多尺度特征,然后通过特征金字塔网络对这些特征进行融合和增强,为后续的检测任务提供更丰富的特征信息。
  • 动态检测头设计 :在检测头部分,采用 DyHead 结构替代传统的固定参数检测头。根据提取到的特征动态地调整检测头的参数和结构,使得检测头能够更好地适应不同目标的形状、大小和语义信息。
  • 联合训练与优化 :将融合后的模型进行整体的训练和优化,通过设计合理的损失函数和训练策略,使模型在学习过程中能够充分利用 Damo-YOLO 和 DyHead 的优势,实现两者之间的协同作用。

融合后的模型架构

以下是融合 Damo-YOLO 与 DyHead 检测头后的模型架构示意图:

输入图像
|
├── 主干网络 (Damo-YOLO 的主干部分)
│   ├── 特征提取模块 1
│   ├── 特征提取模块 2
│   └── 特征提取模块 3
|
├── 特征金字塔网络 (FPN)
│   ├── 特征融合与增强模块 1
│   ├── 特征融合与增强模块 2
│   └── 特征融合与增强模块 3
|
├── DyHead 检测头
│   ├── 动态卷积模块
│   ├── 注意力机制模块
│   └── 检测输出模块
|
输出 (目标检测结果:类别、位置、置信度)

融合模型的代码实现

以下是融合 Damo-YOLO 与 DyHead 检测头的 Python 代码实现示例:

导入必要的库

import torch
import torch.nn as nn
import torch.nn.functional as F

定义 Damo-YOLO 的主干网络

class DamoYOLO_Backbone(nn.Module):def __init__(self):super(DamoYOLO_Backbone, self).__init__()# 特征提取模块 1self.feature1 = nn.Sequential(nn.Conv2d(3, 32, kernel_size=3, stride=2, padding=1),nn.BatchNorm2d(32),nn.ReLU(),nn.Conv2d(32, 64, kernel_size=3, stride=2, padding=1),nn.BatchNorm2d(64),nn.ReLU())# 特征提取模块 2self.feature2 = nn.Sequential(nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1),nn.BatchNorm2d(128),nn.ReLU(),nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1),nn.BatchNorm2d(256),nn.ReLU())# 特征提取模块 3self.feature3 = nn.Sequential(nn.Conv2d(256, 512, kernel_size=3, stride=2, padding=1),nn.BatchNorm2d(512),nn.ReLU(),nn.Conv2d(512, 1024, kernel_size=3, stride=2, padding=1),nn.BatchNorm2d(1024),nn.ReLU())def forward(self, x):f1 = self.feature1(x)f2 = self.feature2(f1)f3 = self.feature3(f2)return [f1, f2, f3]

定义特征金字塔网络(FPN)

class FPN(nn.Module):def __init__(self, in_channels_list, out_channels):super(FPN, self).__init__()self.lateral_convs = nn.ModuleList()self.fpn_convs = nn.ModuleList()for in_channels in in_channels_list[::-1]:self.lateral_convs.append(nn.Conv2d(in_channels, out_channels, kernel_size=1))self.fpn_convs.append(nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1))def forward(self, features):# 自顶向下构建特征金字塔x = features[-1]for i in range(len(features) - 2, -1, -1):x = self.lateral_convs[i](x)以下是完整的代码示例:```pythonupsampled = F.interpolate(x, scale_factor=2, mode='nearest')x = features[i] + upsampled# 构建特征金字塔outputs = []for i in range(len(features)):lateral = self.lateral_convs[i](features[i])fpn = self.fpn_convs[i](lateral)outputs.append(fpn)return outputs

定义 DyHead 检测头

class DyHead(nn.Module):def __init__(self, in_channels, out_channels):super(DyHead, self).__init__()# 动态卷积模块self.dynamic_conv = nn.Sequential(nn.Conv2d(in_channels, in_channels, kernel_size=3, padding=1, groups=in_channels),nn.BatchNorm2d(in_channels),nn.ReLU(),nn.Conv2d(in_channels, out_channels, kernel_size=1))# 注意力机制模块self.attention = nn.Sequential(nn.Conv2d(in_channels, in_channels // 2, kernel_size=1),nn.BatchNorm2d(in_channels // 2),nn.ReLU(),nn.Conv2d(in_channels // 2, out_channels, kernel_size=1),nn.Sigmoid())# 检测输出模块self.output = nn.Sequential(nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(),nn.Conv2d(out_channels, 4 + 1 + 10, kernel_size=1)  # 4 坐标偏移,1 置信度,10 类别)def forward(self, x):# 动态卷积x = self.dynamic_conv(x)# 注意力机制attention = self.attention(x)x = x * attention# 检测输出output = self.output(x)return output

定义融合后的 YOLOv8 模型

class YOLOv8_Fusion(nn.Module):def __init__(self):super(YOLOv8_Fusion, self).__init__()# Damo-YOLO 主干网络self.backbone = DamoYOLO_Backbone()# 特征金字塔网络self.fpn = FPN([64, 256, 1024], 256)# DyHead 检测头self.dyhead = DyHead(256, 256)def forward(self, x):# 提取特征features = self.backbone(x)# 特征金字塔fpn_features = self.fpn(features)# 检测输出outputs = []for feature in fpn_features:output = self.dyhead(feature)outputs.append(output)return outputs

融合模型的训练与优化

在训练融合后的 YOLOv8 模型时,需要考虑以下几点:

  • 数据预处理与增强 :对输入图像进行适当的预处理,如归一化、裁剪、翻转等,以提高模型的泛化能力和鲁棒性。
  • 损失函数设计 :损失函数应综合考虑目标定位误差、分类误差以及置信度误差,采用合适的权重平衡各项损失。例如,可以使用以下损失函数:
def compute_loss(predictions, targets):# 定义损失函数loss_obj = nn.BCEWithLogitsLoss()loss_cls = nn.CrossEntropyLoss()loss_bbox = nn.MSELoss()# 计算损失obj_loss = 0cls_loss = 0bbox_loss = 0for pred in predictions:# 分离预测结果pred_bbox = pred[:, :, :, :4]pred_obj = pred[:, :, :, 4]pred_cls = pred[:, :, :, 5:]# 分离目标结果target_bbox = targets[:, :, :, :4]target_obj = targets[:, :, :, 4]target_cls = targets[:, :, :, 5:]# 计算损失obj_loss += loss_obj(pred_obj, target_obj)cls_loss += loss_cls(pred_cls, target_cls)bbox_loss += loss_bbox(pred_bbox, target_bbox)# 总损失total_loss = obj_loss + cls_loss + bbox_lossreturn total_loss
  • 训练策略与优化 :采用合适的 optimizer,如 Adam 或 SGD,并设置适当的学习率、动量等参数。同时,可以采用学习率衰减、早停等技巧,避免过拟合,提高训练效率。例如:
# 设置 optimizer
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 设置学习率衰减
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)

实验结果与分析

为了验证融合 Damo-YOLO 与 DyHead 检测头后的 YOLOv8 模型性能,我们在 COCO 数据集上进行了实验。实验结果表明,融合后的模型在保持较高检测速度的同时,显著提高了检测精度。具体指标如下:

  • 检测精度(AP) :融合模型的 AP 达到了 [具体数值],相比原始 YOLOv8 提升了 [具体数值]。
  • 检测速度(FPS) :融合模型在 GPU 上的检测速度为 [具体数值] FPS,与原始 YOLOv8 相当。

通过对比实验结果,我们可以看出,Damo-YOLO 的高效特征提取能力和 DyHead 的动态检测能力相结合,能够有效地提高目标检测的性能。

总结与展望

本文提出了融合 Damo-YOLO 与 DyHead 检测头的 YOLOv8 改进方案。通过详细的代码实现和实验分析,我们展示了该融合模型在目标检测任务中的优越性能。未来,我们计划进一步优化模型结构,探索与其他先进技术和算法的结合,以进一步提升目标检测的速度和精度,为计算机视觉领域的发展做出更大的贡献。

在这里插入图片描述

相关文章:

YOLOv8 优化:基于 Damo-YOLO 与 DyHead 检测头融合的创新研究

文章目录 YOLOv8 的背景与发展Damo-YOLO 的优势与特点DyHead 检测头的创新之处融合 Damo-YOLO 与 DyHead 检测头的思路融合后的模型架构融合模型的代码实现导入必要的库定义 Damo-YOLO 的主干网络定义特征金字塔网络(FPN)定义 DyHead 检测头定义融合后的…...

【网安播报】Meta 推出 LlamaFirewall开源框架以阻止 AI 越狱、注入和不安全代码

1、Meta 推出 LlamaFirewall 框架以阻止 AI 越狱、注入和不安全代码 Meta 宣布推出 LlamaFirewall,这是一个开源框架,旨在保护人工智能 (AI) 系统免受新出现的网络风险,例如提示词注入、越狱和不安全代码等。除了 Llam…...

QT 解决msvc fatal error C1060: 编译器的堆空间不足

一.物理内存太小,代码又比较复杂,递归嵌套之类的。 1.修改虚拟内存的大小,一般设置为物理内存的1.5倍。 二.msvc工程的编译默认开启的是多线程编译,所以电脑内存确实不够,采用如下设置。 QMAKE_CXXFLAGS -j1 三.ms…...

PX4开始之旅(一)自动调参

核心知识点:无人机震动与滤波参数 1. 通俗易懂的解释 想象一下,你的无人机就像一个非常敏感的“听众”,它的“耳朵”就是陀螺仪和加速度计这些传感器,用来感知自己是如何移动和旋转的。理想情况下,它应该只“听”到你…...

C++ 中 lower_bound 与 upper_bound 函数详解

C 中 lower_bound 与 upper_bound 函数详解 文章目录 C 中 lower_bound 与 upper_bound 函数详解**一、核心定义与区别****二、使用条件与时间复杂度****三、实际应用场景****四、注意事项与常见误区****五、代码示例****六、总结** 一、核心定义与区别 lower_bound 作用&#…...

minio数据迁移(两台服务器没法相互通信)

场景描述: A服务器 无法访问 B服务器,B服务器 也无法访问 A(即双方都不能通过公网或内网直连对方) MinIO 官方提供了 mc(MinIO Client)命令行工具,可以直接实现 Bucket 之间的数据迁移: 安装 …...

O2OA(翱途)开发平台系统安全-用户登录IP限制

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]支持对指定的用户设置可以连接的客户端计算机的IP地址,以避免用户在不安全的环境下访问系统。本篇主要介绍如何开启O2OA用户登录IP限制。 一、先决条件: 以拥有管理员权限的用户账号登录O2OA(翱途)开发平…...

CSS flex:1

在 CSS 中,flex: 1 是一个用于弹性布局(Flexbox)的简写属性,主要用于控制 flex 项目(子元素)如何分配父容器的剩余空间。以下是其核心作用和用法: 核心作用 等分剩余空间:让 flex …...

OpenHarmony平台驱动开发(十一),PIN

OpenHarmony平台驱动开发(十一) PIN 概述 功能简介 PIN即管脚控制器,用于统一管理各SoC的管脚资源,对外提供管脚复用功能。 基本概念 PIN是一个软件层面的概念,目的是为了统一对各SoC的PIN管脚进行管理&#xff0…...

.NET高频技术点(持续更新中)

1. .NET 框架概述 .NET 框架的发展历程.NET Core 与 .NET Framework 的区别.NET 5 及后续版本的统一平台 2. C# 语言特性 异步编程(async/await)LINQ(Language Integrated Query)泛型与集合委托与事件属性与索引器 3. ASP.NET…...

Spring Cloud - 2( 12000 字详解 Spring Cloud)

一:服务注册和服务发现 - Eureka 1.1 背景 在上一章节的例子中,我们可以看到远程调用时 URL 被硬编码,这导致在更换机器或新增机器时,相关的 URL 需要进行相应的变更。这就需要让所有相关服务去修改 URL,随之而来的就…...

解决Win11下MySQL服务无法开机自启动问题

问题描述 在win11系统中,明明将MySQL服务设置成了自动启动,但在重启电脑后MySQL服务还是无法自动启动,每次都要重新到计算机管理的服务中找到服务再手动启动。 解决方式 首先确保mysql服务的启动类型为自动。 设置方法:找到此电…...

RGB矩阵照明系统详解及WS2812配置指南

RGB矩阵照明系统详解及WS2812配置指南 一、RGB矩阵照明简介 RGB矩阵照明是一种强大的功能,允许使用外部驱动器驱动的RGB LED矩阵为键盘增添绚丽的灯光效果。该系统与RGBLIGHT功能无缝集成,因此您可以使用与RGBLIGHT相同的键码来控制它,操作…...

全球首款无限时长电影生成模型SkyReels-V2本地部署教程:视频时长无限制!

一、简介 SkyReels-V2 模型集成了多模态大语言模型(MLLM)、多阶段预训练、强化学习以及创新的扩散强迫(Diffusion-forcing)框架,实现了在提示词遵循、视觉质量、运动动态以及视频时长等方面的全面突破。通过扩散强迫框…...

代理ARP与传统ARP在网络通信中的应用及区别研究

一些问题 路由器隔离广播域,每个接口/网段都是独立的广播域ARP请求是二层广播包,广播包没法通过路由器ARP请求没法穿越互联网到达目标主服务器 一些思考 电脑访问互联网服务器的时候,ARP询问的内容,真的是访问服务器么&#xf…...

理解 Envoy 的架构

理解 Envoy 的架构对于深入理解 Istio 至关重要,因为 Envoy 是 Istio 数据平面的核心。Envoy 是一个高性能的 C 分布式代理,设计为云原生应用和大规模微服务架构的网络基础。 以下是 Envoy 架构的关键组成部分和核心理念: 核心设计理念&…...

使用Kotlin Flow实现Android应用的响应式编程

在Android应用中使用Kotlin Flow实现响应式编程可以分为以下步骤,结合最佳实践和生命周期管理: 1. 添加依赖 在build.gradle中确保包含协程和生命周期相关依赖: dependencies {implementation("org.jetbrains.kotlinx:kotlinx-corouti…...

【AI提示词】蝴蝶效应专家

提示说明 一位专注于分析和优化蝴蝶效应现象的专业人士,擅长将微小变化转化为系统级影响的研究者。 提示词 # Role: 蝴蝶效应专家## Profile - language: 中文 - description: 一位专注于分析和优化蝴蝶效应现象的专业人士,擅长将微小变化转化为系统级…...

StreamRL:弹性、可扩展、异构的RLHF架构

StreamRL:弹性、可扩展、异构的RLHF架构 大语言模型(LLMs)的强化学习(RL)训练正处于快速发展阶段,但现有架构存在诸多问题。本文介绍的StreamRL框架为解决这些难题而来,它通过独特设计提升了训…...

架构进阶:大型制造业企业数据架构顶层设计总体规划方案【附全文阅读】

本文概述了一个大型企业数据架构设计的总体规划方案,针对当前数据架构与管理中存在的诸多问题,如缺乏统一数据模型、数据分析应用体系不健全、主数据管理体系不完善、数据治理体系缺失等,提出了明确的改进目标与实施路径。 数据架构设计思路聚焦于明确数据分布和流向…...

前端指南——项目代码结构解析(React为例)

文件结构 文件项目 ├── doc │ ├── technology.md ├── node_modules ├── public ├── shell ├── src │ ├── auto-generated │ │ ├── apis │ │ ├── models │ ├── components │ │ ├── 组件A │ │ ├── 组件B …...

Redis-数据一致性问题与解决方案

Redis-数据一致性问题与解决方案 引言 Redis 是一个高性能的内存数据库,广泛应用于缓存、会话存储、实时分析等场景。作为一个 NoSQL 数据库,它的高性能和丰富的数据结构使其成为现代微服务架构中不可或缺的组件。然而,在高并发的环境下&am…...

【数据结构】算法的复杂度

前言:经过了C语言的学习,紧接着就步入到数据结构的学习了。在C语言阶段我们在写大多数的oj题的时候会遇到一些问题,就是算法的效率低使用的时间较多,占用的空间也多,数据结构就是来优化算法的。 文章目录 一&#xff…...

Leetcode刷题 由浅入深之字符串——541. 反转字符串Ⅱ

目录 (一)反转字符串Ⅱ的C实现 写法一(s.begin()遍历字符) (二)复杂度分析 时间复杂度 空间复杂度 (三)总结 【题目链接】541. 反转字符串Ⅱ - 力扣&am…...

制造单元智能化改造与集成技术平台成套实训设备

制造单元智能化改造与集成技术平台成套实训设备 一、概述: 本设备以汽车行业的轮毂为产品对象,实现了仓库取料、制造加工、打磨抛光、检测识别、分拣入位等生产工艺环节,以未来智能制造工厂的定位和需求为参考,通过工业以太网完成…...

Vscode 顶部Menu(菜单)栏消失如何恢复

Vscode 顶部Menu(菜单)栏消失如何恢复 https://blog.csdn.net/m0_62964247/article/details/135759655 Vscode 顶部Menu(菜单)栏消失如何恢复? 首先按一下 Alt按键,看一下是否恢复了菜单栏 如果恢复了想了解更进一步的设置,或是没能恢复菜单…...

苍穹外卖--公共字段自动填充

1.问题分析 业务表中的公共字段: 问题:代码冗余、不便于后期维护 2.实现思路 自定义注解AutoFill,用于标识需要进行公共字段填充的方法 自定义切面类AutoFillAspect,统一拦截加入了AutoFill注解的方法,通过反射为公…...

行业 |四大痛点待破:“拆解”DeepSeek一体机

繁荣DeepSeek一体机市场。 2025年开年,DeepSeek大模型掀起的一体机热潮席卷中国AI市场。这款一体机凭借其“开箱即用”的便利性和极低的门槛,吸引了大量企业关注,尤其是在中小企业和行业创新者中,更是成为了新晋“顶流”。 无论…...

革新锅炉厂智能控制——Ethernet IP转CANopen协议网关的工业互联新方案

锅炉厂智能化转型的必经之路 在工业4.0时代,锅炉厂作为能源供应的核心环节,正面临智能化升级的迫切需求。传统锅炉控制系统往往因协议不兼容、数据孤岛问题导致效率低下、维护成本高昂。如何实现设备间高效协同?如何让老旧设备融入智能网络&…...

基于卷积神经网络和Pyqt5的猫狗识别小程序

任务描述 猫狗分类任务(Dogs vs Cats)是Kaggle平台在2013年举办的一个经典计算机视觉竞赛。官方给出的Kaggle Dogs vs Cats 数据集中包括由12500张猫咪图片和12500张狗狗图片组成的训练集,12500张未标记照片组成的测试集。选手需要在规定时间…...

Baklib知识中台引领服务智能跃迁

智能架构重构服务范式 Baklib 知识中台通过全量数据融合与多模态处理能力,重塑企业服务底层逻辑。基于分布式架构设计,平台将分散在业务系统、文档库及外部渠道的非结构化数据进行智能清洗与语义解析,形成标准化的知识元数据池。通过四库体系…...

【Python】超全常用 conda 命令整理

Conda命令整理文档,结合官方指南与高频使用场景分类说明,每个命令都有对应的解释 一、环境管理 1. 创建环境 基本创建conda create --name my_env # 创建名为my_env的空环境 conda create -n my_env python3.11 # 指定Python版本 conda creat…...

FreeRTOS菜鸟入门(十四)·事件

目录 1. 基本概念 2. 应用场景 3. 运作机制 4. 控制块 5. 事件函数接口 5.1 事件创建函数 xEventGroupCreate() 5.2 事件删除函数 vEventGroupDelete() 5.3 事件组置位函数 xEventGroupSetBits()(非中断) 5.4 事件组置位函数 xEventGr…...

setData执行后操作方法-微信小程序

在微信小程序中,setData 是异步执行的,如果你需要在 setData 执行完毕后执行某些操作,可以通过以下几种方式实现: 1. 使用 setData 的回调函数 从基础库 2.2.3 开始,setData 支持传入回调函数,回调会在数据…...

SpringAI特性

一、SpringAI 顾问(Advisors) Spring AI 使用 Advisors机制来增强 AI 的能力,可以理解为一系列可插拔的拦截器,在调用 AI 前和调用 AI 后可以执行一些额外的操作,比如: 前置增强:调用 AI 前改…...

捌拾叁- 量子傅里叶变换

1. 前言 最近公司地震,现在稍微有点时间继续学习。 看了几个算法,都说是基于 量子傅里叶变换 ,好,就是他了 Quantum Fourier。 2. 傅里叶变换 大学是学通信的,对于傅里叶变换还是有所理解的。其实就是基于一个 时域…...

SSTI模版注入

1、概念 SSTI是一种常见的Web安全漏洞,它允许攻击者通过注入恶意模板代码,使服务器在渲染模板时执行非预期的操作。 (1)渲染模版 至于什么是渲染模版:服务器端渲染模板是一种Web开发技术,它允许在服务器端…...

33、前台搜索功能怎么实现?

输入搜索的东西,如果为空 如果有 前端是提交表单,方式是 post 后端接受 调用 mybatisplus的categoryService.getById 用户在搜索框内输入关键字之后,执行 js 中的 load方法,前端提交表单, 后端 controller 中的loa…...

量化解析美英协议的非对称冲击:多因子模型与波动率曲面重构

摘要:基于机器学习算法对市场微观结构的实时监测,黄金价格在3300美元/盎司附近展开技术性反弹。本文通过多因子分析框架,解析美元指数上行、贸易政策突变及资产配置迁移对贵金属市场的复合影响,并构建基于LSTM神经网络的动态支撑位…...

对PyTorch模块进行性能分析

以下是针对PyTorch模块进行性能分析的完整方法与工具指南,结合了多种优化策略和实际应用场景: 一、PyTorch性能分析工具 PyTorch Profiler • 功能:内置的性能分析工具,支持捕获CPU/GPU操作、内存分配、数据形状及硬件利用率。 …...

lvm详细笔记

LVM简介 逻辑卷管理器,是Linux 系统中用于管理磁盘储存的关键技术。 LVM 则打破了磁盘分区一旦确定,其大小调整往往较为复杂,且难以灵活应对业务变化这种限制,它允许用户将多个物理分区组合卷组。例如,系统中的多个物…...

OpenHarmony 以太网卡热插拔事件接口无效

目录 1.背景 2.解决方案 1.背景 在OpenHarmony中调用以太网热插拔时间,发现热插拔没有任何回调,如下接口 import { ethernet } from kit.NetworkKit;ethernet.on(interfaceStateChange, (data: object) > {console.log(on interfaceSharingStateCha…...

SPDK NVMe of RDMA 部署

使用SPDK NVMe of RDMA 实现多NVMe设备共享 一、编译、安装spdk 1.1、下载 1.1.1 下载spdk源码 首先,我们需要从GitHub上克隆SPDK的源码仓库。打开终端,输入以下命令: git clone -b v22.01 https://github.com/spdk/spdk.git cd spdk1.1.2…...

Go语言的逃逸分析是怎么进行的

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...

纯净IP,跨境账号稳定的底层逻辑

在跨境业务快速扩张的背景下,越来越多的卖家、营销人、数据团队都开始使用代理IP来实现全球网络触达。然而,账号封禁问题始终如影随形,而背后的一个“隐性元凶”常常被忽视——纯净IP的缺失。本文将从实战角度出发,带你深入了解什…...

编译日志:关于编译opencv带有ffmpeg视频解码支持的若干办法

编译日志:关于编译opencv带有ffmpeg视频解码支持的若干办法 前言 ​ 笔者这里是封装了简单的OpenCV视频播放抽象,然后却发现移植到Ubuntu和开发板上都罢工的事情,原来是Windows平台下我们是默认下载了ffmpeg的库的,但是在泛Linu…...

djinn: 3靶场渗透

djinn: 3 来自 <https://www.vulnhub.com/entry/djinn-3,492/> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.243 3&#xff0…...

WHAT - 简单服务发现

文章目录 简单理解举个例子简单服务发现方式1. 静态配置&#xff08;最简单&#xff0c;但不灵活&#xff09;2. DNS 发现3. 使用服务注册中心&#xff08;稍高级&#xff09; 总结 “简单服务发现”&#xff08;Simple Service Discovery&#xff09;通常指的是一种让系统中的…...

auto推导类型原则

auto 是 C11 引入的类型自动推导关键字&#xff0c;它允许编译器根据表达式的类型来推导变量的确切类型。虽然使用 auto 可以让代码更简洁&#xff0c;但理解它的类型推导规则非常关键&#xff0c;尤其是在涉及指针、引用、const、模板等场景时。 ✅ 一、基本推导原则 auto x …...

44.辐射发射整改简易摸底测试方法

辐射发射整改简易摸底测试方法 1. 正式摸底预测试2. 简易方法预测试3. 分析频谱4. 探查传播路径5. 施加措施6. 与简易方法预测试效果对比 1. 正式摸底预测试 去正式实验室做一次预测试&#xff0c;取得频谱图&#xff1b;确定超标频点和超标量&#xff08;备用&#xff09;。 …...