PyTorch3D 可视化

PyTorch3D是非常好用的3D工具库。但是PyTorch3D对于可用于debug(例如调整cameras参数)的可视化工具并没有进行系统的介绍。这篇文章主要是想介绍我觉得非常使用的PyTorch3D可视化工具。

1. 新建一个Mesh

从hugging face上下载一个glb文件,例如 0025c5e2333949feb1db259d4ff08dbe。用如下代码可以读取并渲染。

python 复制代码
from pytorch3d.io import IO
from pytorch3d.io.experimental_gltf_io import MeshGlbFormat
from pytorch3d.renderer import RasterizationSettings, MeshRasterizer, PerspectiveCameras, look_at_view_transform, PointLights, MeshRenderer, SoftPhongShader
import matplotlib.pyplot as plt

'''
https://huggingface.co/datasets/allenai/objaverse/blob/main/glbs/000-000/0025c5e2333949feb1db259d4ff08dbe.glb
'''

device = "cuda"
image_size = (512, 512)
glb_path = "0025c5e2333949feb1db259d4ff08dbe.glb"

io = IO()
io.register_meshes_format(MeshGlbFormat())
with open(glb_path, "rb") as f:
    mesh = io.load_mesh(f, include_textures=True).to(device)

# Select the viewpoint using spherical angles  
distance = 3   # distance from camera to the object
elevation = 0.0   # angle of elevation in degrees
azimuth = 0.0  # No rotation so the camera is positioned on the +Z axis. 

# Get the position of the camera based on the spherical angles
R, T = look_at_view_transform(distance, elevation, azimuth, device=device)
cameras = PerspectiveCameras(device=device, R=R, T=T, image_size=(image_size, ), in_ndc=False)

cameras.to(device)
raster_settings = RasterizationSettings(
    image_size=image_size, 
    blur_radius=0.0, 
    faces_per_pixel=1, 
)
lights = PointLights(device=device, location=[[0.0, 0.0, -3.0]])
renderer = MeshRenderer(
    rasterizer=MeshRasterizer(
        cameras=cameras, 
        raster_settings=raster_settings
    ),
    shader=SoftPhongShader(
        device=device, 
        cameras=cameras,
        lights=lights
    )
)

images = renderer(mesh)
plt.imshow(images[0, ..., :3].cpu())
plt.axis("off")

我们会发现渲染得到的图片是空白的。那么接下来我们可以从利用PyTorch3D可视化工具查看是什么原因导致的。

2. 可视化 Texture

python 复制代码
plt.figure(figsize=(7,7))
texture_image=mesh.textures.maps_padded()
plt.imshow(texture_image.squeeze().cpu().numpy())
plt.axis("off")

3. 可视化 cameras 和 meshes

python 复制代码
from pytorch3d.vis.plotly_vis import plot_batch_individually

plot_batch_individually([mesh, cameras])

4. 渲染出来空白图像的原因

相机参数不对,可以看到3. 相机视野中压根没出现meshes。

相关推荐
Keano Reurink7 分钟前
SEO数据管道:用Airflow搭建自动化工作流
运维·人工智能·爬虫·搜索引擎·自动化·ai编程·seo
生成论实验室7 分钟前
用事件关系网络重新理解AI(二):损失函数、优化器与深度学习的动力学
数据结构·人工智能·深度学习·算法·语言模型
韦胖漫谈IT11 分钟前
提示词注入- 大语言模型 OWASP TOP 10系列
网络·人工智能·语言模型·大模型安全·owasp
HIT_Weston18 分钟前
93、【Agent】【OpenCode】edit 工具提示词(二)
人工智能·agent·opencode
xingyuzhisuan21 分钟前
2026年GPU租用平台JupyterHub多用户环境配置
服务器·人工智能·jupyter·gpu算力
生成论实验室25 分钟前
事件、信息荷与六维态势空间——每一个事件都是一次空间的弯曲
人工智能·算法·语言模型·可信计算技术·安全架构
Zevalin爱灰灰37 分钟前
智能控制 第五章——神经网络控制论
人工智能·神经网络
韦胖漫谈IT38 分钟前
供应链 - 大语言模型 OWASP TOP 10系列
人工智能·语言模型·自然语言处理
KaMeidebaby42 分钟前
卡梅德生物技术快报|真核蛋白表达信号肽筛选实验全流程复盘
服务器·前端·数据库·人工智能·算法
Johnny20041 小时前
什么是AI?从零认识人工智能
人工智能·机器学习·ai·大模型·入门教程