Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


This repo contains code for our CVPR 2021 paper.

ACRE: Abstract Causal REasoning Beyond Covariation
Chi Zhang, Baoxiong Jia, Mark Edmonds, Song-Chun Zhu, Yixin Zhu
Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2021

Causal induction, i.e., identifying unobservable mechanisms that lead to the observable relations among variables, has played a pivotal role in modern scientific discovery, especially in scenarios with only sparse and limited data. Humans, even young toddlers, can induce causal relationships surprisingly well in various settings despite its notorious difficulty. However, in contrast to the commonplace trait of human cognition is the lack of a diagnostic benchmark to measure causal induction for modern Artificial Intelligence (AI) systems. Therefore, in this work, we introduce the Abstract Causal REasoning (ACRE) dataset for systematic evaluation of current vision systems in causal induction. Motivated by the stream of research on causal discovery in Blicket experiments, we query a visual reasoning system with the following four types of questions in either an independent scenario or an interventional scenario: direct, indirect, screening-off, and backward-blocking, intentionally going beyond the simple strategy of inducing causal relationships by covariation. By analyzing visual reasoning architectures on this testbed, we notice that pure neural models tend towards an associative strategy under their chance-level performance, whereas neuro-symbolic combinations struggle in backward-blocking reasoning. These deficiencies call for future research in models with a more comprehensive capability of causal induction.



An example ACRE problem is provided below.


The dataset formatting document is in src/helper/ To download the dataset, please check our project page.


We show performance of models in the following table. For details, please check our paper.

IID Qry. 33.01% 38.08% 40.86% 40.39% 41.91% 42.00% 43.56% 46.61% 59.26% 66.29%
Pro. 1.00% 2.05% 3.25% 2.30% 3.60% 3.35% 3.50% 6.45% 21.15% 27.00%
Comp. Qry. 35.56% 38.45% 41.97% 41.90% 42.80% 42.80% 43.79% 50.69% 61.83% 69.04%
Pro. 1.55% 2.10% 2.90% 2.65% 2.80% 2.60% 2.40% 8.10% 22.00% 31.20%
Sys. Qry. 33.43% 36.11% 37.45% 39.60% 37.19% 37.71% 39.93% 42.18% 62.63% 67.44%
Pro. 0.60% 1.90% 2.55% 1.90% 1.85% 1.75% 1.90% 4.00% 29.20% 29.55%



  • Python 3.8
  • Blender 2.79
  • PyTorch
  • CUDA and cuDNN expected

See requirements.txt for a full list of packages required.


Dataset Generation

The dataset generation process consists of two steps: generating dataset configurations and rendering images. A script that combines the two steps is provided in dataset_gen.zsh.

Note that backward-block queries correspond to potential queries in the repo.


Code to generate the dataset configurations resides in the src/dataset folder. To generate dataset configuration files for a split, run

python src/dataset/ --regime <IID/Comp/SyS> --output_dataset_dir <directory to save configuration files>


Code to render images resides in the src/render folder. The code is largely adopted from CLEVR. To setup Blender for rendering,

  1. Add the current directory (src/render) to blender's python site-packages
echo $PWD >> <path/to/blender/python/lib/python3.5/site-packages>/acre.pth
  1. Install pillow for Blender's python

Navigate to <path/to/blender/python> and run

./bin/python3.5m -m ensurepip
./bin/python3.5m -m pip install pillow

To render images, run

blender --background -noaudio --python ./src/render/ -- --use_gpu 1

See src/render/ for a full list of arguments.


Code to benchmark the dataset resides in src/baseline and src/neusym.

The baseline folder contains code for neural networks. Supported models include CNN, LSTM, ResNet, WReN, LEN, MXGNet, and BERT. To run a model,

python src/baseline/ --dataset <path/to/ACRE> --model <model name>

The neusym folder contains code for neuro-symbolic models: RWModel, PCModel, NoTearsLinear, and NoTearsMLP. To run a model,

python src/neusym/ --split <train/val/test> --config_folder <path/to/ACRE/config> --scenes_folder <path/to/predicted/scene/files> --model <model name>

We use Detectron 2 for scene parsing and code for this part is not included in the repo.

A function to decode masks has been provided in helper/


If you find the paper and/or the code helpful, please cite us.

    title={ACRE: Abstract Causal REasoning Beyond Covariation},
    author={Zhang, Chi and Jia, Baoxiong and Edmonds, Mark and Zhu, Song-Chun and Zhu, Yixin},
    booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},


We'd like to express our gratitude towards all the colleagues and anonymous reviewers for helping us improve the paper. The project is impossible to finish without the following open-source implementation.