Giter VIP home page Giter VIP logo

category-specific-keypoints's Introduction

Unsupervised Learning of Category-Specific Symmetric 3D Keypoints from Point Sets

This repository contains Pytorch original implementation of the paper: 'Unsupervised Learning of Category-Specific Symmetric 3D Keypoints from Point Sets' by Clara Fernandez-Labrador, Ajad Chhatkuli, Danda Pani Paudel, José J. Guerrero , Cédric Demonceaux and Luc Van Gool.

Introduction

Automatic discovery of category-specific 3D keypoints from a collection of objects of some category is a challenging problem. One reason is that not all objects in a category necessarily have the same semantic parts. The level of difficulty adds up further when objects are represented by 3D point clouds, with variations in shape and unknown coordinate frames. We define keypoints to be category-specific, if they meaningfully represent objects’ shape and their correspondences can be simply established order-wise across all objects. This paper aims at learning category-specific 3D keypoints, in an unsupervised manner, using a collection of misaligned 3D point clouds of objects from an unknown category. In order to do so, we model shapes defined by the keypoints, within a category, using the symmetric linear basis shapes without assuming the plane of symmetry to be known. The usage of symmetry prior leads us to learn stable keypoints suitable for higher misalignments. To the best of our knowledge, this is the first work on learning such keypoints directly from 3D point clouds. Using categories from four benchmark datasets, we demonstrate the quality of our learned keypoints by quantitative and qualitative evaluations. Our experiments also show that the keypoints discovered by our method are geometrically and semantically consistent.

Citing

@article{fernandez2020unsupervised,
  title={Unsupervised Learning of Category-Specific Symmetric 3D Keypoints from Point Sets},
  author={Fernandez-Labrador, Clara and Chhatkuli, Ajad and Paudel, Danda Pani and Guerrero, Jose J and Demonceaux, C{\'e}dric and Van Gool, Luc},
  journal={European Conference on Computer Vision (ECCV)},
  year={2020}
}

Datasets

We use the file data/create_datasets.py to prepare the input data. You can access to our data here.

We also refer to the official websites to download the original datasets:

Requirements

environment.yml contains a copy of the virtual environment with all the dependences and packages needed. In order to reproduce it, simply run:

conda env create -f environment.yml --name fernandez2020unsupervised

Start activating your environment:

conda activate fernandez2020unsupervised

Then, compile cuda module - index_max:

cd models/index_max_ext
python setup.py install

Now you are ready to go!

Train

$ python train.py --dataset 'ShapeNet' --category 'airplane' --ckpt_model 'airplane_10b' --batch_size 32 --node_num 14 --node_knn_k_1 3 --basis_num 10 --input_pc_num 1600 --surface_normal_len 0

Check models/options_detector.py for more options.

Evaluation

python test.py --dataset 'ShapeNet' --category 'airplane' --ckpt_model 'airplane_10b' --node_num 14 --node_knn_k_1 3 --basis_num 10 --input_pc_num 1600 --surface_normal_len 0

To visualize the results use viz.py

Evaluate pretrained models

You can try out directly some of our pretrained models. The checkpoints can be found here.

python test.py --dataset 'ModelNet10' --category 'chair' --ckpt_model 'chair_10b' --node_num 14 --node_knn_k_1 3 --basis_num 10
python test.py --dataset 'ShapeNet' --category 'airplane' --ckpt_model 'airplane_10b' --node_num 14 --node_knn_k_1 3 --basis_num 10 --input_pc_num 1600 --surface_normal_len 0

Data folder structure

Data
│
└───dataset_1_name
│   └───checkpoints
│         └─model_1_name
│           |   checkpoint.tar
│           |   ...
│         └─model_2_name
│         └─...
│   └───results
│         └─model_1_name
│           |   name_file1.mat
│           |   ...
│         └─model_2_name
│         └─...
│   └───train_data_npy
│         └─category1
│           |   name_file1.npy
│           |   name_file2.npy
│           |   ...
│         └─category2
│         └─...
│   └───test_data_npy
│         └─category1
│         └─category2
│         └─...
│   
└───dataset_2_name
    │   ...

License

This repository is released under GPL-3.0 License (see LICENSE file for details).

category-specific-keypoints's People

Contributors

cfernandezlab avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

category-specific-keypoints's Issues

What are the total number of nodes per category and the minimum distance for non-max suppression

Hi,

Thanks for sharing the code. Will you please confirm the total number of predefined nodes for every category?

Details
For the chair category, when I train the network for 14 nodes and apply non-max suppression with a minimum distance 0.2 (as given in the code), I get the final 4 keypoints. But if I reduce the distance to 0.05, I get the 6 keypoints (new 2 keypoints at incorrect locations).
Similarly, when I train the network for 32 nodes and use the minimum distance of 0.2, I got 6 keypoints. However, for the chair category 10 keypoints are more useful.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.