tensorboard可视化点云

发布时间 2023-08-04 14:16:32作者: name555difficult

tensorboard可视化点云


  1. 用 tensorboard 自带的 add_mesh 方法:支持可视化点云和网格,参考链接:
    1. tensorflow 网站的tensorboard
    2. pytorch 网站的 tensorboardPython torch.utils.tensorboard.writer.SummaryWriter.add_mesh用法及代码示例 - 纯净天空
  2. 用 open3d 和 tensorboard 连用的方法,支持丰富,但是好像还需要摸索一下,挖个坑,后面详细讨论
    1. open 3d 文档
    2. open 3d-ML github 文档 1
    3. open 3d code 参考
    4. open 3d youtube

但是可视化点云倒是还有其他方法,例如:matplotlib画三维散点图
因为我在服务器上没有可视化界面,所以想着能不能用tensorboard上使用?

add_mesh方法


add_mesh(tag, vertices, colors=None, faces=None, config_dict=None, global_step=None, walltime=None)

基于Three.js在tensorboard中实现可视化效果,支持point cloud和mesh两种,并且因为是Three.js,所以支持与用户交互,也像使用Three.js一样配置相关的参数:相机参数,光照条件等。可以参照three.js docs网页进行配置。
Parameters:

  • tag(string):数据标识,用于显示本可视化内容的标签
  • vertices(torch.Tensor) -所有顶点的 3D 坐标。(B,N,3). (batch, number_of_vertices, channels)
  • colors(torch.Tensor) -每个顶点的颜色。(可选)(B,N,3). The values should lie in [0, 255] for type uint8 or [0, 1] for type float.
  • faces(torch.Tensor) -每个mesh三角形内的顶点索引。 (可选的) (B,N,3). The values should lie in [0, number_of_vertices] for type uint8.
  • config_dict-带有Three.js类名称和配置的字典。
  • global_step(int) - Global step value to record 在训练过程中使用,标记进度
  • walltime(float) - Optional override default walltime (time.time()) seconds after epoch of event (一般不用)
import torch
from torch.utils.tensorboard import SummaryWriter
import open3d as o3d
import numpy as np
# get point cloud data
point_cloud_path = '/3DMatch_train/7-scenes-chess/01_Data/cloud_bin_0.ply'
point_cloud = o3d.io.read_point_cloud(point_cloud_path) # 读取点云数据
points = torch.tensor(np.asarray(point_cloud.points)) # 转换为tensor

print(points.shape)
writer = SummaryWriter()

# visualize the point cloud
writer.add_mesh('my_pcd', vertices=points.unsqueeze(0))

效果:
image.png

open3d和tensorboard连用

但是我用不了,在服务器上的tensorboard显示不出来open3d的tensorboard插件,可能我安装的有问题
一个小例子,可视化一些简单mesh:因为如上原因没有深究了

import open3d as o3d
# Monkey-patch torch.utils.tensorboard.SummaryWriter
from open3d.visualization.tensorboard_plugin import summary
# Utility function to convert Open3D geometry to a dictionary format
from open3d.visualization.tensorboard_plugin.util import to_dict_batch
from torch.utils.tensorboard import SummaryWriter

cube = o3d.geometry.TriangleMesh.create_box(1, 2, 4)
cube.compute_vertex_normals()
cylinder = o3d.geometry.TriangleMesh.create_cylinder(radius=1.0,
                                                     height=2.0,
                                                     resolution=20,
                                                     split=4)
cylinder.compute_vertex_normals()
colors = [(1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)]

logdir = "demo_logs/pytorch/small_scale"
writer = SummaryWriter(logdir)
for step in range(3):
    cube.paint_uniform_color(colors[step])
    writer.add_3d('cube', to_dict_batch([cube]), step=step)
    cylinder.paint_uniform_color(colors[step])
    writer.add_3d('cylinder', to_dict_batch([cylinder]), step=step)