自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 链表(指针)

在C++中,指针之间的赋值是非常直接的,因为指针本质上就是存储地址的变量。这种指针之间的赋值在处理链表、树结构或其他复杂的数据结构时非常常见,因为它允许在不同的函数或代码块中传递对同一块内存区域的引用。是不正确的,因为它试图将一个节点的值赋给一个指针变量,这在类型上不匹配,并且不是我们想要的操作。这样做的目的是创建一个新的指针,而不是试图获取或修改链表中的节点。对节点进行修改,这些修改将反映在另一个指针所指向的节点上,因为它们指向的是同一个对象。是正确的赋值方式,因为它创建了一个指向相同节点的新指针。

2024-04-15 11:21:40 712

原创 矩阵转置(48.旋转图像)

在执行转置操作时,应该只遍历矩阵的上三角或下三角部分,全遍历相当于没转置!

2024-04-14 22:26:56 99

原创 swap 和 reverse

在 C++ 中,swap和reverse是两个非常有用的标准库算法,它们分别用于交换元素和反转容器中元素的顺序。

2024-04-08 15:54:46 323

原创 sort(); .front()、.back()、.begin() 和 .end()

当两个向量的左端点相同时,std::sort 会查看下一个元素(右端点)以确定顺序,这样可以确保具有相同左端点的区间会根据右端点被排序,从而保持了整体的排序稳定性。对于 std::vector<std::vector<int>> 类型的容器,std::sort 会逐个比较容器中的元素,首先比较第一个元素(即区间的左端点),如果相等,则比较第二个元素(即区间的右端点),依此类推。这意味着,排序首先是基于区间的左端点进行的,如果左端点相同,则会根据右端点进行次级排序。在 C++ 标准模板库(STL)中,

2024-04-07 19:33:59 256

原创 std::deque(双端队列)

LeetCode239单调队列

2024-04-02 08:00:48 431

原创 num_set.insert(num) 和 num_set.count(num)

这是因为每个元素最多只会被访问两次:一次是在构建哈希表时,另一次是在检查连续序列时。空间复杂度是O(n),因为哈希表存储了数组中的所有唯一元素。被用于检查当前元素的前一个数字是否存在于集合中,这是为了确定当前元素是否可以开始一个新的连续序列。容器的两个成员函数,它们用于管理和查询集合中的元素。这个算法的时间复杂度是O(n),其中n是数组。不存在,那么当前元素是连续序列的起始点。这个函数的目的是找出一个未排序整数数组。数组中所有唯一元素的集合。中最长连续子序列的长度。在提供的代码示例中,

2024-03-25 11:16:31 455

原创 emplace_back和push_back

等序列容器的成员函数,它们都用于在容器的末尾添加新元素。然而,它们在添加元素的方式上有所不同,这导致了它们在性能和使用场景上的差异。避免了临时对象的创建和随后的复制或移动,因此在性能上通常更优。对象,没有创建临时对象。则直接使用提供的参数在。对象,然后将其添加到。

2024-03-24 21:28:33 188

原创 TypeError: ‘torch.Size‘ object is not callable 错误

是一个张量的属性,而不是一个方法,所以不应该在其后面加上括号。属性时错误地将其作为一个方法。在PyTorch中,错误是因为在尝试调用。

2024-01-29 09:43:17 283

原创 12.12

理解目标硬件的能力,包括计算能力、内存架构等,以便优化计算操作和内存访问。实现高效的图优化技术,比如层融合、常量折叠、消除冗余计算等,以提升推理性能。根据硬件特性优化基础深度学习操作(如卷积、池化等),确保高效执行。提供不同的精度选项(如 FP32、FP16、INT8),并确保数值稳定性。提供易于使用的 API,支持不同的模型格式和编程语言。提供工具以帮助用户分析和优化模型的推理性能。提供详细的文档和用户支持,建立用户社区。考虑支持不同的操作系统和环境(如云、边缘设备)。

2023-12-12 18:39:35 976

原创 Nvidia Driver 重装

【代码】Nvidia Driver 重装。

2023-11-13 11:25:50 89

原创 Something about Transformer

这样的矩阵作为输入,送入后续的Transformer编码器中,实现对整张图像的建模,就如同NLP中的Transformer对一个句子进行建模一样。综上,这种基于Transformer编码器的跟踪器,可以采用在线预测和更新掩码的方式,来提供额外的监督信号,增强网络跟踪鲁棒性。所以综合来说,虽然原始论文的Vision Transformer没有卷积层,但在实际使用中加入一定数量的卷积层作为补充,可以给模型带来性能或参数效率上的提升。所以全连接层依靠可训练的权重矩阵,实现高维到低维的线性映射转换。

2023-11-01 10:12:53 87

原创 定义单向列表

这个结构体可以用来表示一个单向链表,单向链表是一种线性数据结构,每个节点都有一个值和一个指向下一个节点的指针。这段代码的功能是定义一个名为ListNode的结构体,结构体是一种可以存储多个不同类型数据的复合数据类型34。

2023-10-13 11:37:19 74

原创 自制框架学习记录

生成器表达式适用于需要逐个迭代元素的场景,不需要构建完整列表,可以提高效率。列表推导式会构建出一个完整的列表,占用更多内存,但可以多次重复使用。所以如果仅仅是获取最大值,使用生成器表达式 max(x.generation for x in inputs) 更加高效。如果需要重复使用列表,则使用列表推导式 max([x.generation for x in inputs])。:使用列表推导式,会先构建一个完整的列表,然后再调用max()。:使用生成器表达式,不会构建完整的列表。

2023-09-04 21:22:32 61

原创 大目标跟踪多模板策略

与直接通过模型端到端学习更新模板相比,手动设计策略可以更明确地控制模板更新的方式,降低模型随机性,保证模板质量。1. 更新部分子模板不要全部子模板一起更新,而是每次只更新一两个子模板,让其他模板保持原样。2. 增量更新子模板不要完全替换子模板,而是基于原模板做增量更新,只更新关键部分,保持模板历史信息。在多模板跟踪器初始化时,多个子模板通常是从同一目标区域提取的,所以初始阶段子模板是一样的。4. 当跟踪框稳定后,定期更新子模板,attention区域改变时优先更新对应模板。质量低的模板优先更新。

2023-09-01 17:48:14 246

原创 C++中 static 关键字

const 还可以修饰函数的参数或返回值,表示参数或返回值是常量,不能被修改。const 还可以修饰类的成员函数,表示该函数不能修改类的非静态成员变量。,延长它们的生命周期,也可以使变量或函数只能在本文件或本类中访问,隐藏它们的实现细节。static 还可以修饰类的成员变量或成员函数,表示它们属于整个类而不是某个对象,可以通过类名直接访问,也可以被所有对象共享。static 和 const 是 C++ 中两个不同的关键字,它们的主要区别在于它们的作用和含义。static 用来修饰变量或函数,表示它们的。

2023-08-21 17:10:12 57

原创 CMake

背景:vscode编译C++程序时,导入第三方库要在c_cpp_properties.json和tasks.json中分别指定路径。感觉不如使用CMakeLists.txt。

2023-08-05 22:12:48 179

原创 TensorRT

3.使用 API 或 Parser 构建 Network。6.传输计算数据(H2D)8.传输计算结果(D2H)TRT转换优化引擎(离线)→engine。1.创建 Builder。2.创建 Network。2.kernel自动调优。5.序列化和反序列化模型。TRT执行引擎(线上)

2023-08-05 20:06:28 280

原创 使用 堆栈 和 队列 分别实现 基于深度优先的拓扑排序

拓扑排序

2023-08-04 17:00:15 766 1

原创 BERT 模型到 TensorRT 的转换

5. 最终模型测速要对比ONNX模型和原始PyTorch模型,看TensorRT优化的效果如何。2. 在转为TensorRT模型时,可以适当调整最大batchsize、workspace大小等参数,以取得最佳的性能。2. 获取预训练BERT模型:可以直接下载官方提供的PyTorch模型,或训练自定义BERT模型。1. 模型转换要注意输入输出格式的对应,确保ONNX模型和原始PyTorch模型的输入输出一致。8. 推荐使用onnx-simplifier等工具简化模型,可以减少不必要的运算,提高转换性能。

2023-08-04 08:48:09 413

原创 ONNX Runtime 推理 BERT 模型

假设输入文本为:"My name is John"

2023-08-04 08:39:35 240 1

原创 cublas 矩阵乘法问题

可以考虑使用cublas提供的GPU端内存分配和矩阵设置函数,避免主机和设备之间的数据传输。2. cublas的默认配置可能不是针对您的特定矩阵大小进行了优化的。3. 手动CUDA实现可能进行了更多特定问题的优化,例如利用了共享内存,或者针对更好的内存访问模式进行了调整。cublas的额外开销在小矩阵上的影响可能更大。2. cublasSetMatrix(): 将主机内存中的矩阵复制到设备上已分配的内存中。3. cublasSetVector(): 将主机数组中的向量复制到设备上已分配的内存中。

2023-07-28 13:00:01 341

原创 CUDA - 内存分配函数

主要区别:总结:

2023-07-25 09:49:18 2489

原创 nvcc 编译 .cu 源代码的基本用法

指定了 GPU 计算能力、C++11 标准、优化等选项,并链接了 CUDA runtime 库。nvcc 是 NVIDIA 提供的 CUDA C/C++ 的编译器。即分别编译.cu和.cpp文件,然后链接生成可执行文件。,并输出一个叫 vectorAdd 的可执行文件。注意链接顺序,先放CUDA库。这将使用默认参数编译。

2023-07-24 11:40:50 2230

原创 CUDA - 共享内存及核函数

staticReverse使用了一个固定大小的共享存储器数组,即__shared__ int s[64],其中64是数组元素的个数,也是每个线程块内线程的个数。核函数的调用方式是使用符号,其中包含了执行配置(execution configuration),即指定了线程块(thread blocks)和线程(threads)的数量和大小,以及可选的共享存储器(shared memory)的大小和流(stream)的编号。这段代码的目的是实现一个数组的反转,即将数组中的元素按照逆序重新排列。

2023-07-23 11:01:17 157

原创 CUDA C编程

如果使用流水线前传,那么第一条指令在执行阶段(EX)就可以将R1的结果直接传递给第二条指令的执行阶段(EX),而不需要等待写回阶段(WB),这样就可以避免数据冒险和流水线暂停。流水线前传(forwarding)是一种解决数据冒险(data hazard)的技术,它可以在流水线中将一个阶段的输出直接传递给后续阶段的输入,而不需要等待结果写回寄存器。指令的每步有各自独立的电路来处理,每完成一步,就进到下一步,而前一步则处理后续指令,属于CPU硬件电路层面的并发。

2023-07-21 16:07:11 352

原创 Google Test

TEST_P(test_case_name, test_name):这是一个宏,用来定义一个参数化的测试用例,它也有两个参数,第一个是测试用例的名称(test_case_name),第二个是测试用例的子集(test_name)。在这个宏内部,可以使用gtest提供的断言来进行检查。- TEST(test_case_name, test_name):这是一个宏,用来定义一个简单的测试用例,它有两个参数,第一个是测试用例的名称(test_case_name),第二个是测试用例的子集(test_name)。

2023-07-19 16:54:30 61

原创 Ubuntu安装NVIDIA driver

【代码】Ubuntu安装NVIDIA driver。

2023-07-18 09:43:58 3733 1

原创 C++中引用和指针

引用、指针。

2023-07-08 20:32:21 70 1

原创 可见与SAR

可见和SAR是两种不同的遥感数据获取方式。可见光和SAR图像融合是一种利用可见光和SAR图像的互补性,得到更全面的地物信息的方法。的方法:这类方法将可见光和SAR图像分解为不同尺度的子带,然后对不同尺度的子带进行融合规则,最后通过逆变换得到融合图像。的方法:这类方法将可见光和SAR图像转换到其他变换域,如傅里叶域、小波域、PCA域等,然后对变换系数进行融合,最后通过逆变换得到融合图像。的方法:这类方法将可见光和SAR图像表示为稀疏系数和字典的乘积,然后对稀疏系数进行融合,最后通过字典重构得到融合图像。

2023-05-17 22:14:31 1141

原创 调试记录(展示)

没有命名冲突风险的时候可以忽略,但是我觉得this指针让代码更易读。

2023-05-11 21:07:21 102

原创 C++迭代器

要使用迭代器,需要包含头文件,并使用容器类名后面加上::iterator或::const_iterator来定义迭代器变量。

2023-05-08 22:18:33 440

原创 4/22 LSS-视锥点云

BEV pillar是一种用于表示激光雷达点云的特征的方法,它是由PointPillars提出的,基于VoxelNet的思想。将激光雷达点云在XY平面上离散化,形成多个柱状体(pillar),每个pillar包含若干个点。对每个pillar中的点进行特征提取,得到一个固定长度的特征向量。将每个pillar的特征向量分配到BEV网格中,形成BEV特征图。用卷积神经网络处理BEV特征图,输出感知结果。BEV pillar的优点是可以快速地将点云转换为BEV特征图,提高感知效率和性能。

2023-04-22 16:40:31 969 1

原创 4/20 Fizz Buzz(412)

【代码】4/20 Fizz Buzz(412)

2023-04-20 21:54:44 54

原创 4/17 最富有客户的资产总量(1672)

给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量。客户的资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是资产总量最大的客户。输入:accounts = [[1,5],[7,3],[3,5]]第 2 位客户是最富有的,资产总量是 10。第 2 位客户的资产总量 = 10。第 1 位客户的资产总量 = 6。第 3 位客户的资产总量 = 8。

2023-04-17 22:29:47 36

原创 Python中class的用法

但是这样就相当于在B类的foo方法中调用了A类的foo方法,而不是在C类的foo方法中调用了A类的foo方法。init()是Python中的构造函数,在创建对象的时候自动执行.在子类中,如果要继承父类的构造函数,就需要在子类的构造函数中使用super().init()来调用父类的构造函数。super()函数是用于调用父类(超类)的一个方法.super()是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等问题。

2023-04-13 00:11:20 283

原创 4/12 一维数组的动态和(1480)

如果nums为空,那么代码会试图访问不存在的元素,导致异常。你应该在循环之前检查nums是否为空,如果是,就直接返回一个空向量。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…错误一:没有为新的向量nums1分配足够的空间。只是声明了一个空的向量,然后试图访问它的元素。注意,向量的索引从0开始,所以最后一个元素的索引是。动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4]。但是,这段代码有一些错误,可能导致运行时错误或不正确的结果。错误二:循环条件有误。

2023-04-12 20:58:23 33 1

原创 PyQt5

😔

2023-03-27 10:41:55 73

原创 daily record

d=====( ̄▽ ̄*)b

2023-03-23 21:09:52 105

原创 way to c++

record

2023-03-19 17:53:23 136

原创 vscode + conda

vscode配置conda

2023-03-15 23:21:57 192

深度学习卷积神经网络笔记

初学卷积神经网络

2022-08-30

空空如也

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

TA关注的人

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