Namespace NT2I.ONNX.Abstractions.Interfaces.Hub
Structs
- ModelInputRequirements
Implémentation immuable par défaut de IModelInputRequirements en tant que
record struct, garantissant une égalité par valeur stable et un hash code cohérent — propriétés indispensables pour servir de clé de cache dans unDictionary.
Interfaces
- IImageConsumingArchitecture
Contrat implémenté par toute architecture (YOLO, SAM2 encoder, RF-DETR, …) capable d'être alimentée via un ISharedImageContext.
Ce contrat est volontairement additionnel : il n'oblige pas à abandonner les API autonomes existantes (
SetInputImageBgr,EncodeImageBgr, …). Il permet simplement à un modèle de s'auto-décrire (Requirements) et de récupérer son tenseur d'entrée auprès d'un Hub partagé.
- IModelInputRequirements
Décrit de manière déclarative les besoins d'un modèle ONNX en matière de tenseur d'entrée image.
Le
SharedImageContextutilise cet objet comme clé de cache : deux modèles dont les IModelInputRequirements sont égaux (égalité de valeur) reçoivent le mêmeISharedTensorHandle, évitant la duplication du préprocessing.Les implémentations doivent fournir une égalité par valeur stable (ex. via un
record structcomme ModelInputRequirements).
- ISharedImageContext
Contexte représentant la durée de vie d'une (ou d'un batch de) image(s) source partagée(s) entre plusieurs modèles ONNX d'une même frame.
Le contexte se charge :
- D'uploader une seule fois l'image vers la mémoire cible (VRAM en mode CUDA, RAM en mode CPU).
- De fournir à la demande des tenseurs préparés selon des IModelInputRequirements spécifiques (resize + normalisation + layout).
- De mutualiser les tenseurs : deux demandes avec des Requirements identiques renvoient le même ISharedTensorHandle.
- De libérer toutes les ressources (CPU/GPU) au Dispose().
Ce contrat couvre à la fois les usages mono-frame (création/destruction par appel) et pipeline vidéo (instance réutilisée entre frames via LoadFrame(byte[], int, int) / LoadFrames(byte[][], int[], int[])).
- ISharedImageContextFactory
Fabrique des ISharedImageContext.
Permet à
SharedImageCoordinatord'être agnostique du périphérique cible : la même API publiquecoord.CreateContext(...)produit unCpuSharedImageContextou unCudaSharedImageContexten fonction de la factory injectée.Implémentations connues :
CpuSharedImageContextFactory(par défaut, projetNT2I.ONNX.Hub).CudaSharedImageContextFactory(projetNT2I.ONNX.Hub.Cuda).
- ISharedTensorHandle
Handle léger refcompté représentant un tenseur de pré-traitement partagé entre plusieurs modèles ONNX. Le buffer sous-jacent (CPU
float[]ou pointeur GPU) reste la propriété duSharedImageContextémetteur ; l'Dispose() du handle se contente de décrémenter le refcount, sans libérer la mémoire elle-même.Le handle ne possède pas l'
OrtValuequi le wrappera côté moteur d'inférence : chaqueOnnxEngineconsommateur crée son propreOrtValuepar-dessus le pointeur (viaOrtValueHelper.FromCudaPointerouFromCpuBuffer). Cela évite tout problème de double-Dispose lié auClearInput()de l'engine.Utilisé conjointement avec GetTensor(IModelInputRequirements).