itamiArika commited on
Commit
4de08dc
·
verified ·
1 Parent(s): 479b3ad

Upload folder using huggingface_hub

Browse files
README.md ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ library_name: onnx
4
+ tags:
5
+ - audio-to-audio
6
+ - source-separation
7
+ - onnx
8
+ - quantization
9
+ - int8
10
+ base_model: StemSplitio/htdemucs-onnx
11
+ ---
12
+
13
+ # HTDemucs ONNX — INT8 变体与低内存打包(实验件)
14
+
15
+ 对 [`StemSplitio/htdemucs-onnx`](https://huggingface.co/StemSplitio/htdemucs-onnx)
16
+ 做选择性静态 INT8 量化 + FP16 权重存储 + STFT/iSTFT 换成 ONNX `DFT`,
17
+ 再针对 `onnxruntime-node` 的运行时内存做了两处等价改写。**实验件,接口可能变。**
18
+
19
+ 输入 `mix` `(1, 2, 343980)` float32,44.1 kHz 立体声(一段 7.8 s);
20
+ 输出 `stems` `(1, 4, 2, 343980)`,顺序 `drums, bass, other, vocals`。
21
+ 长音频自行切段,**逐段串行**跑,峰值内存只由单段决定。
22
+
23
+ ## 该用哪个
24
+
25
+ | 文件 | 用途 | node 峰值内存 | 单段耗时 |
26
+ |---|---|---:|---:|
27
+ | `htdemucs-dft-int8-fp16-final.onnx` | 基准版,onnxruntime-node | 2.6–3.9 GB | 1.67–1.89 s |
28
+ | `htdemucs-dft-int8-fp16-chunked.onnx` | 注意力分块,ORT 专用 | 2.24 GB | 1.86–1.90 s |
29
+ | `split3/`(3 个 part + `parts.json`) | **ORT 下内存最省** | 1.10–1.24 GB | 1.85–2.13 s |
30
+ | `htdemucs-dft-int8-fp16-portable.onnx` | **OpenVINO 用**(ORT 也能跑) | 0.98 GB(OV) | 1.22 s(OV) |
31
+
32
+ 测量环境:i7-12800H,4 线程,`enableCpuMemArena: false`,一个 7.8 s segment。
33
+
34
+ `chunked` / `split3` / `portable` 三者在 ONNX Runtime 下与 `final` **逐比特一致**
35
+ (3 个评测片段,0/2751840 个样本有差异)。OpenVINO 的输出不是逐比特一致,
36
+ 但相对 FP32 参考的误差与 ORT 同量级(30.5/36.2/28.3 dB vs 30.2/35.9/28.2 dB)。
37
+
38
+ ## onnxruntime-node
39
+
40
+ ```ts
41
+ const opts = {
42
+ executionProviders: ["cpu"],
43
+ graphOptimizationLevel: "all",
44
+ intraOpNumThreads: 4,
45
+ interOpNumThreads: 1,
46
+ enableCpuMemArena: false, // 必须:不关的话稳态就是峰值 5 GB
47
+ };
48
+
49
+ // 单文件
50
+ const sess = await ort.InferenceSession.create("htdemucs-dft-int8-fp16-final.onnx", opts);
51
+ const out = await sess.run({ mix }); // out.stems
52
+
53
+ // split3:按 parts.json 顺序跑三段
54
+ const parts = JSON.parse(fs.readFileSync("split3/parts.json", "utf8"));
55
+ const sess3 = [];
56
+ for (const p of parts) sess3.push(await ort.InferenceSession.create(`split3/${p.file}`, opts));
57
+ let vals = { mix };
58
+ for (let i = 0; i < sess3.length; i++) {
59
+ const feed = {};
60
+ for (const k of parts[i].inputs) feed[k] = vals[k];
61
+ const out = await sess3[i].run(feed);
62
+ vals = {}; // 丢掉下一段不需要的张量
63
+ for (const k of parts[i].outputs) vals[k] = out[k];
64
+ }
65
+ const stems = vals.stems;
66
+ ```
67
+
68
+ ## openvino-node
69
+
70
+ ```ts
71
+ const core = new ov.Core();
72
+ core.setProperty({ CACHE_DIR: "./ov-cache" }); // 加载 1.4 s -> 0.63 s
73
+ const compiled = await core.compileModel(
74
+ await core.readModel("htdemucs-dft-int8-fp16-portable.onnx"),
75
+ "AUTO", { PERFORMANCE_HINT: "LATENCY" });
76
+ const req = compiled.createInferRequest();
77
+ const res = await req.inferAsync([new ov.Tensor(ov.element.f32, [1, 2, 343980], mix)]);
78
+ ```
79
+
80
+ 只有 `-portable` 能被 OpenVINO 读进去:OV 的 ONNX 前端对 `DFT` 的输出形状推断
81
+ 和规范不一致,`-portable` 在每个 DFT 后固定了一次形状(对 ORT 是空操作)。
82
+ 注意 OV 编译完常驻约 0.95 GB 不归还,空闲内存敏感的话仍是 ORT 关 arena 更低(0.33 GB)。
83
+
84
+ ## 注意
85
+
86
+ * `.meta.json` 列出了所有被量化的节点、保留 FP32 的节点和每条排除理由。
87
+ * 权重来自上游 htdemucs(Demucs,MIT);转发请保留出处与许可。
88
+ * 校验:`sha256sum -c SHA256SUMS`
SHA256SUMS ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ 4a5fb5eb9a80250cf5b943c49e7b934631729abdc91915b02200f732dcb372e9 htdemucs-dft-int8-fp16-chunked.onnx
2
+ c62cf29b5cabf205b30484dc1603b100a66762b457195366e19af2ed0359af6f htdemucs-dft-int8-fp16-final.onnx
3
+ 3fae08d77f1800a819a625e5829490bf35bb2052c489fb9b313a2bba332e0b1f htdemucs-dft-int8-fp16-portable.onnx
4
+ a1b1f9ef96f943b9c2f01568a8cadbc6124db094377dcfbc447f65ee71897aa2 htdemucs-dft-int8-fp16-final.meta.json
5
+ 86383001d4baf48c3181c35afb67f4c2d02ca4bbb85fd0a30adcddbaac2edb09 split3/part0.onnx
6
+ e36f5032153f73277328b4dd7172bb05054fa4e88424a1cb723c5b637cc50851 split3/part1.onnx
7
+ eff0ed38e8623b11e3121c43c42e4338063d33e58eb39d618a467e34024e79d4 split3/part2.onnx
8
+ 396239b5bdf9200faf862d13759d6ca929cc620ab4e082a627c23c4aafeac31b split3/parts.json
htdemucs-dft-int8-fp16-chunked.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4a5fb5eb9a80250cf5b943c49e7b934631729abdc91915b02200f732dcb372e9
3
+ size 98511195
htdemucs-dft-int8-fp16-final.meta.json ADDED
@@ -0,0 +1,267 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source": "models/htdemucs-dft.onnx",
3
+ "preprocessed": "models/htdemucs-dft.onnx",
4
+ "out": "quantization/models/htdemucs-dft-int8-fp16-final.onnx",
5
+ "method": "percentile",
6
+ "op_types": [
7
+ "Conv",
8
+ "MatMul",
9
+ "Gemm"
10
+ ],
11
+ "per_channel": true,
12
+ "activation_type": "int8",
13
+ "weight_type": "int8",
14
+ "n_calib_segments": 24,
15
+ "calib_dir": "data/calib",
16
+ "calib_cache": "models/calib-percentile99.99-24seg.json",
17
+ "excluded_nodes": [
18
+ "/real_stft/Conv_1",
19
+ "/real_stft/Conv",
20
+ "/real_istft/ConvTranspose_1",
21
+ "/real_istft/ConvTranspose",
22
+ "/tencoder.0/conv/Conv",
23
+ "/tencoder.0/dconv/layers.0/layers.0.0/Conv",
24
+ "/tencoder.0/dconv/layers.0/layers.0.3/Conv",
25
+ "/tencoder.0/dconv/layers.1/layers.1.0/Conv",
26
+ "/tencoder.0/dconv/layers.1/layers.1.3/Conv",
27
+ "/tencoder.0/rewrite/Conv",
28
+ "/tencoder.1/conv/Conv",
29
+ "/tencoder.1/dconv/layers.0/layers.0.0/Conv",
30
+ "/tencoder.1/dconv/layers.0/layers.0.3/Conv",
31
+ "/tencoder.1/dconv/layers.1/layers.1.0/Conv",
32
+ "/tencoder.1/dconv/layers.1/layers.1.3/Conv",
33
+ "/tencoder.1/rewrite/Conv",
34
+ "/tencoder.2/conv/Conv",
35
+ "/tencoder.2/dconv/layers.0/layers.0.0/Conv",
36
+ "/tencoder.2/dconv/layers.0/layers.0.3/Conv",
37
+ "/tencoder.2/dconv/layers.1/layers.1.0/Conv",
38
+ "/tencoder.2/dconv/layers.1/layers.1.3/Conv",
39
+ "/tencoder.2/rewrite/Conv",
40
+ "/tencoder.3/conv/Conv",
41
+ "/tencoder.3/dconv/layers.0/layers.0.0/Conv",
42
+ "/tencoder.3/dconv/layers.0/layers.0.3/Conv",
43
+ "/tencoder.3/dconv/layers.1/layers.1.0/Conv",
44
+ "/tencoder.3/dconv/layers.1/layers.1.3/Conv",
45
+ "/tencoder.3/rewrite/Conv",
46
+ "/crosstransformer/layers_t.0/self_attn/MatMul_1",
47
+ "/crosstransformer/layers_t.0/self_attn/MatMul_2",
48
+ "/encoder.0/conv/Conv",
49
+ "/encoder.0/dconv/layers.0/layers.0.0/Conv",
50
+ "/encoder.0/dconv/layers.0/layers.0.3/Conv",
51
+ "/encoder.0/dconv/layers.1/layers.1.0/Conv",
52
+ "/encoder.0/dconv/layers.1/layers.1.3/Conv",
53
+ "/encoder.0/rewrite/Conv",
54
+ "/encoder.1/conv/Conv",
55
+ "/encoder.1/dconv/layers.0/layers.0.0/Conv",
56
+ "/encoder.1/dconv/layers.0/layers.0.3/Conv",
57
+ "/encoder.1/dconv/layers.1/layers.1.0/Conv",
58
+ "/encoder.1/dconv/layers.1/layers.1.3/Conv",
59
+ "/encoder.1/rewrite/Conv",
60
+ "/encoder.2/conv/Conv",
61
+ "/encoder.2/dconv/layers.0/layers.0.0/Conv",
62
+ "/encoder.2/dconv/layers.0/layers.0.3/Conv",
63
+ "/encoder.2/dconv/layers.1/layers.1.0/Conv",
64
+ "/encoder.2/dconv/layers.1/layers.1.3/Conv",
65
+ "/encoder.2/rewrite/Conv",
66
+ "/encoder.3/conv/Conv",
67
+ "/encoder.3/dconv/layers.0/layers.0.0/Conv",
68
+ "/encoder.3/dconv/layers.0/layers.0.3/Conv",
69
+ "/encoder.3/dconv/layers.1/layers.1.0/Conv",
70
+ "/encoder.3/dconv/layers.1/layers.1.3/Conv",
71
+ "/encoder.3/rewrite/Conv",
72
+ "/crosstransformer/layers.0/self_attn/MatMul_1",
73
+ "/crosstransformer/layers.0/self_attn/MatMul_2",
74
+ "/crosstransformer/layers_t.1/cross_attn/MatMul_3",
75
+ "/crosstransformer/layers_t.1/cross_attn/MatMul_4",
76
+ "/crosstransformer/layers_t.2/self_attn/MatMul_1",
77
+ "/crosstransformer/layers_t.2/self_attn/MatMul_2",
78
+ "/crosstransformer/layers.1/cross_attn/MatMul_3",
79
+ "/crosstransformer/layers.1/cross_attn/MatMul_4",
80
+ "/crosstransformer/layers.2/self_attn/MatMul_1",
81
+ "/crosstransformer/layers.2/self_attn/MatMul_2",
82
+ "/crosstransformer/layers_t.3/cross_attn/MatMul_3",
83
+ "/crosstransformer/layers_t.3/cross_attn/MatMul_4",
84
+ "/crosstransformer/layers_t.4/self_attn/MatMul_1",
85
+ "/crosstransformer/layers_t.4/self_attn/MatMul_2",
86
+ "/tdecoder.0/rewrite/Conv",
87
+ "/tdecoder.0/dconv/layers.0/layers.0.0/Conv",
88
+ "/tdecoder.0/dconv/layers.0/layers.0.3/Conv",
89
+ "/tdecoder.0/dconv/layers.1/layers.1.0/Conv",
90
+ "/tdecoder.0/dconv/layers.1/layers.1.3/Conv",
91
+ "/tdecoder.0/conv_tr/ConvTranspose",
92
+ "/tdecoder.1/rewrite/Conv",
93
+ "/tdecoder.1/dconv/layers.0/layers.0.0/Conv",
94
+ "/tdecoder.1/dconv/layers.0/layers.0.3/Conv",
95
+ "/tdecoder.1/dconv/layers.1/layers.1.0/Conv",
96
+ "/tdecoder.1/dconv/layers.1/layers.1.3/Conv",
97
+ "/tdecoder.1/conv_tr/ConvTranspose",
98
+ "/tdecoder.2/rewrite/Conv",
99
+ "/tdecoder.2/dconv/layers.0/layers.0.0/Conv",
100
+ "/tdecoder.2/dconv/layers.0/layers.0.3/Conv",
101
+ "/tdecoder.2/dconv/layers.1/layers.1.0/Conv",
102
+ "/tdecoder.2/dconv/layers.1/layers.1.3/Conv",
103
+ "/tdecoder.2/conv_tr/ConvTranspose",
104
+ "/tdecoder.3/rewrite/Conv",
105
+ "/tdecoder.3/dconv/layers.0/layers.0.0/Conv",
106
+ "/tdecoder.3/dconv/layers.0/layers.0.3/Conv",
107
+ "/tdecoder.3/dconv/layers.1/layers.1.0/Conv",
108
+ "/tdecoder.3/dconv/layers.1/layers.1.3/Conv",
109
+ "/tdecoder.3/conv_tr/ConvTranspose",
110
+ "/crosstransformer/layers.3/cross_attn/MatMul_3",
111
+ "/crosstransformer/layers.3/cross_attn/MatMul_4",
112
+ "/crosstransformer/layers.4/self_attn/MatMul_1",
113
+ "/crosstransformer/layers.4/self_attn/MatMul_2",
114
+ "/decoder.0/rewrite/Conv",
115
+ "/decoder.0/dconv/layers.0/layers.0.0/Conv",
116
+ "/decoder.0/dconv/layers.0/layers.0.3/Conv",
117
+ "/decoder.0/dconv/layers.1/layers.1.0/Conv",
118
+ "/decoder.0/dconv/layers.1/layers.1.3/Conv",
119
+ "/decoder.0/conv_tr/ConvTranspose",
120
+ "/decoder.1/rewrite/Conv",
121
+ "/decoder.1/dconv/layers.0/layers.0.0/Conv",
122
+ "/decoder.1/dconv/layers.0/layers.0.3/Conv",
123
+ "/decoder.1/dconv/layers.1/layers.1.0/Conv",
124
+ "/decoder.1/dconv/layers.1/layers.1.3/Conv",
125
+ "/decoder.1/conv_tr/ConvTranspose",
126
+ "/decoder.2/rewrite/Conv",
127
+ "/decoder.2/dconv/layers.0/layers.0.0/Conv",
128
+ "/decoder.2/dconv/layers.0/layers.0.3/Conv",
129
+ "/decoder.2/dconv/layers.1/layers.1.0/Conv",
130
+ "/decoder.2/dconv/layers.1/layers.1.3/Conv",
131
+ "/decoder.2/conv_tr/ConvTranspose",
132
+ "/decoder.3/rewrite/Conv",
133
+ "/decoder.3/dconv/layers.0/layers.0.0/Conv",
134
+ "/decoder.3/dconv/layers.0/layers.0.3/Conv",
135
+ "/decoder.3/dconv/layers.1/layers.1.0/Conv",
136
+ "/decoder.3/dconv/layers.1/layers.1.3/Conv",
137
+ "/decoder.3/conv_tr/ConvTranspose"
138
+ ],
139
+ "exclusion_reasons": {
140
+ "/real_stft/Conv_1": "STFT/iSTFT Fourier-basis conv (content-detected)",
141
+ "/real_stft/Conv": "STFT/iSTFT Fourier-basis conv (content-detected)",
142
+ "/real_istft/ConvTranspose_1": "STFT/iSTFT Fourier-basis conv (content-detected)",
143
+ "/real_istft/ConvTranspose": "STFT/iSTFT Fourier-basis conv (content-detected)",
144
+ "/tencoder.0/conv/Conv": "group 'time_enc_conv' scored 39.8 dB SDR-vs-FP32 in isolation (worst stem 16.9 dB) -- too lossy",
145
+ "/tencoder.0/dconv/layers.0/layers.0.0/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
146
+ "/tencoder.0/dconv/layers.0/layers.0.3/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
147
+ "/tencoder.0/dconv/layers.1/layers.1.0/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
148
+ "/tencoder.0/dconv/layers.1/layers.1.3/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
149
+ "/tencoder.0/rewrite/Conv": "group 'time_enc_rewrite' scored 33.4 dB SDR-vs-FP32 in isolation (worst stem 4.9 dB) -- too lossy",
150
+ "/tencoder.1/conv/Conv": "group 'time_enc_conv' scored 39.8 dB SDR-vs-FP32 in isolation (worst stem 16.9 dB) -- too lossy",
151
+ "/tencoder.1/dconv/layers.0/layers.0.0/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
152
+ "/tencoder.1/dconv/layers.0/layers.0.3/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
153
+ "/tencoder.1/dconv/layers.1/layers.1.0/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
154
+ "/tencoder.1/dconv/layers.1/layers.1.3/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
155
+ "/tencoder.1/rewrite/Conv": "group 'time_enc_rewrite' scored 33.4 dB SDR-vs-FP32 in isolation (worst stem 4.9 dB) -- too lossy",
156
+ "/tencoder.2/conv/Conv": "group 'time_enc_conv' scored 39.8 dB SDR-vs-FP32 in isolation (worst stem 16.9 dB) -- too lossy",
157
+ "/tencoder.2/dconv/layers.0/layers.0.0/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
158
+ "/tencoder.2/dconv/layers.0/layers.0.3/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
159
+ "/tencoder.2/dconv/layers.1/layers.1.0/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
160
+ "/tencoder.2/dconv/layers.1/layers.1.3/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
161
+ "/tencoder.2/rewrite/Conv": "group 'time_enc_rewrite' scored 33.4 dB SDR-vs-FP32 in isolation (worst stem 4.9 dB) -- too lossy",
162
+ "/tencoder.3/conv/Conv": "group 'time_enc_conv' scored 39.8 dB SDR-vs-FP32 in isolation (worst stem 16.9 dB) -- too lossy",
163
+ "/tencoder.3/dconv/layers.0/layers.0.0/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
164
+ "/tencoder.3/dconv/layers.0/layers.0.3/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
165
+ "/tencoder.3/dconv/layers.1/layers.1.0/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
166
+ "/tencoder.3/dconv/layers.1/layers.1.3/Conv": "group 'time_enc_dconv' scored 38.9 dB SDR-vs-FP32 in isolation (worst stem 15.7 dB) -- too lossy",
167
+ "/tencoder.3/rewrite/Conv": "group 'time_enc_rewrite' scored 33.4 dB SDR-vs-FP32 in isolation (worst stem 4.9 dB) -- too lossy",
168
+ "/crosstransformer/layers_t.0/self_attn/MatMul_1": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
169
+ "/crosstransformer/layers_t.0/self_attn/MatMul_2": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
170
+ "/encoder.0/conv/Conv": "group 'spec_enc_conv' scored 17.8 dB SDR-vs-FP32 in isolation (worst stem -0.3 dB) -- too lossy",
171
+ "/encoder.0/dconv/layers.0/layers.0.0/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
172
+ "/encoder.0/dconv/layers.0/layers.0.3/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
173
+ "/encoder.0/dconv/layers.1/layers.1.0/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
174
+ "/encoder.0/dconv/layers.1/layers.1.3/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
175
+ "/encoder.0/rewrite/Conv": "group 'spec_enc_rewrite' scored 5.2 dB SDR-vs-FP32 in isolation (worst stem -9.3 dB) -- too lossy",
176
+ "/encoder.1/conv/Conv": "group 'spec_enc_conv' scored 17.8 dB SDR-vs-FP32 in isolation (worst stem -0.3 dB) -- too lossy",
177
+ "/encoder.1/dconv/layers.0/layers.0.0/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
178
+ "/encoder.1/dconv/layers.0/layers.0.3/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
179
+ "/encoder.1/dconv/layers.1/layers.1.0/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
180
+ "/encoder.1/dconv/layers.1/layers.1.3/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
181
+ "/encoder.1/rewrite/Conv": "group 'spec_enc_rewrite' scored 5.2 dB SDR-vs-FP32 in isolation (worst stem -9.3 dB) -- too lossy",
182
+ "/encoder.2/conv/Conv": "group 'spec_enc_conv' scored 17.8 dB SDR-vs-FP32 in isolation (worst stem -0.3 dB) -- too lossy",
183
+ "/encoder.2/dconv/layers.0/layers.0.0/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
184
+ "/encoder.2/dconv/layers.0/layers.0.3/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
185
+ "/encoder.2/dconv/layers.1/layers.1.0/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
186
+ "/encoder.2/dconv/layers.1/layers.1.3/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
187
+ "/encoder.2/rewrite/Conv": "group 'spec_enc_rewrite' scored 5.2 dB SDR-vs-FP32 in isolation (worst stem -9.3 dB) -- too lossy",
188
+ "/encoder.3/conv/Conv": "group 'spec_enc_conv' scored 17.8 dB SDR-vs-FP32 in isolation (worst stem -0.3 dB) -- too lossy",
189
+ "/encoder.3/dconv/layers.0/layers.0.0/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
190
+ "/encoder.3/dconv/layers.0/layers.0.3/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
191
+ "/encoder.3/dconv/layers.1/layers.1.0/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
192
+ "/encoder.3/dconv/layers.1/layers.1.3/Conv": "group 'spec_enc_dconv' scored 18.4 dB SDR-vs-FP32 in isolation (worst stem 5.3 dB) -- too lossy",
193
+ "/encoder.3/rewrite/Conv": "group 'spec_enc_rewrite' scored 5.2 dB SDR-vs-FP32 in isolation (worst stem -9.3 dB) -- too lossy",
194
+ "/crosstransformer/layers.0/self_attn/MatMul_1": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
195
+ "/crosstransformer/layers.0/self_attn/MatMul_2": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
196
+ "/crosstransformer/layers_t.1/cross_attn/MatMul_3": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
197
+ "/crosstransformer/layers_t.1/cross_attn/MatMul_4": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
198
+ "/crosstransformer/layers_t.2/self_attn/MatMul_1": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
199
+ "/crosstransformer/layers_t.2/self_attn/MatMul_2": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
200
+ "/crosstransformer/layers.1/cross_attn/MatMul_3": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
201
+ "/crosstransformer/layers.1/cross_attn/MatMul_4": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
202
+ "/crosstransformer/layers.2/self_attn/MatMul_1": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
203
+ "/crosstransformer/layers.2/self_attn/MatMul_2": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
204
+ "/crosstransformer/layers_t.3/cross_attn/MatMul_3": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
205
+ "/crosstransformer/layers_t.3/cross_attn/MatMul_4": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
206
+ "/crosstransformer/layers_t.4/self_attn/MatMul_1": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
207
+ "/crosstransformer/layers_t.4/self_attn/MatMul_2": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
208
+ "/tdecoder.0/rewrite/Conv": "group 'time_dec_rewrite' scored 26.2 dB SDR-vs-FP32 in isolation (worst stem -7.1 dB) -- too lossy",
209
+ "/tdecoder.0/dconv/layers.0/layers.0.0/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
210
+ "/tdecoder.0/dconv/layers.0/layers.0.3/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
211
+ "/tdecoder.0/dconv/layers.1/layers.1.0/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
212
+ "/tdecoder.0/dconv/layers.1/layers.1.3/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
213
+ "/tdecoder.0/conv_tr/ConvTranspose": "group 'time_dec_convtr' scored 239.2 dB SDR-vs-FP32 in isolation (worst stem 198.0 dB) -- too lossy",
214
+ "/tdecoder.1/rewrite/Conv": "group 'time_dec_rewrite' scored 26.2 dB SDR-vs-FP32 in isolation (worst stem -7.1 dB) -- too lossy",
215
+ "/tdecoder.1/dconv/layers.0/layers.0.0/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
216
+ "/tdecoder.1/dconv/layers.0/layers.0.3/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
217
+ "/tdecoder.1/dconv/layers.1/layers.1.0/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
218
+ "/tdecoder.1/dconv/layers.1/layers.1.3/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
219
+ "/tdecoder.1/conv_tr/ConvTranspose": "group 'time_dec_convtr' scored 239.2 dB SDR-vs-FP32 in isolation (worst stem 198.0 dB) -- too lossy",
220
+ "/tdecoder.2/rewrite/Conv": "group 'time_dec_rewrite' scored 26.2 dB SDR-vs-FP32 in isolation (worst stem -7.1 dB) -- too lossy",
221
+ "/tdecoder.2/dconv/layers.0/layers.0.0/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
222
+ "/tdecoder.2/dconv/layers.0/layers.0.3/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
223
+ "/tdecoder.2/dconv/layers.1/layers.1.0/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
224
+ "/tdecoder.2/dconv/layers.1/layers.1.3/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
225
+ "/tdecoder.2/conv_tr/ConvTranspose": "group 'time_dec_convtr' scored 239.2 dB SDR-vs-FP32 in isolation (worst stem 198.0 dB) -- too lossy",
226
+ "/tdecoder.3/rewrite/Conv": "group 'time_dec_rewrite' scored 26.2 dB SDR-vs-FP32 in isolation (worst stem -7.1 dB) -- too lossy",
227
+ "/tdecoder.3/dconv/layers.0/layers.0.0/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
228
+ "/tdecoder.3/dconv/layers.0/layers.0.3/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
229
+ "/tdecoder.3/dconv/layers.1/layers.1.0/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
230
+ "/tdecoder.3/dconv/layers.1/layers.1.3/Conv": "group 'time_dec_dconv' scored 30.3 dB SDR-vs-FP32 in isolation (worst stem -4.5 dB) -- too lossy",
231
+ "/tdecoder.3/conv_tr/ConvTranspose": "group 'time_dec_convtr' scored 239.2 dB SDR-vs-FP32 in isolation (worst stem 198.0 dB) -- too lossy",
232
+ "/crosstransformer/layers.3/cross_attn/MatMul_3": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
233
+ "/crosstransformer/layers.3/cross_attn/MatMul_4": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
234
+ "/crosstransformer/layers.4/self_attn/MatMul_1": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
235
+ "/crosstransformer/layers.4/self_attn/MatMul_2": "group 'xf_attn_bmm' scored 40.9 dB SDR-vs-FP32 in isolation (worst stem 22.9 dB) -- too lossy",
236
+ "/decoder.0/rewrite/Conv": "group 'spec_dec_rewrite' scored 20.3 dB SDR-vs-FP32 in isolation (worst stem 3.6 dB) -- too lossy",
237
+ "/decoder.0/dconv/layers.0/layers.0.0/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
238
+ "/decoder.0/dconv/layers.0/layers.0.3/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
239
+ "/decoder.0/dconv/layers.1/layers.1.0/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
240
+ "/decoder.0/dconv/layers.1/layers.1.3/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
241
+ "/decoder.0/conv_tr/ConvTranspose": "group 'spec_dec_convtr' scored 239.2 dB SDR-vs-FP32 in isolation (worst stem 198.0 dB) -- too lossy",
242
+ "/decoder.1/rewrite/Conv": "group 'spec_dec_rewrite' scored 20.3 dB SDR-vs-FP32 in isolation (worst stem 3.6 dB) -- too lossy",
243
+ "/decoder.1/dconv/layers.0/layers.0.0/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
244
+ "/decoder.1/dconv/layers.0/layers.0.3/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
245
+ "/decoder.1/dconv/layers.1/layers.1.0/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
246
+ "/decoder.1/dconv/layers.1/layers.1.3/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
247
+ "/decoder.1/conv_tr/ConvTranspose": "group 'spec_dec_convtr' scored 239.2 dB SDR-vs-FP32 in isolation (worst stem 198.0 dB) -- too lossy",
248
+ "/decoder.2/rewrite/Conv": "group 'spec_dec_rewrite' scored 20.3 dB SDR-vs-FP32 in isolation (worst stem 3.6 dB) -- too lossy",
249
+ "/decoder.2/dconv/layers.0/layers.0.0/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
250
+ "/decoder.2/dconv/layers.0/layers.0.3/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
251
+ "/decoder.2/dconv/layers.1/layers.1.0/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
252
+ "/decoder.2/dconv/layers.1/layers.1.3/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
253
+ "/decoder.2/conv_tr/ConvTranspose": "group 'spec_dec_convtr' scored 239.2 dB SDR-vs-FP32 in isolation (worst stem 198.0 dB) -- too lossy",
254
+ "/decoder.3/rewrite/Conv": "group 'spec_dec_rewrite' scored 20.3 dB SDR-vs-FP32 in isolation (worst stem 3.6 dB) -- too lossy",
255
+ "/decoder.3/dconv/layers.0/layers.0.0/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
256
+ "/decoder.3/dconv/layers.0/layers.0.3/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
257
+ "/decoder.3/dconv/layers.1/layers.1.0/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
258
+ "/decoder.3/dconv/layers.1/layers.1.3/Conv": "group 'spec_dec_dconv' scored 15.4 dB SDR-vs-FP32 in isolation (worst stem -2.2 dB) -- too lossy",
259
+ "/decoder.3/conv_tr/ConvTranspose": "group 'spec_dec_convtr' scored 239.2 dB SDR-vs-FP32 in isolation (worst stem 198.0 dB) -- too lossy"
260
+ },
261
+ "quantize_seconds": 2.4,
262
+ "size_mb": 98.5,
263
+ "qdq_nodes": 312,
264
+ "n_nodes": 1799,
265
+ "stft_replacement": "real_stft/real_istft Fourier convolutions replaced by ONNX DFT + framing/overlap-add (replace_stft.py); removes 67 MB of kernels and 392 ms of ConvTranspose",
266
+ "fp16_storage": "remaining FP32 conv weights stored as FP16; the published FP32 model already carries FP16-exact weights, so this is bit-identical"
267
+ }
htdemucs-dft-int8-fp16-final.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c62cf29b5cabf205b30484dc1603b100a66762b457195366e19af2ed0359af6f
3
+ size 98461394
htdemucs-dft-int8-fp16-portable.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3fae08d77f1800a819a625e5829490bf35bb2052c489fb9b313a2bba332e0b1f
3
+ size 98474789
split3/part0.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:86383001d4baf48c3181c35afb67f4c2d02ca4bbb85fd0a30adcddbaac2edb09
3
+ size 71109414
split3/part1.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e36f5032153f73277328b4dd7172bb05054fa4e88424a1cb723c5b637cc50851
3
+ size 32625989
split3/part2.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:eff0ed38e8623b11e3121c43c42e4338063d33e58eb39d618a467e34024e79d4
3
+ size 27738089
split3/parts.json ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "file": "part0.onnx",
4
+ "inputs": [
5
+ "mix"
6
+ ],
7
+ "outputs": [
8
+ "/Add_2_output_0",
9
+ "/Unsqueeze_23_output_0",
10
+ "/Unsqueeze_24_output_0",
11
+ "/Unsqueeze_31_output_0",
12
+ "/Unsqueeze_32_output_0",
13
+ "/encoder.1/Mul_2_output_0",
14
+ "/encoder.2/Mul_2_output_0",
15
+ "/encoder.3/Mul_1_output_0",
16
+ "/tencoder.0/Mul_2_output_0",
17
+ "/tencoder.1/Mul_2_output_0",
18
+ "/tencoder.2/Mul_2_output_0",
19
+ "/tencoder.3/dconv/Add_output_0",
20
+ "/tencoder.3/dconv/layers.1/layers.1.1/Add_output_0"
21
+ ]
22
+ },
23
+ {
24
+ "file": "part1.onnx",
25
+ "inputs": [
26
+ "/Add_2_output_0",
27
+ "/Unsqueeze_23_output_0",
28
+ "/Unsqueeze_24_output_0",
29
+ "/Unsqueeze_31_output_0",
30
+ "/Unsqueeze_32_output_0",
31
+ "/encoder.1/Mul_2_output_0",
32
+ "/encoder.2/Mul_2_output_0",
33
+ "/encoder.3/Mul_1_output_0",
34
+ "/tencoder.0/Mul_2_output_0",
35
+ "/tencoder.1/Mul_2_output_0",
36
+ "/tencoder.2/Mul_2_output_0",
37
+ "/tencoder.3/dconv/Add_output_0",
38
+ "/tencoder.3/dconv/layers.1/layers.1.1/Add_output_0"
39
+ ],
40
+ "outputs": [
41
+ "/Add_2_output_0",
42
+ "/Unsqueeze_23_output_0",
43
+ "/Unsqueeze_24_output_0",
44
+ "/Unsqueeze_31_output_0",
45
+ "/Unsqueeze_32_output_0",
46
+ "/crosstransformer/layers.3/Add",
47
+ "/crosstransformer/layers_t.3/Add_output_0",
48
+ "/encoder.1/Mul_2_output_0",
49
+ "/encoder.2/Mul_2_output_0",
50
+ "/encoder.3/Mul_2_output_0",
51
+ "/tencoder.0/Mul_2_output_0",
52
+ "/tencoder.1/Mul_2_output_0",
53
+ "/tencoder.2/Mul_2_output_0",
54
+ "/tencoder.3/Mul_2_output_0_DequantizeLinear_Output"
55
+ ]
56
+ },
57
+ {
58
+ "file": "part2.onnx",
59
+ "inputs": [
60
+ "/Add_2_output_0",
61
+ "/Unsqueeze_23_output_0",
62
+ "/Unsqueeze_24_output_0",
63
+ "/Unsqueeze_31_output_0",
64
+ "/Unsqueeze_32_output_0",
65
+ "/crosstransformer/layers.3/Add",
66
+ "/crosstransformer/layers_t.3/Add_output_0",
67
+ "/encoder.1/Mul_2_output_0",
68
+ "/encoder.2/Mul_2_output_0",
69
+ "/encoder.3/Mul_2_output_0",
70
+ "/tencoder.0/Mul_2_output_0",
71
+ "/tencoder.1/Mul_2_output_0",
72
+ "/tencoder.2/Mul_2_output_0",
73
+ "/tencoder.3/Mul_2_output_0_DequantizeLinear_Output"
74
+ ],
75
+ "outputs": [
76
+ "stems"
77
+ ]
78
+ }
79
+ ]