
Neoml es un marco de aprendizaje automático de extremo a extremo que le permite construir, entrenar e implementar modelos ML. Este marco es utilizado por ABBYY Engineers para tareas de procesamiento de la visión por computadora y el lenguaje natural, incluido el preprocesamiento de imágenes, la clasificación, el análisis de diseño de documentos, la OCR y la extracción de datos de documentos estructurados y no estructurados.
Características clave:
La versión completa de la biblioteca с ++ se ha probado en las plataformas:
| OS de destino | Compilador | Arquitectura |
|---|---|---|
| Windows 7+ (CPU y GPU) | MSVC 2019+ | x86, x86_64 |
| Ubuntu 14+ (CPU) | GCC 5.4+ | x86_64 |
| MacOS 10.11+ (CPU) | Apple Clang 12+ | ARM64, x86_64 |
| iOS 11+ (CPU, GPU) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | CLANG 7+ | ArmeBi-V7A, ARM64-V8A, X86, X86_64 |
La inferencia Java y las versiones de la biblioteca Objective-C se han probado en las plataformas:
| OS de destino | Compilador | Arquitectura |
|---|---|---|
| iOS 11+ (CPU, GPU) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | CLANG 7+ | ArmeBi-V7A, ARM64-V8A, X86, X86_64 |
La biblioteca está construida con CMake (versiones recomendadas 3.18 y posterior).
Para el mejor rendimiento de la CPU en Windows, Linux y macOS, usamos Intel MKL.
Al procesar una GPU, puede usar opcionalmente CUDA (versión 11.2 UPD.1) en Windows o Linux y Vulkan (versión 1.1.130 y posterior) en Windows, Linux o Android.
También utilizamos Google Test for Testing y Google Protocol Buffers para trabajar con el formato de modelo ONNX.
Utilizamos un generador muy convincente del código JIT XBYAK para acelerar algunas convoluciones en procesadores X86_64.
Consulte aquí para obtener instrucciones sobre la construcción de la versión de la biblioteca C ++ para diferentes plataformas.
Vea aquí para obtener instrucciones sobre la construcción de las versiones Java y Objective-C que solo ejecutarían las redes neuronales entrenadas.
Varios tutoriales con código de muestra lo ayudarán a comenzar a trabajar con la biblioteca:
La biblioteca fue desarrollada con estos principios en mente:
La interfaz de usuario está completamente separada de los cálculos de bajo nivel implementados por un motor de matemáticas.
Lo único que debe hacer es especificar al principio el tipo de motor de matemáticas que se utilizará para los cálculos. También puede elegir seleccionar el motor de matemáticas automáticamente, según la configuración del dispositivo detectada.
El resto de su código de aprendizaje automático será el mismo independientemente del motor de matemáticas que elija.
Cada red funciona con una instancia de motor de matemáticas, y todas sus capas deberían haberse creado con el mismo motor de matemáticas. Si ha elegido un motor de matemáticas GPU, realizará todos los cálculos. Esto significa que es posible que no elija usar una CPU para cálculos "ligeros" como agregar vectores y una GPU para cálculos "pesados" como matrices multiplicadoras. Hemos introducido esta restricción para evitar sincronizaciones innecesarias e intercambio de datos entre dispositivos.
La interfaz del motor de matemáticas es segura de subprocesos; La misma instancia se puede usar en diferentes redes y diferentes hilos.
Tenga en cuenta que esto puede implicar alguna sobrecarga de sincronización.
Sin embargo, la implementación de la red neuronal no es segura de hilo; La red solo puede ejecutarse en un hilo.
La biblioteca Neoml también funciona con los modelos creados por otros marcos, siempre que admitan el formato ONNX. Consulte la descripción de la API de importación. Sin embargo, no puede exportar un modelo entrenado con NEOML en formato ONNX.
La biblioteca utiliza su propio formato binario (implementado por CArchive , CArchiveFile ) para ahorrar y cargar los modelos capacitados.
El procesamiento en GPU a menudo ayuda a mejorar significativamente el rendimiento de las operaciones matemáticas. La biblioteca Neoml utiliza GPU tanto para capacitar como para ejecutar los modelos. Esta es una configuración opcional y depende de las capacidades de hardware y software de su sistema.
Para trabajar en GPU, la biblioteca requiere:
La Biblioteca Neoml se origina en la infraestructura interna ABBYY. Por varias razones, Abbyy usa un marco multiplataforma llamado FinoBJ. Debido a esto, la versión Open Library utiliza algunas de estas primitivas marco. Ver la descripción de las clases comunes.
Neoml contiene dos bibliotecas C ++:
La biblioteca proporciona objetos C ++ que implementan varios algoritmos de alto nivel. Consiste en varias partes:
El motor matemático utilizado para los cálculos es un módulo separado que implementa las funciones matemáticas de bajo nivel utilizadas en la biblioteca de algoritmos. El usuario también puede llamar a estas funciones, pero generalmente nunca necesita.
Este módulo tiene diferentes implementaciones para diferentes plataformas. En particular, hay una implementación que utiliza una GPU para los cálculos.
El motor de matemáticas también es un conjunto de interfaces C ++ descritas aquí.
Vea la extensa documentación del módulo de Python en Readthedocs.io.
Para trabajar con la versión de inferencia de la biblioteca en Java y Kotlin, proporcionamos una interfaz Java.
Para trabajar con la versión de inferencia de la biblioteca en Swift y Objective-C, proporcionamos una interfaz Objective-C.
Copyright © 2016-2020 Abbyy Production LLC. Con licencia bajo la licencia Apache, versión 2.0. Ver el archivo de licencia.