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

EncoderOptions IOnnxSessionOptions

Options de session pour le modèle d'encodage d'image.

PredictOptions IOnnxSessionOptions

Options de session pour le modèle de prédiction de masques.

preprocessor ISAMSegmentationPreprocessor

L'implémentation du pré-processeur à utiliser.

postprocessor ISAMSegmentationPostprocessor

L'implémentation du post-processeur à utiliser.

Fields

_defaultPostprocessor

L'implémentation du post-processeur à utiliser par défaut.

protected ISAMSegmentationPostprocessor? _defaultPostprocessor

Field Value

ISAMSegmentationPostprocessor

_defaultPreprocessor

L'implémentation du pré-processeur à utiliser par défaut.

protected ISAMSegmentationPreprocessor? _defaultPreprocessor

Field Value

ISAMSegmentationPreprocessor

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

IReadOnlyDictionary<int, ISAMAnnotationSet>

IsInitialized

Obtient une valeur indiquant si les deux moteurs (encodeur et prédicteur) ont été initialisés.

public bool IsInitialized { get; }

Property Value

bool

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

bool

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

IModelInputRequirements

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

objectId int

L'identifiant unique de l'objet à segmenter.

annotationPoints ISAMAnnotationPoint

Le 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

objectId int

L'identifiant unique de l'objet à segmenter.

annotationRectangle ISAMAnnotationRectangle

Le rectangle d'annotation.

AddAnnotation(int, SAMAnnotationSet)

Ajoute un ensemble pré-construit d'annotations pour un objet.

public void AddAnnotation(int objectId, SAMAnnotationSet newAnnotations)

Parameters

objectId int

L'identifiant unique de l'objet à segmenter.

newAnnotations SAMAnnotationSet

L'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

objectId int
mask byte[]
width int
height int

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

objectId int

L'identifiant unique de l'objet à segmenter.

annotationPoints IList<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

objectId int

L'identifiant unique de l'objet à segmenter.

annotationRectangles IList<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

objectId int

L'identifiant unique de l'objet à segmenter.

annotationRectangles IList<ISAMAnnotationRectangle>

Liste de rectangles d'annotation.

annotationPoints IList<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

objectId int

L'identifiant unique de l'objet à segmenter.

x float

Coordonnée X du point.

y float

Coordonnée Y du point.

label AnnotationLabelEnum

Type 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

objectId int

L'identifiant unique de l'objet à segmenter.

x float

Coordonnée X du coin supérieur gauche.

y float

Coordonnée Y du coin supérieur gauche.

width float

Largeur du rectangle.

height float

Hauteur 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

context ISharedImageContext

Contexte image partagé fourni par le Hub.

Exceptions

ArgumentNullException

Si context est null.

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

objectId int

L'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

cancellationToken CancellationToken

Jeton 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

packedBgrBuffer byte[]

Le buffer de l'image au format BGR (Bleu, Vert, Rouge) packé.

imageSize ImageSize

La 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_R byte[]

Buffer du canal Rouge.

planarBuffer_G byte[]

Buffer du canal Vert.

planarBuffer_B byte[]

Buffer du canal Bleu.

imageSize ImageSize

La 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

externalEmbedding ISam2Embedding

Optionnel. 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

objectId int

L'identifiant de l'objet pour lequel obtenir le masque.

externalEmbedding ISam2Embedding

Optionnel. Un embedding externe à utiliser à la place de l'embedding courant.

usePreviousMask bool

Optionnel. 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

inputIndex int

Returns

IReadOnlyCollection<long>

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

inputName string

Returns

IReadOnlyCollection<long>

GetEncodeInputNames()

Récupère les noms des nœuds d'entrée du modèle d'encodage.

public IReadOnlyDictionary<int, string>? GetEncodeInputNames()

Returns

IReadOnlyDictionary<int, string>

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

outputIndex int

Returns

IReadOnlyCollection<long>

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

outputName string

Returns

IReadOnlyCollection<long>

GetEncodeOutputNames()

Récupère les noms des nœuds de sortie du modèle d'encodage.

public IReadOnlyDictionary<int, string> GetEncodeOutputNames()

Returns

IReadOnlyDictionary<int, string>

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

inputIndex int

Returns

IReadOnlyCollection<long>

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

inputName string

Returns

IReadOnlyCollection<long>

GetPredictInputNames()

Récupère les noms des nœuds d'entrée du modèle de prédiction.

public IReadOnlyDictionary<int, string>? GetPredictInputNames()

Returns

IReadOnlyDictionary<int, string>

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

outputIndex int

Returns

IReadOnlyCollection<long>

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

outputName string

Returns

IReadOnlyCollection<long>

GetPredictOutputNames()

Récupère les noms des nœuds de sortie du modèle de prédiction.

public IReadOnlyDictionary<int, string> GetPredictOutputNames()

Returns

IReadOnlyDictionary<int, string>

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

encoderOptions IOnnxSessionOptions

Options de session pour le modèle d'encodage d'image.

predictOptions IOnnxSessionOptions

Options de session pour le modèle de prédiction de masques.

preprocessor ISAMSegmentationPreprocessor

L'implémentation du pré-processeur à utiliser.

postprocessor ISAMSegmentationPostprocessor

L'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

encoderOptions IOnnxSessionOptions
predictOptions IOnnxSessionOptions
preprocessor ISAMSegmentationPreprocessor
postprocessor ISAMSegmentationPostprocessor
cancellationToken CancellationToken

Returns

Task

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

batchSize int

La taille de batch à utiliser.

iterations int

Nombre 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

batchSize int

La taille de batch à utiliser.

iterations int

Nombre d'itérations de préchauffage (défaut 1).

cancellationToken CancellationToken

Le jeton d'annulation.

Returns

Task

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

batchSize int

La taille de batch à utiliser pour le préchauffage.

iterations int

Nombre 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

batchSize int

La taille de batch à utiliser pour le préchauffage.

iterations int

Nombre d'itérations de préchauffage (défaut 1).

cancellationToken CancellationToken

Le jeton d'annulation.

Returns

Task