Repository containing wrapper to obtain various object proposals easily
Matlab C++ C Python CMake Objective-C Other
Switch branches/tags
Nothing to show
Clone or download
abhshkdz Merge pull request #36 from abhshkdz/lpo
Adds changes from philkr/lpo
Latest commit 597a895 Feb 17, 2017
Permalink
Failed to load latest commit information.
demo_img Adding demo script Sep 12, 2014
dependencies Adds vlfeat MEX compiled binaries; Being used by `rantalankilaSegments` May 22, 2015
edgeBoxes Removes compiled MEX binaries from git May 20, 2015
endres/proposals Removes compiled MEX binaries from git May 20, 2015
evaluation-metrics Update evaluateABO.m Apr 22, 2015
gop_1.3 Fixes namespace issues for `Proposal` and `Oversegmentation` (LPO & GOP) May 28, 2015
jsonlab_1.0beta Adding JSON decoding/encoding library Aug 28, 2014
lpo Adds updates from `philkr/lpo` Jun 7, 2015
mcg MCG boxes working properly Jan 23, 2016
objectness-release-v2.2 Fixes minor typo Feb 13, 2017
rahtu deleted segment file Nov 3, 2014
randomizedPrims Update calcrandomPrimForIm.m Nov 3, 2014
rantalankilaSegments Fix: Rantalankila does not return regions Dec 5, 2014
rigor Removes compiled MEX binaries from git May 20, 2015
selective_search Deleting unnecessary files Sep 30, 2014
utils Fixing paths, evaluation metric method parsing, and compilation proce… Sep 13, 2014
.gitignore Adds `config.json` to gitignore; Fixes indentation in May 20, 2015
ObjectProposals.m Having a common location for piotr dollar tool box and structured edges Oct 17, 2014
README.md Update README.md Jun 1, 2015
compile.m Update compile.m Feb 17, 2016
config.json.example Merge branch 'master' into lpo; Resolves merge conflicts May 27, 2015
demo.m Fixes `runObjectProposals` function call typos in `demo.m` May 21, 2015
evaluateMetricForProposal.m Adding missig file for eval metrics bug fixes Sep 26, 2014
initialize.m Update initialize.m Feb 17, 2016
runObjectProposals.m name change Nov 24, 2014

README.md

Object Proposals

This is a library/API which can be used to generate bounding box/region proposals using a large number of the existing object proposal approaches. If you use use our library, please cite our paper:

@misc{1505.05836,
    Author = {Neelima Chavali and Harsh Agrawal and Aroma Mahendru and Dhruv Batra},
    Title = {Object-Proposal Evaluation Protocol is 'Gameable'},
    Year = {2015},
    Eprint = {arXiv:1505.05836},
}
  • It is fully supported on Linux and partially supported on Mac OS.
  • Rigor, Randomized Prim are NOT supported on Mac OS.
  • Rigor requires installation of boost, tbb libraries.
  • Geodesic Object Proposals require c++11 compiler (C++ 4.7 or higher) and eigen (3.2 or higher).

Compiling

  1. Run compile.m

Generating Proposals

  1. Copy over config.json.example to config.json and set imageLocation and outputLocation.

  2. Initialize path variables.

initialize;
  1. Generate proposals, using either of the following commands.
proposals = runObjectProposals('<proposalname>', 'path\to\image.jpg');

OR 

im = imread('path\to\image.jpg');
proposals = runObjectProposals('<proposal name>', im);
  1. For long-running jobs, use the following command.
runObjectProposals('<proposalname>');

This will generate proposals for all the images in imageLocation and save the proposals in outputLocation.

<proposalname> is the object proposal to be run. List of possible object proposal names:

  • edgeBoxes [1]
  • endres [2]
  • mcg [3]
  • objectness [4]
  • rahtu [5]
  • randomPrim [6]
  • rantalankila [7]
  • selective_search [8]
  • rigor [9]
  • gop [10]
  • lpo [11]

Note

RIGOR requires boost and tbb libraries. Please follow the instructions given here to setup these libraries.

Evaluating Proposals

A ground truth file needs to be generated for the dataset. We have provided the file for PASCAL 2007 test set. The following code assumes you have generated proposals for all images in the dataset for which you want to evaluate for each proposal in your config.json file.

Evaluation using recall curves & area under recall curves

  1. Load ground truth.
testset=load('evaluation-metrics/data/pascal_gt_data.mat');
  1. Generate best recall candidates.
compute_best_recall_candidates(testset,configjson,'<proposalame>'); 

'proposalname' is an optional argument. If not provided, the function works for all the object proposals listed above.

  1. Plot RECALL/AUC curves.
evaluateMetricForProposal('RECALL','<proposalname>');
evaluateMetricForProposal('AUC','<proposalname');

OR

evaluateMetricForProposal('RECALL');   
evaluateMetricForProposal('AUC');

Evaluation using ABO curves

  1. Load ground truth.
testset=load('evaluation-metrics/data/pascal_gt_data.mat');
  1. Generate best recall candidates.
compute_abo_candidates(testset,configjson);
  1. Plot ABO curve.
evaluateMetricForProposal('ABO', '<proposalname');

OR

evaluateMetricForProposal('ABO');

Possible Issues

Linux

  • While running runObjectProposals('mcg'), you may get an error like
    Invalid MEX-file 'path/to/ucm_mean_pb.mexa64': /matlab/path/to/libstdc++.so.6: version GLIBCXX_3.4.15' not found. This issue is explained here. Possible workaround is to start MATLAB with "LD_PRELOAD=/path/to/libstdc++.so.6 matlab". Replace /path/to/libstdc++.so.6 with the system install location for libstdc++, usually something like /usr/lib/x86_64-linux-gnu/libstdc++.so.6.

License

The original license for each object proposal has been retained in their respective folders. Please refer to individual license before using the specific object proposal.

Citations

This package contains various object proposal implementations of the algorithms presented in the following papers. If you are using object proposals presented in these papers, we request you to cite appropriate papers:

[1] EdgeBoxes:

@inproceedings{ZitnickECCV14,
    Author = {C. Lawrence Zitnick and Piotr Dollar},
    Title = {Edge Boxes: Locating Object Proposals from Edges},
    Booktitle = {ECCV},
    Year = {2014},
}

License: edgeBoxes/releaseV3/license.txt (MICROSOFT RESEARCH LICENSE TERMS)

[2] Endres - Category Independent Object Proposals:

@article{EndresPAMI14,
    Author = {Ian Endres and Derek Hoiem},
    Title = {Category-Independent Object Proposals with Diverse Ranking},
    Journal ={IEEE Transactions on Pattern Analysis and Machine Intelligence},
    volume = {36},
    number = {2},
    issn = {0162-8828},
    year = {2014},
    pages = {222-234},
}

License: endres/proposals/README (GNU General Public License)

[3] MCG - Multiscale Combinatorial Grouping:

@inproceedings{Arbelaez_CVPR14,
    Author = {Arbel\'{a}ez, P. and Pont-Tuset, J. and Barron, J. and Marques,F. and Malik, J.},
    Title = {Multiscale Combinatorial Grouping},
    Booktitle = {CVPR},
    year = {2014}
}

License: mcg/MCG-Full/license.txt (BSD)

[4] Objectness:

@article{AlexePAMI12,
    Author = {Alexe, Bogdan and Deselaers, Thomas and Ferrari, Vittorio},
    Title = {Measuring the objectness of image windows },
    Journal ={IEEE Transactions on Pattern Analysis and Machine Intelligence},
    year = {2012},
}

License: objectness-release-v2.2/LICENSE.txt (rights to use, copy, modify, merge and distribute)

[5] Rahtu:

@inproceedings{RahtuICCV11,
    author    = {Esa Rahtu and Juho Kannala and Matthew B. Blaschko},
    title     = {Learning a category independent object detection cascade},
    booktitle = {ICCV},
    year      = {2011},
}

License: rahtu/rahtuObjectness/Licence.txt (MIT license)

[6] Randomized Prims:

@inproceedings{ManenICCV13,
     author = {Manen, Santiago and Guillaumin, Matthieu and Gool, Luc Van},
     title = {Prime Object Proposals with Randomized Prim's Algorithm},
     booktitle = {ICCV},
    year = {2013},
}

License: randomizedPrims/rp-master/LICENSE.txt (rights to use, copy, modify, merge and distribute)

[7] Rantalankila:

@inproceedings{RantalankilaCVPR14,
    author = {Rantalankila, Pekka and Kannala, Juho and Rahtu, Esa},
    title = {Generating Object Segmentation Proposals using Global and Local Search},
    booktitle = {CVPR},
    year = {2014}
}

License: rantalankilaSegments/Readme.txt (GNU General Public License)

[8] Selective Search:

@article{UijlingsIJCV13,
    author = {J.R.R. Uijlings and K.E.A. van de Sande and T. Gevers and A.W.M. Smeulders},
    title = {Selective Search for Object Recognition},
    journal = {International Journal of Computer Vision},
    year = {2013},
    url = {http://www.huppelen.nl/publications/selectiveSearchDraft.pdf}
}

License: selective_search/License.txt (Copyright University of Amsterdam)

[9] rigor:

@inproceedings{HumayunCVPR14,
     author    = {Ahmad Humayun and Fuxin Li and James M. Rehg},
     title = {RIGOR- Recycling Inference in Graph Cuts for generating Object Regions},
     booktitle = {CVPR},
     year = {2014}
    }

License: rigor/rigor_src/LICENSE (GNU General Public License)

[10] Geodesic Object Proposals:

@inproceedings{DBLP:conf/eccv/KrahenbuhlK14,
  author    = {Philipp Kr{\"{a}}henb{\"{u}}hl and
               Vladlen Koltun},
  title     = {Geodesic Object Proposals},
  booktitle = {Computer Vision - {ECCV} 2014 - 13th European Conference, Zurich,
               Switzerland, September 6-12, 2014, Proceedings, Part {V}},
  pages     = {725--739},
  year      = {2014}
}

License: BSD

[11] Learning to Propose Objects:

@inproceedings{kk-lpo-15,
  author    = {Philipp Kr{\"{a}}henb{\"{u}}hl and
               Vladlen Koltun},
  title     = {Learning to Propose Objects},
  booktitle = {CVPR},
  year      = {2015},
}

License: BSD

[12] Evaluation Metrics:

@inproceedings{HosangBMVC14,
    author = {J. Hosang and R. Benenson and B. Schiele},
    title = {How good are detection proposals, really?},
    booktitle = {BMVC},
    year = {2014}
}

License: evaluation-metrics/LICENSE (GNU General Public License)