{"id":13606784,"url":"https://github.com/neoml-lib/neoml","last_synced_at":"2026-01-09T22:53:07.470Z","repository":{"id":37031278,"uuid":"272252323","full_name":"neoml-lib/neoml","owner":"neoml-lib","description":"Machine learning framework for both deep learning and traditional algorithms","archived":false,"fork":false,"pushed_at":"2024-09-17T19:07:10.000Z","size":77046,"stargazers_count":764,"open_issues_count":33,"forks_count":126,"subscribers_count":30,"default_branch":"master","last_synced_at":"2024-09-18T22:09:35.212Z","etag":null,"topics":["cpp","deep-learning","machine-learning","ml","neural-network","onnx"],"latest_commit_sha":null,"homepage":"https://www.abbyy.com/neoml/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neoml-lib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-14T17:37:36.000Z","updated_at":"2024-09-17T19:07:14.000Z","dependencies_parsed_at":"2023-10-24T03:40:09.902Z","dependency_job_id":"8998c277-b8f8-4655-8330-d05308bdd33c","html_url":"https://github.com/neoml-lib/neoml","commit_stats":{"total_commits":869,"total_committers":38,"mean_commits":22.86842105263158,"dds":0.5477560414269276,"last_synced_commit":"254eb881a396406a761ee70d50eeb259c298c07a"},"previous_names":[],"tags_count":358,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neoml-lib%2Fneoml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neoml-lib%2Fneoml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neoml-lib%2Fneoml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neoml-lib%2Fneoml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neoml-lib","download_url":"https://codeload.github.com/neoml-lib/neoml/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223513551,"owners_count":17158013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","deep-learning","machine-learning","ml","neural-network","onnx"],"created_at":"2024-08-01T19:01:12.382Z","updated_at":"2026-01-09T22:53:07.462Z","avatar_url":"https://github.com/neoml-lib.png","language":"C++","funding_links":[],"categories":["机器学习框架","C++","其他_机器学习与深度学习"],"sub_categories":[],"readme":"![NeoML](NeoML/docs/images/NeoML_logo.png)\r\n\r\n![Desktop Build Status](https://img.shields.io/azure-devops/build/abbyyopensource/401f7fe0-92d9-411d-9839-60d3455fa1c0/2/master?label=Desktop%20Build)\r\n![Python Build](https://img.shields.io/azure-devops/build/abbyyopensource/401f7fe0-92d9-411d-9839-60d3455fa1c0/14/master?label=Python%20Build)\r\n![iOS Build](https://img.shields.io/azure-devops/build/abbyyopensource/401f7fe0-92d9-411d-9839-60d3455fa1c0/15/master?label=iOS%20build)\r\n![Android Build](https://img.shields.io/azure-devops/build/abbyyopensource/401f7fe0-92d9-411d-9839-60d3455fa1c0/15/master?label=Android%20build)\r\n[![Documentation Status](https://readthedocs.org/projects/neoml/badge/?version=latest)](https://neoml.readthedocs.io/en/latest/?badge=latest)\r\n\r\n**NeoML** is an end-to-end machine learning framework that allows you to build, train, and deploy ML models. This framework is used by ABBYY engineers for computer vision and natural language processing tasks, including image preprocessing, classification, document layout analysis, OCR, and data extraction from structured and unstructured documents.\r\n\r\nKey features:\r\n\r\n- Neural networks with support for over 100 layer types\r\n- Traditional machine learning: 20+ algorithms (classification, regression, clustering, etc.)\r\n- CPU and GPU support, fast inference\r\n- ONNX support\r\n- Languages: Python, C++, Java, Objective-C\r\n- Cross-platform: the same code can be run on Windows, Linux, macOS, iOS, and Android\r\n\r\n## Contents\r\n\r\n\u003c!-- TOC --\u003e\r\n\r\n- [Build and install](#build-and-install)\r\n\t- [Supported platforms](#supported-platforms)\r\n\t- [Third party](#third-party)\r\n\t- [Build fully functional C++ version](#build-fully-functional-c-version)\r\n\t- [Build inference versions for Java and Objective-C](#build-inference-versions-for-java-and-objective-c)\r\n- [Getting started](#getting-started)\r\n- [API description](#api-description)\r\n\t- [Basic principles](#basic-principles)\r\n\t\t- [Platform independence](#platform-independence)\r\n\t\t- [Math engines independence](#math-engines-independence)\r\n\t\t- [Multi-threading support](#multi-threading-support)\r\n\t\t- [ONNX support](#onnx-support)\r\n\t\t- [Serialization format](#serialization-format)\r\n\t\t- [GPU support](#gpu-support)\r\n\t\t- [FineObj](#fineobj)\r\n\t- [C++ interface](#c-interface)\r\n\t\t- [Algorithms library NeoML](#algorithms-library-neoml)\r\n\t\t- [NeoMathEngine](#neomathengine)\r\n\t- [Python module](#python-module)\r\n\t- [Java interface](#java-interface)\r\n\t- [Objective-C interface](#objective-c-interface)\r\n- [License](#license)\r\n\r\n\u003c!-- /TOC --\u003e\r\n\r\n## Build and install\r\n\r\n### Supported platforms\r\n\r\nThe full С++ library version has been tested on the platforms:\r\n\r\n|Target OS|Compiler|Architecture|\r\n|----------|----------|------------------------------|\r\n|Windows 7+ (CPU and GPU)|MSVC 2019+|x86, x86_64|\r\n|Ubuntu 14+ (CPU)|gcc 5.4+|x86_64|\r\n|MacOS 10.11+ (CPU)|Apple clang 12+|arm64, x86_64|\r\n|iOS 11+ (CPU, GPU)|Apple clang 12+|arm64-v8a, x86_64|\r\n|Android 5.0+ (CPU), Android 7.0+ (GPU)|clang 7+|armeabi-v7a, arm64-v8a, x86, x86_64|\r\n\r\nThe inference Java and Objective-C library versions have been tested on the platforms:\r\n\r\n|Target OS|Compiler|Architecture|\r\n|----------|----------|------------------------------|\r\n|iOS 11+ (CPU, GPU)|Apple clang 12+|arm64-v8a, x86_64|\r\n|Android 5.0+ (CPU), Android 7.0+ (GPU)|clang 7+|armeabi-v7a, arm64-v8a, x86, x86_64|\r\n\r\n### Third party\r\n\r\nThe library is built with [CMake](https://cmake.org/download/) (recommended versions 3.18 and later).\r\n\r\nFor best CPU performance on Windows, Linux and macOS we use [Intel MKL](https://software.intel.com/en-us/mkl).\r\n\r\nWhen processing on a GPU, you can optionally use [CUDA](https://developer.nvidia.com/cuda-downloads) (version 11.2 upd.1) on Windows or Linux and [Vulkan](https://vulkan.lunarg.com/sdk/home) (version 1.1.130 and later) on Windows, Linux or Android.\r\n\r\nWe also use Google [Test](https://github.com/google/googletest) for testing and Google [Protocol Buffers](https://developers.google.com/protocol-buffers) for working with ONNX model format.\r\n\r\nWe use very convinous generator of JIT code [xbyak](https://github.com/herumi/xbyak) for speeding up some convolutions on x86_64 processors.\r\n\r\n### Build fully functional C++ version\r\n\r\nSee [here](NeoML/docs/en/Installation/cpp.md) for instructions on building the C++ library version for different platforms.\r\n\r\n### Build inference versions for Java and Objective-C\r\n\r\nSee [here](NeoML/docs/en/Installation/inference.md) for instructions on building the Java and Objective-C versions that would only run the trained neural networks.\r\n\r\n## Getting started\r\n\r\nSeveral tutorials with sample code will help you start working with the library:\r\n\r\n- [Train and use a simple network](NeoML/docs/en/Tutorial/SimpleNet.md)\r\n- [Classification with gradient boosting](NeoML/docs/en/Tutorial/News20Classification.md)\r\n- [Data clustering with k-means algorithm](NeoML/docs/en/Tutorial/IrisClustering.md)\r\n\r\n## API description\r\n\r\n### Basic principles\r\n\r\nThe library was developed with these principles in mind:\r\n\r\n#### Platform independence\r\n\r\nThe user interface is completely separated from the low-level calculations implemented by a math engine. \r\n\r\nThe only thing you have to do is to specify at the start the type of the math engine that will be used for calculations. You can also choose to select the math engine automatically, based on the device configuration detected.\r\n\r\nThe rest of your machine learning code will be the same regardless of the math engine you choose.\r\n\r\n#### Math engines independence\r\n\r\nEach network works with one math engine instance, and all its layers should have been created with the same math engine. If you have chosen a GPU math engine, it will perform all calculations. This means you may not choose to use a CPU for \"light\" calculations like adding vectors and a GPU for \"heavy\" calculations like multiplying matrices. We have introduced this restriction to avoid unnecessary synchronizations and data exchange between devices.\r\n\r\n#### Multi-threading support\r\n\r\nThe [math engine interface](NeoML/docs/en/API/NN/MathEngine.md) is thread-safe; the same instance may be used in different networks and different threads.\r\n\r\nNote that this may entail some synchronization overhead.\r\n\r\nHowever, the [neural network implementation](NeoML/docs/en/API/NN/Dnn.md) is not thread-safe; the network may run only in one thread.\r\n\r\n#### ONNX support\r\n\r\n**NeoML** library also works with the models created by other frameworks, as long as they support the [ONNX](https://onnx.ai/) format. See [the description of import API](NeoML/docs/en/Onnx.md). However, you cannot export a NeoML-trained model into ONNX format.\r\n\r\n#### Serialization format\r\n\r\nThe library uses its own binary format (implemented by `CArchive`, `CArchiveFile`) to save and load the trained models. \r\n\r\n#### GPU support\r\n\r\nProcessing on GPU often helps significantly improve performance of mathematical operations. The **NeoML** library uses GPU both for training and running the models. This is an optional setting and depends on the hardware and software capabilities of your system. \r\n\r\nTo work on GPU, the library requires:\r\n\r\n- Windows: NVIDIA® GPU card with CUDA® 11.2 upd. 1 support.\r\n- iOS: Apple GPU A7+.\r\n- Android: devices with Vulkan 1.0 support.\r\n- Linux/macOS: no support for GPU processing as yet. \r\n\r\n#### FineObj\r\n\r\nThe **NeoML** library originates in ABBYY internal infrastructure. For various reasons ABBYY uses a cross-platform framework called FineObj. Because of this, the open library version uses some of this framework primitives. See the [common classes description](NeoML/docs/en/API/Common/README.md).\r\n\r\n### C++ interface \r\n\r\n**NeoML** contains two C++ libraries:\r\n\r\n#### Algorithms library NeoML\r\n\r\nThe library provides C++ objects that implement various high-level algorithms. It consists of several parts:\r\n\r\n- [Neural networks](NeoML/docs/en/API/NN/README.md)\r\n- [Classification and regression algorithms](NeoML/docs/en/API/ClassificationAndRegression/README.md)\r\n- [Clustering algorithms](NeoML/docs/en/API/Clustering/README.md)\r\n- [Auxiliary algorithms](NeoML/docs/en/API/Algorithms/README.md)\r\n\r\n#### NeoMathEngine\r\n\r\nThe math engine used for calculations is a separate module that implements the low-level mathematical functions used in the algorithms library. The user can also call these functions but usually never needs to.\r\n\r\nThis module has different implementations for different platforms. In particular, there is an implementation that uses a GPU for calculations.\r\n\r\nThe math engine is also a set of C++ interfaces described [here](NeoML/docs/en/API/NN/MathEngine.md).\r\n\r\n### Python module\r\n\r\nSee the extensive documentation of the Python module on [readthedocs.io](https://neoml.readthedocs.io/en/latest/index.html).\r\n\r\n### Java interface\r\n\r\nTo work with the inference version of the library in Java and Kotlin we provide a [Java interface](NeoML/docs/en/Wrappers/Java.md).\r\n\r\n### Objective-C interface\r\n\r\nTo work with the inference version of the library in Swift and Objective-C we provide an [Objective-C interface](NeoML/docs/en/Wrappers/ObjectiveC.md).\r\n\r\n## License\r\nCopyright © 2016-2020 ABBYY Production LLC. Licensed under the Apache License, Version 2.0. See [the license file](LICENSE).\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneoml-lib%2Fneoml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneoml-lib%2Fneoml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneoml-lib%2Fneoml/lists"}