【计算机视觉】目标检测:深度解析YOLOv9:下一代实时目标检测架构的创新与实战
深度解析YOLOv9:下一代实时目标检测架构的创新与实战
- 架构演进与技术创新
- YOLOv9的设计哲学
- 核心创新解析
- 1. 可编程梯度信息(PGI)
- 2. 广义高效层聚合网络(GELAN)
- 3. 轻量级设计
- 环境配置与快速开始
- 硬件需求建议
- 详细安装步骤
- 项目结构解析
- 模型训练全流程
- 1. 数据准备规范
- 2. 自定义数据集配置
- 3. 训练命令详解
- 4. 训练监控与分析
- 模型推理与部署
- 1. 基础检测示例
- 2. 高级推理功能
- 3. 模型导出与优化
- 关键技术深度剖析
- 1. PGI(可编程梯度信息)机制
- 2. GELAN架构实现
- 3. 损失函数创新
- 常见问题与解决方案
- 1. 训练发散问题
- 2. CUDA内核编译失败
- 3. ONNX导出形状错误
- 性能优化策略
- 1. 模型量化实践
- 2. TensorRT深度优化
- 3. 模型剪枝技术
- 学术背景与扩展阅读
- 基础论文
- 相关研究
- 应用场景与展望
- 典型工业应用
- 未来发展方向
YOLOv9是由WongKinYiu团队推出的目标检测框架最新力作,在YOLO系列基础上进行了多项根本性创新,重新定义了实时目标检测的性能边界。本文将全面剖析YOLOv9的核心技术创新、架构设计原理以及工程实现细节,并提供从环境配置到模型部署的完整实战指南。
论文地址
项目地址
架构演进与技术创新
YOLOv9的设计哲学
YOLOv9建立在三个关键设计原则之上:
- 信息完整性:通过PGI(Programmable Gradient Information)解决深度网络中的信息丢失问题
- 参数效率:采用GELAN(Generalized ELAN)结构最大化计算效能
- 精度-速度平衡:在不同计算预算下均实现SOTA性能
核心创新解析
1. 可编程梯度信息(PGI)
- 问题背景:深度网络训练中的信息瓶颈
- 解决方案:
- 辅助可逆分支保持完整梯度流
- 主分支采用轻量设计
- 多级特征聚合机制
2. 广义高效层聚合网络(GELAN)
- 基础结构:扩展自ELAN的灵活计算块
- 关键特性:
- 支持任意计算块组合
- 动态参数分配
- 跨层特征重用
3. 轻量级设计
- 模型系列:
- YOLOv9-Tiny:<2M参数
- YOLOv9-S:7.2M参数
- YOLOv9-M:20.1M参数
- YOLOv9-E:25.5M参数
环境配置与快速开始
硬件需求建议
设备类型 | 推荐配置 | 预期性能 (640x640) |
---|---|---|
高端GPU | RTX 4090 | 1.2ms/inference |
中端GPU | RTX 3060 | 4.8ms/inference |
边缘设备 | Jetson Orin | 12ms/inference |
CPU-only | Core i9-13900K | 65ms/inference |
详细安装步骤
# 克隆仓库(推荐使用最新release)
git clone https://github.com/WongKinYiu/yolov9.git
cd yolov9# 创建conda环境(Python 3.9+)
conda create -n yolov9 python=3.9
conda activate yolov9# 安装依赖(PyTorch 2.0+)
pip install torch>=2.0.0 torchvision>=0.15.1
pip install -r requirements.txt# 验证安装
python detect.py --weights yolov9-c.pt --source data/images/bus.jpg
项目结构解析
yolov9/
├── models/ # 模型定义
│ ├── common.py # 基础模块
│ ├── yolo.py # YOLO特定层
│ └── pgigelan.py # PGI+GELAN实现
├── cfg/ # 模型配置
│ ├── train/ # 训练配置
│ └── deploy/ # 部署配置
├── data/ # 数据配置
├── utils/ # 工具脚本
├── runs/ # 输出目录
├── detect.py # 推理脚本
└── train.py # 训练脚本
模型训练全流程
1. 数据准备规范
YOLOv9兼容YOLO格式数据集:
dataset/
├── images/
│ ├── train/ # 训练图片
│ └── val/ # 验证图片
└── labels/├── train/ # 标注文件(.txt)└── val/ # 格式: class x_center y_center width height
2. 自定义数据集配置
# data/custom.yaml
path: ../datasets/custom
train: images/train
val: images/val
test: images/testnames:0: person1: car2: traffic_light
3. 训练命令详解
# 单GPU训练(示例使用YOLOv9-C)
python train.py \--batch 64 \--epochs 300 \--img 640 \--data data/custom.yaml \--cfg models/yolov9-c.yaml \--weights '' \--device 0 \--hyp data/hyps/hyp.scratch-high.yaml# 多GPU训练(DDP模式)
python -m torch.distributed.run \--nproc_per_node 4 \train.py \--batch 128 \--data data/coco.yaml \--cfg models/yolov9-e.yaml \--device 0,1,2,3
关键参数解析:
--batch
:总批次大小(自动分配至各GPU)--cfg
:模型架构配置文件--hyp
:超参数配置(学习率、增强等)--cache
:启用RAM缓存加速训练
4. 训练监控与分析
YOLOv9集成多种可视化工具:
# 启动TensorBoard
tensorboard --logdir runs/train# 使用Weights & Biases(需先wandb login)
python train.py ... --wandb
模型推理与部署
1. 基础检测示例
from yolov9.models.common import DetectMultiBackend
from yolov9.utils.general import non_max_suppression# 加载模型
model = DetectMultiBackend(weights='yolov9-c.pt', device='cuda:0')# 推理流程
im = cv2.imread('image.jpg') # BGR格式
im = preprocess(im) # 预处理(resize+normalization)pred = model(im) # 前向传播
pred = non_max_suppression(pred) # NMS处理# 结果可视化
plot_results(im, pred)
2. 高级推理功能
# 视频流处理
cap = cv2.VideoCapture(0)
while cap.isOpened():ret, frame = cap.read()if not ret: break# 异步推理results = model(frame, augment=True, visualize=True)# 自定义后处理results = filter_by_class(results, keep_classes=[0, 2]) # 只保留person和carcv2.imshow('YOLOv9', render_results(frame, results))if cv2.waitKey(1) == ord('q'): break
3. 模型导出与优化
# 导出ONNX(含动态维度)
python export.py \--weights yolov9-c.pt \--include onnx \--dynamic \--simplify# 导出TensorRT引擎
python export.py \--weights yolov9-c.pt \--include engine \--device 0 \--fp16
关键技术深度剖析
1. PGI(可编程梯度信息)机制
PGI系统由三个关键组件构成:
# models/pgigelan.py
class PGI(nn.Module):def __init__(self, channels):super().__init__()self.rev = ReversibleBlock(channels) # 可逆分支self.main = nn.Sequential( # 主分支Conv(channels, channels//2, 1),CSPBlock(channels//2))self.fuse = ChannelAttention(2*channels) # 特征融合def forward(self, x):x_rev = self.rev(x)x_main = self.main(x)return self.fuse(torch.cat([x_rev, x_main], dim=1))
2. GELAN架构实现
GELAN的灵活结构定义:
# models/yolov9-c.yaml
backbone:# [from, repeats, module, args][[-1, 1, Conv, [64, 3, 2]], # 0-P1/2[[-1, 1, GELAN, [128, 2]], # 1-P2/4[[-1, 1, GELAN, [256, 2]], # 2-P3/8[[-1, 1, GELAN, [512, 2]], # 3-P4/16[[-1, 1, GELAN, [1024, 2]], # 4-P5/32
3. 损失函数创新
YOLOv9的复合损失包含:
- DPIoU Loss:改进的定位损失
\mathcal{L}_{DPIoU} = 1 - IoU + \frac{\rho^2(c,c^{gt})}{d^2} + \gamma v
- Task-aligned Focal Loss:分类任务优化
- Objectness-aware Weighting:动态调整正负样本权重
常见问题与解决方案
1. 训练发散问题
现象:损失值NaN或异常波动
解决方案:
- 检查数据标注完整性
python utils/check_labels.py --data data/custom.yaml
- 调整学习率策略
# data/hyps/hyp.scratch-low.yaml lr0: 0.01 # 初始学习率 lrf: 0.01 # 最终学习率比例 warmup_epochs: 3
- 使用梯度裁剪
python train.py ... --clip_grad 10.0
2. CUDA内核编译失败
现象:RuntimeError: CUDA kernel failed to compile
解决方法:
- 确认CUDA工具包版本匹配
nvcc --version # 应显示与PyTorch兼容版本
- 清理缓存重新编译
rm -rf ~/.cache/torch_extensions/
- 禁用自定义算子
python train.py ... --no_compile
3. ONNX导出形状错误
现象:ONNX export failed: Unsupported: dynamic dimensions
解决步骤:
- 指定固定导出尺寸
python export.py ... --img 640 --batch 1
- 检查自定义算子兼容性
torch.onnx.export(..., custom_opsets={'custom_domain': 1})
- 使用官方提供的导出配置
性能优化策略
1. 模型量化实践
# 动态量化示例
model = torch.ao.quantization.quantize_dynamic(model,{torch.nn.Conv2d, torch.nn.Linear},dtype=torch.qint8
)# 保存量化模型
torch.jit.save(torch.jit.script(model), 'yolov9_quantized.pt')
2. TensorRT深度优化
# 构建优化引擎
trtexec --onnx=yolov9.onnx \--saveEngine=yolov9.engine \--fp16 \--best \--workspace=8192 \--minShapes=images:1x3x320x320 \--optShapes=images:1x3x640x640 \--maxShapes=images:1x3x1280x1280
3. 模型剪枝技术
# 结构化剪枝示例
import torch.nn.utils.prune as prunefor name, module in model.named_modules():if isinstance(module, nn.Conv2d):prune.l1_unstructured(module, name='weight', amount=0.2)prune.remove(module, 'weight')
学术背景与扩展阅读
基础论文
-
PGI原理:
- Wang C, et al. “Programmable Gradient Information for Maintaining Information in Deep Neural Networks” arXiv:2301.05128
-
ELAN结构:
- Wang C, et al. “Extended Efficient Layer Aggregation Networks for Scalable Modeling” NeurIPS 2022
-
YOLOv9技术报告:
- Wong K, et al. “YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information” arXiv:2402.13616
相关研究
-
可逆神经网络:
- Gomez A, et al. “The Reversible Residual Network: Backpropagation Without Storing Activations” NeurIPS 2017
-
动态网络架构:
- Veit A, et al. “HyperNetworks” ICLR 2017
-
目标检测前沿:
- DETR系列、ConvNext等现代检测器
应用场景与展望
典型工业应用
- 无人机巡检:小目标检测优化
- 医疗影像:高精度病灶定位
- 零售分析:密集场景物体计数
- 自动驾驶:实时多目标跟踪
未来发展方向
- 多模态融合:结合点云/红外数据
- 自监督学习:减少标注依赖
- 神经架构搜索:自动化设计PGI路径
- 边缘计算:面向IoT设备的极致优化
YOLOv9通过其创新的PGI机制和GELAN架构,在目标检测领域实现了新的突破。本文提供的技术解析和实战指南,将帮助开发者快速掌握这一先进框架的核心技术,并成功应用于各类视觉任务中。随着研究的深入,YOLO系列仍将持续演进,推动实时目标检测技术的边界不断扩展。
相关文章:
【计算机视觉】目标检测:深度解析YOLOv9:下一代实时目标检测架构的创新与实战
深度解析YOLOv9:下一代实时目标检测架构的创新与实战 架构演进与技术创新YOLOv9的设计哲学核心创新解析1. 可编程梯度信息(PGI)2. 广义高效层聚合网络(GELAN)3. 轻量级设计 环境配置与快速开始硬件需求建议详细安装步骤…...
Android Studio Profiler
1.我们想要查看自己方法的调用链,或者分析方法耗时的情况,可以选择Android Studio的Profiler,比较方便快捷。如下: 2.基本的面板参数讲解: 3.可以通过搜索,查看对应的方法,以及方法的调用链…...
Android Studio for Platform(ASFP)真机调试
连接设备 由于ubuntu连接adb设备每次都需要配置usb权限,很麻烦。并且每次换设备还要重新配置,我多数设备都是用wifi的adb方式连接。 开发板显示 连接显示器配合usb鼠标或者遥控器操作(因为开发板默认开启了adb,我这里是使用有线…...
如何个人HA服务器地址和长期密钥
下面分两步说明如何获取你的 Home Assistant 服务器地址以及创建“长期访问令牌”(Long-Lived Access Token),并给出一个简单的 Python 调用示例。 一、获取 Home Assistant 服务器地址 默认域名/端口 如果你在本机或局域网内安装并使用默认设…...
生物化学笔记:神经生物学概论04 视觉通路简介视网膜视网膜神经细胞大小神经节细胞(视错觉)
视觉通路简介 神经节细胞的胞体构成一明确的解剖层次,其外邻神经纤维层,内接内丛状层,该层在鼻侧厚约10~20μm,最厚在黄斑区约60~80μm。 全部细胞数约为120万个(1000000左右)。 每个细胞有一轴突ÿ…...
C++——调用OpenCV和NVIDIA Video Codec SDK库实现使用GPU硬解码MP4视频文件
系列文章目录 参考博客 参考博客 参考博客 文章目录 系列文章目录前言一、下载安装NVIDIA Video Codec SDK1、下载NVIDIA Video Codec SDK2、安装NVIDIA Video Codec SDK 二、下载编译安装OpenCV1、下载OpenCV2、编译安装OpenCV3、配置环境变量4、报错解决报错一: …...
dify升级最新版本(保留已创建内容)
dify安装参考文章: DeepSeek+Dify本地部署私有化知识库 如果之前安装的时候,是通过docker镜像的方式。 从网上下载最新的dify包,下载地址: https://github.com/langgenius/dify 下载完成后,把文件覆盖原…...
4、RabbitMQ的七种工作模式介绍
目录 一、Simple(简单模式) 1.1 概念 1.2 代码实现 消费者 运行结果 二、Work Queue(工作队列) 2.1 概念 1.2 代码实现 生产者 消费者 运行结果 三、Publish/Subscribe(发布/订阅模式) 3.1 概念 3.2 代码实现 生产者…...
React Three Fiber 详解:现代 Web3D 的利器
React Three Fiber 详解:现代 Web3D 的利器 随着 Web 技术的发展,3D 场景与交互已经不再是游戏开发者的专利。越来越多的网站、产品页、交互动画,开始大量引入 3D 元素。要在 React 项目中高效使用 WebGL,React Three Fiber(简称 R3F)成为了目前最主流的选择。 今天这篇…...
同步与互斥(同步)
线程同步 条件变量 当⼀个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。 例如⼀个线程访问队列时,发现队列为空,它只能等待,只到其它线程将⼀个节点添加到队列中。这种情况就需要⽤到条…...
C语言教程(二十一):C 语言预处理器详解
一、预处理器概述 C语言预处理器是一个文本替换工具,它会对源代码进行扫描,处理以 # 开头的预处理指令。这些指令可以控制预处理器的行为,实现宏定义、文件包含、条件编译等功能。预处理器的主要作用是为后续的编译过程准备代码。 二、常见的…...
grafana/loki 设置日志保留时间
loki:limits_config:retention_period: 189h参考官网 Configuring the retention period...
Spring Boot × K8s 监控实战-集成 Prometheus 与 Grafana
在微服务架构中,应用的可观测性至关重要。Kubernetes 已成为容器化部署的标准,但其自身的监控能力有限,需要与其他工具集成才能实现详细的运行数据采集与分析。 本文将通过 Spring Boot Kubernetes Prometheus Grafana 实战,打…...
SpringBoot+Mybatis通过自定义注解实现字段加密存储
😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: SpringBootMybatis实现字段加密 ⏱️ 创作时间: 2025年04月…...
Vue3调度器错误解析,完美解决Unhandled error during execution of scheduler flush.
目录 Vue3调度器错误解析,完美解决Unhandled error during execution of scheduler flush. 一、问题现象与本质 二、七大高频错误场景与解决方案 1、Setup初始化陷阱 2、模板中的"幽灵属性" 3、异步操作的"定时炸弹" 4、组件嵌套黑洞 5…...
第35周Zookkeeper+Dubbo Zookkeeper
第35周ZooKeeperDubbo ZooKeeper 一、周介绍 本周主要内容包括ZooKeeper、Dubbo以及面试三部分。 1.1 ZooKeeper 节点介绍 ZooKeeper的数据结构核心是每个node节点。节点具有属性、特点和功能,其数据结构为树形结构,类似于多叉树,分隔符是…...
基于tabula对pdf中多个excel进行识别并转换成word中的优化(四)
对上一节进行优化: 1、识别多个excel 2、将表格中的nan替换成空字符串 一、示例中的pdf内容 二、完整代码参考: import tabula import numpy as np from docx import Document from docx.oxml.ns import qn from docx.oxml import OxmlElementdef get_t…...
Electron-vite中ELECTRON_RENDERER_URL环境变量如何被设置的
近期我专注于前端技术栈 Electron 与 Vue3 的学习实践,依照教程网站 快速开始 | electron-vite 的快速入门指引,搭建了一个示例项目。成功完成项目下载,并通过 npm run dev 命令启动项目后,在研读项目 main 目录下的 index.ts 文件…...
Electron Forge【实战】桌面应用 —— 将项目配置保存到本地
最终效果 定义默认配置 src/initData.ts export const DEFAULT_CONFIG: AppConfig {language: "zh",fontSize: 14,providerConfigs: {}, };src/types.ts export interface AppConfig {language: zh | enfontSize: numberproviderConfigs: Record<string, Recor…...
gem5-gpu 安装过程碰到的问题记录 关于使用 Ruby + Garnet
如何使用Garnet? 这并不像一组命令行参数那么简单。要使用gem5-gpu+garnet,您可能需要修改python配置脚本。 问题是配置文件gem5-gpu/configs/gpu_protocol/VI_hammer_fusion.py指定了链接的intBW和extBW。 看来Garnet不支持这一点。然而,似乎所有的链路都是相同的带宽,所…...
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
一、基本介绍 MobileIMSDK是一套全平台原创开源IM通信层框架: 超轻量级、高度提炼,lib包50KB以内;精心封装,一套API同时支持UDP、TCP、WebSocket三种协议(可能是全网唯一开源的);客户端支持iOS…...
《阿里Qwen3开源:AI新纪元的破晓之光》
《阿里Qwen3开源:AI新纪元的破晓之光》 惊爆!阿里释放 Qwen3 “大杀器” 在人工智能的星辰大海中,每一次新模型的诞生都如同点亮一颗新星,而阿里巴巴此次发布并开源 Qwen3,无疑是投下了一枚震撼弹,瞬间吸引了全球 AI 领域的目光。这不仅是阿里在 AI 征程上的一座重要里程…...
前端防护利器:disable-devtool 使用指南 - 保护你的Web应用安全
文章目录 前端防护利器:disable-devtool 使用指南 - 保护你的Web应用安全为什么需要禁用开发者工具?什么是 disable-devtool?安装与引入通过npm/yarn安装通过CDN引入ES6模块引入配置选项详解完整使用示例检测模式说明最佳实践在线考试系统防护敏感数据保护注意事项更多资源前…...
万物皆可执行:多功能机器人正在定义新生产力法则
引言 当波士顿动力的Atlas完成高难度体操动作,当特斯拉Optimus在工厂精准分拣零件,当小鹏Iron机器人以拟态双手递上咖啡——这些场景不再只是科幻电影的桥段,而是多功能机器人(Polyfunctional Robots)带来的真实变革…...
从车道检测项目入门open cv
从车道检测项目入门open cv 前提声明:非常感谢b站up主 嘉然今天吃带变,感谢其视频的帮助。同时希望各位大佬积积极提出宝贵的意见。😊😊😊(❁◡❁)(●’◡’●)╰(▽)╯ github地址:https://github.com/liz…...
Vue3取消网络请求的方法(AbortController)
在 Vue3 中,已经发出的请求是否可以被取消,取决于你使用的 HTTP 客户端库。Vue3 本身不直接处理 HTTP 请求,但通常搭配 Axios 或原生 fetch 使用。以下是两种主流方案的取消方法: 1. 使用 Axios CancelToken Axios 提供了 Cance…...
深度解析Qwen3:性能实测对标Gemini 2.5 Pro?开源大模型新标杆的部署挑战与机遇
大语言模型(LLM)的浪潮持续席卷技术圈,性能天花板不断被刷新。以 Gemini 2.5 Pro 为代表的闭源模型展现了惊人的能力,但其高昂的成本和有限的可访问性也让许多开发者望而却步。与此同时,开源力量正以前所未有的速度崛起…...
AI遇见端动态神经网络:Cephalon(联邦学习+多模态编码)认知框架构建
前引: 在数字化浪潮席卷全球的今天,数据爆炸与算力需求的指数级增长正推动着云计算向更智能、更高效的方向演进。面对海量终端设备的实时响应需求、复杂AI模型的分布式训练挑战,以及多场景数据的协同处理难题,传统云架构逐渐显露出…...
机器学习之五:基于解释的学习
正如人们有各种各样的学习方法一样,机器学习也有多种学习方法。若按学习时所用的方法进行分类,则机器学习可分为机械式学习、指导式学习、示例学习、类比学习、解释学习等。这是温斯顿在1977年提出的一种分类方法。 有关机器学习的基本概念,…...
高翔视觉slam中常见的OpenCV和Eigen的几种数据类型的内存布局及分配方式详解
vector<Eigen::Vector2d, Eigen::aligned_allocator<Eigen::Vector2d>> 内存布局及分配方式详解 1. 内存对齐的必要性 Eigen 的固定大小类型(如 Eigen::Vector2d、Eigen::Matrix4d 等)需要 16 字节内存对齐,以支持 SIMD 指令(如 SSE/AVX)的并行计算。若未对…...
电子电器架构 --- 人工智能、固态电池和先进自动驾驶功能等新兴技术的影响
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
【C++11】类的新功能
前言 上文我们学习了包装器:function和bind。function可以包装一切可调用对象,并用统一的调用方式调用不同的可调用对象。bind则可以控制函数参数个数【C11】包装器:function与bind-CSDN博客 本文我们来学习C11的类中新增的一些功能 默认的移…...
1.6 点云数据获取方式——单目相机多视图几何
图1-6-1多视图几何重建 单目相机的多视图几何研究具有重要的理论与实际意义。在理...
马井堂-区块链技术:架构创新、产业变革与治理挑战(马井堂)
区块链技术:架构创新、产业变革与治理挑战 摘要 区块链技术作为分布式账本技术的革命性突破,正在重构数字时代的信任机制。本文系统梳理区块链技术的核心技术架构,分析其在金融、供应链、政务等领域的实践应用,探讨共识算法优化、…...
MicroBlaze软核的开发使用
一、MicroBlaze 介绍 MicroBlaze 是由 Xilinx 开发的一种可配置的 32 位 RISC 软处理器内核。它作为 FPGA 设计中的 IP 核,通过 Vivado 工具进行配置和集成。MicroBlaze 提供了高度的灵活性,允许开发人员根据应用需求调整处理器的功能、性能和资源占用。…...
是从原始数据到价值挖掘的完整流程解析,涵盖数据采集、清洗、存储、处理、建模、可视化等核心环节,并附上完整代码示例(含详细注释)及技术选型建议表
以下是从原始数据到价值挖掘的完整流程解析,涵盖数据采集、清洗、存储、处理、建模、可视化等核心环节,并附上完整代码示例(含详细注释)及技术选型建议表。 一、全流程技术栈概览 阶段核心任务关键技术/工具数据采集获取原始数据…...
【爬虫】案例-获取cbh电影
以cupfox.in为例子: 观察ts文件和m3u8文件,可以知道一个完整的视频是由多个ts文件组合,而m3u8则是记录所有ts文件信息的文本 思路 1.先爬一个ts,测试能否观看 2.爬m3u8文件,通过正则分析出变化的部分 3.完整的把每个…...
分治而不割裂—分治协同式敏捷工作模式
分治而不割裂:解密敏捷协同工作模式如何驱动大企业持续领跑 在数字化浪潮中,亚马逊仅用11天完成Prime Day全球技术架构升级,华为5G基站项目组创造过单周迭代47个功能模块的纪录,这些商业奇迹的背后,都隐藏着一个共性秘…...
【MySQL】聚合查询 和 分组查询
个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 🌴 一、聚合查询 🌲1.概念 🌲2.聚合查询函数 COUNT() SUM() AVG(&…...
Weka通过10天的内存指标数据计算内存指标动态阈值
在数据处理和监控系统中,动态阈值的计算是一种常见的方法,用以根据数据的实际分布和变化来调整阈值,从而更有效地监控和预警。在Weka中,虽然它主要是用于机器学习和数据挖掘的工具,但你可以通过一些间接的方法来实现…...
iOS签名的包支持推送功能吗?
推送失败的可能原因: 1. 生产包没有上报token ,所以无法推送成功,需要检查是否在企业包签名后导致无法完成apns的注册,无法从Apple取到token 2. 问题可能出在证书上,因为iOS推送有一个开发证书和一个生产证书ÿ…...
JavaWeb:后端web基础(TomcatServletHTTP)
一、今日内容 二、Tomcat 介绍与使用 介绍 基本使用 小结 配置 配置 查找进程 三、Servlet 什么是Servlet 快速入门 需求 步骤 1.新建工程-模块(Maven) 2.修改打包方式-war 3.编写代码 /*** 可以选择继承HttpServlet*/ WebServlet("/hello&q…...
关于浏览器对于HTML实体编码,urlencode,Unicode解析
目录 HTML实体编码 URL编码 Unicode编码 解析层次逻辑 为什么<script></script>不可以编码符号 为什么不能编码JavaScript:协议 为什么RCDATA标签中的都会被解析成文本 为什么HTML编码了<>无法执行 HTML实体编码 通过特殊语法(<、>…...
C++智能指针滥用带来的性能与内存问题有哪些
在现代C编程中,智能指针(Smart Pointers)已经成为开发者工具箱中不可或缺的一部分。它们作为一种对传统裸指针(Raw Pointers)的替代方案,旨在解决长期困扰C开发者的内存管理难题。C作为一门高性能的系统编程…...
C++算法(17):reverse函数用法详解,头文件<algorithm>与实战示例
在C中,std::reverse 函数用于反转容器或数组中元素的顺序,需包含头文件 <algorithm>。以下是其用法详解: 基本用法 函数原型: template <class BidirIt> void reverse(BidirIt first, BidirIt last); 参数…...
【滑动窗口】最大连续1的个数|将x减到0的最小操作数
文章目录 1.最大连续1的个数2.将x减到0的最小操作数 1.最大连续1的个数 解法: 1.暴力解法给定一个left指针固定左端点元素,再给定一个right指针从左端点元素开始遍历。 当遇到1时,让一个计数器cnt1,当遇到0时,让统计0…...
MySQL 在 CentOS 7 环境下的安装教程
🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...
嵌入式复习第一章
1. 嵌入式系统概念、应用与特点 2. 嵌入式系统的硬件( CPU 、外设) 3. 主要嵌入式软件系统(应用及 OS ) 4. 嵌入式系统的发展趋势 嵌入式系统定义 “以 应用为中心 ,以计算机技术为基础,并且软硬件…...
【C#】.net core6.0无法访问到控制器方法,直接404。由于自己的不仔细,出现个低级错误,这让DeepSeek看出来了,是什么错误呢,来瞧瞧
🌹欢迎来到《小5讲堂》🌹 🌹这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!&#…...
Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(三)
基于前两篇内容,继续完善企业官网页面: Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(一)-CSDN博客 Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(二)-CSDN博客 3.5 联系方…...