Neuropod es una biblioteca que proporciona una interfaz uniforme para ejecutar modelos de aprendizaje profundo de múltiples marcos en C ++ y Python. Neuropod facilita a los investigadores construir modelos en un marco de su elección al tiempo que simplifica la producción de estos modelos.
Actualmente es compatible con TensorFlow, Pytorch, Torchscript, Keras y Ludwig.
Para más información:
Ejecutar un modelo TensorFlow se ve exactamente como ejecutar un modelo Pytorch.
x = np . array ([ 1 , 2 , 3 , 4 ])
y = np . array ([ 5 , 6 , 7 , 8 ])
for model_path in [ TF_ADDITION_MODEL_PATH , PYTORCH_ADDITION_MODEL_PATH ]:
# Load the model
neuropod = load_neuropod ( model_path )
# Run inference
results = neuropod . infer ({ "x" : x , "y" : y })
# array([6, 8, 10, 12])
print results [ "out" ]Consulte el tutorial, la guía de Python o la guía C ++ para obtener más ejemplos.
Algunos beneficios de esto incluyen:
Cualquier modelo de neuropodos se puede ejecutar desde C ++ y Python (incluso modelos de pytorch que no se han convertido en antorchscript).
Esto le permite concentrarse más en el problema que está resolviendo en lugar del marco que está utilizando para resolverlo.
Por ejemplo, si define una API de problema para la detección de objetos 2D, cualquier modelo que lo impulse puede reutilizar todo el código de inferencia y la infraestructura existentes para ese problema.
INPUT_SPEC = [
# BGR image
{ "name" : "image" , "dtype" : "uint8" , "shape" : ( 1200 , 1920 , 3 )},
]
OUTPUT_SPEC = [
# shape: (num_detections, 4): (xmin, ymin, xmax, ymax)
# These values are in units of pixels. The origin is the top left corner
# with positive X to the right and positive Y towards the bottom of the image
{ "name" : "boxes" , "dtype" : "float32" , "shape" : ( "num_detections" , 4 )},
# The list of classes that the network can output
# This must be some subset of ['vehicle', 'person', 'motorcycle', 'bicycle']
{ "name" : "supported_object_classes" , "dtype" : "string" , "shape" : ( "num_classes" ,)},
# The probability of each class for each detection
# These should all be floats between 0 and 1
{ "name" : "object_class_probability" , "dtype" : "float32" , "shape" : ( "num_detections" , "num_classes" )},
]Esto te deja
Vea el tutorial para más detalles.
Si tiene varios modelos que reciben un conjunto similar de entradas, puede construir y optimizar una tubería de generación de entrada de marco y compartirla en todos los modelos.
Modelos totalmente autónomos (incluidos OPS personalizados)
Operaciones eficientes de copia cero
Probado en plataformas que incluyen
Aislamiento del modelo con ejecución fuera de proceso
Cambiar de ejecutar el proceso a la ejecución fuera del proceso con una línea de código
Vea el tutorial de introducción básica para obtener una visión general de cómo comenzar con Neuropod.
La guía de Python y la guía C ++ entran en más detalles sobre la ejecución de modelos de neuropodos.