自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GeoTransformer关于torch.einsum()操作的记录

从几何意义上来看,这里一边是某个点P,经过KPConv卷积出来的256维度特征,另一边呢,是这个点P和本点云上所有其他点所形成的256维的几何编码,这个编码也是通过点P和其他点连线,与,其他点的邻域连线,的夹角,来确定的。同样地,几何位置编码:(B,N, N, 256)经过MLP,然后化为4个头 :(B,4,N, N, 64)目标点云的几何位置编码:(B,M, M, 256)源点云的几何位置编码:(B,N, N, 256)毫无疑问的是:用Q(B,4,N,64)和 K(B,4,N,64)进行einsum。

2024-01-23 15:58:05 479

原创 一文搞懂PCA

【代码】一文搞懂PCA。

2023-08-25 17:11:16 1002

原创 一个基类的三个派生对象A,B, C, 他们三个之间的private是可以相互访问的

虽然在大多数编程语言中,私有成员(private)确实只能由同一类中的方法访问,但是在C++中,类的所有实例(即对象)都可以访问彼此的私有成员。换句话说,一旦一个类的方法能够访问类的私有成员,那么这个方法就可以访问该类创建的任何对象的私有成员。因此,私有在C++中只控制着类与类之间的访问权限,而同一类的不同对象之间是没有限制的。在看智能指针中,我发现拷贝构造函数中,直接访问了传入对象的 private指针,感到十分的诧异,按照我的理解,private只能在类中使用,这样的操作让我不能相信。

2023-08-04 15:29:06 171

原创 指向字符串常量(字符串右值)的char指针,free的时候为什么会报错?

(2)“abc” , 这里确实是右值的概念,更准确的说这是一个字符串字面量,它实际上是一个指向字符数组的指针,是 一个 const char[4] , 包含了末尾的空字符 ‘\0’。(1) free() 函数一定要接收 一个 实实在在经过动态内存分配的内存块的地址。一开始还没反应过来,只知道 “test_content” 是一个右值,这是一个指向右值的指针。因此我们代码中的错误就是源自于你试图释放一个只读区域, 报的错。绝对不是因为 p指向了内存为空的区域所以报的错。

2023-08-04 10:41:17 261

原创 快速排序-自己的模板

最近写了几次快速排序, 但是总感觉自己学的不是很清楚。今天尝试写了下,发现怎么也写不对。其实,小小的快速排序中,也是有很大的坑存在的。

2023-04-13 10:58:49 95 1

原创 c++自定义比较的两种方式

2: 通过先放入 vector, 然后对vector 排序。一定要注意 这里 cmp 要加引用符号!两种方法都挺好理解的。

2023-04-12 14:51:16 116

原创 背包问题中 先循环物品 或者 先循环容量 的区别是什么? 什么时候该用什么??

背包问题,该先循环 容量 还是 物品呢?

2023-03-22 16:37:51 89

转载 双目加IMU的初始化

vins 双目初始化

2023-03-15 16:11:57 115

原创 BA(Bundle Adjustment)是什么?BA优化详解+BA优化入门

【代码】BA(Bundle Adjustment)是什么?BA优化详解+BA优化入门。

2023-01-02 16:38:58 572

原创 leetcod 第五题 最长回文子串

核心是这个trick :不断地动态更新 当前最好的 “回文的中心点” 和 “回文半径”。

2022-12-07 15:03:47 85

原创 GeoTransformer的Coarse matching loss

# 先知道,左边点云和右边点云哪些点是有必要统计损失的, # 换句话说,拿到所有匹配对中的点,不在匹配对中的点,不算损失。 # 因为有的点 压根不在匹配对里,那这种点的特征就没必要算损失了。 row_masks = (torch.gt(pos_masks.sum(-1), 0) & torch.gt(neg_masks.sum(-1), 0)).detach() col_masks = (torch.gt(pos_masks.sum(-2), 0) &...

2022-05-23 22:03:29 500 4

原创 GeoTransformer中的角度计算

欣赏高手的逻辑。如何计算点云中每个A和任一个其他点B,和 B和其紧邻点B^ 连接向量 的夹角呢?知识点包括 :1. 通过向量叉乘计算向量夹角正弦Sin2. 通过向量点乘计算向量夹角余弦Cos3. 通过上述两者计算夹角。不得不佩服ZhengQin的代码能力,确实有点东西 k = self.angle_k knn_indices = dist_map.topk(k=k + 1, dim=2, largest=False)[1][:, :, 1:] # (B,

2022-04-26 23:06:10 699 1

转载 normalization,、standardization、regularization区别和联系

normalization和standardization是差不多的,都是把数据进行前处理,从而使数值都落入到统一的数值范围,从而在建模过程中,各个特征量没差别对待。normalization一般是把数据限定在需要的范围,比如一般都是【0,1】,从而消除了数据量纲对建模的影响。standardization 一般是指将数据正态化,使平均值0方差为1. 因此normalization和standardization 是针对数据而言的,消除一些数值差异带来的特种重要性偏见。经过归一化的数据,能加快训练速度,促.

2022-02-17 08:56:38 875

原创 《Predator》文章中的损失函数分析

Predator 中的损失:我们有了: 真实的 correspondences 、每个点的特征、每个点的Overlap分数、每个点的saliency分数Overlap的监督 : 真实Correspondences所有点对(是一个01序列)和你每个点的Overlap得分构建一个weight bce loss(交叉熵损失)saliency的监督 :挑出(真实的Correspondence所有点对)的描述子, 构建一个描述子相似度矩阵。 对src点云,选出score矩阵行最大值对应的点(也即src中这个点能

2022-01-15 15:44:12 2090 8

原创 GCN中的同配性

用来查看更进一步的社交网络局部邻居之间相关性的方法是考虑相互连接节点的度。我们的问题如下:给定一个度为k的节点,它邻居节点的度的平均值是多少?换句话说,如果一个节点有少量的连接,或者相反有大量的连接,它的邻居是否也会分别具有少量或大量的连接?同样,可以根据需要分别考虑出度和入度,对这个问题,不同的社交媒体系统可能会产生不同的结果。为了定量回答这个问题,我们可以取具有相同度的节点,然后测量它们邻居的度。因为我们使用的是有向的社交网络,首先就需要对使用出边还是入边来确定谁是邻居达成一致,也就是当我们对邻居进行

2022-01-11 15:07:08 478 1

原创 点云中的Chamfer distance

3D点云中的倒角距离3D空间的倒角距离主要用于点云重建或者3D重建工作。定义如下:如果该距离较大,则说明两组点云区别较大;如果距离较小,则说明重建效果较好。一般来说,该距离用作3D重建网络的损失函数。...

2021-11-30 09:46:22 1808

原创 FMR,RR(Registeration Recall)3DMatch数据集的评估指标

FMRT是真实的位姿变换; xi, yi 是按照你自己的方法,预测选择出来的点云对(比如你直接用特征的余弦距离矩阵选择出来每行的TOP1,得到的xi和yi);τ1和τ2是人为设定的阈值(通常τ1=0.1,τ2=0.05)个人认为这个指标主要使用来评价你选择点云对的能力,也就是你选的点云对,里面有多少是正确的点云对,这就叫内点率inlier ratio。**PS:**当然啦,你可以只 选择1个点云对,如果你这一个点云对通过了上面的公式,你可以说你自己的内点率就是100%!笑Registration Re

2021-11-22 14:58:16 3283 2

原创 ICP算法,别说自己不会了

2021-11-22 14:31:56 247

原创 关于warp操作

在两张 1/8 特征图上, 左边的某个点,我想找到在右边点的对应。这里d2net的处理方式,也成为warp。warp 需要的东西是:输入: 左图, 左图和右图的pose,左图和右图的内参输出: 左图合法点, 右图合法点,合法点的下标这里的合法点意思是,左图一个点投影到右图上的时候,不是一定有对应的。 因此我们只能保留那些有对应的点。...

2021-11-14 18:48:36 2872

原创 如何进行 interpolate_depth , 如何对深度进行插值

如果乍一看,比较奇怪的就是 D2net的 interpolate_depth的代码了,这里就进行我的粗浅的理解分析。首先是这部分代码:如果我用一句话概括,就这这里进行了简单的坐标是否合法的筛选, 因为按照前面教程,咱们输入的 pos 是一个小数的坐标。 这里得到的 valid_corners 其实就是 判断 例如 (3.5 7.5 )这个坐标的左上,左下,右上,右下是不是合法的坐标。 3.5 7.5 的四个角那肯定是没问题的啊。 但是你说 0,0 这个位置,他的左上角就是不存在的,所以说需要筛选

2021-11-14 17:52:14 1240

原创 什麽是 grid_position ; D2net 中的 grid_position

我们在进行半监督方法的时候,输入的仅仅是 rgbd 图像,这个时候呢, 两个图像的匹配点的 Ground truth 是通过 depth 生成的。过程是:左边图像某点 x1 + 深度信息 + 两个图的内参和外参 = 右边图像的对应点其实不用理解原理,只用记住有这样的技巧就够了。而我们所说的gird_position,只是上述过程代码中的中间产物罢了。看下面的图就明白了。本质上是【方便地构造两行索引】...

2021-11-14 16:54:59 497

原创 请注意, python函数参数若是 dict 、list, 则是传递引用

例子1a = [2,3,5,6]b = ab.append('x') #试问,这个时候 a 本身,被影响了吗???print(a) 结果是[2, 3, 5, 6, ‘x’]看来a被影响了,为什么呢?因为dict的传递,直接是引用地址。 同理如果你的函数中, 有参数是 dict或者list,那函数内部如果改变了 参数dict 或list, 外部的dict或者list,将会被影响改变!如何解决?深拷贝深拷贝可以解决此处的问题:a = [2,3,5,6]b = copy.deepc

2021-11-12 09:45:08 848

原创 unsupported operation: some elements of the input tensor and the written-to tensor refer to a single

changea = a[ xxx ]tob = a.clone()a = b[xxx]

2021-10-11 22:24:31 3159

原创 计算两个点云之间的欧式距离(square_distance);点云之间距离 pytorch

假设用 tensor 保存了两个点云,现在要求出点云中任意一对点的欧式距离,我们不必使用两个for循环进行这种遍历计算,我们可以使用tensor操作方便的计算出点云之间的距离。用一句话概括就是:将 计算(x-y)^2 变为 计算 x^2 + y^2 -2xy代码中前面注释给出了参数的含义,代码中每行有注释,也挺容易看懂的def square_distance(src, dst, normalised = False): """ Calculate Euclid distance

2021-10-09 15:34:33 2907

原创 (pytorch)训练模型中断、断电、怎么重新加载、重新训练怎么办

这篇文章讲的一清二楚:https://www.jianshu.com/p/1cd6333128a1

2021-09-26 16:56:16 18827 4

原创 20210909-resnet和fpn

下面的链接有助于理解resnethttps://dgschwend.github.io/netscope/#/preset/resnet-50ResNet 和 FPN 的区别感觉是:ResNet是为了把之前的特征图,加到后面,也就是说,如果后面的特征图和我一样的话最好,我直接加上就行了,如果后面的尺寸和现在的不同,只用下采样以及改变通道数,使得前面的特征图可以加到后面。而 FPN 则是想让一个较小尺寸的特征图 和 较大的特征图进行相加,通常小特征图有较多的channel,较大的特征图具有较少的cha

2021-09-09 17:37:55 773

原创 Colmap 编译所用

https://blog.csdn.net/jinzhilong580231/article/details/7353056https://blog.csdn.net/li_melon/article/details/106062586?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242https://blog.csdn.net/qq_41102371/article/d

2021-08-12 19:09:07 165

原创 GLOG Ceres编译常见问题

vs2019中使用ceres2.0.0遇到 错误 C3861 “M_2_SQRTPI”: 找不到标识符解决地址ERROR macro is defined解决地址

2021-08-11 17:53:58 513

原创 VNCViewer 灰屏白屏 没有按钮没有桌面 非root,实验室环境

背景: 实验室有很多的账户, 我不是root用户。 我想开一个vnc远程我依次执行下面的代码vncserver cmd打印的结果会包括有一个你对应的序号,也就是你是第几个申请使用vncserver的。例如我是10接着执行vncpasswd重复输入密码接着输入vncserver -kill :10vncserver -geometry 1920x1010 :10然后打印说Starting applications specified in xxxxxxxxxxxxxxLog .

2021-08-11 01:02:23 3026 4

原创 vslam14讲中编译G2O报错: 对‘google::LogMessageFatal::LogMessageFatal(xxxxx)’未定义的引用; GFLAGS报错

我遇到的问题就是在编译第六章第三个例子的时候,按照它的cmakelist写好了。但是一去编译发现自己就会出现如下的错误:不要慌,试试下面我这种解决方案:首先重新下载和编译 gflags 和 glog 两个库,放心速度很快:1. gflags git clone https://github.com/gflags/gflags.git cd gflags mkdir build && cd build cmake -DCMAKE_INSTALL_PREF

2021-08-02 16:15:50 3164

原创 手写ORB特征,特征匹配 -视觉slam14讲

手写ORB 参考高博slam14讲,经典易懂。对理解orb特征的构建很有帮助,只不过其中的一些思想,比如暴力匹配等,可能效率不高但机具学习价值/************************************************************************* > File Name : shouxieorb.cpp > Author : enjoy5512 > Mail : enj

2021-07-31 00:10:11 464

原创 Ceres库使用实例: 估计参数 视觉slam14讲

这里针对y = exp(ax^2 +bx + c )这样一个关于x的二次函数, 估计出a b c三个系数的问题,属于拟合问题。 这里只要铭记 ceres的使用方法就好,可以和上文的高斯牛顿迭代法,放在一起看。代码如下//// Created by xiang on 18-11-19.//#include <iostream>#include <opencv2/core/core.hpp>#include <ceres/ceres.h>#include &

2021-07-30 17:34:44 282

原创 高斯牛顿迭代估计参数-视觉slam14讲 实践

人家都写好了,自己主要是理解一下这个代码吧,用雅克比矩阵代表需要优化的参数:J 。 一个海森矩阵和一个b矩阵用来迭代。 在每次迭代过程中, 优化的方向是 由 HX=b ,求解出来的x给定的。 之中H和 b的计算,可以简单地由 J矩阵得到,也就是: H+= inv_sigma * inv_sigma * J * J.transpose(); b+= -inv_sigma* inv_sigma * error * J;然后通过dx = H.ldlt().solve(b)得到δx 。 这就是

2021-07-30 10:50:26 695 3

原创 视觉slam14讲中的 点云拼接例子

首先是github中的 那个CMakeLists不太管用,我的是这样的, 如果报什么 fmt 的错误记得参见这个 链接https://blog.csdn.net/u011573853/article/details/116891893 ,这个链接没有用 sudo make install,最后一步记住用sudo make install 就好了测试可用的CMakeLists.txtcmake_minimum_required(VERSION 3.5)project(jointMap)set(O

2021-07-29 17:11:43 643 2

原创 Ransac计算F矩阵实战

关于Ransac为什么用到计算基础矩阵中, 它在计算中发挥了什么作用,可以先看如下的链接熟悉一下:https://blog.csdn.net/qq_42399848/article/details/89348740计算F矩阵步骤如下,Ransac总体来说就是 筛选出比较好的8个点供八点法计算使用sift提取特征 此算法原理在第三篇博客中讲过,这里就不再赘述 RANSAC去除错误点匹配 归一化8点算法估计基础矩阵 八点法是通过对应点来计算基础矩阵的算法。 外极约束可以写成线性系统的形式

2021-07-25 10:28:52 1431 4

原创 OPENMP 资料

https://blog.csdn.net/weixin_43997331/article/details/104708635 visual studio配置OPENMPhttps://zhuanlan.zhihu.com/p/61857547 经典的入门案例https://blog.csdn.net/q19149/article/details/102735088https://blog.csdn.net/q19149/category_9426292.html 其他的一些语法,例如...

2021-07-22 09:57:02 67

原创 从分块重建打印的日志看分块重建的思路

2021-07-16 18:54:04 71

原创 colmap 子模型对齐中的 Ransac

这段代码,用 src 和 ref_images 保存 在 src重建和ref 重建中都存在的图像。重建类包含有关单个重建模型的所有信息。 它由映射和捆绑调整类使用,并且可以写入磁盘和从磁盘读取。重建类中的图像类:图像类是保存有关图像的信息的类。 图像是在某个位置(参数化为姿势)拍摄的一台相机的产物。 一个图像可以与多个其他图像共享一个相机,如果它的内在特性是相同的 for (size_t i = 0; i < common_image_ids.size(); ++i) { src_im

2021-07-16 12:19:44 410 2

原创 ReconstructCluster : 分组重建中,对于单个Cluster的重建方法

这程序就是用于重建单个Cluster的程序,如果读懂了,就能理解分Cluster重建的整体思路了。 如果读懂了,分组重建就懂了。void IncrementalMapperController::Reconstruct( const IncrementalMapper::Options& init_mapper_options) { const bool kDiscardReconstruction = true; ////////////////////////////////

2021-07-14 22:45:32 656 1

原创 Colmap PartitionCluster 分块聚类的核心部分

这部分代码读完感觉作者写的很冷静,很缜密整个代码是用来 一个Image的集合进行分块的。 这些分出来的块可以用于并行的重建,听起来是挺不错的呃,下面我们来看看具体的实现:void SceneClustering::PartitionCluster( const std::vector<std::pair<int, int>>& edges, const std::vector<int>& weights, Cluster* cluste

2021-07-14 10:06:13 318

空空如也

空空如也

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

TA关注的人

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