自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在线量化工具总结与实战(mqbench) -- 学习记录

运行以下指令,运行过程及对应进程号 显示在l0gs文件夹下,运行结束可査看到 ptq mse 精度 以及 qat fixed 精度。运行以下指令,运行过程及对应进程号 显示在l0gs文件夹下,运行结束可査看到fp32模型 fintune 精度。基于mqbench,实现对 mobilenet-v2 网络的 QAT 和 TensorRT 部署的全流程演示。注:下图左边为原始json示意图,右边为去除后的ison示意图,具体数字差异请忽视。步骤5,往往就是QAT量化的精度损失所在,也是算法的可以改进的地方。

2025-03-06 17:16:58 1145

原创 在线量化算法(QAT) --学习记录2

当我们开始要做一个QAT任务的时候,需要确定好以下事项。

2025-03-04 17:40:26 83

原创 在线量化算法(QAT) --学习记录1

量化感知训练:/在线量化/训练时量化/QAT /Quantization Aware Training>pipeline:训练好FP模型 ->QAT微调训练量化模型 ->导出对应硬件的模型和量化参数。通过插入伪量化节点,来模拟量化误差,从而在微调QAT中,用训练的方式减缓这种量化误差。训练的时候有 BN 会让训练更稳定,但是计算量大,所以推理的时候可以去除。在线量化工程师:真实量化的硬件(手机等)没法训练网络,所以在显卡上用。QAT的量化参数的初始化可以来源于PTQ的结果。对齐硬件的拓扑图的量化特性。

2025-02-28 20:13:33 1016

原创 离线量化工具 Dipoorlet -- 学习记录

这里推荐使用CUDA==11.8,8.2.4<=cuDNN<=8.9.0的版本组合,需要注意,测试一下训练的 pth 模型的精度,顺便把 pth 转成 onnx 模型。修改 2.3.3、onnx 转 trt 的 built_trt.py。模型,下面是训练的脚本,可以下载我训练的,大家也可以自己训练。在 2.3.7、测试验证 的 test_trt.py 测试。我这里的测试数据是处理后的 restnet18.onnx。的报错(该报错实际上和模型的IR版本无关),对应前面的onnx输入。安装 tensorrt。

2025-02-26 18:58:24 771

原创 randlanet 部署 -- 模型静态化

前面我们训练好了模型,得到的是 ckpt 模型,但是 ckpt 还不能直接用于 c++ 的推理部署,所以我们要先把模型给静态化,就是将 ckpt 转成 pb 文件,然后再由 c++ 加载 pb 文件,从而实现推理部署。但是因为 Randlanet 的框架是直接将数据流传到其他的 node 的,所以 在 ckpt 转 pb 这个步骤 不能像其他的模型一样直接转换,而是要经过一些操作后才可以进行静态化。

2025-02-25 11:22:33 41

原创 离线量化算法和工具 --学习记录2

per-tensor量化的推理速度更快,per-channel量化的精度更高;在per-tensor量化中,weight的所有通道共享一个量化参数scale;如果per-tensor量化(而非per-channel量化)采用相同的量化因子,对精度带来较大损失。如上图的 Layerwise Quantization,如果基于 Layer 采用相同的量化因子,那每个 Layer有不同的 Filter,这样会导致不同的 Filter用同一个量化参数,这样会导致精度有较大的损失。

2025-02-21 17:20:16 656

原创 离线量化算法和工具 --学习记录1

很多推理后端都支持写入量化参数或者写入每一层tensor的range以TensorRT为例,假设我们通过自己的量化工具得到了每一层激活tensor的range,如下方左图,就可以通过下方右图所示的。PTQ 仅仅使用校准数据计算量化参数(scale,zero-point),而QAT是学习量化参数,甚至训练权重,所以其精度较好。量化的过程就将神经网络参数的32位浮点数表示,转换为更小的表示形式,例如8位整数。将信号的连续取值(或者大量可能的离散取值)近似为有限多个(或较少的)离散值的过程。

2025-02-15 19:58:57 1121

原创 模型压缩 --学习记录2

通过学习记录1 可以发现,量化就是一些不同设置的选择问题,甚至当我们选择某个部署工具的时候,这些量化 setting 都已经固定了,比如 Tensorrt 是对称、线性、静态、权重 pre-channel、激活 pre-tensor 的量化。比如: 红点是浮点数,下面的红线是要映射的整型范围。这样在映射的时候,左边扎堆的点会造成很多的损失,中间空白的部分是一种浪费在这种时候,我们可以丢弃那个单独的点,可以带来更小的量化误差。

2025-02-09 23:34:31 787

原创 模型压缩 --学习记录1

定义:让模型变得更小、更快、但是精度尽可能不下降。模型压缩的常用方法量化稀疏蒸馏NAS低秩分解统计数据范围:确定输入数据的x_min和x_max。计算缩放因子和零点执行量化:通过公式。

2025-01-14 17:21:41 685

原创 PCL 线拟合整理

PCL 线拟合整理PCL RANSAC拟合二维直线PCL RANSAC拟合空间直线PCL RANSAC 拟合多项式曲线PCL RANSAC 拟合多直线PCL Loess曲线回归拟合(二维)PCL 高阶多项式曲线回归拟合(二维)PCL 抛物线回归拟合(Quadratic,二维)PCL 指数函数回归(二维)PCL 线性回归(二维)PCL B样条曲线拟合 2dPCL B样条曲线拟合 3dPCL RANSAC拟合二维直线#include <iostream>#include <random&

2025-01-10 16:35:52 398

原创 PCL 连通域点云聚类

距离判定的方式也可以采用其他判定方式实现,比如对八叉树分块中的局部点云特征值(反光强度分布、曲率)等等进行判别,因此可以根据实际场景进一步设计该算法。比较依赖人工参数设定,不同的激光雷达传感器所设定的参数不一样,尤其是在点云密度分布一样的传感器其效果差别更大。具有很强的鲁棒性及聚类效率,不用针对整个点云数据即可实现聚类,可以适应绝大多数点云聚类场景。其实就是 cloudcompare 的这个聚类功能。

2025-01-10 14:40:50 269

原创 在windows上使用vscode和cmake编译c++ 过程记录

一般有两种方式,一种是下载 cmake 和 Microsoft Visual Studio,然后 cmake 直接构建出一个 sln工程,在 Visual Studio 进行开发。另一种是下载cmake 和 Visual Studio Code,本文主要是记录 Visual Studio Code 如何结合 cmake 编译 c++ 代码(文本讲这种)

2024-12-31 09:56:26 758

原创 c++ 面向对象编程 【学习记录】

多态是指同一操作在不同对象上有不同的表现形式。多态分为静态多态(编译时确定,如方法重载)和动态多态(运行时确定,如方法重写)。子类可以添加新的属性和行为,也可以重写(override)父类的行为。构造函数(Constructor method),为对象本身分配内存空间,进行初始化。析构函数(Destructor method),为对象本身做销毁,并释放内存空间。复制构造函数是一种特殊的构造函数,用于从同类型的另一个对象初始化新对象。继承是指一个类(子类)可以继承另一个类(父类)的部分属性和行为,

2024-12-20 17:02:50 578

原创 cylinder3d -学习记录

它利用增加的网格来覆盖较远的区域,从而更均匀地将点分布在不同区域,并匹配室外点的分布。此外,与这些基于投影的方法将点投影到 2D 视图不同,此方法保留 3D 网格表示以保留几何结构。该框架由两个部分组成,包括 3D 圆柱体分区(以获得 3D 表示)和 3D U-Net(处理 3D 表示)。首先,将笛卡尔坐标系上的点转换为 Cylinder 坐标系,在那里计算半径 ρ 和方位角 θ。目的:通过一系列线性变换和非线性处理,对输入特征进行逐点的提取和转换。,注意这种分割表示区域越远,体素越大。

2024-12-20 14:35:55 818

原创 使用 Trace 实现 onnx 的导出 - 学习记录

return xilayer = 0all_tensors.extend([x, y]) # 避免torch对tensor进行复用return y。

2024-12-09 16:17:49 154

原创 Trace 功能实现 - 学习记录

是指在一个函数内部定义另一个函数,并且内部函数可以访问外部函数作用域中的变量。代码 1 是一个简单的 pytorch 模型的实现,下面我们添加一个 hook_forward 函数,用于。代码 2 的 hook_forward 为了存储旧的 function ,是采用闭包特性进行的编写。pytorch 在 tensor 没有引用的时候,就会对 tensor 的内存进行回收,然后复用。输出如下:可以看到每一层的输入和输出的地址都被捕获了,上一层的输出就是下一层的输入。模型每层的输入和输出。

2024-12-09 11:24:32 104

原创 error LNK2001: 无法解析的外部符号 “public: long * __cdecl at::TensorBase::data_ptr<long>(void)const “ (??$dat

在win下运行深度学习框架,遇到 error LNK2001: 无法解析的外部符号 "public: long * __cdecl at::TensorBase::data_ptr(void)const " (?$data_ptr@J@TensorBase@at@@QEBAPEAJXZ)error LNK2001: 无法解析的外部符号 "public: long * __cdecl at::TensorBase::data_ptr(void)const " (?第二步:将 long 替换成。

2024-08-28 10:27:24 460 3

原创 jetson xavier nx 编译使用 libtorch

【代码】jetson xavier nx 编译使用 libtorch。

2024-08-27 10:12:26 376

原创 CUDA编程 - clock 学习记录

在CUDA编程中,共享内存是一种特殊的内存类型,它是在块级别共享的。共享内存的主要优势在于其低延迟和高带宽,适合于需要快速访问和多次读写的数据。

2024-07-14 00:22:03 727

原创 CUDA编程 - asyncAPI 学习记录

CUDA流处理:使用cudaMemcpyAsync进行异步内存拷贝,<<<blocks, threads>>>语法启动并发执行的CUDA内核函数increment_kernel。获取设备属性:cudaGetDeviceProperties函数获取指定设备的属性,这些属性包括设备名称等信息。内存分配:使用cudaMallocHost分配CPU上可访问的页锁定内存,cudaMalloc分配设备上的内存。创建CUDA事件和计时器:CUDA事件用于记录时间,计时器用于测量CPU执行时间。

2024-07-12 00:37:41 526

原创 工程师每日刷题-7

声明的作用主要两点,第一,提供链接时需要的符号信息,这些信息存储在目标文件的重定位表和符号表当中;第二,提供类型大小信息,c++采取的是单文件编译策略,当不知道某个符号对应类型的定义的时候,需要在链接前预留出合适大小的内存空间,供链接时填充。引入标准布局类型是为了向C语言兼容,使得用户能够通过对象第一个成员的指针类型指向对象;引入trivial类型是为了提高对象初始化效率,memcpy比构造函数初始化效率效率更高。不考虑继承,一个类没有虚函数、所有非静态变量的访问权限相同,则是标准布局类型;

2024-04-21 11:09:21 1160 1

原创 ubuntu20.04 运行 lio-sam 流程记录

记录流程,方便自己快速复现。

2024-04-02 10:38:42 2507 1

原创 c++ 堆栈内存、引用和指针 - 学习总结

定义:指针(pointer)是一种特殊的变量,其值为内存地址。作用:通过指针可以直接访问和操作内存中的数据。声明语法:Type *pointer_ame;,其中Type是指针所指向的数据类型,pointer_pame是指针变量名。初始化:可以将指针初始化为某个变量的地址,也可以将其初始化为nullptr(空指针)。取地址操作符:&,用于获取变量的地址。解引用操作符:*,用于访问指针所指向的数据。长度:不管 Type 是什么,指针长度都是一样,都是一个代表内存地址的长的十六进制数。

2024-03-30 12:20:55 909

原创 ubuntu 安装 cloudcompare(两种方法)

两种方法安装,根据需求安装

2024-03-26 14:37:03 5013 6

原创 工程师每日刷题 - 6(slam)

BA的全称是Bundle Adjustment优化,指的是从视觉重建中提炼出最优的三维模型和相机参数,包括内参和外参。从特征点反射出来的几束光线,在调整相机姿态和特征点空间位置后,最后收束到相机光心的过程。BA优化和冲投影的区别在于,对多段相机的位姿和位姿下的路标点的空间坐标进行优化。

2024-03-21 00:32:55 710

原创 模型部署 - onnx的导出和分析 - onnx 的架构和 onnx helper 的使用 - 学习记录

首先来了解一下 学习 onnx 架构和 onnx helper 的使用的目的。一般模型部署的流程是前处理+模型推理+后处理,然后c++ 上进行推理。前处理(与tensorRT无关)模型推理(生成的engine交给tensorRT去做前向传播)后处理(与tensorRT无关)模型推理部分是指利用 tensorRT 的 onnx 解析器编译生成 engine (即转换为tensorRT能看懂的模型)。1、有些时候我们应该把后处理部分在onnx模型中实现,降低后处理复杂度。

2024-03-20 23:17:15 1608

原创 C++字符串类 - std::string - 常用总结

compare(str) 比较两个字符串大小, ==,!=, <, > 支持比较运算符。insert(pos, str) // 在指定的位置pos前插入字符char。c_str() 返回C风格字符串(const char*)find(str, pos) 查找子串位置。swap(str) 交换两个字符串内容。data() 返回内部字符数组指针。

2024-03-16 00:37:15 639

原创 Livox激光雷达 mid360 跑 fastlio2 - 流程记录

下载 ikdtree 源码 在 xx/FAST_LIO-main/include/ikd-Tree/下。创建工作空间 fast_lio2_ws ,把 fast-lio2源码放在 工作空间的 src 下。,其中88是我的 SN 码后两位。下载 fast-lio2 源码。修改 lidar ip。

2024-03-15 17:18:32 4350 5

原创 高质量 Git 仓库汇总(持续更新,方便查看)

https://github.com/kamyu104/LeetCode-Solutionshttps://github.com/viva64/pvs-studio-cmake-examplesAwesome-3D-Object-DetectionAwesome-3D-Object-Detection-for-Autonomous-DrivingAwesome-BEV-Perception-Multi-Camerashttps://github.com/changh95/visual-slam-roadma

2024-03-15 01:22:24 937

原创 模型部署 - BevFusion - 思路总结

PyTorch 转 ONNX 转 TRTFP16 优化cuda-graph 优化INT8 量化优化ONNX 模型层面优化Pipeline 优化模型内深度优化我们需要先快速的去了解网络,然后将其转换成 Onnx 和 Tensorrt,然后再去根据结果进行二次优化。

2024-03-04 00:10:04 2115 1

原创 模型部署 - onnx的导出和分析 - onnx 注册自定义算子 - 学习记录

第一步:手写一个算子,然后注册一下第二步:将算子放进模型定义第三步:利用 torch.onnx.export() 编写onnx 导出函数一般我们自定义算子的时候,有以下流程编写算子并注册将算子放进模型定义利用 torch.onnx.export() 编写 onnx 导出函数return x。

2024-03-03 16:52:24 1539 3

原创 模型部署 - onnx 的导出和分析 - PyTorch 导出 ONNX - 学习记录

上面是 onnx 可以直接被导出的情况,是因为对应的 pytorch 和 onnx 版本都有相应支持的算子在里面。与上面例子不同的是,这个注册方式跟底层文件的写法是一样的(文件在虚拟环境中的 torch/onnx/symbolic_opset*.py )比如下面的这个报错,提示当前 onnx 的 opset 版本不支持这个算子,那我们可以去官方手册搜索一下是否在高的版本支持了这个算子。有些算子在 onnx 中是有的,但是在 pytorch 中没被登记,则需要。(实际上就是一个矩阵乘法)

2024-03-03 01:02:38 4678

原创 CUDA编程 - 用向量化访存优化 elementwise 核函数 - 学习记录

Element-wise操作是最基础,最简单的一种核函数的类型,它的计算特点很符合GPU的工作方式:对于每个元素单独做一个算术操作,然后直接输出。虽然简单,但深度学习领域,有很多算子都是这个类型。常见的有Add,Mul,Concat,各种激活Sigmoid,Relu及它们的变体,归一化里的BatchNorm都属于这个类型。

2024-02-26 23:20:05 1853

原创 CUDA编程 - 用向量化访存优化 - Cuda elementwise - Add(逐点相加)- 学习记录

Element-wise 操作是最基础,最简单的一种核函数的类型,它的计算特点很符合GPU的工作方式:对于每个元素单独做一个算术操作,然后直接输出。Add 函数 :逐点相加传入 数组 a,b,c传入 数据数量 N传出结果 数组c。

2024-02-26 17:03:47 2796

原创 vscode 离线安装--扩展包

在很多情况下,我们不能联网下载 vscode 的扩展包,下面记录一下怎么离线安装和下载。

2024-02-26 10:57:19 760

原创 CUDA编程 - Nsight system & Nsight compute 的安装和使用 - 学习记录

在 cuda 编程中,经常会用到 Nsight system 和 Nsight compute 进行性能分析等,下面做个学习总结。本篇包括安装和常用分析思路总结,具体实践操作总结会放在下一篇博客。

2024-02-23 15:53:42 15005 2

原创 工程师每日刷题 -5

智能指针是一个RAII类模型,用于动态分配内存,其设计思想是将基本类型指针封装为(模板)类对象指针,并在离开作用域时调用析构函数,使用delete删除指针所指向的内存空间。智能指针的作用是,能够处理内存泄漏问题和空悬指针问题。分为auto_ptr、unique_ptr、shared_ptr和weak_ptr四种,各自的特点:对于auto_ptr,实现独占式拥有的概念,同一时间只能有一个智能指针可以指向该对象;

2024-02-14 01:26:44 1163

原创 CUDA编程 - 共享内存 - shared memory - 学习记录

1、共享内存是可受用户控制的一级缓存。2、共享内存是基于存储体切换的架构。所以我们必须要解决存储体冲突的问题数据重复利用全局内存合并线程之间有共享数据4、线程访问共享内存的时候需要排队等候5、以行的方式访问全局内存的时候,性能最好6、在GPU上线程块的大小或者线程束的大小可以理想地映射为数据集的大小。对于一个长为N的数据,我们可以最多用N/2个线程来进行。7、共享内存的主要作用是减少对全局内存的访问,或者改善对全局内存的访问模式。

2024-02-14 01:09:01 2083

原创 三维点云常用数据增强 - python【代码记录】

这里做个代码记录,方便以后调用。

2024-02-06 12:42:40 709

原创 wsl + vscode 离线配置 ERROR: Faild to download https://update.code.visualstudio.com

很多情况下是没有现成的VS Code Server程序的,需要手动下载。记住上面的Commit ID,可以通过下面的链接下载 vscode-server-linux-x64.tar.gz。然后将vscode-server-linux-x64.tar.gz上传在服务器上的$HOME/.vscode-server/bin文件夹中,解压。在wsl中下载不了 vscode 的核心。运行下面两行命令,建立空的$HOME/.vscode-server/bin文件夹。重新运行 wsl与vs的链接即可。

2024-02-02 16:15:44 2696 2

sample-cbr.onnx

是博客的参考模型,博客地址:https://blog.youkuaiyun.com/weixin_40653140/article/details/136420062?spm=1001.2014.3001.5502

2024-03-20

空空如也

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

TA关注的人

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