Home

Awesome

GroundNet

Repository for AAAI 2018 paper "Using Syntax for Referring Expression Recognition".

@article{cirik2018using,
title={Using Syntax to Ground Referring Expressions in Natural Images},
author={Cirik, Volkan and Berg-Kirkpatrick, Taylor and Morency, Louis-Philippe},
journal = {AAAI},
year = {2018}
}

Preparing Environment:

The code is written in an old version of Pytorch. So, first create a virtual environment for your pytorch and other packages like h5py:

conda create -n pytorch0.1.12 python=2.7
source activate pytorch0.1.12
conda install pytorch=0.1.12 h5py tqdm scipy pillow matplotlib scikit-image nltk
conda install -c conda-forge ipython jupyter ipywidgets

python -m ipykernel install --user --name=pytorch0.1.12

Compile Google_Refex_toolbox

cd Google_Refexp_toolbox; python setup.py

To be able to run the parser, you also need Java 8. Note that the first time you run a new installation of pytorch it takes some time to compile the cuda kernels, just be patient.

Now you need to download data I used for the experiments by running following commands. Under data/:

bash download_coco.sh
bash download_imdb.sh
bash download_refcocog.sh

Under parser/:

bash download_parser.sh

Under notebooks/:

bash download_sup_ann.sh

Under downloaded_models/:

bash download_models.sh

Training & Testing Model

In exp-refcocog/ run the following command to list the options for training models

source activate pytorch0.1.12
PYTHONPATH=.. python train.py --help

To test a trained model run as follows:

source activate pytorch0.1.12
PYTHONPATH=.. python test.py --resume ../downloaded_models/snapshot.groundnet.model --out-file groundnet.test.json

To evaluate a model for supporting object annotations:

PYTHONPATH=.. python analyze.py --category sup_acc --prediction groundnet.test.json

Visualizing Errors

Run your jupyter notebook under the root folder of the repo and don't forget to switch pytorch0.1.12 kernel. Then simply run the notebooks/interactiveModel.ipynb. You should be able to enter a referring expression to test a model. To play with CMN model, just uncomment the args.resume and args.dump line.

Acknowledgements

I thank Licheng Yu, Ronghang Hu, Varun Nagaraja for their help.