From 32dd5b0d27de3b90a8b1134385d1fc9a35b0c344 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.anjos@idiap.ch>
Date: Wed, 13 Jul 2016 15:29:30 +0200
Subject: [PATCH] [doc] Better docs

---
 bob/bio/vein/algorithms/__init__.py           |   4 +
 bob/bio/vein/configurations/algorithms.py     |   2 +-
 bob/bio/vein/configurations/extractors/lbp.py |   2 +-
 .../extractors/maximum_curvature.py           |   2 +-
 .../extractors/normalised_crosscorr.py        |   2 +-
 .../extractors/repeated_line_tracking.py      |   2 +-
 .../extractors/wide_line_detector.py          |   2 +-
 .../finger_crop_None_CircGabor.py             |   2 +-
 .../preprocessors/finger_crop_None_HE.py      |   2 +-
 .../preprocessors/finger_crop_None_HFE.py     |   2 +-
 .../preprocessors/finger_crop_None_None.py    |   2 +-
 .../vein/extractors/LocalBinaryPatterns.py    |   2 +-
 bob/bio/vein/extractors/PrincipalCurvature.py |  10 +-
 bob/bio/vein/extractors/__init__.py           |   8 +
 bob/bio/vein/preprocessors/__init__.py        |   4 +
 doc/api.rst                                   |   8 +-
 doc/baselines.rst                             | 245 ++++++++++++++++++
 doc/conf.py                                   |  58 +++--
 doc/index.rst                                 |   2 +-
 doc/references.rst                            |   6 +-
 requirements.txt                              |   1 +
 setup.py                                      |   2 +-
 22 files changed, 319 insertions(+), 51 deletions(-)
 create mode 100644 doc/baselines.rst

diff --git a/bob/bio/vein/algorithms/__init__.py b/bob/bio/vein/algorithms/__init__.py
index e69de29..44ed84f 100644
--- a/bob/bio/vein/algorithms/__init__.py
+++ b/bob/bio/vein/algorithms/__init__.py
@@ -0,0 +1,4 @@
+from .MiuraMatch import MiuraMatch
+
+# gets sphinx autodoc done right - don't remove it
+__all__ = [_ for _ in dir() if not _.startswith('_')]
diff --git a/bob/bio/vein/configurations/algorithms.py b/bob/bio/vein/configurations/algorithms.py
index a85508e..483949b 100644
--- a/bob/bio/vein/configurations/algorithms.py
+++ b/bob/bio/vein/configurations/algorithms.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ..algorithms.MiuraMatch import MiuraMatch
+from ..algorithms import MiuraMatch
 
 huangwl_tool = MiuraMatch(ch=18, cw=28)
 huangwl_gpu_tool = MiuraMatch(ch=18, cw=28, gpu=True)
diff --git a/bob/bio/vein/configurations/extractors/lbp.py b/bob/bio/vein/configurations/extractors/lbp.py
index a0fed21..7d39059 100644
--- a/bob/bio/vein/configurations/extractors/lbp.py
+++ b/bob/bio/vein/configurations/extractors/lbp.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ...extractors.LocalBinaryPatterns import LocalBinaryPatterns
+from ...extractors import LocalBinaryPatterns
 
 # Parameters
 
diff --git a/bob/bio/vein/configurations/extractors/maximum_curvature.py b/bob/bio/vein/configurations/extractors/maximum_curvature.py
index 673a19c..a5eed57 100644
--- a/bob/bio/vein/configurations/extractors/maximum_curvature.py
+++ b/bob/bio/vein/configurations/extractors/maximum_curvature.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ...extractors.MaximumCurvature import MaximumCurvature
+from ...extractors import MaximumCurvature
 
 
 # Parameters
diff --git a/bob/bio/vein/configurations/extractors/normalised_crosscorr.py b/bob/bio/vein/configurations/extractors/normalised_crosscorr.py
index c20af9f..8d3166e 100644
--- a/bob/bio/vein/configurations/extractors/normalised_crosscorr.py
+++ b/bob/bio/vein/configurations/extractors/normalised_crosscorr.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ...extractors.NormalisedCrossCorrelation import NormalisedCrossCorrelation
+from ...extractors import NormalisedCrossCorrelation
 
 feature_extractor = NormalisedCrossCorrelation()
diff --git a/bob/bio/vein/configurations/extractors/repeated_line_tracking.py b/bob/bio/vein/configurations/extractors/repeated_line_tracking.py
index 8910254..0d22b40 100644
--- a/bob/bio/vein/configurations/extractors/repeated_line_tracking.py
+++ b/bob/bio/vein/configurations/extractors/repeated_line_tracking.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ...extractors.RepeatedLineTracking import RepeatedLineTracking
+from ...extractors import RepeatedLineTracking
 
 # Maximum number of iterations
 NUMBER_ITERATIONS = 3000
diff --git a/bob/bio/vein/configurations/extractors/wide_line_detector.py b/bob/bio/vein/configurations/extractors/wide_line_detector.py
index d805aae..d838c9f 100644
--- a/bob/bio/vein/configurations/extractors/wide_line_detector.py
+++ b/bob/bio/vein/configurations/extractors/wide_line_detector.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ...extractors.WideLineDetector import WideLineDetector
+from ...extractors import WideLineDetector
 
 # Radius of the circular neighbourhood region
 RADIUS_NEIGHBOURHOOD_REGION = 5
diff --git a/bob/bio/vein/configurations/preprocessors/finger_crop_None_CircGabor.py b/bob/bio/vein/configurations/preprocessors/finger_crop_None_CircGabor.py
index 27f8bfe..909a31e 100644
--- a/bob/bio/vein/configurations/preprocessors/finger_crop_None_CircGabor.py
+++ b/bob/bio/vein/configurations/preprocessors/finger_crop_None_CircGabor.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ...preprocessors.FingerCrop import FingerCrop
+from ...preprocessors import FingerCrop
 
 # Contour localization mask
 CONTOUR_MASK_HEIGHT = 4 # Height of the mask
diff --git a/bob/bio/vein/configurations/preprocessors/finger_crop_None_HE.py b/bob/bio/vein/configurations/preprocessors/finger_crop_None_HE.py
index 87f12bc..8b317a7 100644
--- a/bob/bio/vein/configurations/preprocessors/finger_crop_None_HE.py
+++ b/bob/bio/vein/configurations/preprocessors/finger_crop_None_HE.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ...preprocessors.FingerCrop import FingerCrop
+from ...preprocessors import FingerCrop
 
 # Contour localization mask
 CONTOUR_MASK_HEIGHT = 4 # Height of the mask
diff --git a/bob/bio/vein/configurations/preprocessors/finger_crop_None_HFE.py b/bob/bio/vein/configurations/preprocessors/finger_crop_None_HFE.py
index 064644e..e12d1f3 100644
--- a/bob/bio/vein/configurations/preprocessors/finger_crop_None_HFE.py
+++ b/bob/bio/vein/configurations/preprocessors/finger_crop_None_HFE.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ...preprocessors.FingerCrop import FingerCrop
+from ...preprocessors import FingerCrop
 
 
 # Contour localization mask
diff --git a/bob/bio/vein/configurations/preprocessors/finger_crop_None_None.py b/bob/bio/vein/configurations/preprocessors/finger_crop_None_None.py
index bebd4b8..9366aa6 100644
--- a/bob/bio/vein/configurations/preprocessors/finger_crop_None_None.py
+++ b/bob/bio/vein/configurations/preprocessors/finger_crop_None_None.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 
-from ...preprocessors.FingerCrop import FingerCrop
+from ...preprocessors import FingerCrop
 
 
 # Contour localization mask
diff --git a/bob/bio/vein/extractors/LocalBinaryPatterns.py b/bob/bio/vein/extractors/LocalBinaryPatterns.py
index c799c56..0f24c65 100644
--- a/bob/bio/vein/extractors/LocalBinaryPatterns.py
+++ b/bob/bio/vein/extractors/LocalBinaryPatterns.py
@@ -13,7 +13,7 @@ class LocalBinaryPatterns (Extractor):
   """LBP feature extractor
 
   Parameters fixed based on L. Mirmohamadsadeghi and A. Drygajlo. Palm vein
-  recognition uisng local texture patterns, IET Biometrics, pp. 1-9, 2013.
+  recognition using local texture patterns, IET Biometrics, pp. 1-9, 2013.
   """
 
   def __init__(
diff --git a/bob/bio/vein/extractors/PrincipalCurvature.py b/bob/bio/vein/extractors/PrincipalCurvature.py
index 17b33d5..83d97b2 100644
--- a/bob/bio/vein/extractors/PrincipalCurvature.py
+++ b/bob/bio/vein/extractors/PrincipalCurvature.py
@@ -5,10 +5,10 @@ import numpy
 
 import bob.io.base
 
-from bob.bio.base.features.Extractor import Extractor
+from bob.bio.base.extractor import Extractor
 
 
-class MaximumCurvature (Extractor):
+class PrincipalCurvature (Extractor):
   """MiuraMax feature extractor
 
   Based on J.H. Choi, W. Song, T. Kim, S.R. Lee and H.C. Kim, Finger vein
@@ -60,7 +60,7 @@ class MaximumCurvature (Extractor):
     gy[indices] = 0
 
     # Normalize
-    Gmag( find(Gmag == 0) ) = 1  # Avoid dividing by zero
+    Gmag[find[Gmag==0]] = 1  # Avoid dividing by zero
     gx = gx/Gmag
     gy = gy/Gmag
 
@@ -72,8 +72,8 @@ class MaximumCurvature (Extractor):
     veins = lambda1*finger_mask
 
     # Normalise
-    veins = veins - min(veins(:))
-    veins = veins/max(veins(:))
+    veins = veins - min(veins[:])
+    veins = veins/max(veins[:])
 
     veins = veins*finger_mask
 
diff --git a/bob/bio/vein/extractors/__init__.py b/bob/bio/vein/extractors/__init__.py
index e69de29..2972d22 100644
--- a/bob/bio/vein/extractors/__init__.py
+++ b/bob/bio/vein/extractors/__init__.py
@@ -0,0 +1,8 @@
+from .LocalBinaryPatterns import LocalBinaryPatterns
+from .NormalisedCrossCorrelation import NormalisedCrossCorrelation
+from .PrincipalCurvature import PrincipalCurvature
+from .RepeatedLineTracking import RepeatedLineTracking
+from .WideLineDetector import WideLineDetector
+
+# gets sphinx autodoc done right - don't remove it
+__all__ = [_ for _ in dir() if not _.startswith('_')]
diff --git a/bob/bio/vein/preprocessors/__init__.py b/bob/bio/vein/preprocessors/__init__.py
index e69de29..41d1e04 100644
--- a/bob/bio/vein/preprocessors/__init__.py
+++ b/bob/bio/vein/preprocessors/__init__.py
@@ -0,0 +1,4 @@
+from .FingerCrop import FingerCrop
+
+# gets sphinx autodoc done right - don't remove it
+__all__ = [_ for _ in dir() if not _.startswith('_')]
diff --git a/doc/api.rst b/doc/api.rst
index 1516ea2..5dd9638 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -10,14 +10,14 @@ This section contains a listing of all functionality available on this library
 which can be used for vein experiments.
 
 
-Pre-configured Databases
-------------------------
+Databases
+---------
 
 .. automodule:: bob.bio.vein.configurations.databases
 
 
-Preprocessors
--------------
+Pre-processors
+--------------
 
 .. automodule:: bob.bio.vein.preprocessors
 
diff --git a/doc/baselines.rst b/doc/baselines.rst
new file mode 100644
index 0000000..ed54997
--- /dev/null
+++ b/doc/baselines.rst
@@ -0,0 +1,245 @@
+.. vim: set fileencoding=utf-8 :
+.. date: Thu Sep 20 11:58:57 CEST 2012
+
+.. _bob.bio.vein.baselines:
+
+.. warning::
+
+   This document was copied from ``bob.bio.spear`` and is not updated. We're
+   working on it. Please don't use it as of now.
+
+
+===============================
+ Executing Baseline Algorithms
+===============================
+
+The first thing you might want to do is to execute one of the vein
+recognition algorithms that are implemented in ``bob.bio.vein``.
+
+
+Setting up your Database
+------------------------
+
+For example, you can easily download the audio samples of the `PUT`_
+database.
+
+By default, ``bob.bio.vein`` does not know, where the original database files
+are located. Hence, before running experiments you have to specify the raw
+database directories. How this is done is explained in more detail in the
+:ref:`bob.bio.base.installation`.
+
+
+Running Baseline Experiments
+----------------------------
+
+To run the baseline experiments, you can use the ``./bin/verify.py`` script by
+just going to the console and typing:
+
+.. code-block:: sh
+
+   $ ./bin/verify.py
+
+
+This script is explained in more detail in :ref:`bob.bio.base.experiments`.
+The ``./bin/verify.py --help`` option shows you, which other options you have.
+Here is an almost complete extract:
+
+* ``--database``: The database and protocol you want to use.
+* ``--algorithms``: The recognition algorithms that you want to execute.
+* ``--all``: Execute all algorithms that are implemented.
+* ``--temp-directory``: The directory where temporary files of the experiments
+  are put to.
+* ``--result-directory``: The directory where resulting score files of the
+  experiments are put to.
+* ``--evaluate``: After running the experiments, the resulting score files will
+  be evaluated, and the result is written to console.
+* ``--dry-run``: Instead of executing the algorithm (or the evaluation), only
+  print the command that would have been executed.
+* ``--verbose``: Increase the verbosity level of the script.
+  By default, only the commands that are executed are printed, and the rest of
+  the calculation runs quietly. You can increase the verbosity by adding the
+  ``--verbose`` parameter repeatedly (up to three times).
+
+Usually it is a good idea to have at least verbose level 2 (i.e., calling
+``./bin/verify.py --verbose --verbose``, or the short version
+``./bin/verify.py -vv``).
+
+
+Running in Parallel
+~~~~~~~~~~~~~~~~~~~
+
+To run the experiments in parallel, as usual, you can define an SGE grid
+configuration, or run with parallel threads on the local machine.  For the
+``./bin/verify.py`` script, the grid configuration is adapted to each of the
+algorithms.  Hence, to run in the SGE grid, you can simply add the ``--grid``
+command line option, without parameters.  Similarly, to run the experiments in
+parallel on the local machine, simply add a ``--parallel <N>`` option, where
+``<N>`` specifies the number of parallel jobs you want to execute.
+
+
+The Algorithms
+--------------
+
+The algorithms present a set of state-of-the-art vein recognition algorithms.
+Here is the list of short-cuts:
+
+* ``gmm``: *Gaussian Mixture Models* (GMM) `[Rey00]`.
+
+  - algorithm : :py:class:`bob.bio.gmm.algorithm.GMM`
+
+* ``isv``: As an extension of the GMM algorithm, *Inter-Session Variability* (ISV) modeling `[Vogt08]` is used to learn what variations in samples are introduced by identity changes and which not.
+
+  - algorithm : :py:class:`bob.bio.gmm.algorithm.ISV`
+
+* ``ivector``: Another extension of the GMM algorithm is *Total Variability* (TV) modeling `[Dehak11]` (aka. I-Vector), which tries to learn a subspace in the GMM super-vector space.
+
+  - algorithm : :py:class:`bob.bio.gmm.algorithm.IVector`
+
+.. note::
+  The ``ivector`` algorithm needs a lot of training data and fails on small databases such as the `Voxforge`_ database.
+
+
+Evaluation Results
+------------------
+
+To evaluate the results,  one can use ``./bin/evaluate.py`` command.  Several
+types of evaluation can be achieved, see :ref:`bob.bio.base.evaluate` for
+details.  Particularly, here we can enable ROC curves, DET plots, CMC curves
+and the computation of EER/HTER or minDCF.
+
+
+Experiments on different databases
+----------------------------------
+
+To make you more familiar with the tool, we provide you examples of different
+toolchains applied on different databases: Voxforge, BANCA, TIMIT, MOBIO, and
+NIST SRE 2012.
+
+`Voxforge`_ is a free database used in free speech recognition engines. We
+randomly selected a small part of the english corpus (< 1GB).  It is used as a
+toy example for our speaker recognition tool since experiment can be easily run
+on a local machine, and the results can be obtained in a reasonnable amount of
+time (< 2h).
+
+Unlike TIMIT and BANCA, this dataset is completely free of charge.
+
+More details about how to download the audio files used in our experiments, and
+how the data is split into Training, Development and Evaluation set can be
+found here::
+
+  https://pypi.python.org/pypi/bob.db.putvein
+
+One example of command line is::
+
+  $ bin/verify.py  -d putvein -p energy-2gauss -e mfcc-60 -a gmm-voxforge -s ubm_gmm --groups {dev,eval}
+
+
+In this example, we used the following configuration:
+
+* Energy-based VAD,
+* (19 MFCC features + Energy) + First and second derivatives,
+* **UBM-GMM** Modelling (with 256 Gaussians), the scoring is done using the linear approximation of the LLR.
+
+The performance of the system on DEV and EVAL are:
+
+* ``DEV: EER = 1.89%``
+* ``EVAL: HTER = 1.56%``
+
+If you want to run the same experiment on SGE::
+
+  $ bin/verify.py  -d voxforge -p energy-2gauss -e mfcc-60 -a gmm-voxforge -s ubm_gmm --groups {dev,eval}  -g grid
+
+
+If you want to run the parallel implementation of the UBM on the SGE::
+
+  $ bin/verify_gmm.py  -d voxforge -p energy-2gauss -e mfcc-60 -a gmm-voxforge -s ubm_gmm_sge --groups {dev,eval} -g grid
+
+
+If you want to run the parallel implementation of the UBM on your local machine::
+
+  $ bin/verify_gmm.py  -d voxforge -p energy-2gauss -e mfcc-60 -a gmm-voxforge -s ubm_gmm_local --groups {dev,eval} -g local
+
+Another example is to use **ISV** toolchain instead of UBM-GMM::
+
+  $ bin/verify.py  -d voxforge -p energy-2gauss -e mfcc-60 -a isv-voxforge -s isv --groups {dev,eval} -g grid
+
+* ``DEV: EER = 1.41%``
+* ``EVAL: HTER = 1.52%``
+
+One can also try **JFA** toolchain::
+
+  $  bin/verify.py  -d voxforge -p energy-2gauss -e mfcc-60 -a jfa-voxforge -s jfa --groups {dev,eval} -g grid
+
+* ``DEV: EER = 4.04%``
+* ``EVAL: HTER = 5.11%``
+
+or also **IVector** toolchain where **Whitening, L-Norm, LDA, WCCN** are used like in this example where the score computation is done using **Cosine distance**::
+
+  $  bin/verify.py  -d voxforge -p energy-2gauss -e mfcc-60 -a ivec-cosine-voxforge -s ivec-cosine --groups {dev,eval} -g grid
+
+* ``DEV: EER = 7.33%``
+* ``EVAL: HTER = 13.80%``
+
+The scoring computation can also be done using **PLDA**::
+
+  $ bin/verify.py  -d voxforge -p energy-2gauss -e mfcc-60 -a ivec-plda-voxforge -s ivec-plda --groups {dev,eval} -g grid
+
+* ``DEV: EER = 11.33%``
+* ``EVAL: HTER = 13.15%``
+
+
+Note that in the previous examples, our goal is not to optimize the parameters on the DEV set but to provide examples of use.
+
+2. BANCA dataset
+~~~~~~~~~~~~~~~~
+`BANCA`_ is a simple bimodal database with relatively clean data. The results are already very good with a simple baseline UBM-GMM system. An example of use can be::
+
+  $ bin/verify.py -vv -d banca-audio -p energy-2gauss -e mfcc-60 -a gmm-banca -s banca_G --groups {dev,eval}
+
+The configuration in this example is similar to the previous one with the only difference of using the regular LLR instead of its linear approximation.
+
+Here is the performance of this system:
+
+* ``DEV: EER = 0.91%``
+* ``EVAL: EER = 0.75%``
+
+
+3. TIMIT dataset
+~~~~~~~~~~~~~~~~
+`TIMIT`_ is one of the oldest databases (year 1993) used to evaluate speaker recognition systems. In the following example, the processing is done on the development set, and LFCC features are used::
+
+  $ bin/verify.py -vv -d timit -p energy-2gauss -e lfcc-60 -a gmm-timit -s timit
+
+Here is the performance of the system on the Development set:
+
+* ``DEV: EER = 2.68%``
+
+
+MOBIO dataset
+~~~~~~~~~~~~~
+
+This is a more challenging database. The noise and the short duration of the segments make the task of speaker recognition relatively difficult. The following experiment on male group (Mobile-0) uses the 4Hz modulation energy based VAD, and the ISV (with dimU=50) modelling technique::
+
+  $ bin/verify_isv.py -vv -d mobio-audio-male -p mod-4hz -e mfcc-60 -a isv-mobio -s isv --groups {dev,eval} -g demanding
+
+Here is the performance of this system:
+
+* ``DEV: EER = 13.81%``
+* ``EVAL: HTER = 10.90%``
+
+To generate the results presented in the ICASSP 2014 paper, please check the script included in the `icassp` folder of the toolbox.
+Note that the MOBIO dataset has different protocols, and that are all implemented in `bob.db.mobio`_. But in this toolbox, we provide separately mobile-0 protocol (into filelist format) for simplicity.
+
+NIST SRE 2012
+~~~~~~~~~~~~~
+
+We first invite you to read the paper describing our system submitted to the NIST SRE 2012 Evaluation. The protocols on the development set are the results of a joint work by the I4U group. To reproduce the results, please check this dedicated package::
+
+  https://pypi.python.org/pypi/spear.nist_sre12
+
+.. note::
+  For any additional information, please use our mailing list::
+  https://groups.google.com/forum/#!forum/bob-devel
+
+
+.. include:: links.rst
diff --git a/doc/conf.py b/doc/conf.py
index 1fcb4b6..b14abe3 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -15,29 +15,31 @@ import pkg_resources
 # -- General configuration -----------------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
+needs_sphinx = '1.3'
 
 # Add any Sphinx extension module names here, as strings. They can be extensions
 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
 extensions = [
-  'sphinx.ext.todo',
-  'sphinx.ext.coverage',
-  'sphinx.ext.pngmath',
-  'sphinx.ext.ifconfig',
-  'sphinx.ext.autodoc',
-  'sphinx.ext.autosummary',
-  'sphinx.ext.doctest',
-  'sphinx.ext.intersphinx',
-  ]
-
-# The viewcode extension appeared only on Sphinx >= 1.0.0
-import sphinx
-if sphinx.__version__ >= "1.0":
-  extensions.append('sphinx.ext.viewcode')
+
+    'sphinx.ext.todo',
+    'sphinx.ext.coverage',
+    'sphinx.ext.pngmath',
+    'sphinx.ext.ifconfig',
+    'sphinx.ext.autodoc',
+    'sphinx.ext.autosummary',
+    'sphinx.ext.doctest',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.graphviz',
+    'sphinx.ext.napoleon',
+    'sphinx.ext.viewcode',
+    ]
 
 # Always includes todos
 todo_include_todos = True
 
+# Generates auto-summary automatically
+autosummary_generate = True
+
 # If we are on OSX, the 'dvipng' path maybe different
 dvipng_osx = '/opt/local/libexec/texlive/binaries/dvipng'
 if os.path.exists(dvipng_osx): pngmath_dvipng = dvipng_osx
@@ -55,7 +57,7 @@ source_suffix = '.rst'
 master_doc = 'index'
 
 # General information about the project.
-project = u'The Fingervein Recognition Library (FingerveinRecLib)'
+project = u'Vein Biometrics Recognition Library (bob.bio.vein)'
 import time
 copyright = u'%s, Idiap Research Institute' % time.strftime('%Y')
 
@@ -113,7 +115,8 @@ rst_epilog = ''
 
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
-html_theme = 'default'
+import sphinx_rtd_theme
+html_theme = 'sphinx_rtd_theme'
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
@@ -121,7 +124,7 @@ html_theme = 'default'
 #html_theme_options = {}
 
 # Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
+html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
 
 # The name for this set of Sphinx documents.  If None, it defaults to
 # "<project> v<release> documentation".
@@ -200,9 +203,13 @@ latex_font_size = '10pt'
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title, author, documentclass [howto/manual]).
 latex_documents = [
-  ('index', 'FingerveinRecLib.tex', u'FingerveinRecLib Documentation',
-   u'Biometrics Group, Idiap Research Institute', 'manual'),
-]
+    (
+      'index',
+      'bobbiovein.tex',
+      u'Vein Biometrics Recognition Library (bob.bio.vein)',
+      u'Biometrics Group, Idiap Research Institute', 'manual',
+      ),
+    ]
 
 # The name of an image file (relative to this directory) to place at the top of
 # the title page.
@@ -230,7 +237,7 @@ latex_documents = [
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
 man_pages = [
-    ('index', 'bobbiovein', u'FingerveinRecLib Documentation', [u'Idiap Research Institute'], 1)
+    ('index', 'bobbiovein', u'Vein Biometrics Recognition Library', [u'Idiap Research Institute'], 1)
 ]
 
 # Default processing flags for sphinx
@@ -241,10 +248,9 @@ autodoc_default_flags = ['members', 'undoc-members', 'inherited-members', 'show-
 # For inter-documentation mapping:
 from bob.extension.utils import link_documentation
 intersphinx_mapping = link_documentation([
-  'python', 'numpy', 'scipy', 'gridtk',
-  'bob.extension', 'bob.math', 'bob.io.base', 'bob.ip.base', 'bob.ip.gabor', 'bob.learn.linear', 'bob.learn.misc', 'facereclib'
-  'bob.db.verification.utils', 'bob.db.verification.filelist',
-  'bob.db.vera', 'bob.db.utfvp'
+  'python',
+  'numpy',
+  'scipy',
 ])
 
 
diff --git a/doc/index.rst b/doc/index.rst
index 3979b22..e660f3b 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -21,7 +21,7 @@ Users Guide
 .. toctree::
    :maxdepth: 2
 
-   experiments
+   baselines
    references
    api
 
diff --git a/doc/references.rst b/doc/references.rst
index 889b097..f456ccb 100644
--- a/doc/references.rst
+++ b/doc/references.rst
@@ -1,9 +1,9 @@
 .. vim: set fileencoding=utf-8 :
 .. date: Thu Jan 15 15:58:57 CEST 2015
 
-==========
-References
-==========
+============
+ References
+============
 
 .. [KUU02] *M. Kono, H. Ueki and S. Umemura*, **Near-infrared finger vein patterns for personal identification**, Applied Optics, Vol. 41, Issue 35, pp. 7429-7436 (2002).
 
diff --git a/requirements.txt b/requirements.txt
index 35ecb8e..dbfb370 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -13,3 +13,4 @@ bob.bio.base
 bob.db.utfvp
 bob.db.vera
 bob.db.putvein
+sphinx-rtd-theme
diff --git a/setup.py b/setup.py
index 190ac19..3022b20 100644
--- a/setup.py
+++ b/setup.py
@@ -11,7 +11,7 @@ setup(
 
     name='bob.bio.vein',
     version=open("version.txt").read().rstrip(),
-    description='Vein recognition based on Bob and the bob.bio framework',
+    description='Vein biometrics recognition based on Bob and the bob.bio framework',
 
     url='https://gitlab.idiap.ch/biometric/bob.bio.vein',
     license='GPLv3',
-- 
GitLab