Developer notes
Understand MatConvNet and contribute to it
There are several parts to MatConvNet. It is important to understand this modular structure so that everybody can maximally benefit from your contributions. In particular, the easiest way to contribute something of general utility to the library is to create a new building block, as explained below:
-
Building blocks. The most important are the neural network building blocks, i.e. MATLAB functions prefixed by
vl_nn
such asvl_nnconv
. To add a new "layer" or "computational block", add such a function. These are found in the directorymatlab/
. -
CNN wrappers. There are a few wrappers (
vl_simplenn
andvl_dagnn
) that allow implementing networks composed of several blocks. These are located inmatlab/wrappers
. These wrappers are fairly generic, but there are case in which writing a new wrapper type may be useful. -
C++/CUDA library. While many blocks can be written in MATLAB directly, some such as convolution and max-pooling require custom C++ and CUDA code. In this case, create a MEX file in
matlab/src
and add the required functionality to the C++/CUDA library by adding files tomatlab/src/bits
. -
Examples. Other components of the library are at the moment delivered as examples in the
examples/
directory. This include basic SGD code for training networks inexamples/cnn_train.m
. Note that these functions are not supposed to have very broad generality, although in practice they can be an excellent starting point to write your own learning algorithms.
If you develop the C++/CUDA core of the library, it may be convenient to switch using an IDE/command line and the Makefile for compiling the library.
Creating the website
MatConvNet website uses the MkDocs documentation system, a simple static website generator written in Python. In order to setup the necessary software, follow these steps:
- Install MkDocs as explained here.
- Install the
MathJax MkDocs extension. This
is explained in the
README
file in the extension GitHub repository and consists in renaming and copying a file into your copy of MkDocs. - Make sure that the
mkdocs
command is executable from the command line, or otherwise modify the filedoc/Makefile
in MatConvNet to point to the correct executable.
At this point, the website can be built with make doc-site
from the
command line. The documentation is created in doc/site/site
from the
doc/site/docs/*.md
files.
For developing the website, it is useful to start the MkDocs HTTP server as follows:
cd doc/site
mkdocs serve
At this point visit http://127.0.0.1:8000/
to see a copy of the
current website.
Creating the MATLAB function pages
The documentation for the MATLAB function is extracted automatically
from the m-files using the doc/matdoc.py
Python script. This is
called by doc/Makefile
as needed.
matdoc.py
does three things: it extracts the function documentation
from a m-file, it interprets it using a pseudo-Markdown syntax, and
then it writes the result in Markdown format for use with
MkDocs. These are stored in doc/site/docs/mfiles
.