自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 轨迹相似性度量方法

相对于点与点或点与轨迹之间的距离度量,轨迹之间的距离度量更加的复杂,需要考虑的因素也更多,例如轨迹的采样率、考虑轨迹的时间信息和轨迹自身的噪音等。给定两个长度分别为n和m的轨迹tr1和tr2,最小距离的匹配阈值,则两条轨迹之间的EDR距离就是需要对tr1及逆行插入、删除或替换使其变为tr2的操作次数,其基于动态规划的算法如下。计算Bhattacharyya系数涉及集成的基本形式的两个样本的重叠的时间间隔的值的两个样本被分裂成一个选定的分区数, 并且在每个分区中的每个样品的成员的数量, 在下面的公式中使用。

2024-08-03 13:39:55 159 1

转载 使用向量计算点到直线的距离

为直线上的两个点, 求红色的点到直线的距离。红色的点为鼠标位置, 蓝色的点。将问题进行一下转化:如下图所示。

2024-07-12 09:58:33 203

原创 生产者消费者模式

假设有两个进程(或线程)A、B和一个固定大小的缓冲区,A进程生产数据放入缓冲区,B进程从缓冲区中取出数据进行计算,这就是一个简单的生产者-消费者模型。这里的A进程相当于生产者,B进程相当于消费者。生产者/消费者模式是一种常见的并发编程模式,其中生产者线程生成数据并将其放入缓冲区,而消费者线程从缓冲区中取出数据进行处理。这种模式通过缓冲区解耦了生产者和消费者的速度差异。

2024-06-02 10:36:21 869

原创 roscore 启动失败 roscore/master is already running

【代码】roscore 启动失败 roscore/master is already running。

2024-05-30 09:59:36 324

原创 Rviz 复选框插件

我想做的插件是类似于 pangolin 侧面的复选框,动态传递 bool 值给程序内部使用。查了一下只能是通过插件的方式进行实现。但是Display 的参数在编译阶段就写死了,我想要在运行期给定参数然后给插件设置 bool 的数量。原本想通过获取插件指针然后由客户端延迟给定参数,但rviz是 launch 文件直接启动的没有引入代码,插件的实例化是 Rviz 中点击 Add 的过程进行的。最终方案,使用 topic 进行通信,将需要设置的参数进行传进去,然后将交互的数据同样通过topic传出来。

2024-05-28 17:06:40 387

原创 CSF(Cloth Simulation Filter)点云地面点滤波

⾸先,我们将布粒⼦和LIDAR点投射到同⼀⽔平平⾯,然后在此2D平⾯中找到每个布粒⼦的最近的激光点云(称为对应点,CP)。IHV表⽰粒⼦能到达的最低位置,即如果粒⼦达到由该值定义的最低位置,则不能再向前移动。如果两个连接的粒⼦都是可移动的,我们将它们以相反的⽅向移动。通过分析布的节点与相应的LIDAR点之间的相互作⽤,可以确定布的最终形状,并将其⽤作将原始点分类为地⾯和⾮地⾯。粒⼦的位置和速度取决于作⽤在粒⼦上的⼒。当使⽤内⼒移动粒⼦的运动⽅向时,两个具有不同⾼度值的粒⼦将尝试移动到同⼀⽔平⾯。

2024-05-05 17:32:32 1532

原创 ubuntu20.04安装QGIS

将最新稳定版 QGIS (3.36.x Maidenhead) 的 QGIS 存储库添加到。Note:这种方法安装的是最新版本,可能会有一些兼容问题。我这里是卸载了重新安装,,删不干净,最后手动 搜索并收删除相关文件。,删不干净,最后手动 搜索并收删除相关文件。:这种方法安装的是最新版本,可能会有一些兼容问题。我这里是卸载了重新安装,

2024-03-27 17:14:49 1495

原创 pl_vio线特征·part II

现在CSDN有字数限制了,被迫拆分为两篇文章。图2 空间直线投影到像素平面要想知道线特征的观测模型,我们需要知道线特征从归一化平面到像素平面的投影内参矩阵 K\cal{K}K 。如图2,点 CCC 和 DDD 是直线 L=(n⊤,d⊤)⊤\mathcal{L} =(\mathbf{n}^{\top},\mathbf{d}^{\top})^{\top}L=(n⊤,d⊤)⊤ 上两点,点 ccc 和 ddd 是它们在像素平面上的投影。 c=KCc = KCc=KC,d=KDd=KDd=KD ,KKK是相机的内参

2023-12-17 14:04:37 641

原创 pl_vio线特征·part I

然而, 使用由法线向量和方向向量表示的 3D 线, 可以简单地从两个几何视图执行三角测量, 并且也可以方便地对线几何变换进行建模。此外,正交表示和普吕克坐标可以相互转换,这意味着我们可以在 SLAM 系统中出于不同的目的同时采用它们。的定义, 这四个 DoF 包括来自旋转矩阵 (将线坐标变换到相机坐标系) 的 3 个 DoF, 以及来自距离。是由直线和坐标原点确定的平面法向量。当在两个不同的摄像机视图中观察到新的线地标时,可以轻松计算出普吕克坐标。匹配的结果,对应关系,其实就是存储的全局ID信息。

2023-12-16 19:34:37 1085

原创 最小二乘问题和非线性优化

在进行最小二乘问题中,我们会遇到一些异常观测值使得观测残差特别大,如果不对这些异常点做处理会影响在优化过程中,优化器会尝试最小化异常的残差项,最后影响状态估计的精度,鲁棒核函数就是用来降低这些异常观测值造成的影响。可得,当我们使用了鲁棒核函数之后,只需要将各项残差的核函数的一阶二阶导数值计算出,再按照以上形式对信息矩阵和信息向量进行更新即可。通过这种方式,我们同样将其近似一个二次函数,并且和我们之前展开的结果比较,不难发现在这里我们实际上是用。因此,合理的设置阻尼因子,能够达到动态对迭代速度进行调节。

2023-08-07 14:38:57 1017

转载 加速Nerf训练:nerfacc

官方文档paper-v1paper-v2搬运自此处ray matching在Nerf的训练中,我们往往需要首先定义一个rays_o(射线的origin)以及rays_d(射线的方向),然后通过取不同的t值(预定义或者其他方式),获取这条射线上的不同的点:然而,在实际情况中,这条射线上的很多点所代表的空间可能是empty的,其对应的density为0,这些点对这条射线的rendering完全没有任何作用。假设我们在训练的时候可以跳过这些空的区域,我们就可以减少每条线上所采样的点,理论上进而加速训练。为了

2023-07-12 14:56:11 1382

转载 Pytorch-Lightning-Learning

LightningModule:Pytorch Lightning的两大API之一,是torch.nn.Module的高级封装。(1)定义模型__init__():同torch.nn.Module中的__init__,用于构建模型。:同torch.nn.Module中的forward,通过__init__中的各个模块实现前向传播。(2)训练模型#训练模型 training_step(* args , ** kwargs) """训练一批数据并反向传播。

2023-07-07 21:32:31 788

原创 Marching Cubes算法

简单看一下图应该就明白了。

2023-07-06 14:58:25 271

原创 C++回调函数理解

看了一些介绍感觉太官方了,我的简单理解就是从模式设计思想出发,回调函数的目的就是为了将变化的模块抽离出来,延迟实现;这里还有一种方法可以避免这样的问题,可以把非static的回调函数 包装为另一个static函数,这种方式也是一种应用比较广的方法。但这种实现有一个很明显的缺点:static 函数不能访问非static 成员变量或函数,会严重限制回调函数可以实现的功能。简而言之,std::funtion是定义函数类型(输入、输出),std::bind是绑定特定的函数(具体的要调用的函数)。

2023-05-27 00:01:39 1172

原创 vscode使用插件remote-ssh远程连接服务器

生成密钥对,是为了免密登录?我直接使用的git配置的时候的密钥对。用上了公司百万级的服务器 😆 😆 😆 😆。安装插件进行连接就行,

2023-05-17 14:46:37 3706

原创 ch07-Pytorch的训练技巧

所谓的模型微调,其实就是模型的迁移学习,在深度学习中,通过不断的迭代,更新卷基层中的权值,这里的权值可以称之为 knowledge , 然后我们可以将这些 knowledge 进行迁移,主要目的是将这些 knowledge 运用到新的模型中,这样既可以减小由于数据量不足导致的过拟合现象,同时又能加快模型的训练速度。GPU 每接收到一个 batch 的数据,使用率就跳到逐渐升高,处理完这个 batch 的数据后,使用率又逐渐降低,等到 CPU 把下一个 batch 的数据传过来。

2023-05-12 22:29:24 449

原创 ch06-Pytorch的正则化与归一化

在训练时,由于 dropout 为 0.5,因此理论上输出值是 5000,而由于在训练时,dropout 层会把权值除以 1-p=0.5,也就是乘以 2,因此在 train 模式的输出是 10000 附近的数(上下随机浮动是由于概率的不确定性引起的)。下面实验使用的依然是线性回归的例子,两个网络均是 3 层的全连接层,每层前面都设置 dropout,一个网络的 dropout 设置为 0,另一个网络的 dropout 设置为 0.5,并使用 TensorBoard 可视化每层权值的变化情况。

2023-05-11 21:25:38 643

转载 OpenCV 相机转换为 OpenGL 相机

本文假设您已经熟悉针孔相机的概念,这是OpenCV库中典型相机的相机校准模型。关于相机模型和投影几何的更多细节,最好的解释来自Richard Hartley和Andrew Zisserman的书《Multiple View Geometry in Computer Vision》,特别是第6章“相机模型”(这是我的极其偏见的看法)。我在本教程的其余部分将缩写该书为“H-Z书”。使用OpenGL函数调用(例如glFrustrum()和glOrtho())可以设置许多相机参数。

2023-05-05 14:59:03 1329

原创 kitti数据集预处理

加速度和角速率均使用两个坐标系指定,一个附加到车身 (x, y, z),另一个映射到该位置的地球表面的切平面 (f, l, u) .我们有时会遇到与 OXTS 设备的短暂(约 1 秒)通信中断,为此我们对所有值进行线性插值并将最后 3 个条目设置为“-1”以指示丢失的信息。我们定义了“汽车”、“货车”、“卡车”、“行人”、“人(坐着的)”、“骑自行车的人”、“电车”和“杂项”(例如,拖车、赛格威)的类。在完成光流数据的加载和解析后,函数将根据需要调整光流数据的尺寸,以确保其与其他数据具有相同的尺寸。

2023-04-26 21:53:17 2788

原创 ch05-学习率调整策略、可视化与Hook

1、有序调整:Step、MultiStep、Exponential 和CosineAnnealing学习率更新之前,就知道学习率在什么时候会调整、调整为多少;2、自适应调整:ReduceLROnPleateau监控某一个参数,当该参数不再上升或下降就进行学习率调整。3、自定义调整:lambda存在多个参数组,且需要对多个参数组设置不同的学习率调整策略可采用。要调整学习率,至少应当具有初始学习率,那么该如何设置初始学习率?

2023-04-17 12:36:40 657

原创 ch04-损失优化

ch04-损失优化0.引言1.权值初始化1.1. 梯度消失与爆炸1.2. Xavier 初始化1.3. Kaiming 初始化1.4. 常用的权值始化方法1.5. 总结2.损失函数 (一)2.1. 损失函数的概念2.2. 交叉熵损失函数2.3. NLL/BCE/BCEWithLogits Loss2.4. 总结3.损失函数 (二)3.1. PyTorch 中的损失函数3.2. 总结4.优化器(一)4.1. 什么是优化器4.2. Optimizer 的属性4.3. Optimizer 的方法4.4. 总结5.

2023-04-14 00:29:03 461

原创 ch03-PyTorch模型搭建

本节中,我们学习了 nn.Module 的概念以及模型创建的两个要素。下节中,我们将学习容器 Containers 以及 AlexNet 的搭建。本节中,我们学习了 3 种不同的模型容器:Sequential、ModuleList、ModuleDict,以及 AlexNet 的搭建。下节课中,我们将学习 nn 中网络层的具体使用。本节课中,我们学习了 nn 模块中卷积层。在下次课程中,我们将学习 nn 模块中的其他常用网络层。本节中,我们学习了 nn 模块中池化层、线性层和激活函数层。

2023-04-12 00:31:53 912

原创 ch02-PyTorch数据预处理

本节课中,我们学习了数据预处理模块 transforms 中的数据增强方法:裁剪、翻转和旋转。在下次课程中 ,我们将会学习 transforms 中的其他数据增强方法。transforms 图像变换、方法操作及自定义方法上节中,我们学习了 transforms 中的裁剪、旋转和翻转,本节我们将继续学习 transforms 中的其他数据增强方法。尽管 PyTorch 提供了许多 transforms 方法,然而在实际应用中,可能还需要根据项目需求来自定义一些 transforms 方法。

2023-04-11 01:03:34 1160

原创 python文件操作

上述代码中,os.walk() 遍历了 path/to/directory 目录以及其所有子目录,并分别处理了当前目录下的文件和子目录,使用 os.path.join() 拼接当前路径和文件名/子目录名。注意,os.listdir()函数只会列出指定目录下的直接子级文件和目录,并不会递归列出子目录下的文件和目录。如果需要列出指定目录下的所有文件和子目录,可以使用os.walk()函数。os.listdir()函数可以列出指定路径下的所有文件和子目录,返回一个包含所有文件和目录名称的列表。

2023-04-10 21:31:44 493

原创 vscode 调试 Python 代码

【代码】vscode 调试 Python 代码。

2023-04-06 11:56:45 984 5

原创 ch01-PyTorch基础概念

略.参考1参考2Variable:主要用于封装Tensor,进行自动求导,是torch.autograd中的数据类型。Variable是Pytorch的0.4.0版本之前的一个重要的数据结构,但是从0.4.0开始,它已经并入了Tensor中了。data:被封装的Tensorgrad:data的梯度grad_fn:创建Tensor的Function,是自动求导的关键requires_grad:指示是否需要梯度is_leaf:指示是否是叶子。

2023-04-02 21:03:14 751

转载 新视角合成 (Novel View Synthesis)

辅助理解Nerf摘抄自这里,抄一遍读一遍吧。这个讲的是真浅显易懂。新视角合成任务 (Novel View Synthesis) 指的是给定源图像 (Source Image) 及源姿态 (Source Pose),以及目标姿态 (Target Pose),渲染生成目标姿态对应的的图片 (Target Image)。新视角合成在 3D 重建、AR/VR 等领域有着广泛的应用。源图像 (Source Image) 好理解,但是源姿态 (Source Pose)指的是什么呢?答案是从相机坐标转换为世界坐标的变换矩

2023-03-29 16:47:10 3017

原创 位置编码Positional Encoding

摘抄自这里。在以前的模型中,NLP的每个Sequence都是一个token一个token的输入到模型当中。比如有一句话是“我喜欢吃洋葱”,那么输入模型的顺序就是“我”,“喜”,“欢“,”吃“,”洋“,”葱”,一个字一个字的。上面的输入方式其实就引入了一个问题。一个模型每次只吃了一个字,那么模型只能学习到前后两个字的信息,无法知道整句话讲了什么。为了解决这个问题,Transformer模型引用了Self-attention来解决这个问题。

2023-03-23 11:42:02 6202 7

原创 PyTorch加载自己的数据集

创建一个类,继承自torch.utils.data.Dataset,并重写__len__()和__init__用于向类中传入外部参数,同时定义样本集__len__()方法应该返回数据集的大小方法应该返回一个样本这里另外给出一个例子,其中图片存放在一个文件夹,另外有一个csv文件给出了图片名称对应的标签。Args:Args:Returns:其中:batch_size:样本是按“批”读入的,batch_size就是每次读入的样本数。

2023-03-23 10:47:17 3334 1

原创 nuScenes Map Expansion Tutorial

本地配置还是比较麻烦,使用官方的教程进行学习,官方的教程是基于colab的。其实我更好奇他是如何将数据转换为json文件的?

2023-03-13 11:38:38 1763

原创 opencv裁剪旋转矩阵区域

仿射变换方法需要预先对整张图进行旋转,通过观察旋转后的图像可以发现,有一部分图像被旋转出了图像边界,如果你要抠取的目标正好在图像边缘附近,那么很容易出界导致图像抠取的缺失。同时需要对宽、高和角度做出动态的调整;透视变换的方法直接对抠取区域进行了映射,这种方法可以省略旋转的步骤,并且不会出现抠取内容的缺失。同时只需要对4个顶点之间的映射关系做好定义即可,不需要考虑角度的问题。相对的,透视变换相对于仿射变换计算量更大一些,不过这在c++的底层实现上带来的时延差距小于ms。

2023-03-10 11:13:46 504

原创 opencv的并行处理cv::ParallelLoopBody

因此,cv::ParallelLoopBody 的作用就是实现并行处理算法,以提高图像或视频处理的速度。cv::Range 表示要处理的数据范围,这里是 cv::Range(0, image.rows),表示从第 0 行到最后一行,这是对整个图像进行处理。函数接受两个参数:一个 cv::Range 对象和一个 cv::ParallelLoopBody 对象。类的自定义类,它的 operator() 函数将在多个线程上并行执行。函数,从而实现图像的并行处理。类的实例,也就是继承了。

2023-02-28 11:26:02 1053 4

原创 PyTorch深度学习

‒ 原視頻:https://www.bilibili.com/video/BV1Gi4y1m77E/?‒ 自定义一个 **Dataset 类,它是继承自 pytorch的Dataset这个类,这个类主要实现两个功能:一个是根据样本编号index来获取样本特征,如身高体重,以及获取它的类别;epoch 和 batch的关系就好比我们背一本英语单词,有1000个单词,分10个单元,每个单词相当于一个训练样本,把整本书背一遍称为一个epoch,一个单元的单词称为一个batch即是一个批次。

2023-02-07 21:54:46 3167 6

原创 Word里MathType无法使用为灰色

在安装完成后,单独打开MathType,点击:help–>unlock。然后重启Word,刺激不?

2023-01-05 21:13:56 2009 3

原创 pytorch学习记录

用户需要先构建神经网络结构,然后在给定的结构上填入数据,再进行一次又一次的运行。但缺点也非常明显,即不够灵活,而且被优化后的网络,对用户不友好,调试时难以轻松知道程序的状态, 而且一旦用户想要根据计算的状态,动态的修改神经网络结构,那么实现起来会非常困难。它直观, 精简, 极度灵活。PyTorch这一工具的定位: 帮助科研人员和工程师, 快速探索和调整模型, 快速构建实验,更适合从0到1的创新工作, 而静态图Tensorflow,更适合已经有了模型, 我们要运用到某些高强度的训练和测试的应用环境下。

2023-01-04 16:36:51 667 1

原创 CNN神经网络

基础的就不赘述了。主要看推导。[convolution layer + Relu] --> pooling layer --> [convolution layer + Relu] --> pooling layer --> Fully Connected --> …微积分中卷积的表达式为:S(t)=∫x(t−a)w(a)daS(t)=\int x(t-a) w(a) d aS(t)=∫x(t−a)w(a)da离散形式是:s(t)=∑ax(t−a)w(a)s(t)=\sum_a x(t-a) w

2022-12-29 17:26:32 593 2

原创 深度学习环境搭建

打开IDE:settings -> project:*** -> Python Interpreter,add Python Interpreter -> conda environment -> existing environment,选择创建好的conda 虚拟环境。通过安装Anaconda来解决Jupyter Notebook的安装问题,因为Anaconda已经自动安装了Jupter Notebook及其他工具,还有python中超过180个科学包及其依赖项。

2022-12-23 17:25:55 1041

原创 感知机&&BP神经网络

在第五步选择不同的误分类点,最后得出的模型也不相同,但都能正确的将样本进行区分开。:模型已经确定,参数未知;对模型的求解就是利用观测值来求解模型的参数。,请利用感知机算法求感知机模型。现有如下训练数据集,正样本点。

2022-12-22 18:29:33 317

原创 带参数的反射工厂模式

普通的反射工厂模式无法传入参数,工厂为单例模式。

2022-12-11 02:32:49 160

原创 工厂模式学习

在这个示例中,我们定义了一个抽象类 Product,表示产品的基类,它定义了一个抽象函数 use,用于表示产品的使用方法。在这个示例中,我们定义了一个基类 Base,并定义了两个子类 A 和 B,它们都实现了 print 方法。在这个示例中,我们使用了 C++ 中的反射机制,即在运行时通过类名来查找并调用相应的创建函数,从而实现了动态创建对象的功能。接下来,我们定义了一个工厂类 Factory,它提供了一个静态成员函数 createProduct,用于根据产品名称返回相应的产品对象。承接上一篇我的需求。

2022-12-10 02:36:22 185

空空如也

空空如也

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

TA关注的人

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