export
sleap_nn.export
¶
Export utilities for sleap-nn.
Modules:
| Name | Description |
|---|---|
cli |
CLI entry points for export workflows. |
exporters |
Exporters for serialized model formats. |
metadata |
Metadata helpers for exported models. |
predictors |
Predictors for exported models. |
utils |
Utilities for export workflows. |
wrappers |
ONNX/TensorRT export wrappers. |
Classes:
| Name | Description |
|---|---|
ExportMetadata |
Metadata embedded or saved alongside exported models. |
ONNXPredictor |
ONNX Runtime inference with provider selection. |
TensorRTPredictor |
TensorRT inference for exported models. |
Functions:
| Name | Description |
|---|---|
build_bottomup_candidate_template |
Build candidate template matching ONNX wrapper's line_scores ordering. |
export_model |
Export a model to the requested format. |
export_to_onnx |
Export a PyTorch model to ONNX. |
export_to_tensorrt |
Export a PyTorch model to TensorRT format. |
load_exported_model |
Load an exported model and return a predictor instance. |
ExportMetadata
dataclass
¶
Metadata embedded or saved alongside exported models.
Methods:
| Name | Description |
|---|---|
default_timestamp |
Return an ISO timestamp for export. |
from_dict |
Load from dict. |
load |
Load from JSON file. |
save |
Save to JSON file. |
to_dict |
Convert to JSON-serializable dict. |
Source code in sleap_nn/export/metadata.py
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | |
default_timestamp()
classmethod
¶
from_dict(data)
classmethod
¶
Load from dict.
Source code in sleap_nn/export/metadata.py
load(path)
classmethod
¶
save(path)
¶
to_dict()
¶
Convert to JSON-serializable dict.
Source code in sleap_nn/export/metadata.py
ONNXPredictor
¶
Bases: ExportPredictor
ONNX Runtime inference with provider selection.
Methods:
| Name | Description |
|---|---|
__init__ |
Initialize ONNX predictor with execution providers. |
benchmark |
Benchmark inference latency and throughput. |
predict |
Run inference on a batch of images. |
Source code in sleap_nn/export/predictors/onnx.py
__init__(model_path, device='auto', providers=None)
¶
Initialize ONNX predictor with execution providers.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model_path
|
str
|
Path to the ONNX model file. |
required |
device
|
str
|
Device for inference ("auto", "cpu", or "cuda"). |
'auto'
|
providers
|
Optional[Iterable[str]]
|
ONNX Runtime execution providers. Auto-selected if None. |
None
|
Source code in sleap_nn/export/predictors/onnx.py
benchmark(image, n_warmup=50, n_runs=200)
¶
Benchmark inference latency and throughput.
Source code in sleap_nn/export/predictors/onnx.py
predict(image)
¶
Run inference on a batch of images.
Source code in sleap_nn/export/predictors/onnx.py
TensorRTPredictor
¶
Bases: ExportPredictor
TensorRT inference for exported models.
This predictor loads a native TensorRT engine file (.trt) and provides inference capabilities using CUDA for high-throughput predictions.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
engine_path
|
str | Path
|
Path to the TensorRT engine file (.trt). |
required |
device
|
str
|
Device to run inference on (only "cuda" supported for TRT). |
'cuda'
|
Example
predictor = TensorRTPredictor("model.trt") outputs = predictor.predict(images) # uint8 [B, C, H, W]
Methods:
| Name | Description |
|---|---|
__init__ |
Initialize TensorRT predictor with a serialized engine. |
benchmark |
Benchmark inference performance. |
predict |
Run TensorRT inference. |
Source code in sleap_nn/export/predictors/tensorrt.py
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | |
__init__(engine_path, device='cuda')
¶
Initialize TensorRT predictor with a serialized engine.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
engine_path
|
str | Path
|
Path to the TensorRT engine file. |
required |
device
|
str
|
Device for inference ("cuda" or "auto"). TensorRT requires CUDA. |
'cuda'
|
Source code in sleap_nn/export/predictors/tensorrt.py
benchmark(image, n_warmup=50, n_runs=200)
¶
Benchmark inference performance.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
image
|
ndarray
|
Input image(s) as numpy array [B, C, H, W]. |
required |
n_warmup
|
int
|
Number of warmup runs (not timed). |
50
|
n_runs
|
int
|
Number of timed runs. |
200
|
Returns:
| Type | Description |
|---|---|
Dict[str, float]
|
Dict with timing statistics: - mean_ms: Mean inference time in milliseconds - std_ms: Standard deviation of inference time - min_ms: Minimum inference time - max_ms: Maximum inference time - fps: Frames per second (based on mean time and batch size) |
Source code in sleap_nn/export/predictors/tensorrt.py
predict(image)
¶
Run TensorRT inference.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
image
|
ndarray
|
Input image(s) as numpy array [B, C, H, W] with uint8 dtype. |
required |
Returns:
| Type | Description |
|---|---|
Dict[str, ndarray]
|
Dict mapping output names to numpy arrays. |
Source code in sleap_nn/export/predictors/tensorrt.py
build_bottomup_candidate_template(n_nodes, max_peaks_per_node, edge_inds)
¶
Build candidate template matching ONNX wrapper's line_scores ordering.
The ONNX BottomUpONNXWrapper produces line_scores with shape (n_edges, k*k) where for each edge connecting (src_node, dst_node), position i*k + j corresponds to: - src peak flat index: src_node * k + i - dst peak flat index: dst_node * k + j
This function builds edge_inds and edge_peak_inds tensors that match this exact ordering, so that line_scores_flat[idx] corresponds to edge_peak_inds[idx].
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
n_nodes
|
int
|
Number of nodes in the skeleton. |
required |
max_peaks_per_node
|
int
|
Maximum peaks per node (k) used during export. |
required |
edge_inds
|
List[Tuple[int, int]]
|
List of (src_node, dst_node) tuples defining skeleton edges. |
required |
Returns:
| Type | Description |
|---|---|
Tuple['torch.Tensor', 'torch.Tensor', 'torch.Tensor']
|
Tuple of (peak_channel_inds, edge_inds_tensor, edge_peak_inds_tensor): - peak_channel_inds: (n_nodes * k,) tensor mapping flat peak index to node - edge_inds_tensor: (n_edges * k * k,) tensor of edge indices for each candidate - edge_peak_inds_tensor: (n_edges * k * k, 2) tensor of (src, dst) peak indices |
Example
from sleap_nn.export.utils import build_bottomup_candidate_template peak_ch, edge_inds, edge_peaks = build_bottomup_candidate_template( ... n_nodes=15, max_peaks_per_node=20, edge_inds=[(1, 2), (1, 5)] ... )
Use with ONNX output:¶
line_scores_flat = line_scores.reshape(-1) valid_scores = line_scores_flat[valid_mask] valid_edge_peaks = edge_peaks[valid_mask]
Note
This function is necessary because get_connection_candidates() in
sleap_nn.inference.paf_grouping uses unstable argsort, which shuffles
peak indices within each node and breaks alignment with ONNX output ordering.
Source code in sleap_nn/export/utils.py
export_model(model, save_path, fmt='onnx', input_shape=(1, 1, 512, 512), opset_version=17, output_names=None, verify=True, **kwargs)
¶
Export a model to the requested format.
Source code in sleap_nn/export/exporters/__init__.py
export_to_onnx(model, save_path, input_shape=(1, 1, 512, 512), input_dtype=torch.uint8, opset_version=17, dynamic_axes=None, input_names=None, output_names=None, do_constant_folding=True, verify=True)
¶
Export a PyTorch model to ONNX.
Source code in sleap_nn/export/exporters/onnx_exporter.py
export_to_tensorrt(model, save_path, input_shape=(1, 1, 512, 512), input_dtype=torch.uint8, precision='fp16', min_shape=None, opt_shape=None, max_shape=None, workspace_size=2 << 30, method='onnx', verbose=True)
¶
Export a PyTorch model to TensorRT format.
This function supports multiple compilation methods: - "onnx": Exports to ONNX first, then compiles with TensorRT (most reliable) - "jit": Uses torch.jit.trace + torch_tensorrt.compile (alternative)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model
|
Module
|
The PyTorch model to export (typically an ONNX wrapper). |
required |
save_path
|
str | Path
|
Path to save the TensorRT engine (.trt file). |
required |
input_shape
|
Tuple[int, int, int, int]
|
(B, C, H, W) optimal input tensor shape. |
(1, 1, 512, 512)
|
input_dtype
|
dtype
|
Input tensor dtype (torch.uint8 or torch.float32). |
uint8
|
precision
|
str
|
Model precision - "fp32" or "fp16". |
'fp16'
|
min_shape
|
Optional[Tuple[int, int, int, int]]
|
Minimum input shape for dynamic shapes (default: batch=1, H/W halved). |
None
|
opt_shape
|
Optional[Tuple[int, int, int, int]]
|
Optimal input shape (default: same as input_shape). |
None
|
max_shape
|
Optional[Tuple[int, int, int, int]]
|
Maximum input shape (default: batch=16, H/W doubled). |
None
|
workspace_size
|
int
|
TensorRT workspace size in bytes (default 2GB). |
2 << 30
|
method
|
str
|
Compilation method - "onnx" or "jit". |
'onnx'
|
verbose
|
bool
|
Print export info. |
True
|
Returns:
| Type | Description |
|---|---|
Path
|
Path to the exported TensorRT engine. |
Note
TensorRT models are NOT cross-platform. The exported model will only work on the same GPU architecture and TensorRT version used for export.
Source code in sleap_nn/export/exporters/tensorrt_exporter.py
load_exported_model(model_path, runtime='auto', device='auto', **kwargs)
¶
Load an exported model and return a predictor instance.