An Executor that receives Documents containing point sets data in its tensor attribute, with shape (N, 3) and encodes it to embeddings of shape (D,).
Now, the following pretrained models are ready to be used to create embeddings:
- PointConv-Shapenet-d512: A PointConv model resulted in 512 dimension of embeddings, which is finetuned based on ShapeNet dataset.
- PointConv-Shapenet-d1024: A PointConv model resulted in 1024 dimension of embeddings, which is finetuned based on ShapeNet dataset.
from jina import Flow
f = Flow().add(uses='jinahub+docker://MeshDataEncoder', \
uses_with={'pretrained_model': 'PointConv-Shapenet-d512'})from jina import Flow
f = Flow().add(uses='jinahub://MeshDataEncoder', \
uses_with={'pretrained_model': 'PointConv-Shapenet-d512'})This Executor offers a GPU tag to speed up encoding. For more information on how to run the executor on GPU, check out the documentation.
$ pip install finetunerTBD...
$ python finetune.py --help
$ python finetune.py --model_name pointconv \
--train_dataset /path/to/train.bin \
--eval_dataset /path/to/eval.bin \
--batch_size 128 \
--epochs 50$ python finetune.py --model_name pointconv \
--train_dataset /path/to/unlabeled_data.bin \
--interactiveTo use your customized dataset, you should design your own dataset code, like those in datasets/ directory. Here datasets/modelnet40.py is an example, you must at least implement __len__ and __getitem__ functions according to your logics.
class ModelNet40(torch.utils.data.Dataset):
def __init__(self, data_path, sample_points=1024, seed=10) -> None:
super().__init__()
# extract point data and labels from your file, e.g. npz, h5, etc.
data = np.load(data_path)
self.points = data['tensor']
self.labels = data['labels']
self.sample_points = sample_points
def __len__(self):
# return the total length of your data
return len(self.labels)
def __getitem__(self, index):
return (
# process on the fly, if needed
preprocess(self.points[index], num_points=self.sample_points),
self.labels[index],
)Now we support PointNet, PointConv, PointNet++, PointMLP, RepSurf and Curvenet. To know more details about the arguments, please run python finetune_pl.py --help in cmd.
$ python finetune_pl.py --help
$ python finetune_pl.py --model_name pointconv \
--train_dataset /path/to/train.bin \
--eval_dataset /path/to/eval.bin \
--split_ratio 0.8 \
--checkpoint_path /path/to/checkpoint/ \
--embed_dim 512 \
--hidden_dim 1024 \
--batch_size 128 \
--epochs 50Below is our pretrained models' performance of 3D point cloud classification on ModelNet40 official test dataset.
| dataset | model name | batch size | embedding dims | test loss | test overall accuracy |
|---|---|---|---|---|---|
| modelnet40 | PointNet | 32 | 256 | 0.63 | 0.8225 |
| modelnet40 | PointNet | 32 | 512 | 0.63 | 0.8254 |
| modelnet40 | PointNet | 32 | 1024 | 0.65 | 0.8148 |
| modelnet40 | PointNet++ | 32 | 256 | 0.48 | 0.863 |
| modelnet40 | PointNet++ | 32 | 512 | 0.44 | 0.8712 |
| modelnet40 | PointNet++ | 32 | 1024 | 0.47 | 0.8655 |
| modelnet40 | PointConv | 32 | 128 | 0.55 | 0.8452 |
| modelnet40 | PointConv | 32 | 256 | 0.53 | 0.8517 |
| modelnet40 | PointConv | 32 | 512 | 0.54 | 0.8505 |
| modelnet40 | PointConv | 32 | 1024 | 0.58 | 0.8533 |
| modelnet40 | PointMLP | 32 | 64 | 0.46 | 0.8728 |
| modelnet40 | RepSurf | 32 | 256 | 0.44 | 0.8776 |
| modelnet40 | RepSurf | 32 | 512 | 0.45 | 0.8655 |
| modelnet40 | RepSurf | 32 | 1024 | 0.43 | 0.8724 |
| modelnet40 | CurveNet | 32 | 128 | 0.45 | 0.8651 |
| modelnet40 | CurveNet | 32 | 256 | 0.45 | 0.8647 |
| modelnet40 | CurveNet | 32 | 512 | 0.47 | 0.8687 |
| modelnet40 | CurveNet | 32 | 1024 | 0.48 | 0.857 |
- PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
- PointConv: Deep Convolutional Networks on 3D Point Clouds
- PointNet++: PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
- PointMLP: Rethinking Network Design and Local Geometry in Point Cloud
- RepSurf: Surface Representation for Point Clouds
- CurveNet: Walk in the Cloud: Learning Curves for Point Clouds Shape Analysis