高性能计算与嵌入式AI
文章平均质量分 82
移动端深度学习,嵌入式AI,卷积神经网络嵌入式部署
Arthur.AI
人工智能算法工程师,对深度学习,计算机视觉,嵌入式AI,人脸识别,自动驾驶技术感兴趣的一起来交流吧!
展开
-
【AI编译器】triton学习:矩阵乘优化
且需要注意的是,当M与数据握的大小BLOCK_SIZE_M不是相匹配的时候,我们可以通过添加一个额外模式来处理这种情况,例如,在数据中往底部加上一些无用的值。这种方式非常重要,因为执行顺序可能导致该程序中L2缓存的命中率不同,而且令人遗憾的是,如果我们使用矩阵增量式顺序执行代码,则其性能将会受到影响。通过比较如果我们按行向量序排列输出的话,则需要在SRAM中加载90个元素来计算第一层的9个输出值,而若是以固定单元格为基础进行分组操作,只需加载54个元素。为了实现该操作,我们需要使用多维指针运算方式。原创 2024-06-25 17:22:53 · 904 阅读 · 0 评论 -
【AI编译器】triton学习:编程模型
在过去十年里,深度神经网络 (DNNs) 已成为机器学习 (ML) 模型的一个重要分支,能够实现跨领域多种应用中的最佳性能。这些模型由一系列包括参数化(如滤波器)和非参数化(如缩小值函数)元件组成的层次结构组成,这种模式虽然运算复杂度高且计算量大,但对于多核、并行处理器来说是非常适用的。由于深度神经网络的计算能力和 GPU编程带来了极高的难度,因此对特定应用语言 (DSL)及编译器引发出广泛的学术与产业界兴趣。原创 2024-06-25 17:20:09 · 896 阅读 · 0 评论 -
【模型压缩】网络层与算子融合
由于深度学习网络层数深,结构复杂,生成的算子数量众多,带了巨大的计算资源在和时间的消耗。业界对于加速算子的计算展开了一定研究,比较经典的方法是将多个算子重新组合成一个新的算子,同时对生成的代码进行底层的性能优化,一个常规的例子:一个原始的Inception Block,首先将神经网络的conv、BN、Relu三个层融合为了一个层,简称CBR,另外TensorRT还可以对网络做水平组合,水平组合是指将输入为相同张量和执行相同操作的层融合一起,下面的Figure3即是将三个相连的CBR为一个大的的CBR。原创 2023-08-23 10:20:22 · 574 阅读 · 0 评论 -
pytorch量化库使用(2)
Eager 模式和 FX 图形模式量化 API 都为用户提供了一个钩子,以指定以自定义方式量化的模块,并使用用户定义的逻辑进行观察和量化。在转换模块交换期间,它将使用 (3) 中类的from_observed函数将 (2) 中指定类型的每个模块转换为(3) 中指定的类型。在准备模块交换期间,它将使用 (2) 中类的from_float函数将 (1) 中指定类型的每个模块转换为 (2) 中指定的类型。模型的输入和输出都是浮点张量,但量化模型中的激活是量化的,因此我们需要运算符在浮点和量化张量之间进行转换。原创 2023-06-29 17:56:13 · 1369 阅读 · 3 评论 -
pytorch量化库使用(1)
量化简介量化是指以低于浮点精度的位宽执行计算和存储张量的技术。量化模型以降低的精度而不是全精度(浮点)值对张量执行部分或全部运算。这允许更紧凑的模型表示以及在许多硬件平台上使用高性能矢量化操作。与典型的 FP32 模型相比,PyTorch 支持 INT8 量化,从而使模型大小减少 4 倍,内存带宽要求减少 4 倍。与 FP32 计算相比,对 INT8 计算的硬件支持通常快 2 到 4 倍。量化主要是一种加速推理的技术,量化运算符仅支持前向传递。PyTorch 支持多种量化深度学习模型的方法。原创 2023-06-29 17:02:51 · 1296 阅读 · 0 评论 -
【CUDA编程】 动态体素化实现
动态体素化实现动态体素化DV克服了硬体素化HV的一些缺点。动态体素化DV保留了分组grouping阶段,相反,它没有采样固定的点数或体素容量,它保留了点和体素之间的完全映射。因此,体素数和每个体素中的点数都是动态的,依赖于具体的映射函数。这消除了对固定大小缓冲区的需求,也消除了对随机点和体素的丢弃过程。因为所有原始点和体素信息都被保留了,动态体素化DV没有引入信息丢失,并产生了确定的体素嵌入,使得检测结果更稳定。原创 2023-06-16 18:13:43 · 703 阅读 · 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 · 540 阅读 · 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 · 451 阅读 · 0 评论 -
【CUDA入门笔记】CUDA内核与线程配置
1.CUDA核函数在GPU上调用的函数成为CUDA核函数(Kernel function),核函数会被GPU上的多个线程执行。每个线程都会执行核函数里的代码,当然由于线程编号的不同,执行的代码路径可能会有所不同。(1)函数的最前面是声明标识符__global__,该标识符表示这个函数可以在GPU上执行。需要指出的是尽管是在GPU上执行,但是仍然是由CPU端发起调用的(2)核函数调用时需要用<<<...>>>符号来指定线程配置(3)在核函数内部可以调用CUD原创 2022-12-31 19:14:17 · 1196 阅读 · 0 评论 -
【模型压缩】实例分析量化原理
当于激活函数),然后在这个经过定点化的计算图上重新训练神经网络。以全连接层为例,定点模型训练函数会根据Layer类型的Dense层构建一个TensorFlow的dense层(由MatMul和Add两个OP构成),并且在MatMul操作的输入、Add操作的输出、权重张量和MatMul之间、偏置张量和Add之间增加定点化处理节点。定点模型训练是一个迁移训练的过程在浮点网络的相应位置插入定点化处理节点(相。保存权值和scale值。...原创 2022-07-31 14:42:53 · 515 阅读 · 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 · 345 阅读 · 0 评论 -
OpenMP入门
OpenMP 是 Open MultiProcessing 的缩写。可以在 Visual Studio 或者 gcc 中使用。把下面的代码保存为 omp.cc然后 g++ omp.cc -fopenmp就可以了OpenMP的设计们希望提供一种简单的方式让程序员不需要懂得创建和销毁线程就能写出多线程化程序。为此他们设计了一些pragma,指令和函数来让编译器能够在合适的地方插入线程大多数的循环只需要在for之前插入一个pragma就可以实现并行化。而且,通过把这些恼人的细节都丢给编译器,你可以花费更多的时间来原创 2022-06-21 18:56:24 · 332 阅读 · 0 评论 -
【寒武纪】视觉算法MLU220硬件适配(1)
寒武纪开发者社区 安装硬件驱动和软件工具链,也可以直接使用寒武纪官方开发平台:寒武纪开发平台本地开发安装完工具需要进行一些配置:根据包管理器的反馈,CNToolkit安装成功后,还需要进行最后检查和环境配置才能正确工作。......原创 2022-06-06 15:52:12 · 3280 阅读 · 6 评论 -
【模型压缩】量化精度损失分析
1, 如何进行模型量化?按照量化阶段的不同,一般将量化分为 quantization aware training(QAT) 和 post-training quantization(PTQ)。QAT 需要在训练阶段就对量化误差进行建模,这种方法一般能够获得较低的精度损失。PTQ 直接对普通训练后的模型进行量化,过程简单,不需要在训练阶段考虑量化问题,因此,在实际的生产环境中对部署人员的要求也较低,但是在精度上一般要稍微逊色于 QAT。本文介绍的主要方法也是针对 PTQ 。关于 QAT 的内容,因为..原创 2022-02-16 13:26:40 · 5232 阅读 · 0 评论 -
【嵌入式AI】CNN模型压缩(剪枝,量化)详解与tensorflow实验
1,CNN模型压缩综述1 模型压缩的必要性及可行性(1)必要性:首先是资源受限,其次在许多网络结构中,如VGG-16网络,参数数量1亿3千多万,占用500MB空间,需要进行309亿次浮点运算才能完成一次图像识别任务;(2)可行性:模型的参数在一定程度上能够表达其复杂性,相关研究表明,并不是所有的参数都在模型中发挥作用,部分参数作用有限、表达冗余,甚⾄会降低模型的性能。论⽂提出,很多的深度神经网络仅仅使用很少一部分(5%)权值就⾜以预测剩余的权值。该论⽂还提出这些剩下的权值甚至可以直接不用被学习。原创 2022-01-25 16:29:32 · 5327 阅读 · 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 · 550 阅读 · 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 · 4794 阅读 · 1 评论 -
【模型压缩】蒸馏神经网络(Distill the Knowledge in a Neural Network)
1,简介 昆虫作为幼虫时擅于从环境中汲取能量,但是成长为成虫后确是擅于其他方面,比如迁徙和繁殖等。同理神经网络训练阶段从大量数据中获取网络模型,训练阶段可以利用大量的计算资源且不需要实时响应。然而到达使用阶段,神经网络需要面临更加严格的要求包括计算资源限制,计算速度要求等等。由昆虫的例子我们可以这样理解神经网络:一个复杂的网络结构模型是若干个单独模型组成的集合,或者是一些很强的约束条件下(比如dropout率很高)训练得到的一个很大的网络模型。一旦复杂网络模型训练完成,我们便可...原创 2021-10-18 17:54:56 · 1157 阅读 · 0 评论 -
【人脸识别与嵌入式】人脸识别算法移植到K210硬件平台
人脸识别算法移植到K210硬件平台下载:Keras_insightface工程Git clone https://github.com/leondgarse/Keras_insightface 下载需要h5模型原创 2021-06-01 11:35:18 · 2329 阅读 · 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 · 2347 阅读 · 1 评论 -
【人脸识别与嵌入式】RV1109编译嵌入式人脸识别静态库
编译嵌入式静态库本项目是利用insightface训练一个人脸识别模型,然后使用NPU 加速在嵌入式RV1109板子上运行。本此记录如何使用交叉编译工具编译一个动态库提供给软件调用。人脸识别算法依赖了DLIB,opencv库,编译过程需要链接这两个库的动态库。DLIB编译时直接生成了静态库,这样链接编译的可执行文件运行完全没有问题。但是编译成静态库时调用就会出问题,链接不到。所以舍弃dlib静态库,直接使用源码1,直接联合dlib源码编译找到/work/dlib-19.20/dlib/all原创 2021-04-02 16:28:37 · 911 阅读 · 0 评论 -
【嵌入式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 · 1335 阅读 · 4 评论 -
【嵌入式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 · 10275 阅读 · 1 评论 -
【嵌入式AI】深度学习模型移植的移动端框架
深度学习模型移植的移动端框架转载: https://blog.csdn.net/weixin_41770169/article/details/85625443截止2018年,主流移动端框架总结:腾讯:ncnn与featurecnn对比,前者开源早,代码、文档完善;后者测试速度略微快一点小米MACE:刚开源,可能会碰到很多问题百度MDL:速度比ncnn慢安卓 cp...原创 2019-06-03 09:44:13 · 1960 阅读 · 0 评论 -
【嵌入式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 · 3617 阅读 · 4 评论