Class RFDetrDetection

Namespace
NT2I.ONNX.Architectures.RFDetr
Assembly
NT2I.ONNX.Architectures.dll

Architecture de haut niveau pour les modèles de détection RF-DETR.

RF-DETR (Roboflow Detection TRansformer) est un détecteur d'objets temps-réel basé sur DETR, qui produit deux sorties distinctes :

  • boxes [B, N, 4] — boîtes en (cx, cy, w, h) normalisé.
  • logits [B, N, C] — scores bruts de classe.
Contrairement à YOLO, RF-DETR ne requiert pas de NMS.

Pipeline de pré-traitement (identique à SAM2) : normalisation ImageNet + StretchResize → NCHW float32. Cela permet un cache hit dans CudaSharedImageContext si RF-DETR et SAM2 partagent le même Hub.

Nom des tenseurs d'entrée/sortie (convention RF-DETR ONNX standard, à vérifier avec Netron) :

  • Entrée : "images" (index 0).
  • Sortie 0 : "boxes"[B, N, 4].
  • Sortie 1 : "logits"[B, N, C].
Si le modèle exporte des noms différents, utiliser les surcharges par index.
public class RFDetrDetection : IImageConsumingArchitecture, IDisposable
Inheritance
RFDetrDetection
Implements
Derived
Inherited Members

Constructors

RFDetrDetection()

public RFDetrDetection()

RFDetrDetection(IOnnxSessionOptions, IRFDetrDetectionPreprocessor, IRFDetrDetectionPostprocessor)

Constructeur combiné : initialise directement.

public RFDetrDetection(IOnnxSessionOptions options, IRFDetrDetectionPreprocessor preprocessor, IRFDetrDetectionPostprocessor postprocessor)

Parameters

options IOnnxSessionOptions
preprocessor IRFDetrDetectionPreprocessor
postprocessor IRFDetrDetectionPostprocessor

Fields

DefaultPostprocessor

Post-processeur courant.

protected IRFDetrDetectionPostprocessor? DefaultPostprocessor

Field Value

IRFDetrDetectionPostprocessor

DefaultPreprocessor

Préprocesseur courant (CPU ou GPU).

protected IRFDetrDetectionPreprocessor? DefaultPreprocessor

Field Value

IRFDetrDetectionPreprocessor

_inputImageSizes

Tailles originales des images du dernier batch.

protected ImageSize[] _inputImageSizes

Field Value

ImageSize[]

_lastBatchSize

Taille du dernier batch traité.

protected int _lastBatchSize

Field Value

int

_numClasses

Nombre de classes (C) — lu depuis la forme de sortie au premier run.

protected int _numClasses

Field Value

int

_numDetections

Nombre de détections (N) — lu depuis la forme de sortie au premier run.

protected int _numDetections

Field Value

int

_onnxEngine

Moteur ONNX sous-jacent.

protected OnnxEngine _onnxEngine

Field Value

OnnxEngine

_ortValueHelper

Helper de conversion OrtValue (CPU/CUDA).

protected OrtValueHelper? _ortValueHelper

Field Value

OrtValueHelper

Properties

BlacklistClassIds

Collection en lecture seule des IDs de classe à exclure.

public IReadOnlyCollection<int> BlacklistClassIds { get; }

Property Value

IReadOnlyCollection<int>

IsInitialized

Vrai si le moteur est initialisé.

public bool IsInitialized { get; }

Property Value

bool

IsRunning

Vrai si une inférence est en cours.

public bool IsRunning { get; }

Property Value

bool

Requirements

Requirements Hub — disponible après Initialize(IOnnxSessionOptions, IRFDetrDetectionPreprocessor, IRFDetrDetectionPostprocessor).

RF-DETR utilise ImageNet + StretchResize, identique à SAM2. Deux modèles enregistrés dans le même CudaSharedImageContext partageront le même tenseur VRAM (cache hit).

public IModelInputRequirements Requirements { get; }

Property Value

IModelInputRequirements

Methods

AddToBlacklist(int)

Ajoute un ID de classe à exclure des résultats.

public void AddToBlacklist(int classId)

Parameters

classId int

BindFromContext(ISharedImageContext)

Lie le tenseur d'entrée RF-DETR au buffer fourni par le ISharedImageContext.

Si RF-DETR et SAM2 sont enregistrés dans le même Hub avec les mêmes dimensions cibles, GetTensor retourne un cache hit → aucun kernel CUDA supplémentaire n'est exécuté.

public void BindFromContext(ISharedImageContext context)

Parameters

context ISharedImageContext

CheckInitialized()

Lève une exception si le moteur n'est pas initialisé.

protected void CheckInitialized()

CleanModelFolder()

Nettoie le dossier modèle extrait.

public void CleanModelFolder()

CleanProfilingFile()

Supprime le fichier de profilage.

public void CleanProfilingFile()

ClearBlacklist()

Vide la liste noire.

public void ClearBlacklist()

ClearInput()

Efface les données d'entrée.

public void ClearInput()

Dispose()

Libère toutes les ressources.

public void Dispose()

GetInputDimensions(int)

Récupère les dimensions d'un nœud d'entrée par index.

public IReadOnlyCollection<long> GetInputDimensions(int inputIndex = 0)

Parameters

inputIndex int

Returns

IReadOnlyCollection<long>

GetInputDimensions(string)

Récupère les dimensions d'un nœud d'entrée par nom.

public IReadOnlyCollection<long> GetInputDimensions(string inputName)

Parameters

inputName string

Returns

IReadOnlyCollection<long>

GetInputNames()

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

public IReadOnlyDictionary<int, string>? GetInputNames()

Returns

IReadOnlyDictionary<int, string>

GetOutputData<T>(out T[], int)

Lit le tenseur de sortie à l'index donné et le copie dans un tableau managé.

protected void GetOutputData<T>(out T[] outputData, int outputIndex) where T : unmanaged

Parameters

outputData T[]
outputIndex int

Type Parameters

T

GetOutputDetection(float, int, int, bool)

Post-traite les deux sorties du modèle et retourne les boîtes englobantes.

public IEnumerable<IEnumerable<IBoundingBox>> GetOutputDetection(float confidenceThreshold, int boxesOutputIndex = 0, int logitsOutputIndex = 1, bool normalizeCoordinates = false)

Parameters

confidenceThreshold float

Seuil de confiance global.

boxesOutputIndex int

Index du tenseur boxes (défaut = 0).

logitsOutputIndex int

Index du tenseur logits (défaut = 1).

normalizeCoordinates bool

Si true, retourne des coordonnées normalisées.

Returns

IEnumerable<IEnumerable<IBoundingBox>>

GetOutputDetection(float[], int, int, bool)

Post-traite les deux sorties du modèle et retourne les boîtes englobantes.

public IEnumerable<IEnumerable<IBoundingBox>> GetOutputDetection(float[] classConfidenceThresholds, int boxesOutputIndex = 0, int logitsOutputIndex = 1, bool normalizeCoordinates = false)

Parameters

classConfidenceThresholds float[]

Seuils de confiance par classe.

boxesOutputIndex int

Index du tenseur boxes (défaut = 0).

logitsOutputIndex int

Index du tenseur logits (défaut = 1).

normalizeCoordinates bool

Si true, retourne des coordonnées normalisées.

Returns

IEnumerable<IEnumerable<IBoundingBox>>

GetOutputDetectionAsSpan(float, int, int)

Post-traite les deux sorties du modèle et retourne un accès Span haute-performance.

public IBatchDetections<float> GetOutputDetectionAsSpan(float confidenceThreshold, int boxesOutputIndex = 0, int logitsOutputIndex = 1)

Parameters

confidenceThreshold float
boxesOutputIndex int
logitsOutputIndex int

Returns

IBatchDetections<float>

GetOutputDetectionAsSpan(float[], int, int)

Post-traite les deux sorties du modèle et retourne un accès Span haute-performance.

public IBatchDetections<float> GetOutputDetectionAsSpan(float[] classConfidenceThresholds, int boxesOutputIndex = 0, int logitsOutputIndex = 1)

Parameters

classConfidenceThresholds float[]
boxesOutputIndex int
logitsOutputIndex int

Returns

IBatchDetections<float>

GetOutputNames()

Récupère les noms des nœuds de sortie.

public IReadOnlyDictionary<int, string> GetOutputNames()

Returns

IReadOnlyDictionary<int, string>

Initialize(IOnnxSessionOptions, IRFDetrDetectionPreprocessor, IRFDetrDetectionPostprocessor)

Initialise le moteur RF-DETR avec les options et processeurs fournis.

public void Initialize(IOnnxSessionOptions options, IRFDetrDetectionPreprocessor preprocessor, IRFDetrDetectionPostprocessor postprocessor)

Parameters

options IOnnxSessionOptions
preprocessor IRFDetrDetectionPreprocessor
postprocessor IRFDetrDetectionPostprocessor

InitializeAsync(IOnnxSessionOptions, IRFDetrDetectionPreprocessor, IRFDetrDetectionPostprocessor, CancellationToken)

Initialise le moteur RF-DETR de manière asynchrone (la création de la InferenceSession ORT est offload sur un thread du ThreadPool).

public Task InitializeAsync(IOnnxSessionOptions options, IRFDetrDetectionPreprocessor preprocessor, IRFDetrDetectionPostprocessor postprocessor, CancellationToken cancellationToken = default)

Parameters

options IOnnxSessionOptions
preprocessor IRFDetrDetectionPreprocessor
postprocessor IRFDetrDetectionPostprocessor
cancellationToken CancellationToken

Returns

Task

ReadOutputShapes(int, int)

Déduit N (numDetections) et C (numClasses) depuis les dimensions des tenseurs de sortie.

protected void ReadOutputShapes(int boxesOutputIndex, int logitsOutputIndex)

Parameters

boxesOutputIndex int
logitsOutputIndex int

Remarks

On lit les shapes résolues depuis les OrtValue de sortie (post-inférence) et non depuis le OutputMetadata de la session : pour un modèle ONNX exporté en batch dynamique (axes -1), les métadonnées renvoient -1 sur N et C, ce qui ferait sortir immédiatement la boucle de décodage et retournerait 0 détection. Les OrtValue post-run, eux, portent toujours les dimensions concrètes.

RemoveFromBlacklist(int)

Retire un ID de classe de la liste noire.

public void RemoveFromBlacklist(int classId)

Parameters

classId int

RunInference(bool)

Exécute l'inférence de manière synchrone.

public void RunInference(bool clearInputAfterRun = true)

Parameters

clearInputAfterRun bool

RunInferenceAsync(bool, CancellationToken)

Exécute l'inférence de manière asynchrone.

public Task RunInferenceAsync(bool clearInputAfterRun = true, CancellationToken cancellationToken = default)

Parameters

clearInputAfterRun bool
cancellationToken CancellationToken

Returns

Task

SetBlacklist(IEnumerable<int>)

Remplace la liste noire par la collection fournie.

public void SetBlacklist(IEnumerable<int> classIds)

Parameters

classIds IEnumerable<int>

SetInputBatchImageBgr(byte[][], ImageSize[], int)

Définit et pré-traite un batch d'images BGR (mode autonome, par index).

public void SetInputBatchImageBgr(byte[][] packedBgrBuffers, ImageSize[] imageSizes, int inputIndex = 0)

Parameters

packedBgrBuffers byte[][]

Tableau de N buffers BGR packed (un par image).

imageSizes ImageSize[]

Tableau de N tailles d'images (potentiellement hétérogènes).

inputIndex int

Index du nœud d'entrée du modèle ONNX.

SetInputBatchImageBgr(byte[][], ImageSize[], string)

Définit et pré-traite un batch d'images BGR (mode autonome, par nom).

Les images peuvent avoir des tailles d'entrée différentes ; toutes seront redimensionnées vers la taille cible du réseau via StretchResize + ImageNet.

public void SetInputBatchImageBgr(byte[][] packedBgrBuffers, ImageSize[] imageSizes, string inputName)

Parameters

packedBgrBuffers byte[][]
imageSizes ImageSize[]
inputName string

SetInputBatchImagePlanar(byte[][], byte[][], byte[][], ImageSize[], int)

Définit et pré-traite un batch d'images planaires R/G/B (mode autonome, par index).

public void SetInputBatchImagePlanar(byte[][] r, byte[][] g, byte[][] b, ImageSize[] imageSizes, int inputIndex = 0)

Parameters

r byte[][]
g byte[][]
b byte[][]
imageSizes ImageSize[]
inputIndex int

SetInputBatchImagePlanar(byte[][], byte[][], byte[][], ImageSize[], string)

Définit et pré-traite un batch d'images planaires R/G/B (mode autonome, par nom).

public void SetInputBatchImagePlanar(byte[][] r, byte[][] g, byte[][] b, ImageSize[] imageSizes, string inputName)

Parameters

r byte[][]
g byte[][]
b byte[][]
imageSizes ImageSize[]
inputName string

SetInputImageBgr(byte[], ImageSize, int)

Définit et pré-traite une image BGR comme entrée (mode autonome, index 0).

public void SetInputImageBgr(byte[] packedBgrBuffer, ImageSize imageSize, int inputIndex = 0)

Parameters

packedBgrBuffer byte[]
imageSize ImageSize
inputIndex int

SetInputImageBgr(byte[], ImageSize, string)

Définit et pré-traite une image BGR comme entrée (mode autonome, par nom).

public void SetInputImageBgr(byte[] packedBgrBuffer, ImageSize imageSize, string inputName)

Parameters

packedBgrBuffer byte[]
imageSize ImageSize
inputName string

SetInputImagePlanar(byte[], byte[], byte[], ImageSize, int)

Définit et pré-traite une image planaire comme entrée (par index).

public void SetInputImagePlanar(byte[] r, byte[] g, byte[] b, ImageSize imageSize, int inputIndex = 0)

Parameters

r byte[]
g byte[]
b byte[]
imageSize ImageSize
inputIndex int

SetInputImagePlanar(byte[], byte[], byte[], ImageSize, string)

Définit et pré-traite une image planaire comme entrée (par nom).

public void SetInputImagePlanar(byte[] r, byte[] g, byte[] b, ImageSize imageSize, string inputName)

Parameters

r byte[]
g byte[]
b byte[]
imageSize ImageSize
inputName string

WarmUp(int, int)

Effectue un préchauffage synchrone.

public void WarmUp(int batchSize = 1, int iterations = 1)

Parameters

batchSize int

Taille du batch.

iterations int

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

WarmUpAsync(int, int, CancellationToken)

Effectue un préchauffage asynchrone.

public Task WarmUpAsync(int batchSize = 1, int iterations = 1, CancellationToken cancellationToken = default)

Parameters

batchSize int

Taille du batch.

iterations int

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

cancellationToken CancellationToken

Jeton d'annulation.

Returns

Task