3D-сегментация объектов на семантические части — задача не новая, но большинство методов до сих пор работают только с видимыми поверхностями, игнорируя скрытые области. Это ограничивает их применение в задачах анимации и редактирования геометрии, где нужны полные части.
HoloPart — модель, разработанная VastAI, которая решает проблему амодальной сегментации для 3D-объектов, восстанавливая скрытые фрагменты. С HoloPart можно, например, изменить размер колес у машины, добавить детали или перераспределить материалы между частями. Для художников и инженеров это экономит часы ручной работы.
Модель работает в 2 этапа: сначала стандартная сегментация выделяет видимые части, а затем HoloPart достраивает их до полных 3D-форм, используя комбинацию из локального и глобального внимания. Локальные механизмы фокусируются на деталях каждой части, а контекстное внимание следит, чтобы восстановленные элементы не конфликтовали с общей структурой объекта.
Эксперименты на датасетах ABO и PartObjaverse-Tiny показали, что HoloPart обходит конкурентов - PatchComplete и DiffComplete по всем метрикам. Средний Chamfer Distance (показывает точность совпадения форм) у HoloPart — 0.026 против 0.087 у DiffComplete на ABO. А F-Score, оценивающий полноту восстановления, достигает 0.848 против 0.371 у аналогов.
⚠️ Перед тем, как загрузить целевой glb-файл в HoloPart ytj необходимо выполнить сегментацию сторонними средствами. Разработчики рекомендуют SAMPart3D и SAMesh.
# Clone the repo
git clone https://github.com/VAST-AI-Research/HoloPart.git
cd HoloPart
# Create a conda env
conda create -n holopart python=3.10
conda activate holopart
# Install dependencies
pip install torch torchvision --index-url https://download.pytorch.org/whl/{your-cuda-version}
pip install -r requirements.txt
# Step 1: Prepare segmented mesh with a mesh file and mask
import trimesh
import numpy as np
mesh = trimesh.load("mesh.glb", force="mesh")
mask_npy = np.load("mask.npy")
mesh_parts = []
for part_id in np.unique(mask_npy):
mesh_part = mesh.submesh([mask_npy == part_id], append=True)
mesh_parts.append(mesh_part)
mesh_parts = trimesh.Scene(mesh_parts).export("input_mesh.glb")
# Step 2: Decompose the 3D mesh into complete parts:
python -m scripts.inference_holopart --mesh-input assets/example_data/file.glb
@ai_machinelearning_big_data
#AI #ML #3D #HoloPart #Segmentation #VastAI
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍36🔥21❤14