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. |
utils |
Utilities for export workflows. |
wrappers |
ONNX/TensorRT export wrappers. |
Classes:
| Name | Description |
|---|---|
ExportMetadata |
Metadata embedded or saved alongside 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. |
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 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 | |
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
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, numerical_check=False, numerical_atol=0.001, numerical_rtol=0.001, static_hw=None)
¶
Export a PyTorch model to ONNX.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model
|
Module
|
The PyTorch module to export. |
required |
save_path
|
str | Path
|
Destination path for the |
required |
input_shape
|
Iterable[int]
|
Shape of the dummy input used to trace the graph. |
(1, 1, 512, 512)
|
input_dtype
|
dtype
|
Dtype of the dummy input ( |
uint8
|
opset_version
|
int
|
ONNX opset for the (default) TorchScript exporter. |
17
|
dynamic_axes
|
Optional[Dict[str, Dict[int, str]]]
|
Dynamic-axis spec; defaults to batch/height/width dynamic on
the |
None
|
input_names
|
Optional[List[str]]
|
ONNX input names; defaults to |
None
|
output_names
|
Optional[List[str]]
|
ONNX output names; inferred from a reference forward if
|
None
|
do_constant_folding
|
bool
|
Whether to constant-fold during export. |
True
|
verify
|
bool
|
If |
True
|
numerical_check
|
bool
|
If |
False
|
numerical_atol
|
float
|
Absolute tolerance for the numerical parity check. |
0.001
|
numerical_rtol
|
float
|
Relative tolerance for the numerical parity check. |
0.001
|
static_hw
|
Optional[bool]
|
If |
None
|
Source code in sleap_nn/export/exporters/onnx_exporter.py
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 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 | |
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, static_hw=None)
¶
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
|
static_hw
|
Optional[bool]
|
Whether the engine takes only the traced height/width (a RoPE
backbone's grid is fixed at trace time). |
None
|
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
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 | |