自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 学习 VLA 第6天:SWIN VIT算法原理以及复现

在 ResNet 或 ViT 上能跑通的代码,直接替换成 Swin Transformer 后经常会遇到几类问题。下面按“输入尺寸 → 显存 → 训练收敛 → 窗口划分”的顺序,给出排查思路与可直接复用的代码示例。本文系统梳理了 Swin Transformer 的核心原理,包括 Patch Embedding、移位窗口自注意力、相对位置偏置和层次化特征提取,并给出了完整的 PyTorch 复现。

2026-08-28 23:21:19 346

原创 学习 VLA 第5天:VIT算法原理以及复现

这与 NLP 中把句子切分成词元(Token)的思路完全一致。Transformer 本身并不关心输入是文本还是图像,它只处理一组向量序列。因此,只要能将图像转化为一组向量序列,就能直接复用 Transformer 架构。

2026-08-27 21:28:32 367

原创 学习 VLA 第 4 天:Transformer 原理与复现实战

今天从零复现了 Transformer 编码器,包括多头注意力、前馈网络、位置编码和残差连接等核心组件。通过动手实现,对自注意力机制有了更直观的理解。理解了自注意力的计算流程和缩放点积注意力的原理。掌握了多头注意力的拆分与拼接逻辑。能够独立实现一个可运行的 Transformer 编码器。明白了 Transformer 在 VLA 中承担跨模态融合和动作解码的关键角色。

2026-08-26 21:59:28 380

原创 学习VLA第3天:训练一个最简单的神经网络

MNIST 是机器学习领域最经典的「Hello World」数据集。它包含了6 万张训练图片和1 万张测试图片,每张图片都是一个28×28 像素的手写数字(0 到 9),灰度图。给计算机看一张手写数字的图片,让它告诉我们这个数字是几。全连接网络(Fully Connected Network)也叫多层感知机(MLP),是最基础的神经网络结构。它的核心思想是:把输入数据「摊平」成一维向量,然后通过一层层的矩阵乘法(线性变换)和激活函数(非线性变换),逐步提取特征,最终输出分类结果。

2026-08-25 22:41:24 267

原创 学习 VLA 第 2 天:深度学习基础

Dataset__init__:初始化数据,比如读取文件、加载标签;__len__:返回数据集的总样本数;:根据索引idx返回第idx个样本(数据和标签)。返回的可以是单个样本,也可以是一组样本(比如一张图片 + 它的标签)。PyTorch 会自动把多个样本堆叠成 batch。今天我们把深度学习的核心骨架过了一遍:神经网络结构、激活函数、损失函数、前向/反向传播、优化器、训练流程,以及 PyTorch 的基本用法。这些内容看起来基础,但它们是理解 VLA 一切细节的前提。

2026-08-24 20:56:37 397

原创 学习 VLA 第 1 天:VLA 概述与学习路线

在聊怎么学之前,先把这个词讲清楚。VLA 是(视觉-语言-动作模型)的缩写,它是当前具身智能和机器人学习领域最核心的一类模型。让机器人看到环境、听懂人类指令,然后直接输出可执行的动作。视觉输入:来自机器人相机(单目/双目/多视角)的图像或视频流;语言指令:人类用自然语言下达的任务,比如「把桌上的红色杯子拿给我」。它的输出不是文字,而是让机器人执行的动作:机械臂末端位姿、关节角度、夹爪开合度,或者是这些动作的序列。第一天的目标不是把 VLA 学完,而是建立一张清晰的地图。VLA 是什么。

2026-08-23 22:35:50 453

原创 CUDA编程实战14:排序与基数排序——从 Key 排序到键值对重排

本文介绍了GPU上键值对排序的实现与验证方法。主要内容包括: 关键概念区分:Key-only排序与Key-Value排序的区别,强调后者需保证键值对的正确匹配;稳定排序的定义与重要性。 验证方法:提出通过原始索引作为Value来验证排序正确性,确保键值匹配和稳定性。 实现方案: 自写32轮稳定二进制LSD基数排序(14.291ms) Thrust的stable_sort_by_key(1.509ms) CUB的DeviceRadixSort::SortPairs(1.049ms) 核心建议: 生产环境优先使

2026-08-09 11:31:43 369

原创 CUDA 点云加速实战 02:体素下采样——从 PCL / Open3D 到 CUDA 排序归约

本文介绍了CUDA在点云体素下采样中的加速实战,通过与PCL和Open3D的对比,展示了CUDA在保持语义正确性的同时实现显著加速。主要内容包括: 体素下采样的核心是将空间划分为小立方体,并计算每个立方体内点的质心作为代表点,而非简单随机删点。 在198,835个输入点、0.05m体素边长条件下,三种实现的性能对比: PCL输出4,801点,耗时19.168ms Open3D输出4,760点,耗时10.109ms CUDA输出4,801点,纯计算仅0.782ms,完整流程1.938ms CUDA与PCL的输

2026-08-06 22:14:32 360

原创 CUDA 点云加速实战 01:点云法线计算——PCL、Open3D 与 GPU 的一次可信实测

这篇文章提供了一个可复现的点云法线计算实战指南,重点比较了PCL、Open3D和CUDA三种实现方式在真实点云数据上的性能与准确性。作者强调工程实践中的关键问题:数据来源、公平比较方法和结果验证。 文章使用包含198,835个点的测试数据集,通过体素降采样(边长0.05m)得到约4,800个点,再进行半径邻域PCA法线计算(半径0.15m)。实测结果显示:CUDA实现比PCL快约12倍(仅计算时间)或9.8倍(包含数据传输),且法线方向与PCL结果高度一致(平均夹角仅0.0001°)。 作者提供了完整的代码

2026-08-05 22:21:30 618

原创 CUDA编程实战13:并行前缀和与流压缩——从 Scan 到高效筛选

摘要:CUDA并行前缀和与流压缩实现 本文介绍了如何在CUDA中实现高效的并行前缀和(Scan)算法及其在流压缩(Stream Compaction)中的应用。主要内容包括: 问题背景:解决GPU上大量数据筛选时线程安全分配输出位置的问题,避免使用原子操作带来的性能瓶颈和顺序不确定性。 算法核心: 通过"Flag-Scan-Scatter"模式实现稳定流压缩 使用Blelloch算法实现并行前缀和 分层扫描解决跨Block同步问题 实现验证: 支持任意长度输入(511-16,777,216元素) 与Thru

2026-08-04 22:29:06 422

原创 CUDA编程实战12:原子操作与高性能直方图——从正确累加到低冲突并行更新

摘要 本文探讨了CUDA编程中原子操作与高性能直方图实现的关键问题。针对"多线程更新少量共享结果"场景,首先分析了普通累加操作会导致数据丢失更新的原因,提出使用原子操作atomicAdd建立正确基线。文章详细介绍了四种优化策略:Warp聚合、Block私有化、Warp私有化和两阶段归并,并强调必须基于输入分布和Profiler证据选择方案。通过对比实验展示了不同数据分布下各策略的性能差异,指出原子操作本身并非性能瓶颈,真正的挑战在于合理控制共享资源的竞争。配套提供了可验证的正确性检查方法和两个完整示例程序(

2026-08-03 21:32:29 482

原创 CUDA编程实战11:Nsight Systems 与 Nsight Compute 性能分析——从时间线到瓶颈证据

本文针对已能正确运行但性能不佳的CUDA程序,提供了一套系统化的性能诊断方法。通过Nsight Systems和Nsight Compute两款工具的协同使用,开发者可以从时间线分析定位热点阶段,再到Kernel级瓶颈分析,最终形成可验证的优化假设。文章强调建立证据驱动的优化流程,避免盲目调参,并提出了“问题合同”的概念,要求明确优化目标、输入数据、正确性标准和测试环境。配套源码提供了两类典型分析场景,帮助读者实践完整的“系统时间线→Kernel瓶颈→回归验证”工作流。预计阅读加实践耗时3-4小时,适合已完

2026-08-02 19:50:34 468

原创 CUDA编程实战10:CUDA Event 与可信性能测量——从“跑得快”到“证据可靠”

我的版本快了十倍”是 CUDA 学习和工程讨论里最常见、也最容易被误解的一句话。它可能是在说 Host API 的返回速度,也可能是在说 GPU 上一段 Kernel 的执行区间,还可能是在说用户真正等待的一整次请求。三种数字都可能合法,但它们回答的是三个不同的问题。本篇不追求让你记住一个固定模板。你将先看见一个会制造“假加速”的实验,再把计时范围、同步边界、重复采样与结果报告逐层补齐。

2026-08-01 21:41:32 751

原创 CUDA编程实战08:Stream 与异步并发——让数据传输和计算重叠

CUDA Stream与异步并发编程实战摘要 本文针对CUDA编程中数据传输与计算重叠的优化问题,深入解析Stream的异步并发机制。主要内容包括: 核心问题:常规串行H2D-Kernel-D2H流程存在等待瓶颈,即使kernel优化后端到端时间仍受限于数据传输。 解决方案:通过Stream实现分块流水线,让不同数据块的上传、计算和下载阶段重叠执行。理想情况下总时间公式为T≈t_H+t_K+t_D+(M-1)*max(t_H,t_K,t_D)。 关键机制: Stream作为有序工作队列,同一stream内操

2026-08-01 09:00:00 364

原创 CUDA编程实战07:并行归约优化——从 Shared Memory 到 Warp Shuffle

本文介绍了CUDA编程中的并行归约优化方法,从基本的全局原子加出发,逐步实现Shared Memory、分层归约和Warp Shuffle等技术。文章首先明确了归约的实际应用场景,如统计计算、范数求取等"多变一"问题,然后通过树形合并的思路分析并行归约的原理。重点讲解了如何设计分层汇聚路径,比较了不同实现方式的性能差异,并提供了完整的验证方法。配套代码包含三个可执行程序,帮助读者从基础实现过渡到高级优化,最终能够将归约技术推广到求和、最大值、平方和等多种计算场景。文章强调建立正确性标准的重要性,建议使用CP

2026-07-31 09:00:00 415

原创 CUDA编程实战09:CUDA Graph 实战——降低重复 Kernel 与流水线提交开销

CUDA Graph 实战:降低重复 Kernel 与流水线提交开销 摘要:本文针对 CUDA 开发中 CPU 频繁提交重复小任务的开销问题,提出使用 CUDA Graph 优化方案。通过三个可运行示例程序,演示如何: 识别提交开销(graph_benchmark.cu) 使用 Stream Capture 录制固定工作流(graph_pipeline_capture.cu) 通过显式 API 更新图结构中的参数(graph_update.cu) 核心观点: Graph 通过预定义任务图减少重复提交开销,适

2026-07-30 21:32:46 368

原创 CUDA编程实战06:矩阵乘法优化——从朴素 GEMM 到共享内存分块

本文介绍了CUDA编程中矩阵乘法(GEMM)的优化方法,从朴素实现逐步过渡到共享内存分块技术。主要内容包括: 矩阵乘法基础:明确矩阵形状(M×K乘K×N)和行主序存储方式。 线程映射:每个线程负责计算输出矩阵C的一个元素,通过二维线程块和网格覆盖整个输出。 优化路径: 朴素实现:直接按数学定义计算,存在全局内存重复访问问题。 共享内存分块:将输入矩阵A和B的分块加载到共享内存,提高数据复用率。 寄存器分块:每个线程同时计算多个输出元素,减少内存访问。 工程实践: 边界处理:支持任意M/N/K尺寸,通过补零处

2026-07-30 20:08:00 584

原创 CUDA编程实战05:共享内存与矩阵转置——把跨步访问改造成合并访问

第四篇证明了一件很重要的事:相同数量的读取和写入,因为相邻 Lane 的地址分布不同,性能可能相差数倍。矩阵转置恰好把这个矛盾推到台前。对行优先矩阵 A,最直观的转置代码是:如果让一个 Warp 中的 连续变化,那么输入地址:沿一行连续,读取可以很好地合并。但是输出地址:随着 x 变化,每个 Lane 相隔 个 ,写入变成大步长访问。也许可以交换 x 与 y 的线程映射?这样输出连续了,但输入又沿列跨步。问题只是从写端搬到了读端。这就是本篇要解决的实际需求:答案不是找到一个神奇的线程下标,而是增加

2026-07-30 09:00:00 323

原创 CUDA编程实战04:GPU 内存访问与合并——为什么相同的加法会有不同性能

先看两段几乎一样的 CUDA 代码。第一段:第二段:两段代码都只读取一个 ,都只写出一个 ,都由同样多的线程执行,也没有增加复杂数学运算。初学者很容易作出一个看似合理的判断:既然每个线程的工作量一样,运行时间就应该差不多。然而,本篇附带的 在一张 NVIDIA GeForce RTX 2060 上得到下面这组 Release 实测结果:从 Stride 为 1 到 Stride 为 65,数学工作没有变化,输出长度没有变化,访问的输入元素总数也没有变化,平均时间却从约 0.19 毫秒增加到约 1.34

2026-07-29 09:00:00 398

原创 CUDA编程实战03:向量加法——显存分配、数据传输与第一个有效计算

本文介绍了CUDA编程中向量加法的完整实现流程,重点讲解了显存分配、数据传输和首个有效计算的工程实践要点。主要内容包括: 明确区分Host和Device内存空间,使用h_和d_前缀命名规范 完整的GPU计算生命周期:主机准备数据→设备显存分配→H2D传输→Kernel启动→D2H传输→结果验证→资源释放 向量加法作为首个有效计算案例的优势:简单并行性、覆盖核心流程、便于验证 关键API使用注意事项:cudaMalloc传指针地址、字节数计算、传输方向判断 工程实践要点:边界保护、错误检查、浮点误差容忍、性能

2026-07-28 09:00:00 388

原创 CUDA编程实战06:矩阵乘法优化——从朴素 GEMM 到共享内存分块

本文介绍了CUDA编程中矩阵乘法(GEMM)的优化方法,从朴素实现逐步过渡到共享内存分块策略。主要内容包括: 基础概念:明确矩阵乘法的数学定义(M×K矩阵乘K×N矩阵得M×N结果)和行主序存储方式。 线程映射:每个线程负责计算输出矩阵C的一个元素,通过二维网格和块结构覆盖整个输出矩阵。 优化路径: 朴素实现:直接实现数学定义,存在全局内存重复访问问题。 共享内存分块:将输入矩阵的分块加载到共享内存,提高数据复用率。 寄存器分块:每个线程计算多个输出元素,减少内存访问开销。 工程实践: 边界处理:支持任意尺寸

2026-07-27 21:34:46 375

原创 CUDA编程实战02:认识 GPU、SM、线程束与计算能力

《CUDA编程实战02》深入解析GPU硬件架构与CUDA编程模型的关系,重点澄清常见概念误区。文章通过三个实践程序:(1)查询GPU计算能力与资源限制;(2)可视化线程与Warp映射关系;(3)演示Warp投票机制。核心观点包括:Block是软件组织单位而非固定硬件;SM负责线程调度执行;Warp是32线程的硬件执行分组;CUDA线程是逻辑概念非固定物理核心。特别强调不要将"线程数等同于CUDA Core数",指出GPU优势在于高吞吐而非单线程速度。

2026-07-27 08:30:00 420

原创 CUDA编程实战01:开发环境搭建与第一个GPU程序

CUDA开发环境搭建与第一个GPU程序 本文是CUDA编程实战系列第一篇,面向零基础读者,目标是帮助搭建可验证的CUDA开发环境并运行第一个GPU程序。文章首先解释了CUDA的基本概念,说明GPU适合大规模并行计算任务。然后详细介绍了硬件要求和环境配置,包括驱动、Toolkit、NVCC、Visual Studio和CMake之间的关系图,帮助读者理清开发工具链。最后通过一个简单的"Hello CUDA"示例程序,展示如何编译运行并验证GPU程序的正确性。 文章强调实践验证,要求读者通过四个标准测试:nvi

2026-07-26 13:02:41 618

原创 CUDA 编程实战:从零开始加速你的计算

CUDA(Compute Unified Device Architecture)是 NVIDIA 推出的并行计算平台和编程模型,它允许开发者利用 GPU 的强大算力来加速计算密集型任务。本文将带你从零开始,通过实际代码示例,掌握 CUDA 编程的核心概念和实战技巧。

2026-07-21 19:50:31 312

原创 PyQtNode Editor 第三篇创建节点(节点的定义)

在 PyQtNode Editor 的开发之旅中,经过前两篇博客对基础环境搭建和核心类结构的探索,我们已经迈出了坚实的步伐。今天,我们将聚焦于node_scene文件,深入解析其中的代码逻辑。这段代码构建了Scene类,它如同整个节点编辑器的 “管理中枢”,承担着组织和协调节点、边等关键元素的重要职责,是推动编辑器功能运转的核心力量。首先创建一个node_scene.py文件导入必要的模块​​这里从自定义模块 node_graphics_scene 中导入 QDMGraphicsScene 类。

2025-06-28 21:08:45 930

原创 PyQtNode Editor 第二篇自定义可视化视图

创建一个node_graphic_view.py文件在 PyQtNode Editor 的开发过程中,图形视图的设置对于用户最终看到的界面效果和操作体验至关重要。接下来,我们深入解析QDMGraphicsView类的代码,看看它是如何定制图形场景的显示与交互的。导入必要的模块from PyQt5.QtWidgets import QGraphicsView:从PyQt5.QtWidgets模块中导入QGraphicsView类。

2025-06-28 14:03:32 821

原创 PyQtNode Editor 第一篇环境配置

摘要: 本文介绍了PyQtNode Editor开发的基础环境配置与简单示例。开发环境包括Python 3.x、PyQt5和PyCharm IDE。通过pip安装PyQt5后,通过一个简单的QLabel窗口程序验证环境。文章详细解析了代码结构,包括模块导入、主程序入口、应用程序对象创建等关键步骤。第二部分展示了如何创建自定义图形场景类(QDMGraphicsScene),包括网格设置、颜色定义和背景绘制方法,为后续节点编辑器开发奠定基础。

2025-06-27 22:49:41 941

原创 Opencv图像的阈值处理(包括自适应阈值)

在图像处理中,阈值处理是一种常用的方法,它可以将图像中的像素二值化为黑白两种颜色。在OpenCV中,可以使用cv2.threshold()函数对图像进行阈值处理。该函数可以根据指定的阈值将图像二值化,也可以使用自适应阈值将图像分割成黑白两部分。

2024-04-25 21:58:00 807

原创 Opencv图像的几何变换(旋转、平移、镜像、缩放等)

在OpenCV中,可以使用几何变换技术对图像进行旋转、平移、镜像、缩放等操作。这些操作可以通过变换矩阵来实现。

2024-04-25 21:57:30 1111

原创 pyqt和opencv结合01:读取图像、显示

pyqt和opencv结合01:读取图像、显示。

2024-04-14 21:15:15 1914 1

原创 Opencv图像 ROI 与 mask 掩膜(找到感兴趣的区域)

掩膜是一个二值图像,它与原始图像具有相同的大小,并且仅在感兴趣的区域中具有非零值。在OpenCV中,可以使用cv2.bitwise_and()函数将掩膜应用于原始图像,以提取感兴趣的区域。使用ROI技术可以在不影响图像其他部分的情况下,对图像的某个区域进行操作。在上面的代码中,首先将原始图像转换为灰度图像,并将灰度值大于128的区域设置为白色(255),其余区域设置为黑色(0)。需要注意的是,ROI和掩膜都是用于提取感兴趣区域的技术,但它们的应用场景略有不同。这取决于具体的应用场景和需求。

2024-04-14 19:53:35 1435

原创 Opencv图像绘画(画直线、矩形、圆等)

OpenCV提供了多种函数和方法,可用于在图像上绘制直线、矩形、圆等形状。

2024-04-14 19:52:36 590

原创 Opencv图像像素的操作

opencv的图像基本操作

2024-04-06 14:47:19 517

原创 Open3D系列教程

最详细的open3D系列教程

2024-04-06 14:40:02 2706

原创 Opencv人机交互界面设置

这将在屏幕上创建一个带有标题“image_with_title”的窗口,并在其中显示名为“image”的图像。如果用户按下“q”键,则会关闭窗口。显示带标题的窗口:可以使用cv2.namedWindow()函数创建带有标题的窗口。这将在屏幕上显示名为“image”的图像,并等待用户按下任意键来关闭窗口。创建滑块:使用 cv2.createTrackbar() 函数在指定的窗口中创建一个滑块。创建窗口:使用 cv2.namedWindow() 函数创建一个窗口,这个窗口将作为滑块的容器。

2024-04-03 21:21:51 1229

原创 Opencv各个颜色空间、用途(颜色通道分割与合并)

OpenCV中提供了多种颜色空间,每种颜色空间都有其特定的用途。以下是一些常见的颜色空间及其用途:BGR颜色空间:BGR颜色空间是一种与计算机显示器显示的颜色相同的颜色空间。它由蓝色、绿色和红色通道组成,通常用于图像处理和计算机视觉任务中。RGB颜色空间:RGB颜色空间是由红色、绿色和蓝色通道组成的颜色空间。它是计算机显示器显示颜色的标准颜色空间,也是许多图像处理和计算机视觉算法的输入颜色空间。HSV颜色空间:HSV颜色空间是一种基于色度、饱和度和亮度的颜色表示方法。

2024-04-03 21:13:26 939

原创 Opencv相机的读取、拍摄、保存

要从相机中读取数据,可以使用cv2.VideoCapture()函数。该函数接受两个参数,即相机的索引和视频捕获模式。要拍摄图像,可以使用cv2.imwrite()函数。该函数接受三个参数,即文件名、文件类型和图像数据。这将在名为“frame”的窗口中显示从相机中读取的每一帧图像,并等待用户按下“q”键来关闭窗口。如果用户按下其他键,则不会执行任何操作。

2024-03-30 23:53:24 1032

原创 Opencv图像的读取、显示、保存

要读取图像,可以使用cv2.imread()函数。该函数接受一个参数,即图像文件的路径。如果成功读取图像,则img变量将包含图像数据。如果读取失败,则会引发异常。

2024-03-30 23:52:04 971

原创 Opencv C++和Python教程

OpenCV是一个开源的计算机视觉和机器学习库,它提供了丰富的图像处理和计算机视觉算法,如图像处理、目标检测、人脸识别、物体跟踪等。OpenCV最初由英特尔公司发起,现在是由社区维护和开发。OpenCV支持多种编程语言,如C++、Python、Java等,可以在不同的操作系统上使用,包括Windows、Linux、macOS等。它的主要特点包括:高效的图像处理和计算机视觉算法、易于使用和扩展、跨平台和免费开源等。由于其广泛应用于计算机视觉领域,OpenCV被认为是一种非常有用的工具库。

2024-03-30 23:49:55 773

原创 Pytorch教程(代码逐行解释)

pytorch逐行代码解释

2023-11-14 22:23:00 1632

空空如也

空空如也

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

TA关注的人

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