O Neuropod é uma biblioteca que fornece uma interface uniforme para executar modelos de aprendizado profundo de várias estruturas em C ++ e Python. O Neuropod facilita para os pesquisadores criarem modelos em uma estrutura de escolha, além de simplificar a produção desses modelos.
Atualmente, ele suporta Tensorflow, Pytorch, TorchScript, Keras e Ludwig.
Para mais informações:
A execução de um modelo de tensorflow parece exatamente como executar um 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 o tutorial, o guia Python ou o guia C ++ para obter mais exemplos.
Alguns benefícios disso incluem:
Qualquer modelo de neurópodes pode ser executado a partir de C ++ e Python (mesmo modelos de pytorch que não foram convertidos em tochcript).
Isso permite que você se concentre mais no problema que você está resolvendo do que na estrutura que você está usando para resolvê -la.
Por exemplo, se você definir uma API de problema para a detecção de objetos 2D, qualquer modelo que implemate que ele possa reutilizar todo o código de inferência existente e infraestrutura para esse 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" )},
]Isso permite que você
Veja o tutorial para obter mais detalhes.
Se você tiver vários modelos que recebem um conjunto semelhante de entradas, poderá criar e otimizar um pipeline de geração de entrada agnóstico da estrutura e compartilhá-lo em modelos.
Modelos totalmente independentes (incluindo operações personalizadas)
Operações eficientes de cópia zero
Testado em plataformas, incluindo
Isolamento do modelo com execução fora de processo
Mude de executar em processo para correr fora do processo com uma linha de código
Consulte o tutorial básico de introdução para uma visão geral de como começar o Neuropod.
O guia Python e o guia C ++ entram em mais detalhes sobre a execução de modelos de neurópodes.