跳到主要内容

三维生成模型

Point-E 本地部署:154MB 起的文生 3D 点云,最便宜的一张卡就够

OpenAI 在 2022 年 12 月开源、之后四次提交就再没动过的点云扩散模型。它今天的卖点不是画质,而是小和快——V100 上 41 秒出一朵 4096 点的彩色点云,全套权重加起来才 7GB 出头。

Point-E 的论文全名是《Point-E: A System for Generating 3D Point Clouds from Complex Prompts》,作者是 Alex Nichol、Heewoo Jun、Prafulla Dhariwal、Pamela Mishkin 和 Mark Chen,2022 年 12 月 16 日挂上 arXiv,代码在 github.com/openai/point-e,MIT 协议。它走的是两段式:先用一个文生图扩散模型画出一张合成视角的图,再用第二个扩散模型把这张图变成点云。基础模型出 1024 个点,每个点 6 个通道(XYZ 坐标加 RGB 颜色),再交给一个 40M 的上采样模型补到 4096 个点。整条链路在单张 V100 上约 1.5 分钟,而同期的 DreamFusion 需要约 12 个 V100 小时——这一到两个数量级的差距,就是这篇论文当年的全部意义。

得先把落差说清楚。仓库主分支停在 2022 年 12 月 20 日,一共四次提交,之后再没更新,64 个开放 issue 基本没人回。论文里效果最好的那条文生 3D 链路依赖一个在 3D 渲染图上微调过的 GLIDE 文生图模型,这份权重 OpenAI 从来没放出来(issue #115 至今开着且没有回复),你能直接跑的纯文本模型是 base40M-textvec,README 自己承认它「能力有限,只认得简单的类别和颜色」。COCO CLIP R-Precision 上 Point-E 1B 是 41.1%/46.8%(ViT-B/32 与 ViT-L/14 两种打分器),DreamFusion 是 75.1%/79.7%。连官方那个 Hugging Face Space 现在都是 runtime error 状态。

那它今天还值得跑吗?三个理由:一是它大概是唯一能在 3GB 显存里跑完整条文本到 3D 链路的开源模型,做点云扩散、SDF 重建、3D 生成评测的人还在拿它当基线——P-FID 和 P-IS 这两个指标本身就出自这篇论文;二是它输出的是带颜色的显式点云而不是隐式场,拿来做几何先验、初始化、数据增广都很顺手;三是 diffusers 至今只收了 Shap-E,没收 Point-E,所以你没有 from_pretrained 一行搞定的捷径,必须自己起一台机器、克隆原始仓库来跑。NexGPU 上 Tesla V100 32GB 是 $0.188/卡·时,正好是论文那张测速卡;从 1,175 个可租节点、2,000 多个预置镜像里挑一个 PyTorch 的,SSH 上去十分钟就能出第一朵点云。

01 —

九个官方 checkpoint,到底哪个是哪个

文件大小取自 openaipublic.azureedge.net 上的实际 Content-Length,全部是 fp32 的 .pt

版本参数量显存上下文说明
base40M-textvec40M(width 512/12 层/8 头)fp32 权重 154MB / 整链路 < 3GB1024 点 × 6 通道唯一直接吃文本 prompt 的权重,text2pointcloud 笔记本的默认选择。CLIP ViT-L/14 只给它一个文本向量做条件,所以它认得「a red motorcycle」这种简单类别加颜色,复杂描述基本失效。
base40M / base40M-imagevec / base40M-uncond各 40M(width 512/12 层/8 头)fp32 权重 各 152–155MB1024 点 × 6 通道图像条件三兄弟。base40M 用 CLIP ViT-L/14 的 16×16=256 个 grid token 做条件,是 image2pointcloud 的默认加载项;imagevec 只用单个图像向量;uncond 是无条件基线,做 P-FID 对照用。
base300M300M(width 1024/24 层/16 头)fp32 权重 1.16GB / 整链路 ≈ 4GB1024 点 × 6 通道质量与速度的折中档,COCO CLIP R-Precision 40.3%/45.6%。在 24GB 卡上能开很大的 batch,是批量刷点云数据集时性价比最高的一档。
base1B标称 1B(按 4.64GB fp32 权重反推约 1.24B,width 2048/24 层/32 头)fp32 权重 4.64GB / 整链路 8GB 起1024 点 × 6 通道论文里最强的一档,41.1%/46.8%。单文件 4,977,344,725 字节,V100 上单次采样 28.67 秒。要复现论文里那些 banner 图,就是它加上一张外部生成的合成视角图。
upsample40M(width 512/12 层/8 头)fp32 权重 154MBn_ctx 3072 + cond_ctx 1024 = 4096 点把基础模型的 1024 点补到 4096 点。默认不加 classifier-free guidance——PointCloudSampler 会把第二段的 guidance_scale 自动压到 1.0,文本笔记本里干脆写成 0.0。V100 上 12.58 秒。
sdf(附带 pointnet)sdf 约 9.5M / pointnet 约 17M36MB + 67MB,显存几乎不占marching cubes grid 32 或 128sdf 做点云到网格的符号距离回归再导出 PLY,训练时用了 240 万个 manifold mesh。pointnet 是算 P-FID/P-IS 的评测特征提取器,只跑生成的话下不下都行。

02 —

按场景选卡:Point-E 的瓶颈是 fp32 算力,不是显存

仓库全程 fp32、没有 fp16/bf16 路径(issue #103 还开着),所以 FP32 峰值算力比显存容量更值得看

  • 跑 base40M-textvec 批量刷文生点云,或者对齐论文的延迟数字

    Tesla V100 32GB$0.188/卡·时

    论文里那 28.67 秒和 12.58 秒就是在 V100 上测的,用同一张卡对齐数字最省事,而且它是全站最便宜的一档,32GB 显存对这个模型属于奢侈。

  • base1B 图生点云 + 上采样,想开大 batch 批量出货

    RTX 4090 24GB$0.540/卡·时

    4.64GB 权重加 CLIP ViT-L/14 只占掉 24GB 的四分之一,剩下全喂 batch;FP32 峰值约 82 TFLOPS,是 V100 那一档的五倍级,纯 fp32 的 Karras 采样能直接吃满。

  • 只做 SDF 网格重建、grid_size=128 的 marching cubes 和 Blender 渲染

    RTX 3090 24GB$0.193/卡·时

    sdf 权重才 36MB,128³ 共 209 万个查询点按 4096 一批喂进去,显存压力接近零;这一步要的是便宜,加上 24GB 足够把渲染管线一起放进来。

  • 拿 Point-E 当基线,同机横评 TRELLIS 与 Hunyuan3D 2.1

    RTX A6000 48GB$0.817/卡·时

    TRELLIS 官方要求至少 16GB,Hunyuan3D 2.1 形状 10GB、贴图 21GB、合起来 29GB;48GB 一张卡把 2022 到今天这几代模型放在一起跑,不用来回换机器重下权重。

03 —

四步在租来的卡上把 Point-E 跑起来

从 PyTorch 预置镜像开机到导出第一个 PLY 网格,路上的坑都标出来了

  1. 01

    开机装环境,绕开 CLIP 那个同名包陷阱

    在 NexGPU 控制台挑一个 PyTorch 预置镜像开机,SSH 或 Jupyter 进去克隆仓库。setup.py 里写的依赖是 clip @ git+https://github.com/openai/CLIP.git,装的是 OpenAI 的 CLIP;如果你手滑执行 pip install clip,装到的是 PyPI 上另一个完全无关的同名包,运行时报 module 'clip' has no attribute 'load'——仓库 issue #105 就是这个,挂了几年没人回。另外镜像里必须有 git,否则这条 git+ 依赖根本拉不下来。

    git clone https://github.com/openai/point-e.git && cd point-e && pip install -e . && pip install git+https://github.com/openai/CLIP.git
  2. 02

    把权重缓存钉死在持久盘上

    download.py 里的 default_cache_dir() 返回的是 os.path.join(os.path.abspath(os.getcwd()), 'point_e_model_cache')——当前工作目录,不是 ~/.cache。你在哪个目录起 Python,几个 GB 的权重就落到哪。base1B 单文件 4,977,344,725 字节,实例重建一次就得重下一次。固定 cd 到挂载的持久卷再执行,一次把要用的都拉全;九个 checkpoint 加上 CLIP ViT-L/14 大约 8GB。

    cd /workspace && python -c "import torch; from point_e.models.download import load_checkpoint; [load_checkpoint(n, torch.device('cpu')) for n in ['base40M-textvec','base1B','upsample','sdf']]"
  3. 03

    两段式采样:base 出骨架,upsample 补密度

    PointCloudSampler 把两个模型串成一条链,第一段生成 1024 个点,结果作为 low_res 条件喂给第二段补到 4096 个点。默认 karras_steps 是 (64, 64),sigma_max 是 (120, 160),s_churn 是 (3, 0),guidance 只加在第一段。文生点云传 model_kwargs_key_filter=('texts', ''),图生点云改成 ('images', '') 并在 model_kwargs 里传 PIL 图像。想提速就先砍第一段的 karras_steps,画质掉得比想象中慢。

    sampler = PointCloudSampler(device=device, models=[base_model, upsampler_model], diffusions=[base_diffusion, upsampler_diffusion], num_points=[1024, 4096 - 1024], aux_channels=['R', 'G', 'B'], guidance_scale=[3.0, 0.0], model_kwargs_key_filter=('texts', ''))
  4. 04

    点云转网格,导出 PLY

    pointcloud2mesh 笔记本里 grid_size 默认只有 32,出来是个只能看轮廓的团子,官方自己注明评测时用 128。128³ 是 209 万个查询点,按 batch_size=4096 一批一批过 sdf 模型,显存吃不满但要等一会儿。导出格式是 PLY,颜色挂在顶点上;进 Blender 或 MeshLab 之前一般还要补一次法线并做简化。

    from point_e.util.pc_to_mesh import marching_cubes_mesh
    mesh = marching_cubes_mesh(pc=pc, model=sdf_model, batch_size=4096, grid_size=128, progress=True)
    with open('mesh.ply', 'wb') as f: mesh.write_ply(f)

算笔账:一千朵点云到底多少钱

按论文在 V100 上拆出来的分段耗时,base1B 一次采样 28.67 秒、上采样 12.58 秒,合计 41.25 秒(论文里那 46.28 秒的 GLIDE 段权重没开源,你跑不到)。NexGPU 的 Tesla V100 32GB 是 $0.188/卡·时,折合每秒 $0.0000522,于是一朵 4096 点的彩色点云成本是 41.25 × 0.0000522 ≈ $0.00215,两毛美分不到。要 1,000 朵:41,250 秒 = 11.46 小时,11.46 × 0.188 = $2.15。换 RTX 4090 24GB 的 $0.540/卡·时,FP32 峰值约 82 TFLOPS 对 V100 那一档的 15 TFLOPS 级,保守只按三倍折算也就 3.8 小时,3.8 × 0.540 = $2.06——花的钱几乎一样,时间省掉三分之二,还能把 batch 开大到填满 24GB。存储那边,九个 checkpoint 加 CLIP 大约 8GB,按 $0.414/GB·月 中位价是 $3.31/月;算力在实例停机那一刻就停止计费,存储会一直算到你 destroy 为止,所以跑完记得清。全程按秒计费、没有最低消费、没有起租量、不用提配额申请。

04 —

常见问题

Point-E 本地部署需要多大显存?8GB 的卡够不够?

看你跑哪一档。base40M-textvec + upsample 的文生点云链路,两个权重各 154MB,加上 CLIP ViT-L/14 大约 1GB,整条链路 3GB 显存以内就装得下,8GB 卡随便跑。base300M 权重 1.16GB,整链路 4GB 上下。base1B 是 4.64GB 的 fp32 权重,再加 CLIP 和采样激活,8GB 卡能跑但 batch 开不起来,想批量出货建议直接上 24GB。NexGPU 上 Tesla V100 32GB 是 $0.188/卡·时、RTX 3090 24GB 是 $0.193/卡·时,两档都便宜到没必要在 8GB 上抠。

Point-E 是不是已经过时了?现在还该用它做 3D 生成吗?

作为生产资产生成器,确实过时了。OpenAI 自己在 2023 年 5 月发了 Shap-E,摘要里直说它比 Point-E 收敛更快、样本质量相当或更好,而且直接输出可渲染的隐式函数;之后 Microsoft TRELLIS(image-large 1.2B,官方要求 ≥16GB 显存,MIT 协议)和 Tencent Hunyuan3D 2.1(形状 3.3B、贴图 2B,形状 10GB、贴图 21GB、合计 29GB)已经能直出带 PBR 贴图的网格。但 Point-E 作为点云扩散的基线、作为 3GB 显存就能跑通的最小可用链路、作为 P-FID/P-IS 指标的出处,仍然在被论文引用和复现。NexGPU 上一张 RTX A6000 48GB($0.817/卡·时)就能把这几代模型全装下,同机横评一次,该选谁自己就清楚了。

为什么 import clip 之后报 module 'clip' has no attribute 'load'?

因为 PyPI 上存在一个叫 clip 的无关包,pip install clip 装到的是它。Point-E 的 setup.py 写的是 clip @ git+https://github.com/openai/CLIP.git,必须从 GitHub 装 OpenAI 那个。仓库 issue #105 就是这个问题,跟另外 63 个 issue 一起挂着没人回——这个仓库自 2022 年 12 月 20 日的第四次提交之后就没再更新过。先 pip uninstall clip,再 pip install git+https://github.com/openai/CLIP.git 即可。在 NexGPU 的 2,000 多个预置镜像里挑一个带 git 和 CUDA 版 PyTorch 的,这一步一条命令就过。

Point-E 生成的点云能直接导进 Blender 或 UE 用吗?

不能直接用。原始输出是 4096 个带 RGB 的点,没有面片。仓库带了一个 36MB 的 sdf 模型,用 marching_cubes_mesh 回归符号距离场重建出网格再导出 PLY。注意笔记本里 grid_size 默认是 32,只够看轮廓,官方注明评测时用 128;即便跑满 128³,由 4096 个点撑出来的几何也偏圆润,硬边和细节基本没有,拿来做占位资产、碰撞体、几何先验合适,做成品资产不合适。想要能直接进引擎的带贴图网格,租一张 RTX A6000 48GB 跑 Hunyuan3D 2.1 更实际,NexGPU 上是 $0.817/卡·时。

为什么我跑出来的文生 3D 效果远不如论文里的图?

因为论文最好的那条链路你根本跑不到。它先用一个在 3D 渲染图上微调过的 GLIDE 文生图模型出一张合成视角图(V100 上占掉 46.28 秒),再把图喂给 base1B。这份微调过的 GLIDE 权重 OpenAI 从来没发布,issue #115 至今开着且无人回复。开源出来的纯文本路径是 base40M-textvec,README 自己写着它「能力有限,只认得简单的类别和颜色」。想接近论文效果,现实做法是自己接一个现代文生图模型(SDXL、FLUX 之类)先出图,再走 base1B 的图生点云路径——这需要一张能同时装下两个模型的卡,NexGPU 的 RTX 4090 24GB $0.540/卡·时 正好合适。

Point-E 支持 fp16 或量化吗?能用 diffusers 一行调起来吗?

两个都不行。仓库全程 fp32,没有 fp16/bf16 路径,issue #103「Support for other dtypes」至今开着,官方也没有任何量化版本——所以选卡时该看 FP32 峰值算力而不是 Tensor Core 规格。diffusers 收进去的是 Shap-E(ShapEPipeline/ShapEImg2ImgPipeline,权重在 openai/shap-e),Point-E 没有对应 pipeline,只能克隆原仓库跑,而官方那个 Hugging Face Space 目前还是 runtime error。所以想试它,唯一的路就是自己开一台机器:NexGPU 按秒计费、无最低消费、无需申请配额,在 Tesla V100 32GB 上跑十分钟再停掉,账单三美分。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。