Class SAM2Image
- Namespace
- NT2I.ONNX.Architectures.SAM
- Assembly
- NT2I.ONNX.Architectures.dll
Orchestre l'utilisation du modèle SAM (Segment Anything Model) en séparant l'encodage de l'image (coûteux) de la prédiction de masques (rapide et interactif). Cette classe gère deux moteurs ONNX : un pour l'encodeur d'image et un pour le prédicteur de masques.
public class SAM2Image : ISAM2Image, IDisposable, IImageConsumingArchitecture
- Inheritance
-
SAM2Image
- Implements
- Inherited Members
Constructors
SAM2Image()
Initialise une nouvelle instance de la classe SAM2Image.
public SAM2Image()
SAM2Image(IOnnxSessionOptions, IOnnxSessionOptions, ISAMSegmentationPreprocessor, ISAMSegmentationPostprocessor)
Initialise une nouvelle instance de la classe SAM2Image avec les options et processeurs spécifiés.
public SAM2Image(IOnnxSessionOptions EncoderOptions, IOnnxSessionOptions PredictOptions, ISAMSegmentationPreprocessor preprocessor, ISAMSegmentationPostprocessor postprocessor)
Parameters
EncoderOptionsIOnnxSessionOptionsOptions de session pour le modèle d'encodage d'image.
PredictOptionsIOnnxSessionOptionsOptions de session pour le modèle de prédiction de masques.
preprocessorISAMSegmentationPreprocessorL'implémentation du pré-processeur à utiliser.
postprocessorISAMSegmentationPostprocessorL'implémentation du post-processeur à utiliser.
Fields
_defaultPostprocessor
L'implémentation du post-processeur à utiliser par défaut.
protected ISAMSegmentationPostprocessor? _defaultPostprocessor
Field Value
_defaultPreprocessor
L'implémentation du pré-processeur à utiliser par défaut.
protected ISAMSegmentationPreprocessor? _defaultPreprocessor
Field Value
Properties
Annotations
Obtient un dictionnaire en lecture seule des annotations actuellement définies, groupées par identifiant d'objet.
public IReadOnlyDictionary<int, ISAMAnnotationSet>? Annotations { get; }
Property Value
IsInitialized
Obtient une valeur indiquant si les deux moteurs (encodeur et prédicteur) ont été initialisés.
public bool IsInitialized { get; }
Property Value
IsRunning
Obtient une valeur indiquant si l'un des moteurs (encodeur ou prédicteur) est en cours d'exécution.
public bool IsRunning { get; }
Property Value
Requirements
Décrit les besoins de l'encodeur d'image pour le Hub partagé (ImageNet + StretchResize). Disponible après Initialize(IOnnxSessionOptions, IOnnxSessionOptions, ISAMSegmentationPreprocessor, ISAMSegmentationPostprocessor).
public IModelInputRequirements Requirements { get; }
Property Value
Exceptions
- InvalidOperationException
Lancée si le moteur n'a pas été initialisé.
Methods
AddAnnotation(int, ISAMAnnotationPoint)
Ajoute un unique point d'annotation pour un objet spécifique.
public void AddAnnotation(int objectId, ISAMAnnotationPoint annotationPoints)
Parameters
objectIdintL'identifiant unique de l'objet à segmenter.
annotationPointsISAMAnnotationPointLe point d'annotation.
AddAnnotation(int, ISAMAnnotationRectangle)
Ajoute un unique rectangle d'annotation pour un objet spécifique.
public void AddAnnotation(int objectId, ISAMAnnotationRectangle annotationRectangle)
Parameters
objectIdintL'identifiant unique de l'objet à segmenter.
annotationRectangleISAMAnnotationRectangleLe rectangle d'annotation.
AddAnnotation(int, SAMAnnotationSet)
Ajoute un ensemble pré-construit d'annotations pour un objet.
public void AddAnnotation(int objectId, SAMAnnotationSet newAnnotations)
Parameters
objectIdintL'identifiant unique de l'objet à segmenter.
newAnnotationsSAMAnnotationSetL'ensemble d'annotations à ajouter.
AddAnnotation(int, byte[], int, int)
Ajoute une annotation de type masque (non implémenté).
public void AddAnnotation(int objectId, byte[] mask, int width, int height)
Parameters
AddAnnotation(int, IList<ISAMAnnotationPoint>)
Ajoute une liste de points d'annotation (positifs ou négatifs) pour un objet spécifique.
public void AddAnnotation(int objectId, IList<ISAMAnnotationPoint> annotationPoints)
Parameters
objectIdintL'identifiant unique de l'objet à segmenter.
annotationPointsIList<ISAMAnnotationPoint>La liste des points d'annotation.
AddAnnotation(int, IList<ISAMAnnotationRectangle>)
Ajoute une liste de rectangles d'annotation pour un objet spécifique.
public void AddAnnotation(int objectId, IList<ISAMAnnotationRectangle> annotationRectangles)
Parameters
objectIdintL'identifiant unique de l'objet à segmenter.
annotationRectanglesIList<ISAMAnnotationRectangle>La liste des rectangles d'annotation.
AddAnnotation(int, IList<ISAMAnnotationRectangle>, IList<ISAMAnnotationPoint>)
Ajoute une combinaison de rectangles et de points d'annotation pour un objet.
public void AddAnnotation(int objectId, IList<ISAMAnnotationRectangle> annotationRectangles, IList<ISAMAnnotationPoint> annotationPoints)
Parameters
objectIdintL'identifiant unique de l'objet à segmenter.
annotationRectanglesIList<ISAMAnnotationRectangle>Liste de rectangles d'annotation.
annotationPointsIList<ISAMAnnotationPoint>Liste de points d'annotation.
AddAnnotation(int, float, float, AnnotationLabelEnum)
Ajoute un unique point d'annotation en spécifiant ses coordonnées et son label.
public void AddAnnotation(int objectId, float x, float y, AnnotationLabelEnum label)
Parameters
objectIdintL'identifiant unique de l'objet à segmenter.
xfloatCoordonnée X du point.
yfloatCoordonnée Y du point.
labelAnnotationLabelEnumType d'annotation (positif ou négatif).
AddAnnotation(int, float, float, float, float)
Ajoute un unique rectangle d'annotation en spécifiant ses coordonnées et sa taille.
public void AddAnnotation(int objectId, float x, float y, float width, float height)
Parameters
objectIdintL'identifiant unique de l'objet à segmenter.
xfloatCoordonnée X du coin supérieur gauche.
yfloatCoordonnée Y du coin supérieur gauche.
widthfloatLargeur du rectangle.
heightfloatHauteur du rectangle.
BindFromContext(ISharedImageContext)
Lie le tenseur d'entrée de l'encodeur SAM2 à celui fourni par le ISharedImageContext. Remplace la partie pré-traitement de EncodeImageBgr(byte[], ImageSize) dans le mode Hub.
Après cet appel, déclencher l'inférence de l'encodeur via EncodeFromHubAsync(CancellationToken).
public void BindFromContext(ISharedImageContext context)
Parameters
contextISharedImageContextContexte image partagé fourni par le Hub.
Exceptions
- ArgumentNullException
Si
contextestnull.- InvalidOperationException
Si le moteur n'est pas initialisé.
CleanModelFolder()
Nettoie les dossiers contenant les modèles extraits pour les deux moteurs.
public void CleanModelFolder()
CleanProfilingFile()
Supprime les fichiers de profilage générés par les deux moteurs.
public void CleanProfilingFile()
ClearAllAnnotations()
Supprime toutes les annotations pour tous les objets.
public void ClearAllAnnotations()
ClearAnnotations(int)
Supprime toutes les annotations associées à un identifiant d'objet spécifique.
public bool ClearAnnotations(int objectId)
Parameters
objectIdintL'identifiant de l'objet dont les annotations doivent être effacées.
Returns
- bool
Vrai si les annotations ont été trouvées et supprimées, sinon faux.
ClearCurrentEmbedding()
Libère l'embedding d'image actuellement stocké en mémoire.
public void ClearCurrentEmbedding()
ClearCurrentMaskPromp()
Réinitialise le masque de prédiction précédent.
public void ClearCurrentMaskPromp()
Dispose()
Libère toutes les ressources natives utilisées par les moteurs d'encodage et de prédiction, ainsi que par les processeurs et les embeddings.
public void Dispose()
EncodeFromHubAsync(CancellationToken)
Exécute l'inférence de l'encodeur avec le tenseur précédemment lié via BindFromContext(ISharedImageContext), puis retourne l'embedding résultant.
public Task<ISam2Embedding> EncodeFromHubAsync(CancellationToken cancellationToken = default)
Parameters
cancellationTokenCancellationTokenJeton d'annulation.
Returns
- Task<ISam2Embedding>
L'embedding de l'image, utilisable par le prédicteur de masques.
Exceptions
- InvalidOperationException
Si le moteur n'est pas initialisé.
EncodeImageBgr(byte[], ImageSize)
Prétraite et encode une image au format BGR pour générer un embedding. Cette opération est coûteuse et ne doit être exécutée qu'une fois par image.
public Task<ISam2Embedding> EncodeImageBgr(byte[] packedBgrBuffer, ImageSize imageSize)
Parameters
packedBgrBufferbyte[]Le buffer de l'image au format BGR (Bleu, Vert, Rouge) packé.
imageSizeImageSizeLa taille (largeur, hauteur) de l'image originale.
Returns
- Task<ISam2Embedding>
Une tâche qui représente l'opération asynchrone et retourne un Sam2Embedding contenant les caractéristiques de l'image.
EncodeImagePlanar(byte[], byte[], byte[], ImageSize)
Prétraite et encode une image au format planaire (canaux R, G, B séparés) pour générer un embedding.
public Task<ISam2Embedding> EncodeImagePlanar(byte[] planarBuffer_R, byte[] planarBuffer_G, byte[] planarBuffer_B, ImageSize imageSize)
Parameters
planarBuffer_Rbyte[]Buffer du canal Rouge.
planarBuffer_Gbyte[]Buffer du canal Vert.
planarBuffer_Bbyte[]Buffer du canal Bleu.
imageSizeImageSizeLa taille (largeur, hauteur) de l'image originale.
Returns
- Task<ISam2Embedding>
Une tâche qui représente l'opération asynchrone et retourne un Sam2Embedding contenant les caractéristiques de l'image.
GetAllDetections(ISam2Embedding?)
Prédit et retourne les masques de segmentation pour tous les objets annotés en une seule passe (batch).
public Task<Dictionary<int, byte[]>> GetAllDetections(ISam2Embedding? externalEmbedding = null)
Parameters
externalEmbeddingISam2EmbeddingOptionnel. Un embedding externe à utiliser à la place de l'embedding courant.
Returns
- Task<Dictionary<int, byte[]>>
Une tâche qui représente l'opération asynchrone et retourne un dictionnaire associant chaque ID d'objet à son masque de segmentation.
GetDetections(int, ISam2Embedding?, bool)
Prédit et retourne le masque de segmentation pour un objet spécifique en utilisant les annotations fournies.
public Task<byte[]> GetDetections(int objectId, ISam2Embedding? externalEmbedding = null, bool usePreviousMask = false)
Parameters
objectIdintL'identifiant de l'objet pour lequel obtenir le masque.
externalEmbeddingISam2EmbeddingOptionnel. Un embedding externe à utiliser à la place de l'embedding courant.
usePreviousMaskboolOptionnel. Si vrai, utilise le masque de la prédiction précédente comme information supplémentaire pour affiner le résultat.
Returns
- Task<byte[]>
Une tâche qui représente l'opération asynchrone et retourne un tableau d'octets représentant le masque de segmentation binaire.
GetEncodeInputDimensions(int)
Récupère les dimensions d'un nœud d'entrée du modèle d'encodage par son index.
public IReadOnlyCollection<long> GetEncodeInputDimensions(int inputIndex = 0)
Parameters
inputIndexint
Returns
GetEncodeInputDimensions(string)
Récupère les dimensions d'un nœud d'entrée du modèle d'encodage par son nom.
public IReadOnlyCollection<long> GetEncodeInputDimensions(string inputName)
Parameters
inputNamestring
Returns
GetEncodeInputNames()
Récupère les noms des nœuds d'entrée du modèle d'encodage.
public IReadOnlyDictionary<int, string>? GetEncodeInputNames()
Returns
GetEncodeOutputDimensions(int)
Récupère les dimensions d'un nœud de sortie du modèle d'encodage par son index.
public IReadOnlyCollection<long> GetEncodeOutputDimensions(int outputIndex = 0)
Parameters
outputIndexint
Returns
GetEncodeOutputDimensions(string)
Récupère les dimensions d'un nœud de sortie du modèle d'encodage par son nom.
public IReadOnlyCollection<long> GetEncodeOutputDimensions(string outputName)
Parameters
outputNamestring
Returns
GetEncodeOutputNames()
Récupère les noms des nœuds de sortie du modèle d'encodage.
public IReadOnlyDictionary<int, string> GetEncodeOutputNames()
Returns
GetPredictInputDimensions(int)
Récupère les dimensions d'un nœud d'entrée du modèle de prédiction par son index.
public IReadOnlyCollection<long> GetPredictInputDimensions(int inputIndex = 0)
Parameters
inputIndexint
Returns
GetPredictInputDimensions(string)
Récupère les dimensions d'un nœud d'entrée du modèle de prédiction par son nom.
public IReadOnlyCollection<long> GetPredictInputDimensions(string inputName)
Parameters
inputNamestring
Returns
GetPredictInputNames()
Récupère les noms des nœuds d'entrée du modèle de prédiction.
public IReadOnlyDictionary<int, string>? GetPredictInputNames()
Returns
GetPredictOutputDimensions(int)
Récupère les dimensions d'un nœud de sortie du modèle de prédiction par son index.
public IReadOnlyCollection<long> GetPredictOutputDimensions(int outputIndex = 0)
Parameters
outputIndexint
Returns
GetPredictOutputDimensions(string)
Récupère les dimensions d'un nœud de sortie du modèle de prédiction par son nom.
public IReadOnlyCollection<long> GetPredictOutputDimensions(string outputName)
Parameters
outputNamestring
Returns
GetPredictOutputNames()
Récupère les noms des nœuds de sortie du modèle de prédiction.
public IReadOnlyDictionary<int, string> GetPredictOutputNames()
Returns
Initialize(IOnnxSessionOptions, IOnnxSessionOptions, ISAMSegmentationPreprocessor, ISAMSegmentationPostprocessor)
Initialise les moteurs d'encodage et de prédiction avec leurs options et processeurs respectifs.
public void Initialize(IOnnxSessionOptions encoderOptions, IOnnxSessionOptions predictOptions, ISAMSegmentationPreprocessor preprocessor, ISAMSegmentationPostprocessor postprocessor)
Parameters
encoderOptionsIOnnxSessionOptionsOptions de session pour le modèle d'encodage d'image.
predictOptionsIOnnxSessionOptionsOptions de session pour le modèle de prédiction de masques.
preprocessorISAMSegmentationPreprocessorL'implémentation du pré-processeur à utiliser.
postprocessorISAMSegmentationPostprocessorL'implémentation du post-processeur à utiliser.
InitializeAsync(IOnnxSessionOptions, IOnnxSessionOptions, ISAMSegmentationPreprocessor, ISAMSegmentationPostprocessor, CancellationToken)
Initialise SAM2 (encodeur + prédicteur) de manière asynchrone, en lançant les deux
InferenceSession en parallèle via Task.WhenAll. Vrai gain de temps
quand les deux modèles sont lourds (ex: TRT engine compilation).
public Task InitializeAsync(IOnnxSessionOptions encoderOptions, IOnnxSessionOptions predictOptions, ISAMSegmentationPreprocessor preprocessor, ISAMSegmentationPostprocessor postprocessor, CancellationToken cancellationToken = default)
Parameters
encoderOptionsIOnnxSessionOptionspredictOptionsIOnnxSessionOptionspreprocessorISAMSegmentationPreprocessorpostprocessorISAMSegmentationPostprocessorcancellationTokenCancellationToken
Returns
PredictWarmUp(int, int)
Exécute des inférences à blanc pour préchauffer uniquement le moteur de prédiction.
public void PredictWarmUp(int batchSize = 1, int iterations = 1)
Parameters
batchSizeintLa taille de batch à utiliser.
iterationsintNombre d'itérations de préchauffage (défaut 1).
PredictWarmUpAsync(int, int, CancellationToken)
Exécute de manière asynchrone des inférences à blanc pour préchauffer uniquement le moteur de prédiction.
public Task PredictWarmUpAsync(int batchSize = 1, int iterations = 1, CancellationToken cancellationToken = default)
Parameters
batchSizeintLa taille de batch à utiliser.
iterationsintNombre d'itérations de préchauffage (défaut 1).
cancellationTokenCancellationTokenLe jeton d'annulation.
Returns
WarmUp(int, int)
Exécute des inférences à blanc pour préchauffer les moteurs d'encodage et de prédiction.
public void WarmUp(int batchSize = 1, int iterations = 1)
Parameters
batchSizeintLa taille de batch à utiliser pour le préchauffage.
iterationsintNombre d'itérations de préchauffage (défaut 1).
WarmUpAsync(int, int, CancellationToken)
Exécute de manière asynchrone des inférences à blanc pour préchauffer les deux moteurs.
public Task WarmUpAsync(int batchSize = 1, int iterations = 1, CancellationToken cancellationToken = default)
Parameters
batchSizeintLa taille de batch à utiliser pour le préchauffage.
iterationsintNombre d'itérations de préchauffage (défaut 1).
cancellationTokenCancellationTokenLe jeton d'annulation.