Arthur.AI
人工智能算法工程师,对深度学习,计算机视觉,嵌入式AI,人脸识别,自动驾驶技术感兴趣的一起来交流吧!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
DMA Engine 的工作原理
DMA(直接内存存取)引擎是现代计算机系统中的关键组件,它作为数据搬运工,独立于CPU在外设和内存间传输数据。DMA通过地址寄存器、长度寄存器和控制寄存器等核心部件,实现高效的数据搬运,支持单次传输、循环模式等多种工作方式。其优势在于降低CPU负担、提高带宽效率,但也存在总线资源占用和编程复杂度问题。DMA广泛应用于网络、音视频等需要高速数据传输的场景,是提升系统性能的"隐形冠军"。原创 2025-07-04 15:35:36 · 50 阅读 · 0 评论 -
onnx注册cpu版flashattention
本教程展示了如何在 ONNX Runtime 中注册一个 CPU 可执行的 FlashAttention 算子。首先,可以直接升级到 ONNX Runtime v1.16 及以上,以获得内置的 FlashAttention CPU 实现citeturn0search2;原创 2025-04-24 18:25:38 · 165 阅读 · 0 评论 -
支持AVX2指令的计算机,ONNX推理量化模型比推理浮点模型慢?
虽然 INT8 量化能显著减少模型体积和内存带宽需求,但是在 AVX2 这种不支持专用 8 位乘法指令、量化算子实现尚不成熟的架构上,却会因为额外的量化/反量化(Q/DQ)开销、缺乏指令级加速以及算子融合不到位等原因,导致整体吞吐量低于高度优化的 FP32 路径。下面逐项展开分析。原创 2025-04-22 16:30:42 · 157 阅读 · 0 评论 -
AVX2与onnx量化加速
ONNX 中 CPU 的 int8 量化推理主要依赖库,结合 MLAS 后端和硬件指令(如 AVX2、AVX-512 VNNI 或 MMLA)实现加速。开发者需根据目标平台选择合适的指令集和优化配置,以最大化性能提升。原创 2025-04-22 13:50:46 · 152 阅读 · 0 评论 -
【模型部署】onnx模型-LOOP 节点实例
----- 定义 LOOP 子图(body) -----# 子图输入:迭代计数 iter (int64), 条件 cond (bool), 循环携带依赖 current_sum (int64)# 子图输出:新的条件 new_cond (bool), 更新后的 sum (int64), 扫描输出 scan_out (int64)# 为了计算 new_sum = sum_in + (iter + 1)# 创建一个常量张量 'one'# 节点:iter_plus_one = iter + one。原创 2025-04-02 19:27:50 · 117 阅读 · 0 评论 -
【AI编译器】MLIR — 入门
MLIR 社区充满活力。但由于它是一个新的且快速发展的项目,因此可用的教程和文档并不多。没有权威的MLIR书籍。大多数围绕事物的推理都来自民间传说和技术性很强的 RFC。而且由于 MLIR 构建在 LLVM(该缩写词以前的意思是“低级虚拟机”)之上,因此现有的许多文档都通过类比 LLVM 来解释概念,这对于像我这样不熟悉内部结构的人来说没有帮助LLVM 的工作原理。最后,在我看来,目前的教程水平太高,无法让人们真正了解如何在框架中编写程序。为此,我希望降低使用 MLIR 的准入门槛。原创 2024-12-23 18:56:37 · 1543 阅读 · 0 评论 -
ONNX解析(一)
node: 节点信息,包含了输入输出指向,以及一些属性值 inputs,outputs, attributes: 包含了权重信息value_info: 中间值的传递信息input:用于访问模型的输入信息output:用于访问模型的输出信息。输出张量是模型计算的结果。这些属性为提供了便捷的接口,用于访问和操作ONNX模型的节点、张量、输入输出及其他重要信息。通过这些接口,开发者可以轻松遍历和分析模型结构,进行调试或进一步的优化。原创 2024-10-15 13:44:53 · 111 阅读 · 0 评论 -
【性能优化】分块
整体上展示了矩阵乘法在硬件和软件领域中的分块计算策略。通过划分小块的方式,提高了数据局部性,减小了存储访问开销,同时通过调度方案的选择,优化了计算的效率和资源的利用率。原创 2024-09-15 23:19:39 · 196 阅读 · 0 评论 -
【性能分析】ncu Metric Name解释
这些指标用于分析 CUDA 内核在 GPU 上执行时的性能表现,帮助识别潜在的性能瓶颈和优化机会,例如计算吞吐量、内存吞吐量、寄存器使用情况、共享内存使用情况等。原创 2024-09-11 14:18:59 · 332 阅读 · 0 评论 -
CUDA PTX代码学习:square_kernel注释
这个代码是使用LLVM NVPTX后端生成的CUDA PTX代码,用于在NVIDIA GPU上执行一个核函数。原创 2024-09-11 14:27:58 · 289 阅读 · 0 评论 -
【模型分析】Roofline Model
Roofline 模型是一种性能分析工具,用于描述计算性能和内存带宽之间的关系。它的核心思想是将计算性能(通常以 GFLOP/s 为单位)与内存带宽(通常以 GB/s 为单位)进行计算比例关系来分析模型瓶颈。直接运行此代码,将根据输入的芯片参数和模型参数,绘制 Roofline 图,并标识出模型的性能位置。重构为一个函数,并添加一个接口,用于输入一个模型的 FLOPS 和内存占用量,在 Roofline 模型中标识该模型的性能位置。)修改这些值来绘制不同的 Roofline 图。原创 2024-08-28 17:21:57 · 394 阅读 · 1 评论 -
【AI编译器】triton学习:矩阵乘优化
且需要注意的是,当M与数据握的大小BLOCK_SIZE_M不是相匹配的时候,我们可以通过添加一个额外模式来处理这种情况,例如,在数据中往底部加上一些无用的值。这种方式非常重要,因为执行顺序可能导致该程序中L2缓存的命中率不同,而且令人遗憾的是,如果我们使用矩阵增量式顺序执行代码,则其性能将会受到影响。通过比较如果我们按行向量序排列输出的话,则需要在SRAM中加载90个元素来计算第一层的9个输出值,而若是以固定单元格为基础进行分组操作,只需加载54个元素。为了实现该操作,我们需要使用多维指针运算方式。原创 2024-06-25 17:22:53 · 1375 阅读 · 0 评论 -
【AI编译器】triton学习:编程模型
在过去十年里,深度神经网络 (DNNs) 已成为机器学习 (ML) 模型的一个重要分支,能够实现跨领域多种应用中的最佳性能。这些模型由一系列包括参数化(如滤波器)和非参数化(如缩小值函数)元件组成的层次结构组成,这种模式虽然运算复杂度高且计算量大,但对于多核、并行处理器来说是非常适用的。由于深度神经网络的计算能力和 GPU编程带来了极高的难度,因此对特定应用语言 (DSL)及编译器引发出广泛的学术与产业界兴趣。原创 2024-06-25 17:20:09 · 1516 阅读 · 0 评论 -
【模型压缩】网络层与算子融合
由于深度学习网络层数深,结构复杂,生成的算子数量众多,带了巨大的计算资源在和时间的消耗。业界对于加速算子的计算展开了一定研究,比较经典的方法是将多个算子重新组合成一个新的算子,同时对生成的代码进行底层的性能优化,一个常规的例子:一个原始的Inception Block,首先将神经网络的conv、BN、Relu三个层融合为了一个层,简称CBR,另外TensorRT还可以对网络做水平组合,水平组合是指将输入为相同张量和执行相同操作的层融合一起,下面的Figure3即是将三个相连的CBR为一个大的的CBR。原创 2023-08-23 10:20:22 · 848 阅读 · 0 评论 -
pytorch量化库使用(2)
Eager 模式和 FX 图形模式量化 API 都为用户提供了一个钩子,以指定以自定义方式量化的模块,并使用用户定义的逻辑进行观察和量化。在转换模块交换期间,它将使用 (3) 中类的from_observed函数将 (2) 中指定类型的每个模块转换为(3) 中指定的类型。在准备模块交换期间,它将使用 (2) 中类的from_float函数将 (1) 中指定类型的每个模块转换为 (2) 中指定的类型。模型的输入和输出都是浮点张量,但量化模型中的激活是量化的,因此我们需要运算符在浮点和量化张量之间进行转换。原创 2023-06-29 17:56:13 · 1599 阅读 · 3 评论 -
pytorch量化库使用(1)
量化简介量化是指以低于浮点精度的位宽执行计算和存储张量的技术。量化模型以降低的精度而不是全精度(浮点)值对张量执行部分或全部运算。这允许更紧凑的模型表示以及在许多硬件平台上使用高性能矢量化操作。与典型的 FP32 模型相比,PyTorch 支持 INT8 量化,从而使模型大小减少 4 倍,内存带宽要求减少 4 倍。与 FP32 计算相比,对 INT8 计算的硬件支持通常快 2 到 4 倍。量化主要是一种加速推理的技术,量化运算符仅支持前向传递。PyTorch 支持多种量化深度学习模型的方法。原创 2023-06-29 17:02:51 · 1538 阅读 · 0 评论 -
【CUDA编程】 动态体素化实现
动态体素化实现动态体素化DV克服了硬体素化HV的一些缺点。动态体素化DV保留了分组grouping阶段,相反,它没有采样固定的点数或体素容量,它保留了点和体素之间的完全映射。因此,体素数和每个体素中的点数都是动态的,依赖于具体的映射函数。这消除了对固定大小缓冲区的需求,也消除了对随机点和体素的丢弃过程。因为所有原始点和体素信息都被保留了,动态体素化DV没有引入信息丢失,并产生了确定的体素嵌入,使得检测结果更稳定。原创 2023-06-16 18:13:43 · 1118 阅读 · 0 评论 -
pointpillar部署-TensorRT实现(三)
【代码】pointpillar部署-TensorRT实现(三)原创 2024-09-10 18:20:06 · 154 阅读 · 0 评论 -
pointpillar部署-TensorRT实现(二)
pointpillar网络实现中ScatterBEV操作即Learned Features 是如何变化为Pseudo Images 在TensorRT并不支持,需要手动添加自定义操作。主要使用nvinfer1::plugin来实现。原创 2024-09-10 18:18:47 · 232 阅读 · 0 评论 -
pointpillar部署-TensorRT实现(一)
统一内存管理,无须进行cpu内存申请,gpu内存申请,cpu到gpu的数据拷贝过程。但是需要注意的是cudaMallocManaged 需要在变量初始化之前使用。相对于主机是异步的,因此调用可能在memset完成之前返回。可以通过传递非零流参数将操作与流相关联。如果流为非零,则该操作可能与其他流中的操作重叠。两个过程对应cuda程序中:generateVoxels_random_launch 和 generateFeatures_launch。主要包括两个过程,一个是生成voxel,一个是生成体素特征。原创 2024-09-10 18:18:23 · 276 阅读 · 0 评论 -
【CUDA入门笔记】GPU存储结构模型(2)
GPU存储结构模型1.CPU可以读写GPU设备中的Global Memory、Constant Memory以及Texture Memory内存储的内容;主机代码可以把数据传输到设备上,也可以从设备中读取数据;2.GPU中的线程使用Register、Shared Memory、Local Memory、Global Memory、Constant Memory以及Texture Memory;不同Memory的作用范围是不同的,和线程、block以及grid有关;线程可以读写Register、Shar原创 2022-12-31 19:16:23 · 640 阅读 · 4 评论 -
【CUDA入门笔记】GPU存储结构模型(1)
GPU存储结构模型1.CPU可以读写GPU设备中的Global Memory、Constant Memory以及Texture Memory内存储的内容;主机代码可以把数据传输到设备上,也可以从设备中读取数据;2.GPU中的线程使用Register、Shared Memory、Local Memory、Global Memory、Constant Memory以及Texture Memory;不同Memory的作用范围是不同的,和线程、block以及grid有关;线程可以读写Re原创 2022-12-31 19:15:47 · 549 阅读 · 0 评论 -
【CUDA入门笔记】CUDA内核与线程配置
1.CUDA核函数在GPU上调用的函数成为CUDA核函数(Kernel function),核函数会被GPU上的多个线程执行。每个线程都会执行核函数里的代码,当然由于线程编号的不同,执行的代码路径可能会有所不同。(1)函数的最前面是声明标识符__global__,该标识符表示这个函数可以在GPU上执行。需要指出的是尽管是在GPU上执行,但是仍然是由CPU端发起调用的(2)核函数调用时需要用<<<...>>>符号来指定线程配置(3)在核函数内部可以调用CUD原创 2022-12-31 19:14:17 · 1464 阅读 · 0 评论 -
【模型压缩】实例分析量化原理
当于激活函数),然后在这个经过定点化的计算图上重新训练神经网络。以全连接层为例,定点模型训练函数会根据Layer类型的Dense层构建一个TensorFlow的dense层(由MatMul和Add两个OP构成),并且在MatMul操作的输入、Add操作的输出、权重张量和MatMul之间、偏置张量和Add之间增加定点化处理节点。定点模型训练是一个迁移训练的过程在浮点网络的相应位置插入定点化处理节点(相。保存权值和scale值。...原创 2022-07-31 14:42:53 · 620 阅读 · 2 评论 -
【蒸馏】PointDistiller: Structured Knowledge DistillationTowards Efficient and Compact 3D Detection
方法的细节。fT和f S:教师检测器和学生检测器中的特征编码层。AT和AS:抽取的待蒸馏体素或重要性得分最高的点的特征。CT和CS:教师和学生检测特征的通道数。GT和GS:教师和学生检测器的图形特征。该方法基于预先定义的重要度评分,从整个点云中抽取比较关键的N个体素或点,通过动态图卷积提取它们的局部几何结构,然后对其进行加权提取。 最近的大量研究表明,获取和利用点云局部几何结构中的语义信息对点云表示学习有着至关重要的影响。因此,我们提出局部蒸馏的方法,并不是直接将教师检测器的主干特征提取为学生检测器,而是先原创 2022-06-24 12:38:13 · 442 阅读 · 0 评论 -
OpenMP入门
OpenMP 是 Open MultiProcessing 的缩写。可以在 Visual Studio 或者 gcc 中使用。把下面的代码保存为 omp.cc然后 g++ omp.cc -fopenmp就可以了OpenMP的设计们希望提供一种简单的方式让程序员不需要懂得创建和销毁线程就能写出多线程化程序。为此他们设计了一些pragma,指令和函数来让编译器能够在合适的地方插入线程大多数的循环只需要在for之前插入一个pragma就可以实现并行化。而且,通过把这些恼人的细节都丢给编译器,你可以花费更多的时间来原创 2022-06-21 18:56:24 · 425 阅读 · 0 评论 -
【寒武纪】视觉算法MLU220硬件适配(1)
寒武纪开发者社区 安装硬件驱动和软件工具链,也可以直接使用寒武纪官方开发平台:寒武纪开发平台本地开发安装完工具需要进行一些配置:根据包管理器的反馈,CNToolkit安装成功后,还需要进行最后检查和环境配置才能正确工作。......原创 2022-06-06 15:52:12 · 4241 阅读 · 6 评论 -
【模型压缩】量化精度损失分析
1, 如何进行模型量化?按照量化阶段的不同,一般将量化分为 quantization aware training(QAT) 和 post-training quantization(PTQ)。QAT 需要在训练阶段就对量化误差进行建模,这种方法一般能够获得较低的精度损失。PTQ 直接对普通训练后的模型进行量化,过程简单,不需要在训练阶段考虑量化问题,因此,在实际的生产环境中对部署人员的要求也较低,但是在精度上一般要稍微逊色于 QAT。本文介绍的主要方法也是针对 PTQ 。关于 QAT 的内容,因为..原创 2022-02-16 13:26:40 · 6650 阅读 · 0 评论 -
『RV1109人脸活体检测』问题调试
问题:结果与tflite结果不一致,任意输入两张图片都是相似度为0.99,tflite接口结果推理正常。与Numpy版本不兼容导致的,一般是由于Scipy版本过高,而Numpy版本过低。3,网络算子有问题,训练网络是tf2, rk一般只支持TF1.X。尝试:将量化u8位改为量化浮点16位,后结果正常。1,输入数据预处理归一化有问题。卸载NUMPY重新安装。注意目标平台,与预编译设置。4,tflite转rknn。以上确认之后结果依然不对。2,输出相似度计算有问题。原创 2022-02-07 17:39:06 · 113 阅读 · 0 评论 -
【嵌入式AI】CNN模型压缩(剪枝,量化)详解与tensorflow实验
1,CNN模型压缩综述1 模型压缩的必要性及可行性(1)必要性:首先是资源受限,其次在许多网络结构中,如VGG-16网络,参数数量1亿3千多万,占用500MB空间,需要进行309亿次浮点运算才能完成一次图像识别任务;(2)可行性:模型的参数在一定程度上能够表达其复杂性,相关研究表明,并不是所有的参数都在模型中发挥作用,部分参数作用有限、表达冗余,甚⾄会降低模型的性能。论⽂提出,很多的深度神经网络仅仅使用很少一部分(5%)权值就⾜以预测剩余的权值。该论⽂还提出这些剩下的权值甚至可以直接不用被学习。原创 2022-01-25 16:29:32 · 5829 阅读 · 2 评论 -
【人脸检测与嵌入式】嵌入式端CNN人脸检测
嵌入式端人脸检测本文只要包括两个部分,一个是使用传统DLIB人脸检测;第二个是使用CNN的人脸检测,分别移植到嵌入式上运行一,使用DLIB人脸检测1,下载dlib源码进入目录,新建build目录2,使用CMAKE-GUI配置交叉编译工具3,生成静态库后,编写CMakeLists.txt文件#包含头文件INCLUDE_DIRECTORIES(/home/feng/work/dlib-19.20) #dlib根目录地址LINK_DIRECTORIES(/home/feng原创 2021-04-06 17:30:18 · 626 阅读 · 0 评论 -
【FPGA与深度学习】基于FPGA的深度学习CNN加速器设计
基于FPGA的深度学习CNN加速器设计英文原文:http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf?spm=a2c4e.11153940.blogcont5752.3.654031b6l0wvY2&file=fpga2015_chen.pdfhttps://yq.aliyun.com/articles/5752因...原创 2018-11-13 16:00:50 · 4980 阅读 · 1 评论 -
【模型压缩】蒸馏神经网络(Distill the Knowledge in a Neural Network)
1,简介 昆虫作为幼虫时擅于从环境中汲取能量,但是成长为成虫后确是擅于其他方面,比如迁徙和繁殖等。同理神经网络训练阶段从大量数据中获取网络模型,训练阶段可以利用大量的计算资源且不需要实时响应。然而到达使用阶段,神经网络需要面临更加严格的要求包括计算资源限制,计算速度要求等等。由昆虫的例子我们可以这样理解神经网络:一个复杂的网络结构模型是若干个单独模型组成的集合,或者是一些很强的约束条件下(比如dropout率很高)训练得到的一个很大的网络模型。一旦复杂网络模型训练完成,我们便可...原创 2021-10-18 17:54:56 · 1271 阅读 · 0 评论 -
【人脸识别与嵌入式】人脸识别算法移植到K210硬件平台
人脸识别算法移植到K210硬件平台下载:Keras_insightface工程Git clone https://github.com/leondgarse/Keras_insightface 下载需要h5模型原创 2021-06-01 11:35:18 · 2553 阅读 · 3 评论 -
【K210】onnx模型优化——进行BN和卷积层的融合
ncc转换出错:NOT supported ONNX opcode: BatchNormalizationonnx模型优化——进行BN和卷积层的融合一、准备工作安装ONNXYou can then install ONNX from PyPi (Note: Set environment variableONNX_ML=1for onnx-ml):pip install onnxYou can also build and install ONNX locally ...原创 2021-05-07 18:15:48 · 2781 阅读 · 1 评论 -
【人脸识别与嵌入式】RV1109编译嵌入式人脸识别静态库
编译嵌入式静态库本项目是利用insightface训练一个人脸识别模型,然后使用NPU 加速在嵌入式RV1109板子上运行。本此记录如何使用交叉编译工具编译一个动态库提供给软件调用。人脸识别算法依赖了DLIB,opencv库,编译过程需要链接这两个库的动态库。DLIB编译时直接生成了静态库,这样链接编译的可执行文件运行完全没有问题。但是编译成静态库时调用就会出问题,链接不到。所以舍弃dlib静态库,直接使用源码1,直接联合dlib源码编译找到/work/dlib-19.20/dlib/all原创 2021-04-02 16:28:37 · 1158 阅读 · 1 评论 -
【嵌入式AI】yolov3-tiny基于darknet2ncnn在安卓实现
yolov3-tiny基于darknet2ncnn在安卓实现1、构建ncnn以及编译darknet2ncnn 参考:https://github.com/xiangweizeng/darknet2ncnngit clone https://gitee.com/damone/darknet2ncnn.gitcd darknet2ncnngit submodule initgit ...原创 2020-03-11 18:56:43 · 1429 阅读 · 4 评论 -
【嵌入式AI】深度学习模型移植的移动端框架
深度学习模型移植的移动端框架转载: https://blog.csdn.net/weixin_41770169/article/details/85625443截止2018年,主流移动端框架总结:腾讯:ncnn与featurecnn对比,前者开源早,代码、文档完善;后者测试速度略微快一点小米MACE:刚开源,可能会碰到很多问题百度MDL:速度比ncnn慢安卓 cp...原创 2019-06-03 09:44:13 · 2112 阅读 · 0 评论 -
【嵌入式AI】TFLite介绍
转自:https://www.cnblogs.com/vitoyeah/p/10273299.html概述TFLite主要含有如下内容:(1)TFLite提供一系列针对移动平台的核心算子,包括量化和浮点运算。另外,TFLite也支持在模型中使用自定义算子。(2)TFLite基于FlatBuffers定义了一种新的模型文件格式。FlatBuffers类似于protocol buffe...原创 2019-06-10 17:20:50 · 10839 阅读 · 1 评论 -
【嵌入式AI】python转换tflite模型并在PC上调用
用python转换tflite模型并在PC上调用版权声明:本文为博主原创文章,转载请标明原始博文地址: https://blog.csdn.net/yuanlulu/article/details/85731488概述想玩玩tflite,无奈对android开发环境不熟。经过搜索找到了在PC上python下调用tflite模型的方法。环境python3.6 tf-nightl...原创 2019-06-06 15:54:37 · 3870 阅读 · 4 评论