周报-240322

学习内容

1.FreeReg 代码分析

2.2d3d 总结

3.huggingface 下载项目解决


学习时间

2024.03.16 — 2024.03.22


学习笔记

2D-3D MatchNet

输入为一个三元组,分别为图像补丁,正点云体积与负点云体积。

三元组需要提前处理,处理的方式如下:

对 2D 图像与 3D 点云分别使用 SIFT 检测器与 ISS 检测器来提取一组关键点 U 与 V 。根据里面的每个点,生成以他们为中心的 2D 图像补丁与 3D 局部点云体积,产生两个新的集合 P 与 Q

这两个便是深度网络的输入,在学习中,输出两个描述符之间的距离,距离小于阈值以及远小于不匹配点之间距离的两个点,会建立匹配。

图像处理使用 VGG,点云处理使用 PointNet。

在这里插入图片描述

LCD

问题定义:把 2D 与 3D 映射到同一个空间维度中,目标是让他们的距离更加接近。**如果 I 和 P 表示相同的底层几何形状,则 F(dI , dP ) < m,其中 m 是预定义的距离。**同时,还将结果反向映射回去,有利于稀疏到密集深度估计。

网络结构:双编码器,分别处理图像和点云。2D 编码器:输入为 64 * 64 图像块,网络结构为卷积。获得特征后输入解码器,转置卷积来重建图像块。3D 分支使用了 PointNet,编码器与解码器都是全连接层,分别用于处理和重建点云。训练时使用了 3 个损失函数(2D 为光度损失,3D 为倒角损失, 合起来为三元组损失)。

实现细节:数据集场景来自 SceneNN 和 3D Match,将 3D patch 投影到图像上,在重投影点周围提取相应的局部 2D 补丁。

在这里插入图片描述

DeepI2P

分为三步

  • 估计图像与坐标之间的刚性变换。
  • 估计点云坐标是否在相机截锥之内。相机截锥指的是在相机摄像头范围内能捕获的部分。
  • 根据截锥之内的点,反推出最佳相机姿态

截锥分类

  1. 选择一对具有相对位姿 Gp c 的图像和点云 (I, P_raw)。
  2. 生成 3D 随机变换 G_r ,并将其应用于得到 P = G_r P_raw 和 G = G^p_c G^−1_r。
  3. 根据式5得到每个点的截锥标签l^c_i的地面真值。
  4. 将(I, P)输入图2所示的网络中。
  5. 截锥预测ˆLc ={ˆlc1,···,ˆlc n},ˆlc i∈{0,1}。
  6. 对分类任务应用交叉熵损失来训练网络。

位姿优化

给定点云 P,截锥预测 ˆLc ={ˆlc1,···,ˆlc N},ˆlc i∈{0,1},摄像机内参矩阵 K。位姿优化问题是求解 ˆG。

目标是执行姿态优化,以实现图像和点云的精确对齐。

优化的过程:根据 ^G 得到图像坐标,判断投影出的坐标是否位于图像的内部,并根据这个情况对 ^G 进行优化

在这里插入图片描述

2D3D-MATR

整体步骤为:

  • 学习多尺度 2D 和 3D 特征。利用该粗特征提取块对应关系。
  • 通过多尺度匹配模块来学习上下文约束与跨模态相关性。
  • 得到精细特征,把块对应扩展到像素级。
  • 采用 PnP-RANSAC 对齐变换。

特征解构:使用带有 FPN 的 ResNet 来生成多尺度图像特征,KPFCNN 用于学习点云特征。对于图像,得到的粗特征矩阵为 H ^ ⋅ W ^ \hat{H}\cdot\hat{W} H^W^ 的矩阵,其中的每个值对应原图像中大小为 H ⋅ W H ^ ⋅ W ^ \frac{H\cdot W}{\hat{H}\cdot\hat{W}} H^W^HW 的图像块。对于点云,将距离粗特征中某点 P ^ \hat{P} P^ 最近的原点云的点 P P P 划分给该点。

多尺度块匹配:先使用傅里叶嵌入预处理粗特征,然后使用 transformer 细化两种模式的特征,将图像特征按金字塔提取多尺度特征,使用 top-k 选择得到匹配对。

特征细化:收集局部像素,根据 2D 和 3D 匹配对的位置生成局部密集对应关系。

损失函数:在粗略级别上,2D 与 3D的重叠率大于 0.3 为正,小于 0.2 为负。对于细化的特征,看 3D 距离与 2D 距离。然后分别使用 圆损失 优化。

在这里插入图片描述

VP2P-Net

输入图像和点云,提取特征。

通过交叉检测去除离群点,得到交点区域。

从交点区域采样点对(包括正负样本),用于学习跨模态空间的相似度。

使用跨模态空间的最近邻原理进行特征匹配,获得像素与点的匹配对。

使用可微 PnP 进行位姿估计。

在这里插入图片描述

FreeReg

获取扩散特征

1.输入 2D 图像与 3D 点云,从点云投影到平面得到深度图

2.将图片附加噪声,输入 Stable Diffusion 得到扩散特征

3.将深度图输入 ControlNet,用于监督 Stable Diffusion 的 upsample 阶段生成扩散特征

获取几何特征

将图像输入到 Zoe-Depth,生成深度图,然后从深度图中恢复点云

使用 FCGF 分别提取两个点云的几何特征

融合扩散特征与几何特征

将扩散特征与几何特征融合,生成融合特征

然后对两组融合特征使用最近邻互选择建立 correspondences,其中每个匹配的深度图D中的像素对应于点云P中的3D点。

使用 PnP 或 Kabsch 进行姿态回归

在这里插入图片描述

切入点

特征表示和学习

寻找更好的图像与点云的特征表示是很关键的

跨模态信息融合

如何将图像和点云的信息映射到同一个模态下

demo 分析

config.yaml 存储 config 信息,使用 --cfg 调用

–type 代表使用的特征类型,c 代表扩散特征,z 代表几何特征

使用 OmegaConf.loadconfig.yaml 加载成字典

在配置文件中,zoe 代表了其相关属性值,zoe_ck 代表模型存放的位置,rgb_instrinsic 表示相机内参

zoe

demo.pipeline_zoe —> pipeline.gen_zoe.depth_generator —> tools.zoe.meta_dpt.meta_dpt \ utils.utils.dpt_3d_convertor

tools.zoe.meta_dpt.meta_dpt —> tools.zoe.meta_dpt.single_dpt —> tools.zoe.meta_dpt.img2dpt —> gen_dpt.load_model —> tools.zoe.zoedepth.models.builder.build_model

将 zoedepth 的模型实例方法返回,给到 gen_dpt.load_model 里的参数 model_zoe,然后再移动到 gpu 中,赋值给 zoe

utils.utils.dpt_3d_convertor 实际上是实例化方法,方便后续调用

extractor

demo.pipeline_feat —> pipeline.gen_feat.fcgf_extractor —> tools.fcgf.fcgf_feat._load_model —> tools.fcgf.unet.init.load_model

tools.fcgf.unet.init.load_model 返回的是 tools.fcgf.unet.resnet.ResUNetBN2C 的实体类

regor

demo.pipeline_match —> pipeline.gen_match.check / pipeline.gen_match.nn_match / pipeline.gen_match.determine_processor / pipeline.gen_match.capture

pipeline.gen_match.check 用于检测使用的是否是扩散特征或几何特征

pipeline.gen_match.nn_match

用于在两组特征之间查找最近邻(nearest neighbor)或者最近的k个邻居(k-nearest neighbors)的工具类:

  1. __init__: 初始化方法,用于设置最大最近邻数 nn_max_n
  2. pdist: 计算两组特征之间的距离矩阵,支持L2距离和平方L2距离。
  3. find_nn_gpu: 在GPU上查找最近邻。如果特征数量过大,则分批次处理以节省内存。返回每个特征的最近邻索引,可以选择是否返回距离。
  4. find_knn_gpu: 类似于 find_nn_gpu,但是返回每个特征的k个最近邻。
  5. find_corr: 根据给定的特征找到对应的匹配点对。如果指定了 subsample_size,则在较大的特征集中进行子采样以减少计算量。如果 mutual 参数为 True,则要求匹配是互相的。

pipeline.gen_match.determine_processor —> tools.pose.__init__.ransacor

类 ransacor 的用法:

用于执行 RANSAC(Random Sample Consensus)算法来估计两组点之间的变换的工具类

这个类中的方法执行了以下功能:

  1. __init__: 初始化 RANSAC 参数,包括内点距离阈值、迭代次数和是否进行后续的优化。
  2. o3d_ransac: 使用Open3D库中的RANSAC实现来估计两组点之间的变换,例如旋转和平移。
  3. run: 运行整个RANSAC过程,包括RANSAC估计和后续的优化。首先使用RANSAC算法估计初始的变换,然后根据指定的内点距离阈值进行优化,最终返回优化后的变换以及内点的索引。

类 refiner 的用法:

用于优化(refining)和估计场景之间变换的工具类:

  1. center_cal: 计算两组关键点的质心。
  2. SVDR_w: 计算加权SVD。
  3. s_cal: 计算尺度因子。
  4. R_cal: 计算旋转矩阵。
  5. t_cal: 计算平移向量。
  6. Rt_cal: 组合旋转和平移来计算变换。
  7. sRt_cal: 考虑尺度的旋转和平移计算。
  8. Refine_trans: 根据给定的变换优化估计,并根据内点距离来筛选内点。

pipeline.gen_match.capture

用于控制和处理一个特定的模型,该模型用于图像生成或者图像处理任务。它包含了一系列方法,用于加载模型、预处理输入、执行模型推断、特征处理、特征融合以及可视化等任务。

主要方法解释如下:

  1. __init__: 初始化方法,加载模型和设置参数。
  2. prepare: 准备方法,用于设置模型的参数,例如设备、随机种子等。
  3. load_model: 加载模型方法,从指定路径加载预训练模型的权重。
  4. pca_feat: 对给定的特征进行PCA降维处理,返回降维后的特征。
  5. pca_feats: 对多个特征进行PCA降维处理,返回降维后的特征列表。
  6. fmap_resize: 将特征图调整为指定的大小。
  7. visualize_img: 可视化图像。
  8. visualize_chw_feat: 可视化通道在前的特征图。
  9. visualize_diffusion_result: 可视化扩散结果。
  10. merge_feat: 将多个特征融合成一个特征。
  11. uv_back_to_origin: 将uv坐标映射回原始RGB图像。

HuggingFace 模型下载

除了可以下载到本地,还可以使用镜像网站,配置一下环境变量即可,可以参考[网址](HF-Mirror - Huggingface 镜像站 )。


  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值