当前位置: 首页 > news >正文

vggt代码详解

参考VGGT|基于视觉几何的 Transformer 网络 代码详解_vggt 源代码-CSDN博客

VGGT:Visual Geometry Grounded Transformer&&代码逐行解析(一)-CSDN博客

VGGT[CVPR 2025 BEST PAPER] 论文 + 代码 最详细解析 新手小白友好型 - double-M的文章 - 知乎
https://zhuanlan.zhihu.com/p/1922807676762567215

CVPR 2025|VGGT|基于视觉几何的 Transformer 网络-CSDN博客

一、Block类

标题成员变量(你构造的结构)


Block的forward流程

def attn_residual_func(x, pos=None):return self.ls1(self.attn(self.norm1(x), pos=pos))
def ffn_residual_func(x):return self.ls2(self.mlp(self.norm2(x)))

def attn_residual_func
归一化 -> 自注意力 -> LayerScale

def ffn_residual_func(x):
归一化 -> MLP -> LayerScale

if self.training and self.sample_drop_ratio > 0.1:
# 训练时大DropPath率,使用stochastic depth残差
x = drop_add_residual_stochastic_depth(
x, pos=pos, residual_func=attn_residual_func, sample_drop_ratio=self.sample_drop_ratio
)
x = drop_add_residual_stochastic_depth(
x, residual_func=ffn_residual_func, sample_drop_ratio=self.sample_drop_ratio
)
elif self.training and self.sample_drop_ratio > 0.0:
# 训练时小DropPath率,普通DropPath残差
x = x + self.drop_path1(attn_residual_func(x, pos=pos))
x = x + self.drop_path1(ffn_residual_func(x)) # FIXME: drop_path2
else:
# 推理阶段(或无DropPath),正常残差
x = x + attn_residual_func(x, pos=pos)
x = x + ffn_residual_func(x)
训练时用DropPath或StochasticDepth随机丢弃部分残差分支(以增强正则化)
推理时只做普通残差


 每个Block的工作流程(结构图)

A[输入x] --> L1[LayerNorm1]
L1 --> ATN[MemEffAttention/自定义Attention]
ATN --> LS1[LayerScale1]
LS1 --> DP1[DropPath1]
DP1 --> R1[残差加法1]
R1 --> L2[LayerNorm2]
L2 --> MLP[MLP/FFN]
MLP --> LS2[LayerScale2]
LS2 --> DP2[DropPath2]
DP2 --> R2[残差加法2]
R2 --> Out[输出x]

forward主逻辑就是:归一化->注意力->LayerScale->DropPath->残差->归一化->MLP->LayerScale->DropPath->残差

for blk in self.blocks:if self.training:x = checkpoint(blk, x, use_reentrant=self.use_reentrant)else:x = blk(x)
  • block 就是 Transformer 中的“层”,包含自注意力+MLP等结构
  • for blk in self.blocks: 是让输入的tokens依次通过每一层Transformer Block,每一层都更新token特征,共创建24个Block
  • 如果训练时用checkpoint包裹,则是为了节省显存(梯度反向传播时再重新计算中间激活值)。

二、机器学习相关

1.浅层深层特征融合

  • 浅层特征​:提供零散的拼图碎片(靠近输入层,细节清晰,但不知道拼出来是什么)。
  • 深层特征​:提供拼图完成图(靠近输出层,语义,知道最终是“城堡”,但碎片模糊)。
  • 特征融合​:
    把完成图(深层)当作指导,将碎片(浅层)按图拼合——既知道目标(语义),又保留碎片细节(位置精准)。
特征类型提取位置信息类型分辨率感受野典型用途
浅层特征网络前几层细节(边缘、纹理)小目标检测、细节恢复
深层特征网络后几层语义(物体类别)物体分类、场景理解

深层特征上采样(放大),浅层特征下采样(缩小),最后每层分辨率一致

2.卷积

参考【深度学习笔记】卷积的输入输出的通道、维度或尺寸变化过程_卷积核个数与输入输出通道数关系-CSDN博客

nn.Conv2d(conv2_in_channels, head_features_2, kernel_size=3, stride=1, padding=1),
  • conv2_in_channels​:输入特征图的通道数(即上一层的输出通道数)。
  • head_features_2​:输出通道数(由out_channels参数指定)。
  • kernel_size=3​:使用3×3卷积核
  • stride=1:步长为1
  • padding=1​:边缘填充1圈像素

卷积核的输入通道数(in depth)由输入矩阵的通道数所决定。

输出矩阵的通道数(out depth)由卷积核的输出通道数所决定。

输出矩阵的高度和宽度由下面的公式计算,没有考虑Bias 参数。

除法部分有小数向下取整

 1 x 1 卷积就是将输入矩阵的通道数量缩减后输出(512 降为 32),并保持它在宽度和高度维度上的尺寸(227 x 227)。

  • 原理是什么?卷积核的个数决定了输出的特征图的个数,也就是特征图的通道数,或者说是卷积后的输出的通道数,因此可以使用远小于原来的输入特征图通道数个1×1卷积核来压缩通道数。
    在这里插入图片描述

反卷积

三、demo.gradio.py

流程

 1. 系统初始化
- 加载VGGT模型权重
- 初始化CUDA设备支持

2. 用户数据上传处理

handle_uploads() → update_gallery_on_upload()

- 用户上传视频或图片
- 视频按1帧/秒提取关键帧
- 创建唯一目录存储处理文件
- 显示预览图库

 3. 3D重建核心流程

submit_btn.click() → gradio_demo() → run_model()

 3.1 图像预处理
- 读取目标目录中的所有图像
- 使用 [load_and_preprocess_images()] 统一处理为518×518尺寸
- 转换为PyTorch张量格式

 3.2 模型推理
- 运行VGGT模型进行推理
- 输出包括:
  - [pose_enc]: 相机姿态编码(9维)
  - [depth]: 深度图
  - world_point: 3D点云
  - 等其他预测结果

 3.3 坐标变换处理
- 使用 [pose_encoding_to_extri_intri()]将姿态编码转换为外参和内参矩阵
- 使用 [unproject_depth_map_to_point_map()]从深度图生成3D世界坐标

3.4 3D可视化生成
- 保存预测结果为 `.npz` 文件
- 使用 [predictions_to_glb()] 将预测结果转换为GLB格式3D模型
- 在Gradio界面中显示3D模型

 4. 交互式可视化调整

update_visualization()

- 置信度阈值过滤
- 帧选择过滤
- 相机位置显示控制
- 天空/背景点过滤
- 预测模式选择

5. 示例数据处理
- 提供预设示例视频
- 一键加载和处理示例数据

整个流程实现了从2D图像到3D点云的完整重建和可视化,用户可以通过界面交互调整重建结果的显示效果。

1.is_example

只有当 is_example 为 "False" 时,才允许进行实时参数调整和可视化更新

加载示例数据时设置为true,自己上传文件时没有设置,保持之前的值

点击“重建”后将 is_example 设置为 "False"

2.运行结果

3.vggt

其关键组件和输出包括:

  1. Aggregator(特征聚合器)​​:这是VGGT的核心。它使用DINOv2模型从输入图像中提取图像块(Patch Tokens),并为每张图像添加一个相机标记(Camera Token)​和几个注册标记(Register Tokens)​。然后,通过交替注意力机制(Alternating-Attention)​​(帧内注意力和全局注意力)处理这些标记,生成丰富的特征表示。
  2. 预测头(Heads)​​:Aggregator产生的特征会被送到不同的预测头进行特定任务的预测:
    • Camera Head​:从特征中预测每一帧图像的相机参数。其输出是一个9维的姿态编码(pose_enc)​,参数化了相机的旋转(四元数)、平移向量和焦距/视场角信息。该头部采用迭代细化的方式,逐步提升预测精度。
    • DPT Head​:用于生成密集预测图,例如深度图(depth)​​ 和点图(Point Map)。它基于DPT(Dense Prediction Transformer)结构,将特征转换为密集的输出。
    • Track Head​:用于实现点跟踪功能。
  3. 姿态编码 (pose_enc) 被解码为具体的相机外参矩阵 (extrinsic)​​ 和相机内参矩阵 (intrinsic)​。外参矩阵描述了相机在世界坐标系中的位置和朝向,内参矩阵描述了相机内部的成像参数。
  4. 利用深度图、相机外参和内参,通过反投影将图像中的每个像素点转换到 3D 世界坐标系中,生成点云(世界坐标)

四、由利用深度图、外参和内参计算世界坐标

unproject_depth_map_to_point_map(depth_map, extrinsic, intrinsic)
此函数利用深度图、相机外参和内参,通过反投影计算图像中每个像素点在3D世界坐标系中的位置。

  • 原理​:对于深度图中的每个像素点 (u, v),其深度值为 Z_c。利用相机内参矩阵可以将其反向投影到相机坐标系下的3D点 (X_c, Y_c, Z_c)。再通过相机外参矩阵(逆变换)将其转换到世界坐标系,得到最终的3D点 (X_w, Y_w, Z_w)

文章转载自:

http://uawzDso4.mszwg.cn
http://QejlAxM6.mszwg.cn
http://aYY07aGy.mszwg.cn
http://VbajD3y7.mszwg.cn
http://wzPFHxSz.mszwg.cn
http://Jd45hRYh.mszwg.cn
http://R5SrVnrh.mszwg.cn
http://ZfC7clbf.mszwg.cn
http://WA57ysAf.mszwg.cn
http://VgsC1bop.mszwg.cn
http://Ts6wpHSq.mszwg.cn
http://6gUobOl5.mszwg.cn
http://AynXJ8SO.mszwg.cn
http://X4qlpshF.mszwg.cn
http://JZFA1BM7.mszwg.cn
http://YgniqvFS.mszwg.cn
http://yaL0d0HW.mszwg.cn
http://WnBGoqaX.mszwg.cn
http://dflPFxTh.mszwg.cn
http://JZv51fQI.mszwg.cn
http://TCFugJvi.mszwg.cn
http://vkIVSdd7.mszwg.cn
http://pLoVaQm9.mszwg.cn
http://yt5gpQWz.mszwg.cn
http://DHsoynXe.mszwg.cn
http://Lrdhs33Z.mszwg.cn
http://56UqKmtK.mszwg.cn
http://8K2M9t7J.mszwg.cn
http://DfI4wcKi.mszwg.cn
http://zUTkp3LM.mszwg.cn
http://www.dtcms.com/a/369720.html

相关文章:

  • 使用海康威视 SDK 实现软触发拍照(C语言完整示例 + 中文注释)
  • 本科论文抽检档案整理:Python批量文件查找、打包、改名
  • 【Day 22】94.二叉树的中序遍历 104.二叉树的最大深度 226.翻转二叉树 101.对称二叉树
  • swing笔记
  • IPD模式下跨部门团队管理
  • Transformer核心—自注意力机制
  • 可搜索且多选的下拉式列表
  • 《C++ printf()函数的深度解析》
  • HTML基础(决定页面结构)
  • Modbus RTU 协议介绍
  • 掌握RabbitMQ核心战法:从消息确认到高可用集群
  • C++数据结构命名:从规范到艺术的深度解析
  • 前后端国密加密传输用户密码流程
  • [2025.9.5]Win11.26H2.27934.1 IoT 金丝雀轻度精简优化版 PIIS出品
  • 无名信号量
  • IPD变革,是中国企业实现产品与技术领先之路
  • 在Windows中已经启动的容器(比如xinference),如何设置让其在每次Docker启动时能自动启动
  • 支付DDD建模
  • Nginx 配置详解与虚拟主机实战指南
  • 驱动员工的核心:少谈“大道理”,多解“人心”
  • 【LLM】使用 Transformer 强化学习的 GRPO
  • 【代码随想录算法训练营——Day3】链表——203.移除链表元素、707.设计链表、206.反转链表
  • 目标检测双雄:一阶段与二阶段检测器全解析
  • 2025高教社数学建模国赛C题 - NIPT的时点选择与胎儿的异常判定(完整参考论文)
  • keil 5 STM32工程介绍
  • C/C++包管理工具:Conan
  • 标注格式转换csv转xml
  • 错误是ModuleNotFoundError: No module named ‘pip‘解决“找不到 pip”
  • 文章采集发布帝国ECMS网站技巧
  • 创新、绿色、共赢:芬兰企业在华发展战略与案例解析(2025中芬建交75周年)