自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 cuda编程:reduce优化

本文只是一个CUDA编程小白记录学习过程的。更全面的理解和学习请跳转。

2024-04-26 22:13:27 653

原创 谷歌量化白皮书-QAT原理

本文内容摘抄自。

2024-04-19 00:12:09 165

原创 谷歌量化白皮书—PTQ原理

本篇笔记摘抄的。

2024-04-18 22:56:34 187

原创 二叉搜索树(BST)

二叉搜索树的优点是可以快速地进行查找、插入和删除操作。查找的时间复杂度和树的高度成正比,平均情况下为O(log n),最坏情况下为O(n)。插入和删除的时间复杂度也和树的高度成正比,平均情况下为O(log n),最坏情况下为O(n)。二叉搜索树的缺点是可能会出现不平衡的情况,导致树的高度过高,影响效率。为了解决这个问题,有一些平衡二叉搜索树的变种,如AVL树、红黑树等,可以保证树的高度始终为O(log n)。

2024-04-18 20:30:41 214

原创 AItoolchain相关技术学习

这是一种提高处理器指令吞吐量的方法,通过重组指令的执行顺序,使得指令可以在不同的处理阶段并行执行。:内存优化的一种技术,通过将大的数据集切分成小块(tiles),使得每一块都可以高效地加载到快速的局部内存中。:编译器在编译阶段生成目标文件(.obj),并在其中包含一些中间表示(IR)的信息,这些信息用于后续的优化。:优化后,链接器生成最终的可执行文件,这个过程中会应用更多的机器级优化,如指令选择和寄存器分配。- 分析每个GPU的计算和通信时间,调整shard的大小和通信策略,以减少总体的计算时间。

2024-04-18 19:59:49 778

原创 模拟量化面试20问回答

所以把量化之后的权值限制在(-127,127)之间,那么一次乘法运算得到结果永远会小于-128*-128 = 2^14。15、对于conv2d来说,采用multiplier,shift计算时,对bias的scale有特殊要求吗。因为 8bit 的取值区间是[-2^7, 2^7 -1],两个 8bit 相乘之后取值区间是 (-2。这里有个 Trick,即对于权重是量化到[−127,127],这是为了累加的时候减少溢出的风险。19、为什么有的模型会出现中间量化误差大,后续量化误差又减少的情况。

2024-04-18 19:57:09 1037

原创 yolov7模型输出层预测方法解读

p传递的是3个输出层的预测值, (8,3,80,80,11)表示8个batch, 3个anchor, 特征图大小(80 * 80), 6分类对应的一个bbox向量维度是11。本文主要目的是为了梳理yolov7输出层预测的目标框坐标的整个过程。

2024-04-18 17:45:04 1256

原创 pytorch学习杂记(二)

add:逐元素按值相加concat:按照指定的维度进行张量堆叠。

2024-04-18 00:10:15 1052

原创 yolov7网络模块解读

指数移动平均用来平滑模型训练时权重参数更新的方向。它认为模型参数的梯度跟新方向不仅与当前时刻、同历史数据也要做加权。detach()方法的作用是创建一个新的Tensor,这个Tensor与当前计算图脱离关系。它不会参与到后续的梯度传播中。此外,返回的Tensor与原始Tensor共享相同的数据存储,所以对其中一个的原地修改会影响另一个。

2024-04-17 12:35:16 454

原创 pytorch学习杂记(一)

在Python中定义一个类时,括号中的传参指定了这个类的基类或父类。这意味着新定义的类将继承基类的所有方法和属性。

2024-04-09 19:57:22 856

原创 torch.fx量化resnet18_cifar10

量化后推理时间快了一倍,并且模型精度几乎没有损耗。

2024-03-30 00:33:52 306

原创 中科弘云面视总结

死锁是指两个或多个进程在执行过程中,因为争夺资源或者相互等待而导致的一种阻塞的现象,如果没有外部干预,它们都无法继续运行。死锁的产生有四个必要条件:互斥条件:一个资源每次只能被一个进程使用,其他进程必须等待。请求与保持条件:一个进程已经占有了一些资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时该进程会阻塞,但不会释放已占有的资源。不可剥夺条件:一个进程已经获得的资源,在未使用完之前,不能被其他进程强行夺走,只能由该进程自己释放。

2024-03-21 10:49:32 884

原创 Transformer self-attention源码及原理理解

,用来将原始的Q K V投影到下一层做Dot-Production attention计算。对应Figure2中的三个Linear层的权重,通过训练可得,它们的形状是(和输入序列的token有关。首先Q K V怎么来的?

2024-03-17 14:54:34 369

原创 YOLOV7学习记录

提升推理速度。

2024-03-12 18:26:58 922

原创 阿里夸克一面整理

/ 输入如下图的BBox列表和连线列表,返回[{"BBox": [A], "Children": [{"BBox": [B], "Children": []}, {"BBox": [C], "Children": []}]},{"BBox": [D], "Children": []]// (2) 输入输出格式如:[[x1, y1, x2, y2], …// 即,A 框包含 B 框,则 B 框是 A 框的 Child。// 输入框列表,// 评测题目: 框(BBox)的结构化。// (1) 背景描述。

2024-01-02 19:20:03 667

原创 CPU/GPU实现向量内积

向量内积(点乘/点积/数量积):两个向量对应元素相乘之后求和:CPU实现:首次接触bank conflict的概念,在这里补充一下。bank是shared memory中用来存储数据的特殊组织方式。为了高效存取输入shared memory分为32个存储体(bank), 对应32个线程。每个bank有一个固定的带宽,可以同时服务一个线程的访问。当多个线程在一个时钟周期内访问一个bank的不同地址时,会产生bank conflict。

2023-11-20 14:52:42 291

原创 模型剪枝算法——L1正则化BN层的γ因子

L2求导为θ,当参数特别大时,参数更新的梯度也大,当参数特别小时,参数更新的梯度也小。L2可以每个参数都变小但是不至于变成0,这样可以减少模型的复杂度,防止模型拟合数据中的噪声。L1在反向传播,梯度更新的时候梯度下降的步长衡为1,在参数更新的时候很多参数都学成了0,因此能达到稀疏的目的。在神经网络的卷积操作之后会得到多个特征图,通过策略突出重要的特征达到对网络瘦身的目的。sigmoid函数在神经网络中常用来做激活函数,为了将非线性引入神经网络中,使得神经网络具有更加复杂的决策边界。,得到稀疏的网络层。

2023-11-10 17:14:06 825

原创 网络编程实战_12

12 检测链接无效TCP keep-Alive选项很多刚接触 TCP 编程的人会惊讶地发现,在没有数据读写的“静默”的连接上,是没有办法发现 TCP 连接是有效还是无效的。比如客户端突然崩溃,服务器端可能在几天内都维护着一个无用的 TCP 连接。前面提到的例子就是这样的一个场景。那么有没有办法开启类似的“轮询”机制,让 TCP 告诉我们,连接是不是“活着”的呢?这就是 TCP 保持活跃机制所要解决的问题。实际上,TCP 有一个保持活跃的机制叫做 Keep-Alive。这个机制的原理是这样的:定义一个时间

2023-11-04 07:09:21 115 1

原创 线程锁、进程锁、分布式锁_Linux网络编程

线程锁1、互斥锁:互斥锁首先是一个睡眠锁,如下图当线程C没有获取到资源时,线程锁会结束线程B切换到线程C。2、自旋锁:而自旋锁在未获取到资源时线程C循环等待,尝试获取锁,一直占用核心。3、读写锁:若一个线程获取到读(写)操作,则其他线程的写(读)操作被禁止。4、条件变量:当达到条件变量时,我们通过发送信号或者广播的方式唤醒其他的线程4、信号量,5、原子锁问题一、什么时候使用互斥锁,什么时候使用自旋锁?互斥锁:超过CPU切换时间,使用互斥锁自旋锁:时间短,充分利用资源,避免线程的切换影响效

2023-11-04 07:09:03 273 1

原创 Linear FC FFN MLP层学习

MLP通常只包含全连接层和激活函数层,而FFN可以包含其他类型的层,如卷积层、池化层、归一化层、残差连接层等2。FFN也可以看作是一种广义的MLP,即任何前馈神经网络都可以看作是一个MLP,但不是所有的MLP都是FFN。Fast-forward network(前馈神经网络) 它的神经元只与下一层的神经元连接,没有循环或反馈的连接,可用于分类、回归、聚类任务。它的网络结构包含输入层、隐藏层、输出层。全连接层的每个神经元和上一层的所有神经元都有连接,用于把前面提取到的特征综合起来。线性层没有激活函数。

2023-11-03 22:26:50 904 1

原创 PositionalEncoding类代码及论文原理理解

这里实现了一个正余弦的序列位置编码。序列位置编码可以使用线性函数表示,也可以通过训练学习得到,论文中提出使用正余弦的位置编码可以使模型预测出在训练阶段没有见过的更长的序列长度。此处我的疑问是代码中使用了exp和log与公式对应不上,可能是数学功底太差我推到不出来,希望之后能弄明白。

2023-11-02 16:12:04 242

原创 multiheadattention类原理及源码理解

transformer中self-attention就是对一个输入序列计算每个位置的注意力,每个位置在论文原文中用d_model(512)维表示,多头就是每个位置用h(原文中8个)个头计算,这样每个头计算一个位置中的64维特征。Q = XW^Q ,其中X是embedding输入矩阵,W^Q 是一个可训练的参数矩阵,大小为(d_model* d_model),用于将X映射到Q空间。我们可以从模型中检查不同注意力头的分布,观察模型是如何关注不同位置和信息的。每个注意力头可以捕捉输入序列中的不同模式和关系,而。

2023-11-01 14:46:24 334

原创 c++实现 CPU nms算法

自测好用的C++实现的NMS算法片段,一看就能回忆起原理。

2023-06-10 01:32:18 155

转载 Adam算法

这篇文章很好的介绍了Adam算法的原理、存在的问题及它的系列改进:

2023-05-29 10:50:21 42

原创 YOLOV系列名词大白话解释

计算AP都需要得到不同recall下precision的值,由于recall=TP/(all gt nums),所以只要得到不同的TP即可得到不同的recall值,而想要增加或减少TP的方式,只能是让用于计算TP的总预测框数量变多/变少,即动态的调整score的阈值,让更多/更少的预测框参与计算。理解为不同recall值时对应的precision的平均值。accuracy:准确率,所有预测对的情况占所有预测结果的比值,针对的是全类别。precision:精确度,所有的预测为正样本的情况下,预测对了的概率。

2022-12-23 15:10:14 846 1

原创 YOLOV3论文学习

在本文的实验中才用了COCO数据集,在每个尺度上预测出3个边界框,因此预测得到的tensor维度是 N * N * [3 * (4 + 1 +80)],其中4代表边界框的偏移,1表示目标置信度,80表示COCO数据集80个分类。如果一个目标的先验框和gound truth重合,则目标置信度得分为1.如果先验框的目标置信度得分不是1,我国通过设定阈值,将目标置信度得分小于阈值的预测过滤掉,根据论文【17】,我们把阈值设定为.5。因此第三个尺度的预测得益于此前所有的计算,并且得益于更早网络层中细粒度的特征。

2022-12-23 15:08:06 830

原创 论文理解--DEEP COMPRESSION

结论:大权值比小权值影响力更大,但是同时它们的数量更少,因此在Forgy和density-based方法中,非常少的中心位于大权值处,因此不能很好的代表大权值。实验思路:用不同的bit位表示中心,并使用3.2小节提到的三种初始化中心的方法linear、density,forgy。数据集的特征值在SVD中用奇异值来表征,按照重要性排列,降维过程就是舍弃不重要的特征向量的过程,而剩下的特征向量组成的空间即为降维后的空间。根据字符出现的概率性成熟表,出现概率越高的字符,需要越短的编码来表示。

2022-12-23 15:05:02 1114

原创 static_cast、const_cast、reinterpret_cast

static_cast:1、用于显示转化,将较大的算术类型转换成较小的算术类型2、用于从void*中将丢失的指针,转换出来double d =3.14;void * p= &d ; //任何非常量对象的指针都能转换成void *double * ptr =static_cast<double *>(p);const_cast...

2021-09-07 21:18:14 117

原创 datastream docker使用,配置SSH远程登录连接

1、 从官方containers 使用命令行pull docker2、运行 deepstream docker3、docker ps 查看启用的dockerdocker exec 启用docker stop id/name 停用docker4、运行示例step1:cd …/deepstream/deepstream-5.1/sources/apps/sample_apps/deepstream-test1step2:阅读READMEsudo apt-get install libgstr

2021-06-10 10:21:55 168

原创 nodejs

ajax使用 JavaScript 向服务器提出请求并处理响应而不阻塞用户核心对象XMLHttpRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。Web 应用程序较桌面应用程序有诸多优势;它们能够涉及广大的用户,它们更易安装及维护,也更易开发。Web 应用程序较桌面应用程序有诸多优势;它们能够涉及广大的用户,它们更易安装及维护,也更易开发。expressres返回json数据给前端1、re

2021-06-10 09:51:14 125

原创 linux命令——lsblk

https://www.freesion.com/article/559662820/

2021-06-10 09:49:07 88

原创 virtualenv安装tensorflow

gcc -o a.out -L/opt/ARM-software/arm_compute-v21.02-bin-linux/lib/linux-arm64-v8a-neon-cl -larm_compute_core -L/opt/boost_1_75_0/stage/lib -lboost_program_options -L/opt/ARM-software/armnn_21_02/build -larmnnUtils -larmnn -larmnnOnnxParser -L/opt/ARM-softw

2021-06-10 09:45:27 136

转载 VisualGDB使用SSH连接远程Linux服务器运行调试Linux工程

官方教程:Importing CMake Linux projects to VisualGDB

2021-03-24 15:00:33 351

转载 转载_CFLAGS、CXXFLAGS、LDFLAGS与LIBS

http://blog.chinaunix.net/uid-28295089-id-4439378.html

2021-03-24 11:33:15 139

原创 Note_Benchmark Analysis of Representative Deep Neural Network Architectures

ABSTRACT本文关注的DNNs的性能指标包含:recognition accuracy, model complexity, computational complexity, memory usage, and inference time。本文DNNs实验的平台包含:a NVIDIA Titan X Pascal:12 TeraFlopsa NVIDIA Jetson TX1 board:1 TeraFlops本文实验所用数据集:ImageNet-1k本文目标:1、a complet

2021-03-09 15:06:34 385 1

原创 Note_TinyML for Ubiquitous Edge AI

What is TinyML(Tiny machine learning)?enabling deep learning algorithms on embedded (microcontroller powered) devices operating at extremely low power range (mW range and below).what challenges TinyML foucuses on?1、designing power-efficient2、compact de

2021-03-08 18:40:25 430

原创 趣谈linux操作系统_06_x86架构

cpu(Central Processing unit,中央处理器):对于一个计算机来讲,最核心的就是 CPU,它包含三个组成部分,运算单元,数据单元、控制单元。运算单元:只管算,例如做加法、做位移等等。但是,它不知道应该算哪些数据,运算结果应该放在哪里。数据单元:运算单元计算的数据如果每次都要经过总线,到内存里面现拿,这样就太慢了,所以就有了数据单元。数据单元包括 CPU 内部的缓存和寄存器组,空间很小,但是速度飞快,可以暂时存放数据和运算结果。控制单元:有了放数据的地方,也有了算的地方,还需要有个

2021-02-03 15:23:22 208

原创 趣谈Linux操作系统_05_系统调用

创建进程创建进程的系统调用叫fork。这个名字很奇怪,中文叫“分支”。为啥启动一个新进程叫“分支”呢?在 Linux 里,要创建一个新的进程,需要一个老的进程调用 fork 来实现,其中老的进程叫作父进程(Parent Process),新的进程叫作子进程(Child Process)。当父进程调用 fork 创建进程的时候,子进程将各个子系统为父进程创建的数据结构也全部拷贝了一份,甚至连程序代码也是拷贝过来的。按理说,如果不进行特殊的处理,父进程和子进程都按相同的程序代码进行下去,这样就没有意义了。所

2021-02-01 01:52:44 147

原创 linux操作系统

写在前面本文简单介绍操作系统内核组成以及一些基本概念。文件管理子系统文件管理子系统:电脑上的程序都以二进制文件的形式存储在硬盘上,硬盘只是用来存储的物理设备,需要文件子系统来组织这些二进制文件。程序:程序在电脑上只是一些二进制文件,是静态的,将他们调用起来需要使用进程。进程:任何一个程序运行起来都涉及到两方面,资源申请和运行效率 。通过进程可以向操作系统内核申请资源并且保证申请的资源只用来运行一次,以此来保证资源使用效率。进程也不是能够直接访问操作系统内核的,为了方便进程执行,操作系统提供了系统调用

2021-01-31 19:52:37 109

原创 c++_char、char*、const char*、string、char的相互转换

#include "stdafx.h"#include<iostream>#include<string>using namespace std;int main(){ //1 char * 转换成 const char * char * tmp = "candle"; const char * p1 = tmp; cout << "p1 is " << *p1 << endl; // 2 const char * 转

2021-01-12 13:11:54 395

resnet18-cifar10 模型文件,通过torch.jit.trace保存

resnet18_cifar10模型, FP32

2024-03-30

torch.fx量化resnet18-cifar10

int8量化后的resnet18_cifar10模型文件

2024-03-30

空空如也

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

TA关注的人

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