Neuropod est une bibliothèque qui fournit une interface uniforme pour exécuter des modèles d'apprentissage en profondeur à partir de plusieurs cadres en C ++ et Python. Le neuropod permet aux chercheurs de construire facilement des modèles dans un cadre de leur choix tout en simplifiant la production de ces modèles.
Il prend actuellement en charge TensorFlow, Pytorch, TorchScript, Keras et Ludwig.
Pour plus d'informations:
L'exécution d'un modèle TensorFlow ressemble exactement à l'exécution d'un modèle 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" ]Voir le tutoriel, le guide Python ou le guide C ++ pour plus d'exemples.
Certains avantages de cela comprennent:
Tout modèle de neuropodes peut être exécuté à la fois à C ++ et Python (même des modèles Pytorch qui n'ont pas été convertis en torchscript).
Cela vous permet de vous concentrer davantage sur le problème que vous résolvez plutôt que sur le cadre que vous utilisez pour le résoudre.
Par exemple, si vous définissez une API à problème pour la détection d'objets 2D, tout modèle qui s'implémente peut réutiliser tout le code d'inférence existant et l'infrastructure pour ce problème.
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" )},
]Cela vous permet
Voir le tutoriel pour plus de détails.
Si vous avez plusieurs modèles qui adoptent un ensemble similaire d'entrées, vous pouvez créer et optimiser un pipeline de génération d'entrées de framework-agnostique et le partager sur des modèles.
Modèles entièrement autonomes (y compris les opérations personnalisées)
Opérations efficaces de copie zéro
Testé sur des plateformes, notamment
Isolement du modèle avec exécution hors de processus
Passer de l'exécution en cours à l'exécution de l'exécution avec une ligne de code
Voir le tutoriel d'introduction de base pour un aperçu de la façon de commencer avec le neuropod.
Le guide Python et le guide C ++ entrent plus en détail sur les modèles de neuropodes à la course.