自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (4)
  • 收藏
  • 关注

原创 ffmpeg源码如何添加一种新的gpu加速器

在中添加新的设备类型:// ... 现有类型AV_HWDEVICE_TYPE_MYGPU, // 你的新GPU类型// ...

2025-11-19 15:33:03 529

原创 torch之分布式训练

绝大多数情况下,分布式训练使用数据并行,每张卡独立工作,只在梯度同步时通信极少数情况下(模型太大),使用模型并行,需要层层传递自动处理数据并行的通信,对用户透明。

2025-10-20 15:42:23 492

原创 yolo ultralytics之amp(Automatic Mixed Precision,自动混合精度)

在Ultralytics YOLO中,的amp主要作用🚀加速训练: 通过混合精度提高30-50%训练速度💾节省显存: 减少40-60%的GPU内存使用⚖️保持精度: 自动管理精度转换,最小化精度损失启用条件PyTorch版本 ≥ 1.10.0使用GPU设备(非CPU)模型和操作兼容AMP实际效果:让用户无需手动管理精度转换,就能获得接近FP32精度的训练结果,同时享受FP16的速度和内存优势。

2025-10-17 14:45:08 640

原创 x264中的λ-domain原理

核心公式。这是所有决策的准则。λ 的角色: 一个动态的权重,平衡失真和码率。λ 大,重码率;λ 小,重质量。桥梁作用: λ 将码率控制(高层策略)与编码决策(底层执行)紧密联系起来。码率控制算出 λ,编码器使用 λ。与 QP 的关系: λ 和 QP 通过一个近似公式相互转换,将理论上的权衡落实为实际的压缩操作。正是通过 λ-domain 这种统一的率失真优化框架,x264 才能在给定的码率下,智能地在整个视频的各个部分分配比特,从而实现全局的、近似最优的编码效率。

2025-10-10 17:19:34 397

原创 CUDA编程之<<<... >>>

特性描述名称执行配置语法作用指定如何组织线程层次(网格和线程块)以在 GPU 上启动核函数。核心参数<<<网格大小,线程块大小>>>可选参数共享内存大小、CUDA 流。类比网格是整个军队,线程块是师或团,线程是士兵。<<<...>>>就是你下达的指令:“派出 10 个师(网格),每个师 256 人(线程块)。简单来说,<<<...>>>是连接主机(CPU)代码和设备(GPU)核函数的桥梁,是启动大规模并行计算的钥匙。

2025-09-19 14:39:39 528

原创 ONNX Runtime 中的 Cache Mode

特性描述目的消除 TensorRT 等 EP 的首次推理编译延迟,极大加快模型加载速度。工作原理将编译好的引擎计划序列化到磁盘,下次运行时直接反序列化加载。启用方式在 Session Options 中为对应 EP 设置和。适用场景生产环境部署,需要频繁创建会话的场景。模型和硬件配置固定的环境。主要限制缓存与硬件、软件版本、模型、配置严格绑定,任何更改都可能导致缓存失效。简单来说,

2025-09-03 11:10:15 515

原创 NVIDIA Video Codec SDK-解码接口cuvid简介

特性已废弃的 NVCUVID现代的 NVDECODE (底层 API)现代的 NVDECODE (高层 API - NvDecoder)状态已废弃 (Deprecated)官方推荐 (底层控制)官方推荐 (易用性首选)编程模型C 函数C 函数C++ 类复杂度高,需要管理大量细节中高,仍需管理解码会话低,开箱即用灵活性高高中(满足绝大多数场景)推荐对象遗留项目维护需要极致控制的高级用户所有新项目、大多数开发者。

2025-09-02 10:20:38 918

原创 Python之调试器pdb(gdb)用法

breakpoint() # 相当于 import pdb;pdb.set_trace()pdb.set_trace() # 在这里设置断点。# (Pdb) break 10 # 在第10行设置断点。(continue) - 继续执行直到下一个断点。# (Pdb) run # 运行程序。# (Pdb) next # 单步执行。(step) - 进入函数调用。(list) - 显示当前代码。(next) - 执行下一行。(quit) - 退出调试器。# 使用-m参数启动调试。

2025-08-28 16:13:03 182

原创 yolo ultralytics之backbone的通道数

问题:yolov8.yaml中主干网络中的每一层conv/c2f/sppf args的第一个参数为啥都是是通道数,没有输入数据的大小等信息?因为输入图像的大小是用户自定义的、可变的,而网络结构是固定的。网络每一层的输出大小(包括高度、宽度)会根据输入大小自动计算,无需在配置中硬编码。但通道数(深度)是网络结构设计的一部分,是固定的,必须在配置中明确指定。下面我们来详细解释为什么这样设计,以及它是如何工作的:输入尺寸(高度、宽度): 你训练或推理时输入的图像可以是 ,也可以是 或任何其他尺寸。同一个 网络

2025-08-28 09:45:06 933

原创 yolo ultralytics之yolov8.yaml文件简介

模块化设计:通过.yaml文件清晰定义,易于修改和扩展。复合缩放:通过scales参数轻松缩放模型大小(n, s, m, l, x),在速度和精度间取得平衡。现代化的主干:使用C2f和SPPF等高效模块,提升特征提取能力。PAFPN 风格颈部:使用上采样和拼接操作,有效地融合了来自主干网络的多尺度特征。解耦头:YOLOv8 的Detect层将分类和回归任务在一定程度上分离,提升了检测性能。总而言之,文件是 YOLOv8 模型的蓝图。

2025-08-27 19:38:17 718

原创 YOLO-yaml/pt模型文件的差异

从头开始创建一个全新的、未训练(随机初始化权重)的模型。它的架构由这个 YAML 文件定义。加载一个已经预训练好的模型。这个.pt文件包含了模型的架构定义和训练好的权重。下面我们进行详细的对比分析。

2025-08-27 13:51:02 754

原创 NumPy/PyTorch/C char数组内存排布

操作是否会重新排布/拷贝数据?说明否创建紧凑、C连续的float64数组是创建新数组,拷贝并转换数据否创建视图,重新解释原有数据(危险)arr.T否创建转置视图,但布局可能改变通常否零拷贝共享内存,要求arr连续是总是拷贝数据,创建独立Tensor与C数组互转通常否通过或直接获取指针,零拷贝,但对内存布局有严格要求核心思想:高性能计算库(NumPy, PyTorch)在与自身或其他库交互时,会尽可能地避免数据拷贝(零拷贝),而是通过共享内存来实现高效操作。能否实现零拷贝的关键在于。

2025-08-27 09:53:45 1082

原创 onnx推理-复用gpu内存

要复用创建的 GPU 内存并更新其中的数据,有几种方法。关键在于OrtValue,而是重复使用已有的内存。

2025-08-25 09:48:06 541

原创 onnx推理之ort.OrtValue.ortvalue_from_numpy 和 io_binding.bind_ortvalue_output 的组合功能

为一个指定了形状和数据类型的输出张量,在GPU上预分配内存,并指示ONNX Runtime将模型的推理结果直接输出到这块GPU内存中,从而避免GPU到CPU的数据拷贝,极大提升推理性能。它是一种高级优化手段,常用于需要处理实时数据流(如视频、音频)或对延迟有严苛要求的部署场景。

2025-08-25 09:47:10 727

原创 onnx推理之bind_ortvalue_output 的作用和功能

特性常规方法使用输出内存管理由 ONNX Runtime 内部分配由用户预先分配和控制内存开销每次推理都可能分配新内存内存可复用,开销更小数据流计算 -> 内部内存 -> 用户内存(可能拷贝)计算 -> 用户内存(直接写入)性能相对较低,有分配和拷贝开销更高,适合高性能场景代码复杂度简单易用稍复杂,需要手动管理内存简单来说,是一个高级优化功能。对于简单的应用或初学者,标准的推理流程已经足够。但当你在生产环境中追求极致的性能时,这个功能就变得非常重要。

2025-08-25 09:40:51 745

原创 C++之Os::spinPause() 的用法。

项目说明是什么一条用于自旋等待循环中的CPU指令(如x86的PAUSE为什么用1.提升性能:减少多核环境下的内存顺序冲突。2.降低功耗:让自旋等待的CPU核心降低功耗。何时用在实现自旋锁或短时间忙等待循环时。何时不用等待时间可能较长时。此时应使用会让出CPU的机制(如互斥锁、条件变量)。如何实现通过平台特定的内置函数或内联汇编(如希望这个解释能帮助你全面理解的用法和重要性。

2025-08-20 10:34:50 705

原创 Python-api形参封装

在 Python API 功能封装中,参数封装方式的选择需根据和综合评估。

2025-08-19 16:23:17 536

原创 Python-调用ort.InferenceSession的内部机制

在 Python 中,当调用 时,Python 会通过以下机制处理这个类实例化和方法调用:类定义: 模块的 C++ 代码中定义了 类,并通过 Python 绑定(通常是使用 pybind11)将其暴露给 Python。实例化过程:当你调用 时,Python 会: a. 查找 模块中的 类 b. 调用该类的 方法(构造函数) c. C++ 层会加载 ONNX 模型并初始化推理会话 d. 返回一个 Python 对象,这个对象是 C++ 类的 Python 包装器Python 对象:

2025-08-19 10:06:58 527

原创 Python-print()函数用法详解

pythonprint(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)参数说明 objects:要打印的一个或多个对象,用逗号分隔sep:分隔符,默认为一个空格end:结束字符,默认为换行符file:输出流,默认为(控制台)flush:是否立即刷新输出流,默认为pythonprint("Hello, World!") # 输出: Hello, World!2. 打

2025-08-18 09:43:12 533

原创 Python-argparse用法详解

argparse。

2025-08-18 09:34:08 509

原创 ffmpeg-AVFilter 和 Filter Graph 使用指南

FFmpeg 的是一个强大的多媒体滤镜处理框架,允许你对音视频流进行各种处理(如缩放、裁剪、格式转换、混音等)。以下是关于 AVFilter 和 Filter Graph 的核心用法。

2025-08-12 16:24:08 1055

原创 H264之快速判断first mb in slice的问题和原因

/ 移动到下一个字节。// 跳过 NAL header。// 仅当 first_mb_in_slice=0(UEV编码=1)且对齐时有效。// 从 bitstream 读取 UEV(无符号指数哥伦布编码)// 跳过 stop bit。// 判断是否是 first slice。判断,因为 UEV 编码长度可变。,其长度可变(通常1~4字节)。但 UEV 编码未对齐,,其 UEV 编码是。(因为 UEV 编码。,不能直接取固定位。

2025-08-12 15:57:03 692

原创 FFmpeg - 基本 API大全(视频编解码相关的)

API功能描述常用场景注册所有编解码器和格式旧版本初始化 (4.0+已废弃)初始化网络库处理网络流前调用打开媒体文件或流本地文件/网络流输入获取流信息打开输入后获取详细信息查找解码器根据codec_id查找解码器创建编解码器上下文解码器/编码器设置复制参数到上下文设置解码器参数打开编解码器初始化编解码器读取数据包解码循环中获取数据发送数据包到解码器现代解码流程接收解码后的帧现代解码流程释放数据包处理完包后释放资源释放帧处理完帧后释放资源。

2025-08-11 19:27:01 813

原创 cuda编程之内核执行配置参数-网格参数

(如图像处理中的2D网格或体积计算的3D网格),避免手动计算多维索引。:一维和三维网格的总线程块数相同时,最终能启动的线程总数相同。:根据问题的自然维度选择匹配的网格布局,避免不必要的索引计算。:多维网格可能提升内存访问局部性,减少计算索引的开销。(尤其是处理2D/3D数据时),减少缓存行浪费。:一维网格适合通用场景,但需手动处理多维索引。:直接映射图像坐标,无额外计算。(如图像、矩阵),可直接用多维。// 例如处理2D图像时更直观。// 内核中需手动计算2D索引。:三维网格更直观表达多维问题。

2025-08-08 16:45:03 528

原创 cuda编程之内核执行配置参数

在CUDA编程中,是调用CUDA内核(kernel)时的执行配置(execution configuration)语法,用于指定内核如何在GPU上执行。这个语法中的参数确实有固定的成员个数(通常是4个),每个参数都有特定的功能。

2025-08-08 16:41:59 938

原创 C++之compare_exchange_weak和compare_exchange_strong

这两个函数都是C++原子操作中的比较交换(compare-and-swap, CAS)操作,用于实现无锁编程,但它们有一些重要区别。

2025-07-21 19:45:54 397

原创 gstreamer之pipeline/loop/bus

是 GLib 和 GStreamer 中两个重要的函数,它们在多媒体应用程序中通常一起使用,但服务于不同的目的。是通过 GStreamer 的 bus (消息总线) 机制集成在一起的。管道是多媒体处理的基本单元,包含一系列连接的元件(element)来处理媒体流。GStreamer 的 bus (消息总线) 会向 GLib 主循环发送消息。管道处理媒体数据,而主循环处理相关事件,两者协同工作实现完整的媒体处理应用。会处理 GStreamer 管道产生的各种事件 (如状态改变、消息等)

2025-07-16 20:42:46 963

原创 Video Python(Pyav)解码二

img = frame.to_ndarray(format="bgr24") # 转为OpenCV可用的numpy数组。print("解码帧:", frame.pts, frame.time_base)print("解码帧:", frame.pts, frame.time_base)# frame 是解码后的视频帧(av.VideoFrame)# frame 是解码后的视频帧(av.VideoFrame)print("解码帧:", frame.pts)# 直接解码帧(自动处理Packet→Frame)

2025-07-15 14:19:29 911

原创 Video Python(Pyav)解码一

是一个字典,用于传递FFmpeg的格式(Format)、编解码器(Codec)、协议(Protocol)等选项。'c:v': 'h264_cuvid', # NVIDIA硬解。'analyzeduration': '100000', # 快速格式探测。'fflags': 'nobuffer', # 减少缓冲。'flags': 'low_delay', # 低延迟模式。'timeout': '10000000', # 10秒超时。

2025-07-15 14:17:40 1228 3

原创 Gstreamer之”pad-added“事件

gst_bin_add_many(GST_BIN(pipeline), rtspsrc, queue, /* 其他元素 */, NULL);是 GStreamer 中一个非常重要的信号,当元素动态创建一个新的 pad(连接点)时会发出此信号。:某些元素(如 rtspsrc、decodebin)在运行时才会创建 pad,而不是在初始化时就存在。:GStreamer 中元素之间的连接点,数据通过 pad 流动。// 可以在这里实现流重启逻辑。// ... 其他元素创建。// pad-added 回调。

2025-07-14 21:33:44 707

原创 AI之batch normalization

通过对每个批次的均值和方差添加噪声(因批次样本随机性),BN隐式地起到了轻微正则化的作用,可减少对Dropout的依赖。BN通过标准化和可学习的仿射变换,显著提升了深度网络的训练效率和性能,成为现代神经网络设计的标配组件之一。标准化后的数据更接近激活函数(如ReLU)的敏感区间,缓解梯度消失/爆炸问题,允许使用更大的学习率。:对每一层的输入进行标准化(均值为0、方差为1),减少分布波动,使后续层的学习更稳定。对卷积层,BN会沿批次和空间维度(H、W)计算统计量,保持通道(C)独立。# 定义带BN的模型。

2025-07-10 21:37:38 714

原创 AI梯度传播之链式法则

残差连接提供恒等映射路径,确保至少有一条路径的梯度为1(∂y/∂x=1),缓解梯度消失。:残差连接通过梯度叠加(而非连乘)缓解深层网络的梯度消失问题。若多层梯度绝对值 ≪1≪1,连乘后前层梯度趋近于0(消失)。若多层梯度绝对值 ≫1≫1,连乘后前层梯度急剧增大(爆炸)。(II 为指示函数,ReLU的梯度在输入≤0时为0)激活函数(如ReLU)的梯度是局部门控(0或1)。每一层的梯度都是后一层梯度与本层局部梯度的乘积。这是残差结构的核心:梯度来自两条路径的叠加。,每一层的梯度依赖于后一层的梯度计算结果。

2025-07-10 20:50:21 1109

原创 AI之梯度反向传播

计算主路径:(x -> h1 -> a1 -> h2 -> yres( 也就是F(x)+x) -> y。y=ReLU(F(x)+x),其中 F(x)=Conv2(ReLU(Conv1(x)))即使深层梯度 ∂L/∂F(x) 很小,∂L/∂x仍能有效更新浅层权重。:残差结构确保梯度能直接回传至浅层(如 ∂L/∂x​),避免梯度消失。若输入>0则梯度为1,否则为0。

2025-07-10 20:42:19 573

原创 AI onnxruntime iobinding介绍

在 ONNX Runtime 中,是一种,允许直接将输入/输出张量绑定到特定的内存(如 GPU 显存),避免不必要的内存拷贝,从而提升推理速度。

2025-07-01 14:15:28 857

原创 AI 内存基础介绍

在 ONNX Runtime 中,合理选择内存类型可以显著提升推理性能,特别是在 GPU 加速场景下。显卡(GPU)专用的高速内存,CPU 无法直接访问,必须通过 PCIe 总线传输数据。时,输入数据通常需要先拷贝到固定内存,再传输到 GPU 显存。:当系统内存不足时,部分内存页可能被交换到磁盘(虚拟内存)。→ 普通 CPU 内存,可能被换出,适合非实时任务。→ GPU 专用内存,计算速度最快,但容量有限。从固定内存高速拷贝数据,比可分页内存快得多。管理,内存页可以按需交换到磁盘(swap)。

2025-07-01 10:07:48 618

原创 Mesa中DRI3与SWRast屏幕创建区别

如果你需要高性能的图形渲染,并且系统支持硬件加速,使用。如果你在没有GPU或需要兼容性测试的环境下,使用。

2025-03-13 14:10:50 413

原创 Linux PCIE热插拔设备及其驱动相关(on-going)

struct pci_device_id用于定义PCI设备;MODULE_DEVICE_TABLE;导出pci_device_id中设备的相关信息至modules.pcimaphttps://zhuanlan.zhihu.com/p/116478513http://blog.chinaunix.net/uid-7187477-id-3221645.htmlpci_driver其中,成员id_table指向struct pci_device_id设备信息,其他成员为驱动相关的函数等;然后会调用p

2021-01-20 11:49:30 690

原创 PCI & PCIE (on-going)

Backgroundhttps://blog.youkuaiyun.com/zuowanbishe/article/details/86751577

2021-01-18 10:33:25 588

原创 Keil工具

RegionTableTableTableBasehttps://blog.youkuaiyun.com/u012502355/article/details/105000014

2020-12-25 10:46:15 403

原创 Good Articles

DFT,FFT傅里叶变换 https://zhuanlan.zhihu.com/p/19763358DFT https://blog.youkuaiyun.com/enjoy_pascal/article/details/81478582Audio wavehttps://www.chiphell.com/thread-2166579-1-1.htmlAudio AIhttps://ww...

2020-12-23 16:34:18 167

PID增量式算法模块设计

模块化设计,PID.H中包含所有函数信息描述,PID.C为所有函数的内容。可直接添加至工程,基于keil编写的C程序。如有问题,欢迎指正,谢谢

2011-02-28

UCOSIIV2.52在STM32F103的移植

本源代码经修改与实验测试,可直接应用在STM32F103RB的开发应用中,此外附加stm32f10x_it.C与stm32f10x_it.h文件,仅将中断函数PendSVC注释掉,并在UCOSII中的OS_CPU_A.ASM中申明

2011-05-06

BMP格式图片的翻转

240*320BMP格式图片的翻转,实现图片的倒置,所操作的图片仅为240*320BMP格式

2010-08-08

TortoiseGit Installation for Windows

需要先安装好Git方可正常工作,即安装Git与TortoiseGit两个东东,本资源是后者的安装包

2017-05-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除