-
Notifications
You must be signed in to change notification settings - Fork 462
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial bulk commit with the CRF-RNN code.
Caffe base code was taken from https://github.com/longjon/caffe/tree/future. Unfortunately, we were unable to directly fork from that repo and apply our patches since the two codebases have deviated too much now.
- Loading branch information
Showing
389 changed files
with
92,049 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# Contributors | ||
|
||
CRF-RNN specific code in this repository was written by: | ||
|
||
+ Sadeep Jayasumana ([email protected])<br/> | ||
+ Bernardino Romera-Paredes ([email protected])<br/> | ||
+ Shuai Zheng ([email protected])<br/> | ||
+ Zhizhong Su ([email protected]) | ||
|
||
Our code uses the [Permutohedral lattice library](http://graphics.stanford.edu/papers/permutohedral/), and the [Caffe future version](https://github.com/longjon/caffe/tree/future). | ||
We also used parts of the [Dense CRF code](http://www.philkr.net/home/densecrf) while implementing this. | ||
|
||
Permutohedral lattice library (BSD license) is from Andrew Adams, Jongmin Baek, Abe Davis. Fast High-Dimensional Filtering Using the | ||
Permutohedral Lattice. Eurographics 2010. | ||
DenseCRF library is from from Philipp Krahenbuhl and Vladlen Koltun. Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials. | ||
NIPS 2011. | ||
|
||
Our software is built on top of the Caffe software library. Below is a copy of its CONTRIBUTORS.md file. | ||
Please note that, due to technical difficulties, we could not keep the history of the original contributors to Caffe code in our git repository. | ||
Please refer to the original [Caffe git repository](https://github.com/BVLC/caffe) for this purpose. | ||
|
||
----------------------------------------------------------------------------------------------------------------- | ||
|
||
Caffe is developed by a core set of BVLC members and the open-source community. | ||
|
||
We thank all of our [contributors](https://github.com/BVLC/caffe/graphs/contributors)! | ||
|
||
**For the detailed history of contributions** of a given file, try | ||
|
||
git blame file | ||
|
||
to see line-by-line credits and | ||
|
||
git log --follow file | ||
|
||
to see the change log even across renames and rewrites. | ||
|
||
Please refer to the [acknowledgements](http://caffe.berkeleyvision.org/#acknowledgements) on the Caffe site for further details. | ||
|
||
**Copyright** is held by the original contributor according to the versioning history; see LICENSE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,121 @@ | ||
# crfasrnn | ||
This repository contains the source code for the semantic image segmentation method described in the ICCV 2015 paper: Conditional Random Fields as Recurrent Neural Networks. http://crfasrnn.torr.vision/ | ||
# CRF-RNN for Semantic Image Segmentation | ||
![sample](sample.png) | ||
|
||
<b>Live demo:</b> [http://crfasrnn.torr.vision](http://crfasrnn.torr.vision) | ||
|
||
This package contains code for the "CRF-RNN" semantic image segmentation method, published in the ICCV 2015 paper [Conditional Random Fields as Recurrent Neural Networks](http://www.robots.ox.ac.uk/~szheng/papers/CRFasRNN.pdf). Our software is built on top of the [Caffe](http://caffe.berkeleyvision.org/) deep learning library. The current version was developed by: | ||
|
||
[Sadeep Jayasumana](http://www.robots.ox.ac.uk/~sadeep/), | ||
[Shuai Zheng](http://kylezheng.org/), | ||
[Bernardino Romera Paredes](http://romera-paredes.com/), and | ||
[Zhizhong Su]([email protected]). | ||
|
||
Supervisor: [Philip Torr](http://www.robots.ox.ac.uk/~tvg/) | ||
|
||
Our work allows computers to recognize objects in images, what is distinctive about our work is that we also recover the 2D outline of the object. | ||
|
||
Currently we have trained this model to recognize 20 classes. This software allows you to test our algorithm on your own images – have a try and see if you can fool it, if you get some good examples you can send them to us. | ||
|
||
Why are we doing this? This work is part of a project to build augmented reality glasses for the partially sighted. Please read about it here: [smart-specs](http://www.va-st.com/smart-specs/). | ||
|
||
For demo and more information about CRF-RNN please visit the project website <http://crfasrnn.torr.vision>. | ||
|
||
If you use this code/model for your research, please consider citing the following paper: | ||
``` | ||
@inproceedings{crfasrnn_ICCV2015, | ||
author = {Shuai Zheng and Sadeep Jayasumana and Bernardino Romera-Paredes and Vibhav Vineet and Zhizhong Su and Dalong Du and Chang Huang and Philip H. S. Torr}, | ||
title = {Conditional Random Fields as Recurrent Neural Networks}, | ||
booktitle = {International Conference on Computer Vision (ICCV)}, | ||
year = {2015} | ||
} | ||
``` | ||
|
||
|
||
#Installation Guide | ||
|
||
You need to compile the modified Caffe library in this repository. Instructions for Ubuntu 14.04 are included below. You can also consult the generic [Caffe installation guide](http://caffe.berkeleyvision.org/installation.html). | ||
|
||
|
||
###1.1 Install dependencies | ||
#####General dependencies | ||
``` | ||
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler | ||
sudo apt-get install --no-install-recommends libboost-all-dev | ||
``` | ||
|
||
#####CUDA | ||
Install CUDA correct driver and its SDK. Download CUDA SDK from Nvidia website. | ||
|
||
In Ubuntu 14.04. You need to make sure the required tools are installed. You might need to blacklist the required modules so that they do not interfere with the driver installation. You also need to uninstall your default Nvidia Driver first. | ||
``` | ||
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev | ||
``` | ||
open /etc/modprobe.d/blacklist.conf and add: | ||
``` | ||
blacklist amd76x_edac | ||
blacklist vga16fb | ||
blacklist nouveau | ||
blacklist rivafb | ||
blacklist nvidiafb | ||
blacklist rivatv | ||
``` | ||
``` | ||
sudo apt-get remove --purge nvidia* | ||
``` | ||
|
||
When you restart your PC, before loging in, try "Ctrl+Alt+F1" switch to a text-based login. Try: | ||
``` | ||
sudo service lightdm stop | ||
chmod +x cuda*.run | ||
sudo ./cuda*.run | ||
``` | ||
|
||
#####BLAS | ||
Install ATLAS or OpenBLAS or MKL. | ||
|
||
#####Python | ||
Install Anaconda Python distribution or install the default Python distribution with numpy/scipy/... | ||
|
||
#####MATLAB (optional) | ||
Install MATLAB using a standard distribution. | ||
|
||
###1.2 Build the custom Caffe version | ||
Set the path correctly in the Makefile.config. You can copy the Makefile.config.example to Makefile.config, as most common parts are filled already. You need to change it according to your environment. | ||
|
||
After this, in Ubuntu 14.04, try: | ||
``` | ||
make | ||
``` | ||
|
||
If there are no error messages, you can then compile and install the python and matlab wrappers: | ||
``` | ||
make matcaffe | ||
``` | ||
|
||
``` | ||
make pycaffe | ||
``` | ||
|
||
That's it! Enjoy our software! | ||
|
||
|
||
###1.3 Run the demo | ||
Matlab and Python scripts for running the demo are available in the matlab-scripts and python-scripts directories, respectively. You can choose either of them. Note that you should change the paths in the scripts according your environment. | ||
|
||
# LICENSE | ||
CRF-RNN feature in Caffe is implemented for the paper: | ||
Shuai Zheng, Sadeep Jayasumana, Bernardino Romera-Paredes, Vibhav Vineet, Zhizhong Su, Dalong Du, Chang Huang, Philip H. S. Torr. | ||
Conditional Random Fields as Recurrent Neural Networks. IEEE ICCV 2015. | ||
|
||
Shuai Zheng, Sadeep Jayasumana, Bernardino Romera-Paredes, and Philip H. S. Torr are with University of Oxford. | ||
Vibhav Vineet did this work when he was with the University of Oxford, he is now with the Stanford University. | ||
Zhizhong Su, Dalong Du, Chang Huang are with the Baidu Institute of Deep Learning (IDL). | ||
|
||
CRF-RNN uses the Permutohedral lattice library, the DenseCRF library and the Caffe future version. | ||
|
||
Permutohedral lattice library (BSD license) is from Andrew Adams, Jongmin Baek, Abe Davis. Fast High-Dimensional Filtering Using the | ||
Permutohedral Lattice. Eurographics 2010. | ||
DenseCRF library from Philipp Krahenbuhl and Vladlen Koltun. Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials. | ||
NIPS 2011. | ||
|
||
For more information about CRF-RNN please vist the project website http://crfasrnn.torr.vision. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
cmake_minimum_required(VERSION 2.8.7) | ||
|
||
# ---[ Caffe project | ||
project(Caffe C CXX) | ||
|
||
# ---[ Using cmake scripts and modules | ||
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules) | ||
|
||
include(ExternalProject) | ||
|
||
include(cmake/Utils.cmake) | ||
include(cmake/Targets.cmake) | ||
include(cmake/Misc.cmake) | ||
include(cmake/Summary.cmake) | ||
include(cmake/ConfigGen.cmake) | ||
|
||
# ---[ Options | ||
caffe_option(CPU_ONLY "Build Caffe without CUDA support" OFF) # TODO: rename to USE_CUDA | ||
caffe_option(USE_CUDNN "Build Caffe with cuDNN libary support" ON IF NOT CPU_ONLY) | ||
caffe_option(BUILD_SHARED_LIBS "Build shared libraries" ON) | ||
caffe_option(BUILD_python "Build Python wrapper" ON) | ||
set(python_version "2" CACHE STRING "Specify which python version to use") | ||
caffe_option(BUILD_matlab "Build Matlab wrapper" OFF IF UNIX OR APPLE) | ||
caffe_option(BUILD_docs "Build documentation" ON IF UNIX OR APPLE) | ||
caffe_option(BUILD_python_layer "Build the Caffe python layer" ON) | ||
|
||
# ---[ Dependencies | ||
include(cmake/Dependencies.cmake) | ||
|
||
# ---[ Flags | ||
if(UNIX OR APPLE) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall") | ||
endif() | ||
|
||
if(USE_libstdcpp) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++") | ||
message("-- Warning: forcing libstdc++ (controlled by USE_libstdcpp option in cmake)") | ||
endif() | ||
|
||
add_definitions(-DGTEST_USE_OWN_TR1_TUPLE) | ||
|
||
# ---[ Warnings | ||
caffe_warnings_disable(CMAKE_CXX_FLAGS -Wno-sign-compare -Wno-uninitialized) | ||
|
||
# ---[ Config generation | ||
configure_file(cmake/Templates/caffe_config.h.in "${PROJECT_BINARY_DIR}/caffe_config.h") | ||
|
||
# ---[ Includes | ||
set(Caffe_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include) | ||
include_directories(${Caffe_INCLUDE_DIR} ${PROJECT_BINARY_DIR}) | ||
include_directories(BEFORE src) # This is needed for gtest. | ||
|
||
# ---[ Subdirectories | ||
add_subdirectory(src/gtest) | ||
add_subdirectory(src/caffe) | ||
add_subdirectory(tools) | ||
add_subdirectory(examples) | ||
add_subdirectory(python) | ||
add_subdirectory(matlab) | ||
add_subdirectory(docs) | ||
|
||
# ---[ Linter target | ||
add_custom_target(lint COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/cmake/lint.cmake) | ||
|
||
# ---[ pytest target | ||
add_custom_target(pytest COMMAND python${python_version} -m unittest discover -s caffe/test WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/python ) | ||
add_dependencies(pytest pycaffe) | ||
|
||
# ---[ Configuration summary | ||
caffe_print_configuration_summary() | ||
|
||
# ---[ Export configs generation | ||
caffe_generate_export_configs() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# Find the Atlas (and Lapack) libraries | ||
# | ||
# The following variables are optionally searched for defaults | ||
# Atlas_ROOT_DIR: Base directory where all Atlas components are found | ||
# | ||
# The following are set after configuration is done: | ||
# Atlas_FOUND | ||
# Atlas_INCLUDE_DIRS | ||
# Atlas_LIBRARIES | ||
# Atlas_LIBRARYRARY_DIRS | ||
|
||
set(Atlas_INCLUDE_SEARCH_PATHS | ||
/usr/include/atlas | ||
/usr/include/atlas-base | ||
$ENV{Atlas_ROOT_DIR} | ||
$ENV{Atlas_ROOT_DIR}/include | ||
) | ||
|
||
set(Atlas_LIB_SEARCH_PATHS | ||
/usr/lib/atlas | ||
/usr/lib/atlas-base | ||
$ENV{Atlas_ROOT_DIR} | ||
$ENV{Atlas_ROOT_DIR}/lib | ||
) | ||
|
||
find_path(Atlas_CBLAS_INCLUDE_DIR NAMES cblas.h PATHS ${Atlas_INCLUDE_SEARCH_PATHS}) | ||
find_path(Atlas_CLAPACK_INCLUDE_DIR NAMES clapack.h PATHS ${Atlas_INCLUDE_SEARCH_PATHS}) | ||
find_library(Atlas_CBLAS_LIBRARY NAMES ptcblas_r ptcblas cblas_r cblas PATHS ${Atlas_LIB_SEARCH_PATHS}) | ||
find_library(Atlas_BLAS_LIBRARY NAMES atlas_r atlas PATHS ${Atlas_LIB_SEARCH_PATHS}) | ||
find_library(Atlas_LAPACK_LIBRARY NAMES alapack_r alapack lapack_atlas PATHS ${Atlas_LIB_SEARCH_PATHS}) | ||
|
||
set(LOOKED_FOR | ||
|
||
Atlas_CBLAS_INCLUDE_DIR | ||
Atlas_CLAPACK_INCLUDE_DIR | ||
|
||
Atlas_CBLAS_LIBRARY | ||
Atlas_BLAS_LIBRARY | ||
Atlas_LAPACK_LIBRARY | ||
) | ||
|
||
include(FindPackageHandleStandardArgs) | ||
find_package_handle_standard_args(Atlas DEFAULT_MSG ${LOOKED_FOR}) | ||
|
||
if(ATLAS_FOUND) | ||
|
||
mark_as_advanced(${LOOKED_FOR}) | ||
|
||
set(Atlas_INCLUDE_DIR | ||
${Atlas_CBLAS_INCLUDE_DIR} | ||
${Atlas_CLAPACK_INCLUDE_DIR} | ||
) | ||
|
||
set(Atlas_LIBRARIES | ||
${Atlas_LAPACK_LIBRARY} | ||
${Atlas_CBLAS_LIBRARY} | ||
${Atlas_BLAS_LIBRARY} | ||
) | ||
|
||
endif(ATLAS_FOUND) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
# - Try to find GFLAGS | ||
# | ||
# The following variables are optionally searched for defaults | ||
# GFLAGS_ROOT_DIR: Base directory where all GFLAGS components are found | ||
# | ||
# The following are set after configuration is done: | ||
# GFLAGS_FOUND | ||
# GFLAGS_INCLUDE_DIRS | ||
# GFLAGS_LIBRARIES | ||
# GFLAGS_LIBRARYRARY_DIRS | ||
|
||
include(FindPackageHandleStandardArgs) | ||
|
||
set(GFLAGS_ROOT_DIR "" CACHE PATH "Folder contains Gflags") | ||
|
||
# We are testing only a couple of files in the include directories | ||
if(WIN32) | ||
find_path(GFLAGS_INCLUDE_DIR gflags/gflags.h | ||
PATHS ${GFLAGS_ROOT_DIR}/src/windows) | ||
else() | ||
find_path(GFLAGS_INCLUDE_DIR gflags/gflags.h | ||
PATHS ${GFLAGS_ROOT_DIR}) | ||
endif() | ||
|
||
if(MSVC) | ||
find_library(GFLAGS_LIBRARY_RELEASE | ||
NAMES libgflags | ||
PATHS ${GFLAGS_ROOT_DIR} | ||
PATH_SUFFIXES Release) | ||
|
||
find_library(GFLAGS_LIBRARY_DEBUG | ||
NAMES libgflags-debug | ||
PATHS ${GFLAGS_ROOT_DIR} | ||
PATH_SUFFIXES Debug) | ||
|
||
set(GFLAGS_LIBRARY optimized ${GFLAGS_LIBRARY_RELEASE} debug ${GFLAGS_LIBRARY_DEBUG}) | ||
else() | ||
find_library(GFLAGS_LIBRARY gflags) | ||
endif() | ||
|
||
find_package_handle_standard_args(GFLAGS DEFAULT_MSG | ||
GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY) | ||
|
||
|
||
if(GFLAGS_FOUND) | ||
set(GFLAGS_INCLUDE_DIRS ${GFLAGS_INCLUDE_DIR}) | ||
set(GFLAGS_LIBRARIES ${GFLAGS_LIBRARY}) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
# - Try to find Glog | ||
# | ||
# The following variables are optionally searched for defaults | ||
# GLOG_ROOT_DIR: Base directory where all GLOG components are found | ||
# | ||
# The following are set after configuration is done: | ||
# GLOG_FOUND | ||
# GLOG_INCLUDE_DIRS | ||
# GLOG_LIBRARIES | ||
# GLOG_LIBRARYRARY_DIRS | ||
|
||
include(FindPackageHandleStandardArgs) | ||
|
||
set(GLOG_ROOT_DIR "" CACHE PATH "Folder contains Google glog") | ||
|
||
if(WIN32) | ||
find_path(GLOG_INCLUDE_DIR glog/logging.h | ||
PATHS ${GLOG_ROOT_DIR}/src/windows) | ||
else() | ||
find_path(GLOG_INCLUDE_DIR glog/logging.h | ||
PATHS ${GLOG_ROOT_DIR}) | ||
endif() | ||
|
||
if(MSVC) | ||
find_library(GLOG_LIBRARY_RELEASE libglog_static | ||
PATHS ${GLOG_ROOT_DIR} | ||
PATH_SUFFIXES Release) | ||
|
||
find_library(GLOG_LIBRARY_DEBUG libglog_static | ||
PATHS ${GLOG_ROOT_DIR} | ||
PATH_SUFFIXES Debug) | ||
|
||
set(GLOG_LIBRARY optimized ${GLOG_LIBRARY_RELEASE} debug ${GLOG_LIBRARY_DEBUG}) | ||
else() | ||
find_library(GLOG_LIBRARY glog | ||
PATHS ${GLOG_ROOT_DIR} | ||
PATH_SUFFIXES | ||
lib | ||
lib64) | ||
endif() | ||
|
||
find_package_handle_standard_args(GLOG DEFAULT_MSG | ||
GLOG_INCLUDE_DIR GLOG_LIBRARY) | ||
|
||
if(GLOG_FOUND) | ||
set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR}) | ||
set(GLOG_LIBRARIES ${GLOG_LIBRARY}) | ||
endif() |
Oops, something went wrong.