• Stars
    star
    113
  • Rank 310,055 (Top 7 %)
  • Language
    Python
  • License
    GNU General Publi...
  • Created over 4 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Voxel2Mesh: 3D Mesh Model Generation from Volumetric Data

Voxel2Mesh: 3D Mesh Model Generation from Volumetric Data

This repository is a PyTorch implementation of Voxel2Mesh architecture proposed in Voxel2Mesh: 3D Mesh Model Generation from Volumetric Data; Udaranga Wickramasinghe, Edoardo Remelli, Graham Knott and Pascal Fua; MICCAI 2020.

Abstract

CNN-based volumetric methods that label individual voxels now dominate the field of biomedical segmentation. However, 3D surface representations are often required for proper analysis. They can be obtained by post-processing the labeled volumes which typically introduces artifacts and prevents end-to-end training. In this paper, we therefore introduce a novel architecture that goes directly from 3D image volumes to 3D surfaces without post-processing and with better accuracy than current methods. We evaluate it on Electron Microscopy and MRI brain images as well as CT liver scans. We will show that it outperforms state-of-the-art segmentation methods.

Architecture

Fig. 1. Architectures (a) The Pixel2Mesh-3D architecture, a straightforward extension of [20], uses a surface decoder but no voxel decoder. (b) By contrast, our Voxel2Mesh architecture takes as input an image and spherical mesh. They are jointly encoded and then decoded into cubes and meshes of increasing resolution. At each mesh decoding stage, the decoder first receives as input the current mesh and a set of features sampled from the cube of corresponding resolution. Then the mesh is deformed and refined non-uniformly by adding vertices only where they are needed.

Fig. 2. Qualitative results. (a) Input volumes. EM (row 1,2), CT(row 3), MRI(row 4) (b) Ground truth (c) CNN baseline (d) CNN baseline + post processing (e) Voxel2Mesh. The orange boxes highlight false positive regions.

Installation

PyTorch 1.4

Python 3.6.9

Update: You can use the enviroment.yaml file created by ctr26 to find the necessary packages.

Dataset

 1. CHAOS dataset .

 2. Hippocampus dataset. Missing dataset_init function to generate .npy files: #7

 3. Synaptic junction dataset.

Running Experiments

  Step 1: Update config.py. You need to set the path to the dataset and also the directory to save the results.

  Step 2: If it is the first time, you need to pre-process the data. For that execute python data_preprocess.py. Pre-processed data will be save at the dataset directory.

  Step 3: Now execute python main.py and this will start training the network.

Known Issues

GPU memory limitations

For our experiments, we used a GPU with 32GB of memory. If you are using a GPU with memory less than 20GB, you might run out of GPU memory during evaluation stage since we use higher number of vertices at this stage. To reduce the number of vertices during evaluation stage, you can reduce the number of mesh unpoolings (sub-divisions) specified at line 128 in data.py. For instance you can change 'unpool':[0, 1, 1, 1, 1] to 'unpool':[0, 1, 0, 1, 1] or 'unpool':[0, 1, 0, 1, 0]

Order of slices in loaded image stacks

In some systems, order of the slices in the loaded image stack can be shuffled. This issue was first reported by Patrick Jenson and he proposed a solution here

Missing faces on output mesh

This happens due to the vertex order in the face matrix. In the meshes produced by Voxel2Mesh, some faces have vertices in clockwise direction and others have them in anti-clockwise direciton. This could be easily fixed by setting the 'back-face' color of the faces in your mesh viewer same as the 'front-face' color OR by writing a function to correct the orientations of the faces.

Citation

If you find Voxel2Mesh useful, please cite the MICCAI article

@InProceedings{10.1007/978-3-030-59719-1_30,
author="Wickramasinghe, Udaranga and Remelli, Edoardo and Knott, Graham and Fua, Pascal",
title="Voxel2Mesh: 3D Mesh Model Generation from Volumetric Data",
booktitle="Medical Image Computing and Computer Assisted Intervention -- MICCAI 2020",
year="2020",
publisher="Springer International Publishing",
address="Cham",
pages="299--308", 
isbn="978-3-030-59719-1"
}

Contact

For any questions regard this paper/code, please make a post in Issues.

More Repositories

1

gaussian-splatting-web

TypeScript
536
star
2

LIFT

Code release for the ECCV 2016 paper
Python
485
star
3

disk

Disk code release
Python
303
star
4

EPnP

EPnP: Efficient Perspective-n-Point Camera Pose Estimation
MATLAB
263
star
5

MeshSDF

Code for "MeshSDF: Differentiable Iso-Surface Extraction", NeurIPS2020, SpotLight
Python
220
star
6

tf-lift

Tensorflow port of LIFT (ECCV 2016), with training code.
Python
196
star
7

segmentation-driven-pose

Segmentation-driven 6D Object Pose Estimation. CVPR 2019.
Python
184
star
8

MeshUDF

Fast and Differentiable Meshing of Unsigned Distance Field Networks
Cython
136
star
9

single-stage-pose

Single-Stage 6D Object Pose Estimation, CVPR 2020
Python
104
star
10

sketch2mesh

Reconstructing and Editing 3D Shapes from Sketches
Python
78
star
11

Power-Iteration-SVD

Backpropagation-Friendly-Eigendecomposition
Python
72
star
12

pyKSP

This is a Python wrapper for the K-Shortest Path tracking algorithm.
C++
66
star
13

social-scene-understanding

Source code for the CVPR 2017 paper
Python
63
star
14

wide-depth-range-pose

Wide-Depth-Range 6D Object Pose Estimation in Space, CVPR 2021
Python
61
star
15

log-polar-descriptors

Public implementation of "Beyond Cartesian Representations for Local Descriptors", ICCV 2019
Jupyter Notebook
60
star
16

detecting-the-unexpected

Detecting the Unexpected via Image Resynthesis
Python
56
star
17

balltracking

Tracking of the ball and the players in team sports
MATLAB
46
star
18

perspective-flow-aggregation

Perspective Flow Aggregation for Data-Limited 6D Object Pose Estimation. ECCV 2022.
Python
38
star
19

LabelGrab

Annotation tool for semantic and instance segmentation, with automated help from the GrabCut implemented in OpenCV.
Python
28
star
20

densecrf

a fork of the densecrf package implementing alternative inference scheme
C++
27
star
21

multiview_calib

Single and multiple view camera calibration tool
Jupyter Notebook
26
star
22

deepdesc-release

Code for the ICCV 2015 paper "Discriminative Learning of Deep Convolutional Feature Point Descriptors"
Lua
25
star
23

adv_param_pose_prior

Adversarial Parametric Pose Prior
Python
23
star
24

multicam-gt

Our Webapp to annotate multi-camera pedestrian detection datasets.
JavaScript
20
star
25

diff-nrsfm

MATLAB
18
star
26

cvlab-kubernetes-guide

Instructions and utilities for use of EPFL's compute cluster.
Python
15
star
27

MVFlow

Python
13
star
28

iter_unc

Official code for "Enabling Uncertainty Estimation in Iterative Neural Networks" (ICML 2024)
Jupyter Notebook
12
star
29

gecco

Code release for GECCO: Geometrically-Conditioned Point Diffusion Models
Python
11
star
30

zigzag

Official code for "ZigZag: Universal Sampling-free Uncertainty Estimation Through Two-Step Inference" (TMLR 2024)
Jupyter Notebook
10
star
31

PA-net

Probabilistic Atlases to Enforce Topological Constraints
Python
9
star
32

mot3d

Fast Single View and Multiview Multi Object Tracking Using Minimum Cost Maximum Flow Formulation
Jupyter Notebook
7
star
33

MVAug

Python
7
star
34

erasing-road-obstacles

Detecting Road Obstacles by Erasing Them
6
star
35

UCLID-Net

Implementation of UCLID-Net (NeurIPS 2020)
Python
5
star
36

n-queens-benchmark

C++
3
star
37

mf-mrf

Parallel mean-field inference web page
HTML
2
star
38

MARMOT

Multi-Aspect Reconstruction and Multi-Object Tracking
Jupyter Notebook
1
star
39

MAGE

Multi-Aspect Groundplane Estimation
Python
1
star
40

UDA-Hand-Object

Unsupervised Domain Adaptation with Temporal Consistency for 3D Joint Hand-Object Reconstruction
Python
1
star