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.
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].
public class RFDetrDetection : IImageConsumingArchitecture, IDisposable
- Inheritance
-
RFDetrDetection
- Implements
- Derived
- Inherited Members
Constructors
RFDetrDetection()
Constructeur par défaut — appeler Initialize(IOnnxSessionOptions, IRFDetrDetectionPreprocessor, IRFDetrDetectionPostprocessor) séparément.
public RFDetrDetection()
RFDetrDetection(IOnnxSessionOptions, IRFDetrDetectionPreprocessor, IRFDetrDetectionPostprocessor)
Constructeur combiné : initialise directement.
public RFDetrDetection(IOnnxSessionOptions options, IRFDetrDetectionPreprocessor preprocessor, IRFDetrDetectionPostprocessor postprocessor)
Parameters
optionsIOnnxSessionOptionspreprocessorIRFDetrDetectionPreprocessorpostprocessorIRFDetrDetectionPostprocessor
Fields
DefaultPostprocessor
Post-processeur courant.
protected IRFDetrDetectionPostprocessor? DefaultPostprocessor
Field Value
DefaultPreprocessor
Préprocesseur courant (CPU ou GPU).
protected IRFDetrDetectionPreprocessor? DefaultPreprocessor
Field Value
_inputImageSizes
Tailles originales des images du dernier batch.
protected ImageSize[] _inputImageSizes
Field Value
_lastBatchSize
Taille du dernier batch traité.
protected int _lastBatchSize
Field Value
_numClasses
Nombre de classes (C) — lu depuis la forme de sortie au premier run.
protected int _numClasses
Field Value
_numDetections
Nombre de détections (N) — lu depuis la forme de sortie au premier run.
protected int _numDetections
Field Value
_onnxEngine
Moteur ONNX sous-jacent.
protected OnnxEngine _onnxEngine
Field Value
_ortValueHelper
Helper de conversion OrtValue (CPU/CUDA).
protected OrtValueHelper? _ortValueHelper
Field Value
Properties
BlacklistClassIds
Collection en lecture seule des IDs de classe à exclure.
public IReadOnlyCollection<int> BlacklistClassIds { get; }
Property Value
IsInitialized
Vrai si le moteur est initialisé.
public bool IsInitialized { get; }
Property Value
IsRunning
Vrai si une inférence est en cours.
public bool IsRunning { get; }
Property Value
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
Methods
AddToBlacklist(int)
Ajoute un ID de classe à exclure des résultats.
public void AddToBlacklist(int classId)
Parameters
classIdint
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
contextISharedImageContext
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
inputIndexint
Returns
GetInputDimensions(string)
Récupère les dimensions d'un nœud d'entrée par nom.
public IReadOnlyCollection<long> GetInputDimensions(string inputName)
Parameters
inputNamestring
Returns
GetInputNames()
Récupère les noms des nœuds d'entrée.
public IReadOnlyDictionary<int, string>? GetInputNames()
Returns
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
outputDataT[]outputIndexint
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
confidenceThresholdfloatSeuil de confiance global.
boxesOutputIndexintIndex du tenseur
boxes(défaut = 0).logitsOutputIndexintIndex du tenseur
logits(défaut = 1).normalizeCoordinatesboolSi true, retourne des coordonnées normalisées.
Returns
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
classConfidenceThresholdsfloat[]Seuils de confiance par classe.
boxesOutputIndexintIndex du tenseur
boxes(défaut = 0).logitsOutputIndexintIndex du tenseur
logits(défaut = 1).normalizeCoordinatesboolSi true, retourne des coordonnées normalisées.
Returns
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
Returns
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
Returns
GetOutputNames()
Récupère les noms des nœuds de sortie.
public IReadOnlyDictionary<int, string> GetOutputNames()
Returns
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
optionsIOnnxSessionOptionspreprocessorIRFDetrDetectionPreprocessorpostprocessorIRFDetrDetectionPostprocessor
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
optionsIOnnxSessionOptionspreprocessorIRFDetrDetectionPreprocessorpostprocessorIRFDetrDetectionPostprocessorcancellationTokenCancellationToken
Returns
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
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
classIdint
RunInference(bool)
Exécute l'inférence de manière synchrone.
public void RunInference(bool clearInputAfterRun = true)
Parameters
clearInputAfterRunbool
RunInferenceAsync(bool, CancellationToken)
Exécute l'inférence de manière asynchrone.
public Task RunInferenceAsync(bool clearInputAfterRun = true, CancellationToken cancellationToken = default)
Parameters
clearInputAfterRunboolcancellationTokenCancellationToken
Returns
SetBlacklist(IEnumerable<int>)
Remplace la liste noire par la collection fournie.
public void SetBlacklist(IEnumerable<int> classIds)
Parameters
classIdsIEnumerable<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
packedBgrBuffersbyte[][]Tableau de N buffers BGR packed (un par image).
imageSizesImageSize[]Tableau de N tailles d'images (potentiellement hétérogènes).
inputIndexintIndex 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
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
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
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
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
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
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
WarmUp(int, int)
Effectue un préchauffage synchrone.
public void WarmUp(int batchSize = 1, int iterations = 1)
Parameters
WarmUpAsync(int, int, CancellationToken)
Effectue un préchauffage asynchrone.
public Task WarmUpAsync(int batchSize = 1, int iterations = 1, CancellationToken cancellationToken = default)
Parameters
batchSizeintTaille du batch.
iterationsintNombre d'itérations de préchauffage (défaut 1).
cancellationTokenCancellationTokenJeton d'annulation.