* Move STB internally, comment functions if not Signed-off-by: Omar Shrit <omar@avontech.fr> * Comment for now STB including macros Signed-off-by: Omar Shrit <omar@avontech.fr> * Modify CMake and tests accordingly Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix the license and update the date. Signed-off-by: Omar Shrit <omar@avontech.fr> * Move STB to its own directory Signed-off-by: Omar Shrit <omar@avontech.fr> * Adding the functrions of image resize and crop Signed-off-by: Omar Shrit <omar@avontech.fr> * Update the API not finished yet Signed-off-by: Omar Shrit <omar@avontech.fr> * Start adding tests Signed-off-by: Omar Shrit <omar@avontech.fr> * Add flowers images for test Signed-off-by: Omar Shrit <omar@avontech.fr> * Bring image from the coco dataset Signed-off-by: Omar Shrit <omar@avontech.fr> * Include all of STB header in this file Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix STB configs Signed-off-by: Omar Shrit <omar@avontech.fr> * Clean CMakeLists and look for stb_resize Signed-off-by: Omar Shrit <omar@avontech.fr> * Make it compile with STB integrated Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix stb path Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix the endif at the end of the file Signed-off-by: Omar Shrit <omar@avontech.fr> * Update LICENSE.txt Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update CMakeLists.txt Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/config.hpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Adding the function and test, not finished Signed-off-by: Omar Shrit <omar@avontech.fr> * Remove crop from this PR, and add tests Signed-off-by: Omar Shrit <omar@avontech.fr> * Update LICENSE.txt Co-authored-by: Dirk Eddelbuettel <edd@debian.org> * Update CMakeLists.txt Co-authored-by: Dirk Eddelbuettel <edd@debian.org> * merge master Signed-off-by: Omar Shrit <omar@avontech.fr> * Add @rcutin suggestion for stb Signed-off-by: Omar Shrit <omar@avontech.fr> * Improve the logic to include edge cases Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix the bundle that if we are using system stb Signed-off-by: Omar Shrit <omar@avontech.fr> * Make it possible to disable the entire build with STB Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix the else if condition Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix the else condition Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix the tests accordindly Signed-off-by: Omar Shrit <omar@avontech.fr> * Add dummpy functions and complete the Resize function Signed-off-by: Omar Shrit <omar@avontech.fr> * Reorder to see if this fix the problem Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix the resize for a set of images Signed-off-by: Omar Shrit <omar@avontech.fr> * Add STATIC for resize and write Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix all the problem with this function Signed-off-by: Omar Shrit <omar@avontech.fr> * Be able to resize N images easily Signed-off-by: Omar Shrit <omar@shrit.fr> * Add the tests, already passing Signed-off-by: Omar Shrit <omar@shrit.fr> * Use sheep instead of Umbrella Signed-off-by: Omar Shrit <omar@shrit.fr> * Fix STB directory Signed-off-by: Omar Shrit <omar@shrit.fr> * Fix Cmake and docs Signed-off-by: Omar Shrit <omar@shrit.fr> * Apply comments from @rcurtin Signed-off-by: Omar Shrit <omar@shrit.fr> * Integrate @rcurtin comments Signed-off-by: Omar Shrit <omar@shrit.fr> * Fix tests and remove generated images Signed-off-by: Omar Shrit <omar@shrit.fr> * Add docs Signed-off-by: Omar Shrit <omar@shrit.fr> * Update the API with new resize version Signed-off-by: Omar Shrit <omar@shrit.fr> * Fix to resize2 Signed-off-by: Omar Shrit <omar@shrit.fr> * Adding resize2 Signed-off-by: Omar Shrit <omar@shrit.fr> * Add the necessary fix to avoid linker errors Signed-off-by: Omar Shrit <omar@avontech.fr> * Add configs to allow correct repacking Signed-off-by: Omar Shrit <omar@shrit.fr> * Redo the ResizeImages function Signed-off-by: Omar Shrit <omar@shrit.fr> * Pack the images as tzr.bz2 Signed-off-by: Omar Shrit <omar@shrit.fr> * Fix the function calls and create an internal one Signed-off-by: Omar Shrit <omar@avontech.fr> * Make the message shorter to have under 80 chars Signed-off-by: Omar Shrit <omar@avontech.fr> * Solve linter errors Signed-off-by: Omar Shrit <omar@avontech.fr> * Solve linter error Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix linter issues Signed-off-by: Omar Shrit <omar@avontech.fr> * Update doc/user/load_save.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/tests/image_test.cpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/core/data/image_resize_crop.hpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/core/data/image_resize_crop.hpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update doc/user/load_save.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update doc/user/load_save.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/tests/image_test.cpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/tests/image_test.cpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/tests/image_test.cpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/tests/image_test.cpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/core/data/image_resize_crop.hpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Apply @rcurtin comments Signed-off-by: Omar Shrit <omar@avontech.fr> * Add an example usage of these two functions Signed-off-by: Omar Shrit <omar@avontech.fr> * Apply @rcurtin comments Signed-off-by: Omar Shrit <omar@avontech.fr> * Re-organize directories for STB Signed-off-by: Omar Shrit <omar@avontech.fr> * Apply rcurtin comments Signed-off-by: Omar Shrit <omar@avontech.fr> * Merge two resize functions into one Signed-off-by: Omar Shrit <omar@avontech.fr> * Get rid of MLPACK_DISABLE_STB Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix forgetting docs Signed-off-by: Omar Shrit <omar@avontech.fr> * Update CMake/FindStbImage.cmake Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update CMake/FindStbImage.cmake Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update doc/user/install.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update doc/user/compile.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/core/data/image_resize_crop.hpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update doc/user/load_save.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update doc/user/load_save.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update doc/user/load_save.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update doc/user/load_save.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/core/data/image_resize_crop.hpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/core/data/image_resize_crop.hpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update src/mlpack/core/data/image_resize_crop.hpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update doc/user/load_save.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Apply comments from @rcurtin Signed-off-by: Omar Shrit <omar@avontech.fr> * Adding the test to test if it is identical Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix image tests Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix the example Signed-off-by: Omar Shrit <omar@avontech.fr> * Add the link and the patch to download the images Signed-off-by: Omar Shrit <omar@avontech.fr> * Fix the script and make all of them green Signed-off-by: Omar Shrit <omar@avontech.fr> * Remove wget not needed Signed-off-by: Omar Shrit <omar@avontech.fr> * Minor style fixes. * Avoid temporary matrices, and test with multiple different types. * Update src/mlpack/config.hpp Co-authored-by: Ryan Curtin <ryan@ratml.org> * Update HISTORY.md Co-authored-by: Ryan Curtin <ryan@ratml.org> * Fix R build by including bundled STB headers in package. --------- Signed-off-by: Omar Shrit <omar@avontech.fr> Signed-off-by: Omar Shrit <omar@shrit.fr> Co-authored-by: Ryan Curtin <ryan@ratml.org> Co-authored-by: Dirk Eddelbuettel <edd@debian.org>
a fast, header-only machine learning library
Home | Download | Documentation | Help |
Download: current stable version (4.5.1)
mlpack is an intuitive, fast, and flexible header-only C++ machine learning library with bindings to other languages. It is meant to be a machine learning analog to LAPACK, and aims to implement a wide array of machine learning methods and functions as a "swiss army knife" for machine learning researchers.
mlpack's lightweight C++ implementation makes it ideal for deployment, and it can also be used for interactive prototyping via C++ notebooks (these can be seen in action on mlpack's homepage).
In addition to its powerful C++ interface, mlpack also provides command-line programs, Python bindings, Julia bindings, Go bindings and R bindings.
Quick links:
- Quickstart guides: C++, CLI, Python, R, Julia, Go
- mlpack homepage
- mlpack documentation
- Examples repository
- Tutorials
- Development Site (Github)
mlpack uses an open governance model and is fiscally sponsored by NumFOCUS. Consider making a tax-deductible donation to help the project pay for developer time, professional services, travel, workshops, and a variety of other needs.
0. Contents
- Citation details
- Dependencies
- Installation
- Usage from C++
- Building mlpack's test suite
- Further resources
1. Citation details
If you use mlpack in your research or software, please cite mlpack using the citation below (given in BibTeX format):
@article{mlpack2023,
title = {mlpack 4: a fast, header-only C++ machine learning library},
author = {Ryan R. Curtin and Marcus Edel and Omar Shrit and
Shubham Agrawal and Suryoday Basak and James J. Balamuta and
Ryan Birmingham and Kartik Dutt and Dirk Eddelbuettel and
Rishabh Garg and Shikhar Jaiswal and Aakash Kaushik and
Sangyeon Kim and Anjishnu Mukherjee and Nanubala Gnana Sai and
Nippun Sharma and Yashwant Singh Parihar and Roshan Swain and
Conrad Sanderson},
journal = {Journal of Open Source Software},
volume = {8},
number = {82},
pages = {5026},
year = {2023},
doi = {10.21105/joss.05026},
url = {https://doi.org/10.21105/joss.05026}
}
Citations are beneficial for the growth and improvement of mlpack.
2. Dependencies
mlpack requires the following additional dependencies:
If the STB library headers are available, image loading support will be available.
If you are compiling Armadillo by hand, ensure that LAPACK and BLAS are enabled.
3. Installation
Detailed installation instructions can be found on the Installing mlpack page.
4. Usage from C++
Once headers are installed with make install, using mlpack in an application
consists only of including it. So, your program should include mlpack:
#include <mlpack.hpp>
and when you link, be sure to link against Armadillo. If your example program
is my_program.cpp, your compiler is GCC, and you would like to compile with
OpenMP support (recommended) and optimizations, compile like this:
g++ -O3 -std=c++17 -o my_program my_program.cpp -larmadillo -fopenmp
Note that if you want to serialize (save or load) neural networks, you should
add #define MLPACK_ENABLE_ANN_SERIALIZATION before including <mlpack.hpp>.
If you don't define MLPACK_ENABLE_ANN_SERIALIZATION and your code serializes a
neural network, a compilation error will occur.
Warning: older versions of OpenBLAS (0.3.26 and older) compiled to use pthreads may use too many threads for computation, causing significant slowdown. OpenBLAS versions compiled with OpenMP do not suffer from this issue. See the test build guide for more details and simple workarounds.
See also:
- the test program compilation section of the installation documentation,
- the C++ quickstart, and
- the examples repository repository for
some examples of mlpack applications in C++, with corresponding
Makefiles.
4.1. Reducing compile time
mlpack is a template-heavy library, and if care is not used, compilation time of a project can be very high. Fortunately, there are a number of ways to reduce compilation time:
-
Include individual headers, like
<mlpack/methods/decision_tree.hpp>, if you are only using one component, instead of<mlpack.hpp>. This reduces the amount of work the compiler has to do. -
Only use the
MLPACK_ENABLE_ANN_SERIALIZATIONdefinition if you are serializing neural networks in your code. When this define is enabled, compilation time will increase significantly, as the compiler must generate code for every possible type of layer. (The large amount of extra compilation overhead is why this is not enabled by default.) -
If you are using mlpack in multiple .cpp files, consider using
extern templatesso that the compiler only instantiates each template once; add an explicit template instantiation for each mlpack template type you want to use in a .cpp file, and then useexterndefinitions elsewhere to let the compiler know it exists in a different file.
Other strategies exist too, such as precompiled headers, compiler options,
ccache, and others.
5. Building mlpack's test suite
See the installation instruction section.
6. Further Resources
More documentation is available for both users and developers.
To learn about the development goals of mlpack in the short- and medium-term future, see the vision document.
If you have problems, find a bug, or need help, you can try visiting
the mlpack help page, or mlpack on
Github. Alternately, mlpack help can be
found on Matrix at #mlpack; see also the
community page.