jamal-one commited on
Commit
2350a31
·
verified ·
1 Parent(s): e3ea216

Add ExecuTorch mobile/edge programs and model-card usage

Browse files

XNNPACK FP32/INT8, Core ML FP32, and Vulkan FP32 .pte programs for small, small_plus, and base, with manifest.json (sizes, SHA-256, delegation, held-out mIoU).

.gitattributes CHANGED
@@ -33,3 +33,15 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ mobile/base/pyrafuse_base_coreml_fp32.pte filter=lfs diff=lfs merge=lfs -text
37
+ mobile/base/pyrafuse_base_vulkan_fp32.pte filter=lfs diff=lfs merge=lfs -text
38
+ mobile/base/pyrafuse_base_xnnpack_fp32.pte filter=lfs diff=lfs merge=lfs -text
39
+ mobile/base/pyrafuse_base_xnnpack_int8.pte filter=lfs diff=lfs merge=lfs -text
40
+ mobile/small/pyrafuse_small_coreml_fp32.pte filter=lfs diff=lfs merge=lfs -text
41
+ mobile/small/pyrafuse_small_vulkan_fp32.pte filter=lfs diff=lfs merge=lfs -text
42
+ mobile/small/pyrafuse_small_xnnpack_fp32.pte filter=lfs diff=lfs merge=lfs -text
43
+ mobile/small/pyrafuse_small_xnnpack_int8.pte filter=lfs diff=lfs merge=lfs -text
44
+ mobile/small_plus/pyrafuse_small_plus_coreml_fp32.pte filter=lfs diff=lfs merge=lfs -text
45
+ mobile/small_plus/pyrafuse_small_plus_vulkan_fp32.pte filter=lfs diff=lfs merge=lfs -text
46
+ mobile/small_plus/pyrafuse_small_plus_xnnpack_fp32.pte filter=lfs diff=lfs merge=lfs -text
47
+ mobile/small_plus/pyrafuse_small_plus_xnnpack_int8.pte filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -11,6 +11,9 @@ tags:
11
  - fabric-segmentation
12
  - dinov3
13
  - tensorrt
 
 
 
14
  ---
15
 
16
  # PyraFuse: skin, fabric, and background segmentation
@@ -46,9 +49,76 @@ model = load_pretrained("base", revision="v1.0.0", device="cuda")
46
  Inputs must be RGB, ImageNet-normalised, and have height and width divisible by
47
  16. The default checkpoint configuration uses 448 × 448 inputs.
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  ## Release policy
50
 
51
- These eager PyTorch checkpoint bundles are the portable source of truth.
 
 
52
  TensorRT engines are deliberately not distributed here because they are tied to
53
  the target GPU, CUDA, TensorRT version, precision, and optimization profile.
54
  Build and validate TensorRT engines on the deployment host from the PyTorch
 
11
  - fabric-segmentation
12
  - dinov3
13
  - tensorrt
14
+ - executorch
15
+ - on-device
16
+ - mobile
17
  ---
18
 
19
  # PyraFuse: skin, fabric, and background segmentation
 
49
  Inputs must be RGB, ImageNet-normalised, and have height and width divisible by
50
  16. The default checkpoint configuration uses 448 × 448 inputs.
51
 
52
+ ## Mobile and edge: ExecuTorch programs
53
+
54
+ The `mobile/` folder contains ready-to-run [ExecuTorch](https://executorch.ai)
55
+ programs for Android, iOS, React Native, Flutter, and embedded Linux. The same
56
+ `.pte` file runs in every framework that embeds the ExecuTorch runtime.
57
+
58
+ ```text
59
+ mobile/
60
+ ├── manifest.json # sizes, SHA-256, delegation, held-out mIoU
61
+ ├── small/pyrafuse_small_<target>.pte
62
+ ├── small_plus/pyrafuse_small_plus_<target>.pte
63
+ └── base/pyrafuse_base_<target>.pte
64
+ ```
65
+
66
+ | Target | Runs on | Precision |
67
+ | --- | --- | --- |
68
+ | `xnnpack_fp32` | CPU: Android, iOS, macOS, Linux/ARM boards | FP32 |
69
+ | `xnnpack_int8` | same CPUs, about 4× smaller | INT8 weights, dynamic INT8 activations |
70
+ | `coreml_fp32` | iOS 17+ / macOS 14+ GPU and CPU via Core ML | FP32 |
71
+ | `vulkan_fp32` | Android GPU via Vulkan | FP32 |
72
+
73
+ | Variant | Program | Size | mIoU | Agreement with PyTorch |
74
+ | --- | --- | ---: | ---: | ---: |
75
+ | `small` | PyTorch reference | | 0.907 | |
76
+ | | `xnnpack_fp32` | 91 MB | 0.907 | 100.00% |
77
+ | | `xnnpack_int8` | 23 MB | 0.906 | 99.78% |
78
+ | | `coreml_fp32` | 92 MB | on device | on device |
79
+ | | `vulkan_fp32` | 91 MB | on device | on device |
80
+ | `small_plus` | PyTorch reference | | 0.908 | |
81
+ | | `xnnpack_fp32` | 119 MB | 0.908 | 100.00% |
82
+ | | `xnnpack_int8` | 31 MB | 0.907 | 99.74% |
83
+ | | `coreml_fp32` | 121 MB | on device | on device |
84
+ | | `vulkan_fp32` | 119 MB | on device | on device |
85
+ | `base` | PyTorch reference | | 0.912 | |
86
+ | | `xnnpack_fp32` | 348 MB | 0.912 | 100.00% |
87
+ | | `xnnpack_int8` | 88 MB | 0.912 | 99.80% |
88
+ | | `coreml_fp32` | 349 MB | on device | on device |
89
+ | | `vulkan_fp32` | 348 MB | on device | on device |
90
+
91
+ mIoU is measured on the first 200 images of the held-out test split at 448 px by executing each program with the ExecuTorch runtime; the Core ML and Vulkan programs need Apple or Android hardware and are not yet scored.
92
+
93
+ **Contract.** Input `float32 [1, 3, 448, 448]`: RGB, stretch-resized, divided by
94
+ 255 (ImageNet normalisation is inside the program). Output `float32 [1, 3, 448, 448]`
95
+ logits for `background`, `fabric`, `skin`; take `argmax` over dim 1.
96
+
97
+ ```python
98
+ from executorch.runtime import Runtime
99
+ from pyrafuse import download_mobile_model # pip install "pyrafuse[mobile]"
100
+
101
+ forward = Runtime.get().load_program(
102
+ download_mobile_model("small", "xnnpack_int8")).load_method("forward")
103
+ logits = forward.execute([image])[0] # image: float32 [1, 3, 448, 448] in [0, 1]
104
+ ```
105
+
106
+ React Native (`react-native-executorch` 0.10+) loads these files directly with
107
+ `useSemanticSegmenter` using labels `['background', 'fabric', 'skin']`,
108
+ `resizeMode: 'stretch'`, and `normalizeOpts: { alpha: 1 / 255, beta: 0 }`.
109
+ Copy-paste snippets for React Native, Flutter, Kotlin, Swift, and C++ are in the
110
+ [code repository README](https://github.com/jamal-saeedi/PyraFuse#mobile-and-edge-deployment).
111
+
112
+ There are no FP16 programs: DINOv3's first block produces attention logits up
113
+ to about 2.5 × 10⁶, beyond the FP16 range, so FP16 backends (including the Core
114
+ ML Neural Engine) output NaNs. Core ML and Vulkan programs are validated at
115
+ export but have not yet been benchmarked on devices.
116
+
117
  ## Release policy
118
 
119
+ These eager PyTorch checkpoint bundles are the portable source of truth; the
120
+ `mobile/` ExecuTorch programs are exported from them with the repository's
121
+ `scripts/export_mobile.py`.
122
  TensorRT engines are deliberately not distributed here because they are tied to
123
  the target GPU, CUDA, TensorRT version, precision, and optimization profile.
124
  Build and validate TensorRT engines on the deployment host from the PyTorch
mobile/base/pyrafuse_base_coreml_fp32.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0cf0c3e2b71c476a55f035aacb74dfffe163cf60c4112601246830245baf94c6
3
+ size 349313802
mobile/base/pyrafuse_base_vulkan_fp32.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:74c3cdea6c86b836fa7f5f3daf1f2fad86d3eaa4152ba20a043dca7149b8b49f
3
+ size 347829004
mobile/base/pyrafuse_base_xnnpack_fp32.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:eb349ab8f49b46e710edfddc791d9c250ffcc29938fba831e80dcd6e012c862e
3
+ size 347851148
mobile/base/pyrafuse_base_xnnpack_int8.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8c27a182b6e66284ac7d4332e945d1b329abf07fa7aaa63b228a6b6a90868df1
3
+ size 87957004
mobile/manifest.json ADDED
@@ -0,0 +1,403 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "programs": [
3
+ {
4
+ "file": "small/pyrafuse_small_xnnpack_fp32.pte",
5
+ "target": "xnnpack_fp32",
6
+ "backend": "xnnpack",
7
+ "precision": "fp32",
8
+ "runs_on": "CPU on Android, iOS, macOS, Linux/ARM edge",
9
+ "size_bytes": 90837004,
10
+ "sha256": "b601c8d2a6dbd6d719aa22366cd1d45dbbe5ece43f422b338e981ef41ff17e55",
11
+ "delegate_calls": 72,
12
+ "non_delegated_ops": [
13
+ "aten._adaptive_avg_pool2d.default",
14
+ "aten.arange.start_step",
15
+ "aten.as_strided_copy.default",
16
+ "aten.expand_copy.default",
17
+ "aten.native_group_norm.default",
18
+ "aten.native_layer_norm.default",
19
+ "aten.repeat.default",
20
+ "aten.split_with_sizes_copy.default",
21
+ "aten.unsqueeze_copy.default",
22
+ "dim_order_ops._to_dim_order_copy.default"
23
+ ],
24
+ "build_time_s": 49.6,
25
+ "image_size": 448,
26
+ "variant": "small",
27
+ "eval": {
28
+ "miou": 0.907,
29
+ "iou": {
30
+ "background": 0.9816,
31
+ "fabric": 0.934,
32
+ "skin": 0.8053
33
+ },
34
+ "pixel_acc": 0.9802,
35
+ "median_ms_host_cpu": 468.0,
36
+ "evaluated_with": "ExecuTorch runtime, host CPU",
37
+ "pixel_agreement_vs_pytorch": 1.0
38
+ }
39
+ },
40
+ {
41
+ "file": "small/pyrafuse_small_xnnpack_int8.pte",
42
+ "target": "xnnpack_int8",
43
+ "backend": "xnnpack",
44
+ "precision": "int8",
45
+ "runs_on": "CPU on Android, iOS, macOS, Linux/ARM edge",
46
+ "size_bytes": 23352972,
47
+ "sha256": "aeb044d6347fbed419c417f6e6775f4315169faaf742dee4bd08055893f99c93",
48
+ "delegate_calls": 72,
49
+ "non_delegated_ops": [
50
+ "aten._adaptive_avg_pool2d.default",
51
+ "aten.arange.start_step",
52
+ "aten.as_strided_copy.default",
53
+ "aten.expand_copy.default",
54
+ "aten.native_group_norm.default",
55
+ "aten.native_layer_norm.default",
56
+ "aten.repeat.default",
57
+ "aten.split_with_sizes_copy.default",
58
+ "aten.unsqueeze_copy.default",
59
+ "dim_order_ops._to_dim_order_copy.default"
60
+ ],
61
+ "build_time_s": 70.0,
62
+ "image_size": 448,
63
+ "variant": "small",
64
+ "eval": {
65
+ "miou": 0.9064,
66
+ "iou": {
67
+ "background": 0.9815,
68
+ "fabric": 0.9333,
69
+ "skin": 0.8045
70
+ },
71
+ "pixel_acc": 0.98,
72
+ "median_ms_host_cpu": 461.8,
73
+ "evaluated_with": "ExecuTorch runtime, host CPU",
74
+ "pixel_agreement_vs_pytorch": 0.99775
75
+ }
76
+ },
77
+ {
78
+ "file": "small/pyrafuse_small_coreml_fp32.pte",
79
+ "target": "coreml_fp32",
80
+ "backend": "coreml",
81
+ "precision": "fp32",
82
+ "runs_on": "Apple GPU / CPU via Core ML (iOS 17+, macOS 14+)",
83
+ "size_bytes": 92299382,
84
+ "sha256": "fe2eba0f1470eb0c210f7ef1866952ce805c8a42284dd39e0af98cbf50214d7a",
85
+ "delegate_calls": 1,
86
+ "non_delegated_ops": [],
87
+ "build_time_s": 22.8,
88
+ "image_size": 448,
89
+ "variant": "small",
90
+ "eval": null
91
+ },
92
+ {
93
+ "file": "small/pyrafuse_small_vulkan_fp32.pte",
94
+ "target": "vulkan_fp32",
95
+ "backend": "vulkan",
96
+ "precision": "fp32",
97
+ "runs_on": "Android GPU via Vulkan",
98
+ "size_bytes": 90814732,
99
+ "sha256": "f1a98a0ac86bdb80430cf1260476ab28bfaf5dfcdb02d6dc023c248d8983e421",
100
+ "delegate_calls": 2,
101
+ "non_delegated_ops": [
102
+ "aten._adaptive_avg_pool2d.default",
103
+ "aten.as_strided_copy.default"
104
+ ],
105
+ "build_time_s": 41.1,
106
+ "image_size": 448,
107
+ "variant": "small",
108
+ "eval": null
109
+ },
110
+ {
111
+ "file": "small_plus/pyrafuse_small_plus_xnnpack_fp32.pte",
112
+ "target": "xnnpack_fp32",
113
+ "backend": "xnnpack",
114
+ "precision": "fp32",
115
+ "runs_on": "CPU on Android, iOS, macOS, Linux/ARM edge",
116
+ "size_bytes": 119232652,
117
+ "sha256": "2a451f94525d62435b6d2fc859e709d0d73b4e402f62b2f19212077587428dda",
118
+ "delegate_calls": 72,
119
+ "non_delegated_ops": [
120
+ "aten._adaptive_avg_pool2d.default",
121
+ "aten.arange.start_step",
122
+ "aten.as_strided_copy.default",
123
+ "aten.expand_copy.default",
124
+ "aten.native_group_norm.default",
125
+ "aten.native_layer_norm.default",
126
+ "aten.repeat.default",
127
+ "aten.split_with_sizes_copy.default",
128
+ "aten.unsqueeze_copy.default",
129
+ "dim_order_ops._to_dim_order_copy.default"
130
+ ],
131
+ "build_time_s": 47.1,
132
+ "image_size": 448,
133
+ "variant": "small_plus",
134
+ "eval": {
135
+ "miou": 0.9079,
136
+ "iou": {
137
+ "background": 0.9814,
138
+ "fabric": 0.935,
139
+ "skin": 0.8072
140
+ },
141
+ "pixel_acc": 0.9802,
142
+ "median_ms_host_cpu": 492.7,
143
+ "evaluated_with": "ExecuTorch runtime, host CPU",
144
+ "pixel_agreement_vs_pytorch": 1.0
145
+ }
146
+ },
147
+ {
148
+ "file": "small_plus/pyrafuse_small_plus_xnnpack_int8.pte",
149
+ "target": "xnnpack_int8",
150
+ "backend": "xnnpack",
151
+ "precision": "int8",
152
+ "runs_on": "CPU on Android, iOS, macOS, Linux/ARM edge",
153
+ "size_bytes": 30601100,
154
+ "sha256": "03583837dbece044eb089c07aa9264568cf67f79a6c8b335c395d5276979c6a2",
155
+ "delegate_calls": 84,
156
+ "non_delegated_ops": [
157
+ "aten._adaptive_avg_pool2d.default",
158
+ "aten.arange.start_step",
159
+ "aten.as_strided_copy.default",
160
+ "aten.expand_copy.default",
161
+ "aten.native_group_norm.default",
162
+ "aten.native_layer_norm.default",
163
+ "aten.repeat.default",
164
+ "aten.split_with_sizes_copy.default",
165
+ "aten.unsqueeze_copy.default",
166
+ "dim_order_ops._to_dim_order_copy.default"
167
+ ],
168
+ "build_time_s": 77.4,
169
+ "image_size": 448,
170
+ "variant": "small_plus",
171
+ "eval": {
172
+ "miou": 0.9069,
173
+ "iou": {
174
+ "background": 0.9811,
175
+ "fabric": 0.9338,
176
+ "skin": 0.8059
177
+ },
178
+ "pixel_acc": 0.9799,
179
+ "median_ms_host_cpu": 497.3,
180
+ "evaluated_with": "ExecuTorch runtime, host CPU",
181
+ "pixel_agreement_vs_pytorch": 0.99739
182
+ }
183
+ },
184
+ {
185
+ "file": "small_plus/pyrafuse_small_plus_coreml_fp32.pte",
186
+ "target": "coreml_fp32",
187
+ "backend": "coreml",
188
+ "precision": "fp32",
189
+ "runs_on": "Apple GPU / CPU via Core ML (iOS 17+, macOS 14+)",
190
+ "size_bytes": 120703686,
191
+ "sha256": "0f6ceb623cd2f4590840a452a7194c22afdb26b9afa442d836f979fad667c38f",
192
+ "delegate_calls": 1,
193
+ "non_delegated_ops": [],
194
+ "build_time_s": 23.6,
195
+ "image_size": 448,
196
+ "variant": "small_plus",
197
+ "eval": null
198
+ },
199
+ {
200
+ "file": "small_plus/pyrafuse_small_plus_vulkan_fp32.pte",
201
+ "target": "vulkan_fp32",
202
+ "backend": "vulkan",
203
+ "precision": "fp32",
204
+ "runs_on": "Android GPU via Vulkan",
205
+ "size_bytes": 119215372,
206
+ "sha256": "8b5c2a7715a52de7ce678ecacbd9dd778f2590283534132940dd26019a6ca3c4",
207
+ "delegate_calls": 2,
208
+ "non_delegated_ops": [
209
+ "aten._adaptive_avg_pool2d.default",
210
+ "aten.as_strided_copy.default"
211
+ ],
212
+ "build_time_s": 44.9,
213
+ "image_size": 448,
214
+ "variant": "small_plus",
215
+ "eval": null
216
+ },
217
+ {
218
+ "file": "base/pyrafuse_base_xnnpack_fp32.pte",
219
+ "target": "xnnpack_fp32",
220
+ "backend": "xnnpack",
221
+ "precision": "fp32",
222
+ "runs_on": "CPU on Android, iOS, macOS, Linux/ARM edge",
223
+ "size_bytes": 347851148,
224
+ "sha256": "eb349ab8f49b46e710edfddc791d9c250ffcc29938fba831e80dcd6e012c862e",
225
+ "delegate_calls": 72,
226
+ "non_delegated_ops": [
227
+ "aten._adaptive_avg_pool2d.default",
228
+ "aten.arange.start_step",
229
+ "aten.as_strided_copy.default",
230
+ "aten.expand_copy.default",
231
+ "aten.native_group_norm.default",
232
+ "aten.native_layer_norm.default",
233
+ "aten.repeat.default",
234
+ "aten.split_with_sizes_copy.default",
235
+ "aten.unsqueeze_copy.default",
236
+ "dim_order_ops._to_dim_order_copy.default"
237
+ ],
238
+ "build_time_s": 51.4,
239
+ "image_size": 448,
240
+ "variant": "base",
241
+ "eval": {
242
+ "miou": 0.9125,
243
+ "iou": {
244
+ "background": 0.9825,
245
+ "fabric": 0.9365,
246
+ "skin": 0.8187
247
+ },
248
+ "pixel_acc": 0.9812,
249
+ "median_ms_host_cpu": 767.1,
250
+ "evaluated_with": "ExecuTorch runtime, host CPU",
251
+ "pixel_agreement_vs_pytorch": 1.0
252
+ }
253
+ },
254
+ {
255
+ "file": "base/pyrafuse_base_xnnpack_int8.pte",
256
+ "target": "xnnpack_int8",
257
+ "backend": "xnnpack",
258
+ "precision": "int8",
259
+ "runs_on": "CPU on Android, iOS, macOS, Linux/ARM edge",
260
+ "size_bytes": 87957004,
261
+ "sha256": "8c27a182b6e66284ac7d4332e945d1b329abf07fa7aaa63b228a6b6a90868df1",
262
+ "delegate_calls": 72,
263
+ "non_delegated_ops": [
264
+ "aten._adaptive_avg_pool2d.default",
265
+ "aten.arange.start_step",
266
+ "aten.as_strided_copy.default",
267
+ "aten.expand_copy.default",
268
+ "aten.native_group_norm.default",
269
+ "aten.native_layer_norm.default",
270
+ "aten.repeat.default",
271
+ "aten.split_with_sizes_copy.default",
272
+ "aten.unsqueeze_copy.default",
273
+ "dim_order_ops._to_dim_order_copy.default"
274
+ ],
275
+ "build_time_s": 72.2,
276
+ "image_size": 448,
277
+ "variant": "base",
278
+ "eval": {
279
+ "miou": 0.9116,
280
+ "iou": {
281
+ "background": 0.9822,
282
+ "fabric": 0.9352,
283
+ "skin": 0.8173
284
+ },
285
+ "pixel_acc": 0.9809,
286
+ "median_ms_host_cpu": 713.0,
287
+ "evaluated_with": "ExecuTorch runtime, host CPU",
288
+ "pixel_agreement_vs_pytorch": 0.99802
289
+ }
290
+ },
291
+ {
292
+ "file": "base/pyrafuse_base_coreml_fp32.pte",
293
+ "target": "coreml_fp32",
294
+ "backend": "coreml",
295
+ "precision": "fp32",
296
+ "runs_on": "Apple GPU / CPU via Core ML (iOS 17+, macOS 14+)",
297
+ "size_bytes": 349313802,
298
+ "sha256": "0cf0c3e2b71c476a55f035aacb74dfffe163cf60c4112601246830245baf94c6",
299
+ "delegate_calls": 1,
300
+ "non_delegated_ops": [],
301
+ "build_time_s": 25.9,
302
+ "image_size": 448,
303
+ "variant": "base",
304
+ "eval": null
305
+ },
306
+ {
307
+ "file": "base/pyrafuse_base_vulkan_fp32.pte",
308
+ "target": "vulkan_fp32",
309
+ "backend": "vulkan",
310
+ "precision": "fp32",
311
+ "runs_on": "Android GPU via Vulkan",
312
+ "size_bytes": 347829004,
313
+ "sha256": "74c3cdea6c86b836fa7f5f3daf1f2fad86d3eaa4152ba20a043dca7149b8b49f",
314
+ "delegate_calls": 2,
315
+ "non_delegated_ops": [
316
+ "aten._adaptive_avg_pool2d.default",
317
+ "aten.as_strided_copy.default"
318
+ ],
319
+ "build_time_s": 45.2,
320
+ "image_size": 448,
321
+ "variant": "base",
322
+ "eval": null
323
+ }
324
+ ],
325
+ "format": "ExecuTorch .pte",
326
+ "input": {
327
+ "name": "image",
328
+ "dtype": "float32",
329
+ "shape": [
330
+ 1,
331
+ 3,
332
+ 448,
333
+ 448
334
+ ],
335
+ "layout": "NCHW RGB",
336
+ "range": "[0, 1] (pixel / 255)",
337
+ "normalization": "ImageNet mean/std applied inside the graph",
338
+ "mean": [
339
+ 0.485,
340
+ 0.456,
341
+ 0.406
342
+ ],
343
+ "std": [
344
+ 0.229,
345
+ 0.224,
346
+ 0.225
347
+ ]
348
+ },
349
+ "output": {
350
+ "name": "logits",
351
+ "dtype": "float32",
352
+ "shape": [
353
+ 1,
354
+ 3,
355
+ 448,
356
+ 448
357
+ ],
358
+ "classes": {
359
+ "0": "background",
360
+ "1": "fabric",
361
+ "2": "skin"
362
+ },
363
+ "postprocess": "argmax over dim 1"
364
+ },
365
+ "toolchain": {
366
+ "executorch": "1.5.1",
367
+ "torch": "2.14.0+cpu",
368
+ "coremltools": "9.0"
369
+ },
370
+ "eval_protocol": "first 200 images of the held-out test split (seed 42), 448 px stretch-resize; host CPU x86_64",
371
+ "pytorch_reference": {
372
+ "small": {
373
+ "miou": 0.907,
374
+ "iou": {
375
+ "background": 0.9816,
376
+ "fabric": 0.934,
377
+ "skin": 0.8053
378
+ },
379
+ "pixel_acc": 0.9802,
380
+ "median_ms_host_cpu": 382.0
381
+ },
382
+ "small_plus": {
383
+ "miou": 0.9079,
384
+ "iou": {
385
+ "background": 0.9814,
386
+ "fabric": 0.935,
387
+ "skin": 0.8072
388
+ },
389
+ "pixel_acc": 0.9802,
390
+ "median_ms_host_cpu": 423.6
391
+ },
392
+ "base": {
393
+ "miou": 0.9125,
394
+ "iou": {
395
+ "background": 0.9825,
396
+ "fabric": 0.9365,
397
+ "skin": 0.8187
398
+ },
399
+ "pixel_acc": 0.9812,
400
+ "median_ms_host_cpu": 716.0
401
+ }
402
+ }
403
+ }
mobile/small/pyrafuse_small_coreml_fp32.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fe2eba0f1470eb0c210f7ef1866952ce805c8a42284dd39e0af98cbf50214d7a
3
+ size 92299382
mobile/small/pyrafuse_small_vulkan_fp32.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f1a98a0ac86bdb80430cf1260476ab28bfaf5dfcdb02d6dc023c248d8983e421
3
+ size 90814732
mobile/small/pyrafuse_small_xnnpack_fp32.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b601c8d2a6dbd6d719aa22366cd1d45dbbe5ece43f422b338e981ef41ff17e55
3
+ size 90837004
mobile/small/pyrafuse_small_xnnpack_int8.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aeb044d6347fbed419c417f6e6775f4315169faaf742dee4bd08055893f99c93
3
+ size 23352972
mobile/small_plus/pyrafuse_small_plus_coreml_fp32.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0f6ceb623cd2f4590840a452a7194c22afdb26b9afa442d836f979fad667c38f
3
+ size 120703686
mobile/small_plus/pyrafuse_small_plus_vulkan_fp32.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8b5c2a7715a52de7ce678ecacbd9dd778f2590283534132940dd26019a6ca3c4
3
+ size 119215372
mobile/small_plus/pyrafuse_small_plus_xnnpack_fp32.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2a451f94525d62435b6d2fc859e709d0d73b4e402f62b2f19212077587428dda
3
+ size 119232652
mobile/small_plus/pyrafuse_small_plus_xnnpack_int8.pte ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:03583837dbece044eb089c07aa9264568cf67f79a6c8b335c395d5276979c6a2
3
+ size 30601100