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

深度学习推理引擎---OpenVINO

OpenVINO(Open Visual Inference & Neural Network Optimization Toolkit)是英特尔开发的开源工具套件,旨在优化和加速深度学习模型在英特尔硬件(CPU、GPU、VPU、FPGA等)上的推理性能,同时支持从训练到部署的全流程

一、核心架构与组件

  1. 模型优化器(Model Optimizer)

    • 功能:将TensorFlow、PyTorch、ONNX等框架的训练模型转换为OpenVINO专属的中间表示(IR,Intermediate Representation)格式,包含.xml(模型结构)和.bin(权重数据)两个文件。
    • 优化技术
      • 量化:将FP32参数转换为INT8/INT4,减少计算量和内存占用,精度损失通常小于0.5%。
      • 剪枝:移除冗余连接,提升计算效率。
      • 层融合:合并卷积、批归一化等连续操作,减少内存访问次数。
      • 常量折叠:将编译时可计算的常量提前计算,降低运行时负载。
  2. 推理引擎(Inference Engine)

    • 功能:在目标硬件上执行优化后的模型,支持多设备异构计算(如CPU+GPU协同)。
    • 关键特性
      • 异步推理:同时处理多个请求,提升吞吐量。
      • 批处理:批量输入数据以提升效率,适合高并发场景。
      • 性能计数器:分析各层耗时,辅助优化模型结构。
      • 动态形状支持:适应输入尺寸变化,如工业检测中的任意数量仪表检测。

二、硬件支持与优化

  1. 全栈硬件覆盖

    • CPU:利用多线程、AVX-512指令集加速,支持英特尔Core Ultra系列的AMX FP16优化,FP16推理速度翻倍。
    • GPU:通过OpenCL优化,SDPA算子提升4K长文本处理效率65%,支持动态形状。
    • VPU(如Movidius Myriad X):专用驱动实现低功耗边缘推理。
    • FPGA:支持自定义硬件加速逻辑,适合特定场景深度优化。
    • NPU:2025.0版本新增对英特尔NPU的支持,通过PyTorch的torch.compile接口调用算力,支持300+模型。
  2. 异构计算与调度

    • 自动分配任务至最优设备,例如CPU处理控制流,GPU处理矩阵运算,NPU处理密集型任务。

三、工具链与开发支持

  1. 核心工具

    • Model Downloader:一键获取预训练模型(如ResNet、YOLO、BERT)。
    • Benchmark Tool:测试推理性能,生成延迟和吞吐量报告。
    • Sample Applications:提供C++/Python示例,演示目标检测、语义分割等场景。
    • OpenVINOQuantizer:PyTorch模型转换效率提升3倍,支持4bit量化。
  2. 框架兼容性

    • 支持TensorFlow、PyTorch、ONNX、Keras(2025.0新增Keras 3.8后端)、JAX等框架。
    • 与Hugging Face深度集成,支持LoRA微调、动态加载适配器(如FLUX.1图像生成模型)。
  3. 多语言接口

    • 提供C++、Python、Java API,支持Windows、Linux、macOS、Raspbian等系统。

四、模型优化与部署

  1. 模型压缩技术

    • NNCF(神经网络压缩框架):量化训练耗时减少60%,支持INT8/INT4压缩,KV Cache内存占用降低35%。
    • 模型加密:通过OpenSSL实现模型加密,保护知识产权。
  2. 动态形状与内存管理

    • 支持输入尺寸动态调整,例如工业仪表检测中任意数量ROI的处理,通过范围维度设置上限以优化内存消耗。
    • KV Cache压缩技术(默认INT8,可选INT4)减少LLM内存占用,提升长文本处理效率。

五、应用场景与案例

  1. 自动驾驶与ADAS

    • 目标检测(YOLO)、语义分割(FCN)、交通标志识别,支持实时环境感知。
    • 2025.0版本优化Whisper语音模型,降低实时语音转文字延迟。
  2. 工业检测与智能制造

    • 智能仪表扫描:结合目标检测和语义分割,实现指针读数、裂痕检测(如抖音案例中盘子裂痕的精准识别)。
    • 深度可分离卷积优化IoT设备能效比,支持边缘端实时异常检测。
  3. 生成式AI与大模型

    • 支持Qwen 2.5、DeepSeek-R1等中文大模型,LoRA微调+连续批处理提升7B模型吞吐量80%。
    • 图像生成(FLUX.1)、Image-to-Image修复、文本生成(提示词查找解码优化)。

六、最新特性(2025.0版本)

  1. 生成式AI性能突破

    • Whisper语音模型全硬件加速,图像修复速度提升,Prompt生成延迟降低。
    • 支持300+预训练模型,SD3/FLUX.1文生图性能提升120%。
  2. 开发者工具链升级

    • PyTorch AWQ量化全面支持,模型转换效率提升3倍。
    • 新增Tensor可视化工具,调试效率翻倍。
  3. 边缘与云端部署优化

    • Windows Server原生支持,摆脱容器束缚直享硬件性能。
    • 虚拟化/实时系统专用优化,CPU核心动态调度效率提升45%。

七、最佳实践与资源

  1. 性能调优建议

    • 优先使用量化模型(INT8/INT4),平衡精度与速度。
    • 利用AUTO插件自动选择最优设备,或手动分配任务至特定硬件。
    • 启用模型缓存(Model Caching)减少首次推理延迟。
  2. 学习资源

    • 官方文档与教程:OpenVINO Documentation。
    • GitHub仓库:openvinotoolkit/openvino。
    • 社区支持:英特尔开发者论坛、Stack Overflow标签openvino

总结

OpenVINO通过模型优化、硬件加速和工具链整合,为深度学习推理提供了从边缘到云端的高效解决方案。其覆盖计算机视觉、自然语言处理、生成式AI等多领域,支持全栈英特尔硬件,尤其在2025.0版本中针对生成式AI和边缘计算进行了重大升级,成为工业级AI部署的核心工具。开发者可通过其丰富的文档和示例快速上手,实现高性能、低功耗的AI应用落地。


OpenVINO部署示例

以下是一个使用OpenVINO部署预训练模型的完整示例,包括模型转换、推理和结果可视化。这个示例使用OpenVINO 2025.0版本,部署一个基于PyTorch的ResNet50图像分类模型。

import cv2
import numpy as np
import matplotlib.pyplot as plt
from openvino.runtime import Core, AsyncInferQueue
from openvino.tools import mo
from openvino.runtime import serialize
import torch
import torchvision.models as models
import torchvision.transforms as transforms
from PIL import Image
import os
import time# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]class OpenVINODeployer:def __init__(self, model_name="resnet50", device="AUTO"):"""初始化OpenVINO部署器"""self.model_name = model_nameself.device = deviceself.core = Core()self.model = Noneself.compiled_model = Noneself.input_layer = Noneself.output_layer = Noneself.labels = self._load_labels()def _load_labels(self):"""加载ImageNet分类标签"""if not os.path.exists("imagenet_classes.txt"):import requestsresponse = requests.get("https://raw.githubusercontent.com/pytorch/hub/master/imagenet_classes.txt")with open("imagenet_classes.txt", "w") as f:f.write(response.text)with open("imagenet_classes.txt") as f:labels = [line.strip() for line in f.readlines()]return labelsdef convert_model(self, export_dir="models"):"""将PyTorch模型转换为OpenVINO IR格式"""os.makedirs(export_dir, exist_ok=True)ir_path = os.path.join(export_dir, f"{self.model_name}_openvino_model")# 检查IR模型是否已存在if os.path.exists(f"{ir_path}.xml") and os.path.exists(f"{ir_path}.bin"):print(f"加载现有IR模型: {ir_path}")self.model = self.core.read_model(f"{ir_path}.xml", f"{ir_path}.bin")return ir_path# 加载PyTorch预训练模型print(f"加载PyTorch {self.model_name}模型...")torch_model = getattr(models, self.model_name)(pretrained=True)torch_model.eval()# 创建示例输入dummy_input = torch.randn(1, 3, 224, 224)# 导出为ONNXonnx_path = os.path.join(export_dir, f"{self.model_name}.onnx")print(f"导出模型为ONNX: {onnx_path}")torch.onnx.export(torch_model,dummy_input,onnx_path,export_params=True,opset_version=17,do_constant_folding=True,input_names=['input'],output_names=['output'],dynamic_axes={'input': {0: 'batch_size'}, 'output': {0: 'batch_size'}})# 使用模型优化器转换为IR格式print(f"转换ONNX模型为OpenVINO IR格式...")ov_model = mo.convert_model(onnx_path, compress_to_fp16=True)# 序列化并保存IR模型serialize(ov_model, f"{ir_path}.xml", f"{ir_path}.bin")print(f"IR模型已保存至: {ir_path}")self.model = ov_modelreturn ir_pathdef compile_model(self):"""编译模型以在指定设备上运行"""if self.model is None:raise ValueError("请先转换模型再编译")# 编译模型print(f"在设备 {self.device} 上编译模型...")self.compiled_model = self.core.compile_model(self.model, self.device)# 获取输入和输出层self.input_layer = next(iter(self.compiled_model.inputs))self.output_layer = next(iter(self.compiled_model.outputs))print(f"输入形状: {self.input_layer.shape}")print(f"输出形状: {self.output_layer.shape}")return self.compiled_modeldef preprocess(self, image_path):"""图像预处理"""# 加载图像image = Image.open(image_path).convert('RGB')# 定义预处理转换transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),])# 应用转换input_tensor = transform(image)input_batch = input_tensor.unsqueeze(0)  # 添加批次维度return input_batch.numpy(), imagedef infer(self, input_data, top_k=5):"""执行推理并获取结果"""if self.compiled_model is None:raise ValueError("请先编译模型再进行推理")# 执行同步推理start_time = time.time()results = self.compiled_model([input_data])[self.output_layer]inference_time = time.time() - start_time# 处理结果probs = torch.nn.functional.softmax(torch.from_numpy(results), dim=1)top_probs, top_indices = torch.topk(probs, top_k)# 获取类别名称和置信度predictions = []for i in range(top_k):class_idx = top_indices[0, i].item()confidence = top_probs[0, i].item()predictions.append({'class_id': class_idx,'class_name': self.labels[class_idx],'confidence': confidence})return predictions, inference_timedef visualize_results(self, image, predictions, inference_time):"""可视化推理结果"""# 创建图像副本img_np = np.array(image)# 显示图像plt.figure(figsize=(10, 6))plt.imshow(img_np)plt.axis('off')# 添加预测结果文本plt.title(f"OpenVINO {self.model_name} 图像分类结果\n"f"推理设备: {self.device} | 推理时间: {inference_time:.3f}秒")# 添加预测类别和置信度text = "\n".join([f"{i+1}. {pred['class_name']}: {pred['confidence']:.2%}" for i, pred in enumerate(predictions)])plt.figtext(0.5, 0.01, text, ha="center", fontsize=12, bbox={"facecolor":"white", "alpha":0.8, "pad":10})plt.tight_layout()plt.show()def run_async_inference(self, image_paths, num_requests=4):"""执行异步推理"""if self.compiled_model is None:raise ValueError("请先编译模型再进行推理")# 创建异步推理队列infer_queue = AsyncInferQueue(self.compiled_model, num_requests)# 结果存储results = []# 回调函数def callback(request, user_data):image_idx, image = user_dataoutput = request.get_tensor(self.output_layer).dataprobs = torch.nn.functional.softmax(torch.from_numpy(output), dim=1)top_probs, top_indices = torch.topk(probs, 5)predictions = []for i in range(5):class_idx = top_indices[0, i].item()confidence = top_probs[0, i].item()predictions.append({'class_id': class_idx,'class_name': self.labels[class_idx],'confidence': confidence})results.append((image_idx, predictions, image))# 设置回调函数infer_queue.set_callback(callback)# 提交所有推理请求start_time = time.time()for i, image_path in enumerate(image_paths):input_data, image = self.preprocess(image_path)infer_queue.start_async({self.input_layer: input_data}, (i, image))# 等待所有请求完成infer_queue.wait_all()total_time = time.time() - start_time# 按原始顺序排序结果results.sort(key=lambda x: x[0])# 计算吞吐量throughput = len(image_paths) / total_time# 显示结果print(f"异步推理完成: {len(image_paths)}张图像,总时间: {total_time:.3f}秒")print(f"吞吐量: {throughput:.2f} FPS")# 可视化第一张图像的结果if results:_, predictions, image = results[0]self.visualize_results(image, predictions, total_time / len(image_paths))return results, throughputdef main():"""主函数"""# 创建部署器实例deployer = OpenVINODeployer(model_name="resnet50", device="AUTO")# 转换模型deployer.convert_model()# 编译模型deployer.compile_model()# 准备测试图像test_image = "test_image.jpg"if not os.path.exists(test_image):import requestsurl = "https://picsum.photos/seed/dog/800/600"  # 示例图像:狗response = requests.get(url)with open(test_image, "wb") as f:f.write(response.content)# 预处理input_data, image = deployer.preprocess(test_image)# 执行同步推理predictions, inference_time = deployer.infer(input_data)# 可视化结果deployer.visualize_results(image, predictions, inference_time)# 执行异步推理(多张图像)deployer.run_async_inference([test_image] * 10)if __name__ == "__main__":main()    

这个示例展示了OpenVINO的完整工作流程:

  1. 模型转换:将PyTorch的ResNet50模型转换为OpenVINO的IR格式,并支持FP16压缩
  2. 推理引擎:使用AUTO设备插件自动选择最佳硬件(CPU/GPU/NPU)
  3. 同步与异步推理:演示两种推理模式,并比较性能差异
  4. 结果可视化:直观展示分类结果和推理时间

使用方法:

  1. 安装依赖:pip install openvino-dev torch torchvision matplotlib opencv-python
  2. 运行代码:python openvino_deployment.py
  3. 首次运行会自动下载ResNet50模型和示例图像

可以通过修改代码中的model_namedevice参数来测试不同模型和硬件。例如:

  • model_name="mobilenet_v3_large" 测试轻量级模型
  • device="GPU" 强制使用GPU进行推理
  • device="CPU" 仅使用CPU进行推理

相关文章:

深度学习推理引擎---OpenVINO

OpenVINO(Open Visual Inference & Neural Network Optimization Toolkit)是英特尔开发的开源工具套件,旨在优化和加速深度学习模型在英特尔硬件(CPU、GPU、VPU、FPGA等)上的推理性能,同时支持从训练到…...

JavaScript splice() 方法

1. JavaScript splice() 方法 1.1. 定义和用法 splice() 方法用于添加或删除数组中的元素。   注意:这种方法会改变原始数组。   返回值:如果删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。 1.2. …...

数据库故障排查指南:解决常见问题,保障数据安全与稳定

数据库故障排查指南:解决常见问题,保障数据安全与稳定 📖 前言 数据库作为现代应用的核心组件,其稳定性直接影响业务连续性。本文总结六大常见数据库故障场景,提供快速排查思路与解决方案,助你化身"…...

gem5-gpu教程 第十章 关于topology 的Mesh network

问题一、L1和L2缓存之间的VI_hammer_fusion中指定了互连延迟,如何更改这些数字吗? 我已经实现了一个网格拓扑来连接cpu内核和GPU SM,并对VI_hammer*和网格文件进行了所有必要的更改。我的问题是: 1. There is interconnect latency specified in VI_hammer_fusion betwee…...

【C/C++】C++返回值优化:RVO与NRVO全解析

文章目录 C返回值优化:RVO与NRVO全解析1 简介2 RVO vs NRVO3 触发条件4 底层机制5 应用场景6 验证与限制7 性能影响8 补充说明9 总结 C返回值优化:RVO与NRVO全解析 返回值优化(Return Value Optimization, RVO)是编译器通过消除临…...

使用 Kaniko来构建镜像

使用 Kaniko来构建镜像 Kaniko 是一种专注于容器镜像构建的开源工具,其核心设计理念与 Docker 存在显著差异。以下从功能定位、技术实现和适用场景三方面进行对比分析: 一、Kaniko 的核心特性 无需 Docker 守护进程 Kaniko 直接在容器或 Kubernetes 集…...

2025.05.17淘天机考笔试真题第三题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 奇偶平衡树分割问题 问题描述 K小姐是一位园林设计师,她设计了一个由多个花坛组成的树形公园。每个花坛中种植了不同数量的花…...

history模式:让URL更美观

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...

算法:分治法

实验内容 在一个2kⅹ2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为特殊方格,且称该棋盘为一特殊棋盘。 显然,特殊方格出现的位置有4k 种情况,即k>0,有4k 种不同的特殊棋盘 棋盘覆盖&#xff1a…...

豆粕ETF投资逻辑整理归纳-20250511

目录 一、什么是豆粕 基本概念 豆粕上游生产国 豆粕下游消耗方 二、豆粕ETF 概念 策略 展期操作 超额收益 行情波动 豆粕资产的低相关性 三、展期收益 Contango升水结构和Backwardation贴水结构 豆粕的贴水逻辑 还有哪些品种拥有长期的展期收益 四、其他相关信…...

使用 Python 连接 Oracle 23ai 数据库完整指南

方法一:使用 oracledb 官方驱动(推荐) Oracle 官方维护的 oracledb 驱动(原 cx_Oracle)是最新推荐方案,支持 Thin/Thick 两种模式。 1. 环境准备 pip install oracledb2. 完整示例代码 import oracledb import getpass from typing import Unionclass Oracle23aiConn…...

构建集成差异化灵巧手和先进机器人控制技术的自动化系统

介绍程序 1.流程分析 通过流程分析审查应用机器人自动化的可行性。 2.系统设计 选择合适的机器人(机械臂、夹持器、视觉系统等),并通过详细的任务分析设计最佳系统。 3.内部测试 建立内部测试平台并解决任何问题。 4.现场测试 现场设…...

题单:汉诺塔问题

题目描述 如下图所示,设有 nn 个大小不等的中空圆盘,按照从小到大的顺序叠套在立柱 A 上,另有两根立柱 B 和 C 。 现在要求把全部圆盘从 A 柱(称为源柱)移到 C 柱(称为目标柱),移动…...

Unable to get end effector tips from jmg

这个错误信息表明在使用MoveIt2时,moveit_visual_tools无法从关节模型组(Joint Model Group,简称JMG)中获取末端执行器(End Effector,简称EE)的尖端信息。这通常是因为配置文件中缺少相关信息&a…...

flutter flutter run 运行项目卡在Running Gradle task ‘assembleDebug‘...

flutter run --verbose在运行flutter run 可以看到是卡在哪一步 最重要的就是自己查看日志,具体哪一步有问题flutter run --verbose使用这个,运行了项目会将错误信息放在控制台 可能原因 静态资源问题如果:图片、字体文件等没有在pubspec.yam…...

STM32烧录程序正常,但是运行异常

一、硬件配置问题 BOOT引脚设置错误 STM32的启动模式由BOOT0和BOOT1引脚决定。若设置为从RAM启动(BOOT01,BOOT10),程序在掉电后无法保存,导致复位后无法正常运行。应确保BOOT00(从Flash启动)15。…...

TTS:F5-TTS 带有 ConvNeXt V2 的扩散变换器

1,项目简介 F5-TTS 于英文生成领域表现卓越,发音标准程度在本次评测软件中独占鳌头。再者,官方预设的多角色生成模式独具匠心,能够配置多个角色,一次性为多角色、多情绪生成对话式语音,别出心裁。 最低配置…...

ecmascript 第6版特性 ECMA-262 ES6

https://blog.csdn.net/zlpzlpzyd/article/details/146125018 在之前写的文章基础上,ES6在export和import的基础外,还有如下特性 特性说明let/const块级作用域变量声明>箭头函数Promise异步编程...

2024 山东省ccpc省赛

目录 I(签到) 题目简述: 思路: 代码: A(二分答案) 题目简述: 思路: 代码: K(构造) 题目: 思路: 代…...

角点特征:从传统算法到深度学习算法演进

1 概述 图像特征是用来描述和分析图像内容的关键属性,通常包括颜色、纹理和形状等信息。颜色特征能够反映图像中不同颜色的分布,常通过 RGB 值或色彩直方图表示。纹理特征则关注图像表面的结构和细节,例如通过灰度共生矩阵或局部二值模式&…...

免费代理IP服务有哪些隐患?如何安全使用?

代理IP已经成为互联网众多用户日常在线活动中不可或缺的一部分。无论是为了保护个人隐私、突破地理限制,还是用于数据抓取、广告投放等商业用途,代理IP都扮演着关键角色。然而,市场上存在大量的免费代理IP服务,尽管它们看起来颇具…...

深入了解 VPC 端点类型 – 网关与接口

什么是VPC 端点 VPC 端点(VPC Endpoint)是 Amazon Web Services (AWS) 提供的一种服务,允许用户在 Virtual Private Cloud (VPC) 内部安全地访问 AWS 服务,而无需通过公共互联网。VPC 端点通过私有连接将 VPC 与 AWS 服务直接连接…...

Android屏幕采集编码打包推送RTMP技术详解:从开发到优化与应用

在现代移动应用中,屏幕采集已成为一个广泛使用的功能,尤其是在实时直播、视频会议、远程教育、游戏录制等场景中,屏幕采集技术的需求不断增长。Android 平台为开发者提供了 MediaProjection API,这使得屏幕录制和采集变得更加简单…...

信息系统项目管理师高级-软考高项案例分析备考指南(2023年案例分析)

个人笔记整理---仅供参考 计算题 案例分析里的计算题就是进度、挣值分析、预测技术。主要考査的知识点有:找关键路径、求总工期、自由时差、总时差、进度压缩资源平滑、挣值计算、预测计算。计算题是一定要拿下的,做计算题要保持头脑清晰,认真读题把PV、…...

全栈项目搭建指南:Nuxt.js + Node.js + MongoDB

全栈项目搭建指南:Nuxt.js Node.js MongoDB 一、项目概述 我们将构建一个完整的全栈应用,包含: 前端:Nuxt.js (SSR渲染)后端:Node.js (Express/Koa框架)数据库:MongoDB后台管理系统:集成在同…...

Linux:基础IO

一:理解文件 1-1 狭义理解 文件存储在磁盘中,由于磁盘是永久性存储介质,因此文件在磁盘上的存储是永久性的;磁盘也是外设,因此磁盘上对文件的所有操作本质是对外设的输入和输出 1-2 广义理解 Linux下一切皆文件&am…...

MySQL 索引优化以及慢查询优化

在数据库性能优化中,索引优化和慢查询优化是两个关键环节。合理使用索引可以显著提高查询效率,而识别和优化慢查询则能提升整体数据库性能。本文将详细介绍MySQL索引优化和慢查询优化的方法和最佳实践。 一、MySQL 索引优化 1.1 索引的基本概念 索引是…...

Leaflet使用SVG创建动态Legend

接前一篇文章,前一篇文章我们使用 SVG 创建了带有动态文字的图标,今天再看看怎样在地图上根据动态图标生成相关的legend,当然这里也还是使用了 SVG 来生成相关颜色的 legend。 看下面的代码,生成了一个 svg 节点,其中…...

使用 Vue Tour 封装一个统一的页面引导组件

项目开发过程中需要实现用户引导功能,经过调研发现一个好用的 Vue 插件 vue-tour,今天就来分享一下我是如何基于 vue-tour 封装一个统一的引导组件,方便后续在多个页面复用的。 📦 第一步:安装 vue-tour 插件 首先安装…...

OpenResty 深度解析:构建高性能 Web 服务的终极方案

引言 openresty是什么?在我个人对它的理解来看相当于嵌入了lua的nginx; 我们在nginx中嵌入lua是为了不需要再重新编译,我们只需要重新修改lua脚本,随后重启即可; 一.lua指令序列 我们分别从初始化阶段,重写/访问阶段,内容阶段,日志…...

赋能企业级移动应用 CFCA FIDO+提升安全与体验

移动办公与移动金融为企业有效提升业务丰富性、执行便捷性。与此同时,“安全”始终是移动办公与移动金融都绕不开的话题。随着信息安全技术的发展,企业级移动应用中安全与便捷不再是两难的抉择。 中金金融认证中心(CFCA)作为经国…...

Redis 数据类型与操作完全指南

Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。与传统的关系型数据库不同,Redis 提供了丰富的数据类型和灵活的操作方式,这使得它能够高效地解决各种不同场景下的数据存储和处理问题。本文将全面介绍 R…...

ArrayList-集合使用

自动扩容,集合的长度可以变化,而数组长度不变,集合更加灵活。 集合只能存引用数据类型,不能直接存基本数据类型,除非包装 ArrayList会拿[]展示数据...

深入解析Spring Boot与Redis集成:高效缓存实践

深入解析Spring Boot与Redis集成:高效缓存实践 引言 在现代Web应用开发中,缓存技术是提升系统性能的重要手段之一。Redis作为一种高性能的键值存储数据库,广泛应用于缓存、会话管理和消息队列等场景。本文将详细介绍如何在Spring Boot项目中…...

8天Python从入门到精通【itheima】-11~13

目录 11节-PyCharm的安装和基础使用: 1.第三方IDE(集成开发工具) 2.PyCharm的所属——jetbrains公司 3.进入jetbrains的官网,搜索下载【官网自带中文,太友好了,爱你(づ ̄3&#x…...

day33-网络编程

1. 网络编程入门 1.1 网络编程概述 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统…...

CMake基础及操作笔记

CMake 基础与操作:从入门到精通 前言 CMake 是一个功能强大、跨平台的构建工具,广泛用于 C 项目管理。它通过简洁的配置文件(CMakeLists.txt)描述编译过程,生成适用于不同平台的构建脚本(如 Makefile 或 …...

使用lvm进行磁盘分区

使用lvm进行磁盘分区 目的: 使用/dev/vdb创建一个5g的逻辑卷挂载到/mnt/lvmtest 前提: /dev/vdb是一块干净的空磁盘,数据会被清空!!! 1. 创建物理卷(PV): pvcreate /dev/sdb2. 验证&#xf…...

Java的线程通信机制是怎样的呢?

核心观点:线程通信本质是状态同步与数据传递的协同控制 (类比测试团队协作:如同测试用例执行需要同步进度,测试数据需要跨线程传递) 一、基础通信机制(附测试验证方法) 1. 共享内存(最常用但最危险) // 测试典型场景:多线程统计测试用例通过率 public class Share…...

线性回归策略

一种基于ATR(平均真实范围)、线性回归和布林带的交易策略。以下是对该策略的全面总结和分析: 交易逻辑思路 1. 过滤条件: - 集合竞价过滤:在每个交易日的开盘阶段,过滤掉集合竞价产生的异常数据。 - 价格异常过滤:排除当天开盘价与最高价或最低价相同的情况,这…...

Sparse4D运行笔记

Sparse4D有三个版本,其中V1和V2版本的官方文档中环境依赖写得比较模糊且依赖库有版本冲突。 1. Sparse4D V1 创建环境 conda create sparse4dv1 python3.8 激活环境 conda activate sparse4dv1 安装torch, torchvision, torchaudio pip install torch1.13.0c…...

Bitmap、Roaring Bitmap、HyperLogLog对比介绍

一、Bitmap(位图)概述 Bitmap 是一种用位(bit)来表示集合元素是否存在的数据结构。每个位代表一个元素的状态(0或1),非常节省空间且支持快速集合操作。 常见Bitmap类型: 普通Bitmap 最简单的位数组,适合元素范围固定且不稀疏的场景。例如,元素范围是0~1000,用1001…...

Rust 数据结构:HashMap

Rust 数据结构:HashMap Rust 数据结构:HashMap创建一个新的哈希映射HashMap::new()将元组变成哈希表 访问哈希映射中的值哈希映射和所有权更新哈希映射重写一个值仅当键不存在时才添加键和值基于旧值更新值 散列函数 Rust 数据结构:HashMap …...

Spring6学习及复习笔记

1、快速入门认识 通过编写xml配置文件来创建对象,读取bean标签的id值和class值来创建。 之后再通过对象调用相关的方法(这里实际上用到的是反射机制) 对象会存放到Map集合中 大致反射思路如下:(这里只是模拟&#x…...

开源语音-文本基础模型和全双工语音对话框架 Moshi 介绍

介绍 一、项目背景 Moshi是一种语音-文本基础模型和全双工语音对话框架。它使用了Mimi这一业界领先的流式神经音频编解码器。Mimi能够以完全流式处理的方式(80毫秒的延迟,即帧大小),将24千赫兹的音频信号压缩为12.5赫兹的表示形式…...

MATLAB学习笔记(六):MATLAB数学建模

MATLAB 是数学建模的强大工具,其丰富的函数库和可视化能力可以高效解决各类数学建模问题。以下是 MATLAB 数学建模的完整指南,涵盖建模流程、常用方法、代码示例及实际应用。 一、数学建模的基本流程 问题分析 • 明确目标(预测、优化、分类等…...

博客打卡-求解流水线调度

题目如下: 有n个作业(编号为1~n)要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi(1≤i≤n)。 流水…...

【Ragflow】22.RagflowPlus(v0.3.0):用户会话管理/文件类型拓展/诸多优化更新

概述 在历经三周的阶段性开发后,RagflowPlus顺利完成既定计划,正式发布v0.3.0版本。 开源地址:https://github.com/zstar1003/ragflow-plus 新功能 1. 用户会话管理 在后台管理系统中,新增用户会话管理菜单。在此菜单中&…...

深度学习中ONNX格式的模型文件

一、模型部署的核心步骤 模型部署的完整流程通常分为以下阶段,用 “跨国旅行” 类比: 步骤类比解释技术细节1. 训练模型学会一门语言(如中文)用 PyTorch/TensorFlow 训练模型2. 导出为 ONNX翻译成国际通用语言(如英语…...

【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中

WMNav 是由VLM视觉语言模型驱动的,基于世界模型的对象目标导航框架。 设计一种预测环境状态的记忆策略,采用在线好奇心价值图来量化存储,目标在世界模型预测的各种场景中出现的可能性。 本文分享WMNav复现和模型推理的过程~ 下…...