PyTorch3D

PyTorch3D

  • 文档
  • 教程
  • API
  • GitHub

›数据

简介

  • 为什么选择PyTorch3D

数据

  • 文件IO
  • 从文件加载
  • 数据加载器
  • 批处理

操作

  • Cubify
  • IoU3D

可视化

  • Plotly可视化

渲染器

  • 概述
  • 入门
  • 相机

网格和IO

Meshes对象表示一批三角网格,是PyTorch3D中许多功能的核心。它不要求批次中的每个网格具有相同数量的顶点或面。在可用时,它可以存储与网格相关的其他数据,例如面法线、面面积和纹理。

存储单个网格的两种常见文件格式是“.obj”和“.ply”文件,PyTorch3D提供了读取这些文件的函数。

OBJ

Obj文件有标准的方式来存储有关网格的额外信息。给定一个obj文件,可以使用以下方法读取它:

  verts, faces, aux = load_obj(filename)

这将verts设置为一个(V,3)张量,表示顶点,并将faces.verts_idx设置为一个(F,3)张量,表示每个面的角点的顶点索引。不是三角形的面将被分割成三角形。aux是一个对象,如果存在,它可能包含法线、uv坐标、材质颜色和纹理,而faces还可以在其NamedTuple结构中包含指向这些法线、纹理和材质的索引。可以使用以下方法仅从顶点和面创建包含单个网格的Meshes对象:

    meshes = Meshes(verts=[verts], faces=[faces.verts_idx])

如果.obj中存在纹理信息,则可以使用它来初始化一个Textures类,该类被传递到Meshes构造函数中。目前,我们支持加载整个网格只有一个纹理贴图的网格的纹理贴图,例如:

verts_uvs = aux.verts_uvs[None, ...]  # (1, V, 2)
faces_uvs = faces.textures_idx[None, ...]  # (1, F, 3)
tex_maps = aux.texture_images

# tex_maps is a dictionary of {material name: texture image}.
# Take the first image:
texture_image = list(tex_maps.values())[0]
texture_image = texture_image[None, ...]  # (1, H, W, 3)

# Create a textures object
tex = Textures(verts_uvs=verts_uvs, faces_uvs=faces_uvs, maps=texture_image)

# Initialise the mesh with textures
meshes = Meshes(verts=[verts], faces=[faces.verts_idx], textures=tex)

load_objs_as_meshes函数提供了此过程。

PLY

Ply文件在存储附加信息的方式上很灵活。PyTorch3D提供了一个仅用于从ply文件读取顶点和面的函数。调用

    verts, faces = load_ply(filename)

将verts设置为一个(V,3)张量,表示顶点,并将faces设置为一个(F,3)张量,表示每个面的角点的顶点索引。不是三角形的面将被分割成三角形。可以使用以下方法从此数据创建包含单个网格的Meshes对象:

    meshes = Meshes(verts=[verts], faces=[faces])
← 文件IO数据加载器 →
  • OBJ
  • PLY
pytorch3d
Facebook Open Source
版权所有 © 2024 Meta Platforms, Inc
法律:隐私条款