Skip to content


Folders and files

Last commit message
Last commit date

Latest commit



41 Commits

Repository files navigation

License CC BY-NC-SA 4.0

Learning Superpixels with Segmentation-Aware Affinity Loss

Learning Superpixels with Segmentation-Aware Affinity Loss

Wei-Chih Tu, Ming-Yu Liu, Varun Jampani, Deqing Sun, Shao-Yi Chien, Ming-Hsuan Yang, and Jan Kautz IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2018

Project | Paper


Copyright (C) 2018 NVIDIA Corporation. All rights reserved. Licensed under the CC BY-NC-SA 4.0 license (

Getting Started

In this repository, we provide the test code and the model trained on the BSDS500 dataset using the ERS algorithm as the superpixel segmenter. We also provide the evaluation scripts used in our experiments.


  • Hardware: PC with NVIDIA GPU. We have tested the code with GeForce GTX 1080Ti and TitanXP.
  • Software: CUDA 9.1, PyTorch 0.4.1, OpenCV 3.4.2

Data Format

The superpixel labels are all integers, so we saved the superpixel labels as single-channel 16-bit png images. We can read such png files using OpenCV imread() with extra -1 flag:

img = cv2.imread('input.png', -1)

In our experiments, we preprocess all the datasets so that the segmentation ground-truth maps are also in the same 16-bit png format. In the /data folder we sample some images from the BSDS500 test set and provide their corresponding ground-truth maps in the 16-bit png format for reference.


Go to /test and run The file bsds500.pkl is the model trained on the BSDS500 dataset with the ERS algorithm. The file cityscapes.pkl is trained on Cityscapes, while we note that bsds500.pkl also generalizes well on Cityscapes. The is a Python interface of the ERS algorithm. We modify the original ERS algorithm a bit so that it can take pixel affinities as input. See readme_ERS.pdf for more details.


We provide codes for computing the ASA (Achievable Segmentation Accuracy) and the BR (Boundary Recall) scores for superpixel evaluation. Go to /eval and run one of the two python scripts for evaluation. Make sure the input or output folder paths has been specified correctly in the python scripts. To use the script, you will additionally need to install the joblib package to enable multi-threading. It is particularly helpful when evaluating a large dataset along with many number of superpixels. The core evaluation functions are written in C++. The file is the Python interface of these functions. See readme_eval.pdf for more details.


If you find this repository useful in your project, please cite us:

    author = {Tu, Wei-Chih and Liu, Ming-Yu and Jampani, Varun and Sun, Deqing and Chien, Shao-Yi and Yang, Ming-Hsuan and Kautz, Jan},
    title = {Learning Superpixels with Segmentation-Aware Affinity Loss},
    booktitle = {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
    month = {June},
    year = {2018},


Learning Superpixels with Segmentation-Aware Affinity Loss








No releases published


No packages published