Pytorch implementation of Relational Networks - A simple neural network module for relational reasoning
Implemented & tested on Sort-of-CLEVR task.
Sort-of-CLEVR is simplified version of CLEVR.This is composed of 10000 images and 20 questions (10 relational questions and 10 non-relational questions) per each image. 6 colors (red, green, blue, orange, gray, yellow) are assigned to randomly chosen shape (square or circle), and placed in a image.
Non-relational questions are composed of 3 subtypes:
Theses questions are "non-relational" because the agent only need to focus on certain object.
Relational questions are composed of 3 subtypes:
These questions are "relational" because the agent has to consider the relations between objects.
Questions are encoded into a vector of size of 11 : 6 for one-hot vector for certain color among 6 colors, 2 for one-hot vector of relational/non-relational questions. 3 for one-hot vector of 3 subtypes.

I.e., with the sample image shown, we can generate non-relational questions like:
And relational questions:
Create conda environment from environment.yml file
$ conda env create -f environment.yml
Activate environment
$ conda activate RN3
If you don't use conda install python 3 normally and use pip install to install remaining dependencies. The list of dependencies can be found in the environment.yml file.
$ ./run.sh
or
$ python sort_of_clevr_generator.py
to generate sort-of-clevr dataset and
$ python main.py
to train the binary RN model. Alternatively, use
$ python main.py --relation-type=ternary
to train the ternary RN model.
In the original paper, Sort-of-CLEVR task used different model from CLEVR task. However, because model used CLEVR requires much less time to compute (network is much smaller), this model is used for Sort-of-CLEVR task.
| Relational Networks (20th epoch) | CNN + MLP (without RN, 100th epoch) | |
|---|---|---|
| Non-relational question | 99% | 66% |
| Relational question | 89% | 66% |
CNN + MLP occured overfitting to the training data.
Relational networks shows far better results in relational questions and non-relation questions.
@gngdb speeds up the model by 10 times.