Add files using upload-large-folder tool
Browse files- .gitattributes +15 -0
- Embedding.mlmodelc/analytics/coremldata.bin +3 -0
- Embedding.mlmodelc/metadata.json +93 -0
- Embedding.mlmodelc/model.mil +429 -0
- Embedding.mlmodelc/weights/weight.bin +3 -0
- FBank.mlmodelc/metadata.json +80 -0
- FBank.mlmodelc/model.mil +96 -0
- LICENSE +426 -0
- NOTICE.md +84 -0
- PLDA.mlmodelc/metadata.json +71 -0
- PLDA.mlmodelc/model.mil +39 -0
- PROVENANCE.md +85 -0
- PldaRho.mlmodelc/metadata.json +73 -0
- PldaRho.mlmodelc/model.mil +40 -0
- README.md +123 -0
- Segmentation.mlmodelc/analytics/coremldata.bin +3 -0
- Segmentation.mlmodelc/metadata.json +82 -0
- Segmentation.mlmodelc/model.mil +219 -0
- Segmentation.mlmodelc/weights/weight.bin +3 -0
- config.json +1 -0
- latency_timeseries.png +3 -0
- metrics_timeseries.png +3 -0
- mlpackages/Embedding.mlpackage/Data/com.apple.CoreML/weights/weight.bin +3 -0
- mlpackages/Embedding.mlpackage/Manifest.json +18 -0
- mlpackages/Fbank.mlpackage/Manifest.json +18 -0
- mlpackages/PldaRho.mlpackage/Manifest.json +18 -0
- mlpackages/Segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin +3 -0
- mlpackages/Segmentation.mlpackage/Manifest.json +18 -0
- mlpackages/pyannote_segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin +3 -0
- mlpackages/pyannote_segmentation.mlpackage/Manifest.json +18 -0
- mlpackages/wespeaker.mlpackage/Manifest.json +18 -0
- pipeline_mps_timing.png +3 -0
- pipeline_overview.png +3 -0
- plda-parameters.json +34 -0
- plda_coreml.png +3 -0
- plda_parity.png +3 -0
- provenance.json +294 -0
- pyannote_segmentation.mlmodelc/metadata.json +70 -0
- pyannote_segmentation.mlmodelc/model.mil +143 -0
- wespeaker.mlmodelc/analytics/coremldata.bin +3 -0
- wespeaker.mlmodelc/metadata.json +104 -0
- wespeaker.mlmodelc/model.mil +0 -0
- wespeaker.mlmodelc/weights/weight.bin +3 -0
- wespeaker_int8.mlmodelc/metadata.json +104 -0
- wespeaker_int8.mlmodelc/model.mil +0 -0
- wespeaker_v2.mlmodelc/analytics/coremldata.bin +3 -0
- wespeaker_v2.mlmodelc/metadata.json +104 -0
- wespeaker_v2.mlmodelc/model.mil +0 -0
- wespeaker_v2.mlmodelc/weights/weight.bin +3 -0
- xvector-transform.json +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,18 @@ 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 |
+
first_10_seconds.wav filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
TS3003b_mix_headset.wav filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
plots/latency_timeseries.png filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
plots/metrics_timeseries.png filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
plots/pipeline_overview.png filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
plots/pipeline_timing.png filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
plots/plda_parity.png filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
latency_timeseries.png filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
metrics_timeseries.png filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
pipeline_mps_timing.png filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
pipeline_overview.png filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
plda_coreml.png filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
plda_parity.png filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
plots/pipeline_mps_timing.png filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
plots/summary_speed.png filter=lfs diff=lfs merge=lfs -text
|
Embedding.mlmodelc/analytics/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8d6706436639b53830b4dbe8aaf9c9a843f7f582d63e16f3cb8bb7c6ccd58682
|
| 3 |
+
size 243
|
Embedding.mlmodelc/metadata.json
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"shortDescription" : "pyannote community-1 speaker embedding backend (WeSpeaker ResNet34 consuming 80×998 FBANK features + 589-frame weights, interpolates weights to 125-frame pooling layer internally)",
|
| 4 |
+
"metadataOutputVersion" : "3.0",
|
| 5 |
+
"outputSchema" : [
|
| 6 |
+
{
|
| 7 |
+
"hasShapeFlexibility" : "0",
|
| 8 |
+
"isOptional" : "0",
|
| 9 |
+
"dataType" : "Float32",
|
| 10 |
+
"formattedType" : "MultiArray (Float32)",
|
| 11 |
+
"shortDescription" : "",
|
| 12 |
+
"shape" : "[]",
|
| 13 |
+
"name" : "embedding",
|
| 14 |
+
"type" : "MultiArray"
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"version" : "pyannote-speaker-diarization-community-1",
|
| 18 |
+
"modelParameters" : [
|
| 19 |
+
|
| 20 |
+
],
|
| 21 |
+
"author" : "Fluid Inference",
|
| 22 |
+
"specificationVersion" : 8,
|
| 23 |
+
"storagePrecision" : "Float16",
|
| 24 |
+
"license" : "CC-BY-4.0",
|
| 25 |
+
"mlProgramOperationTypeHistogram" : {
|
| 26 |
+
"Ios17.mul" : 4,
|
| 27 |
+
"Ios17.sqrt" : 1,
|
| 28 |
+
"Ios17.sub" : 2,
|
| 29 |
+
"Ios17.conv" : 38,
|
| 30 |
+
"Ios17.concat" : 1,
|
| 31 |
+
"Ios17.clip" : 2,
|
| 32 |
+
"Ios17.add" : 18,
|
| 33 |
+
"Ios17.realDiv" : 4,
|
| 34 |
+
"Ios16.relu" : 33,
|
| 35 |
+
"Ios17.expandDims" : 7,
|
| 36 |
+
"Ios16.reduceSum" : 4,
|
| 37 |
+
"Ios16.reduceL2Norm" : 1,
|
| 38 |
+
"Ios17.squeeze" : 2,
|
| 39 |
+
"Ios17.reshape" : 2,
|
| 40 |
+
"Ios17.cast" : 5
|
| 41 |
+
},
|
| 42 |
+
"computePrecision" : "Mixed (Float16, Float32, Int32)",
|
| 43 |
+
"stateSchema" : [
|
| 44 |
+
|
| 45 |
+
],
|
| 46 |
+
"isUpdatable" : "0",
|
| 47 |
+
"availability" : {
|
| 48 |
+
"macOS" : "14.0",
|
| 49 |
+
"tvOS" : "17.0",
|
| 50 |
+
"visionOS" : "1.0",
|
| 51 |
+
"watchOS" : "10.0",
|
| 52 |
+
"iOS" : "17.0",
|
| 53 |
+
"macCatalyst" : "17.0"
|
| 54 |
+
},
|
| 55 |
+
"modelType" : {
|
| 56 |
+
"name" : "MLModelType_mlProgram"
|
| 57 |
+
},
|
| 58 |
+
"inputSchema" : [
|
| 59 |
+
{
|
| 60 |
+
"dataType" : "Float32",
|
| 61 |
+
"hasShapeFlexibility" : "1",
|
| 62 |
+
"isOptional" : "0",
|
| 63 |
+
"shapeFlexibility" : "1...32 × 1 × 80 × 998",
|
| 64 |
+
"shapeRange" : "[[1, 32], [1, 1], [80, 80], [998, 998]]",
|
| 65 |
+
"formattedType" : "MultiArray (Float32 1 × 1 × 80 × 998)",
|
| 66 |
+
"type" : "MultiArray",
|
| 67 |
+
"shape" : "[1, 1, 80, 998]",
|
| 68 |
+
"name" : "fbank_features",
|
| 69 |
+
"shortDescription" : ""
|
| 70 |
+
},
|
| 71 |
+
{
|
| 72 |
+
"dataType" : "Float32",
|
| 73 |
+
"hasShapeFlexibility" : "1",
|
| 74 |
+
"isOptional" : "0",
|
| 75 |
+
"shapeFlexibility" : "1...32 × 589",
|
| 76 |
+
"shapeRange" : "[[1, 32], [589, 589]]",
|
| 77 |
+
"formattedType" : "MultiArray (Float32 1 × 589)",
|
| 78 |
+
"type" : "MultiArray",
|
| 79 |
+
"shape" : "[1, 589]",
|
| 80 |
+
"name" : "weights",
|
| 81 |
+
"shortDescription" : ""
|
| 82 |
+
}
|
| 83 |
+
],
|
| 84 |
+
"userDefinedMetadata" : {
|
| 85 |
+
"com.github.apple.coremltools.conversion_date" : "2025-10-16",
|
| 86 |
+
"com.github.apple.coremltools.source" : "torch==2.8.0",
|
| 87 |
+
"com.github.apple.coremltools.version" : "9.0b1",
|
| 88 |
+
"com.github.apple.coremltools.source_dialect" : "TorchScript"
|
| 89 |
+
},
|
| 90 |
+
"generatedClassName" : "embedding_community_1",
|
| 91 |
+
"method" : "predict"
|
| 92 |
+
}
|
| 93 |
+
]
|
Embedding.mlmodelc/model.mil
ADDED
|
@@ -0,0 +1,429 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
program(1.0)
|
| 2 |
+
[buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
|
| 3 |
+
{
|
| 4 |
+
func main<ios17>(tensor<fp32, [?, 1, 80, 998]> fbank_features, tensor<fp32, [?, 589]> weights) [FlexibleShapeInformation = tuple<tuple<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>, tuple<tensor<string, []>, dict<tensor<string, []>, list<tensor<int32, [2]>, ?>>>>((("DefaultShapes", {{"fbank_features", [1, 1, 80, 998]}, {"weights", [1, 589]}}), ("RangeDims", {{"fbank_features", [[1, 32], [1, 1], [80, 80], [998, 998]]}, {"weights", [[1, 32], [589, 589]]}})))] {
|
| 5 |
+
tensor<int32, [1]> weights_1d_axes_0 = const()[name = tensor<string, []>("weights_1d_axes_0"), val = tensor<int32, [1]>([1])];
|
| 6 |
+
tensor<string, []> weights_to_fp16_dtype_0 = const()[name = tensor<string, []>("weights_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
|
| 7 |
+
tensor<fp16, [?, 589]> weights_to_fp16 = cast(dtype = weights_to_fp16_dtype_0, x = weights)[name = tensor<string, []>("cast_14")];
|
| 8 |
+
tensor<fp16, [?, 1, 589]> weights_1d_cast_fp16 = expand_dims(axes = weights_1d_axes_0, x = weights_to_fp16)[name = tensor<string, []>("weights_1d_cast_fp16")];
|
| 9 |
+
tensor<string, []> interpolated_pad_type_0 = const()[name = tensor<string, []>("interpolated_pad_type_0"), val = tensor<string, []>("valid")];
|
| 10 |
+
tensor<int32, [1]> interpolated_strides_0 = const()[name = tensor<string, []>("interpolated_strides_0"), val = tensor<int32, [1]>([1])];
|
| 11 |
+
tensor<int32, [2]> interpolated_pad_0 = const()[name = tensor<string, []>("interpolated_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 12 |
+
tensor<int32, [1]> interpolated_dilations_0 = const()[name = tensor<string, []>("interpolated_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 13 |
+
tensor<int32, []> interpolated_groups_0 = const()[name = tensor<string, []>("interpolated_groups_0"), val = tensor<int32, []>(1)];
|
| 14 |
+
tensor<fp16, [125, 1, 589]> const_0_to_fp16 = const()[name = tensor<string, []>("const_0_to_fp16"), val = tensor<fp16, [125, 1, 589]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
|
| 15 |
+
tensor<fp16, [?, 125, 1]> interpolated_cast_fp16 = conv(dilations = interpolated_dilations_0, groups = interpolated_groups_0, pad = interpolated_pad_0, pad_type = interpolated_pad_type_0, strides = interpolated_strides_0, weight = const_0_to_fp16, x = weights_1d_cast_fp16)[name = tensor<string, []>("interpolated_cast_fp16")];
|
| 16 |
+
tensor<int32, [1]> weights_3_axes_0 = const()[name = tensor<string, []>("weights_3_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 17 |
+
tensor<fp16, [?, 125]> weights_3_cast_fp16 = squeeze(axes = weights_3_axes_0, x = interpolated_cast_fp16)[name = tensor<string, []>("weights_3_cast_fp16")];
|
| 18 |
+
tensor<int32, []> var_33 = const()[name = tensor<string, []>("op_33"), val = tensor<int32, []>(-1)];
|
| 19 |
+
tensor<string, []> input_1_pad_type_0 = const()[name = tensor<string, []>("input_1_pad_type_0"), val = tensor<string, []>("custom")];
|
| 20 |
+
tensor<int32, [4]> input_1_pad_0 = const()[name = tensor<string, []>("input_1_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 21 |
+
tensor<int32, [2]> input_1_strides_0 = const()[name = tensor<string, []>("input_1_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 22 |
+
tensor<int32, [2]> input_1_dilations_0 = const()[name = tensor<string, []>("input_1_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 23 |
+
tensor<int32, []> input_1_groups_0 = const()[name = tensor<string, []>("input_1_groups_0"), val = tensor<int32, []>(1)];
|
| 24 |
+
tensor<string, []> fbank_features_to_fp16_dtype_0 = const()[name = tensor<string, []>("fbank_features_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
|
| 25 |
+
tensor<fp16, [32, 1, 3, 3]> const_3_to_fp16 = const()[name = tensor<string, []>("const_3_to_fp16"), val = tensor<fp16, [32, 1, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(147392)))];
|
| 26 |
+
tensor<fp16, [32]> const_4_to_fp16 = const()[name = tensor<string, []>("const_4_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(148032)))];
|
| 27 |
+
tensor<fp16, [?, 1, 80, 998]> fbank_features_to_fp16 = cast(dtype = fbank_features_to_fp16_dtype_0, x = fbank_features)[name = tensor<string, []>("cast_13")];
|
| 28 |
+
tensor<fp16, [?, 32, 80, 998]> input_3_cast_fp16 = conv(bias = const_4_to_fp16, dilations = input_1_dilations_0, groups = input_1_groups_0, pad = input_1_pad_0, pad_type = input_1_pad_type_0, strides = input_1_strides_0, weight = const_3_to_fp16, x = fbank_features_to_fp16)[name = tensor<string, []>("input_3_cast_fp16")];
|
| 29 |
+
tensor<fp16, [?, 32, 80, 998]> input_5_cast_fp16 = relu(x = input_3_cast_fp16)[name = tensor<string, []>("input_5_cast_fp16")];
|
| 30 |
+
tensor<string, []> input_7_pad_type_0 = const()[name = tensor<string, []>("input_7_pad_type_0"), val = tensor<string, []>("custom")];
|
| 31 |
+
tensor<int32, [4]> input_7_pad_0 = const()[name = tensor<string, []>("input_7_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 32 |
+
tensor<int32, [2]> input_7_strides_0 = const()[name = tensor<string, []>("input_7_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 33 |
+
tensor<int32, [2]> input_7_dilations_0 = const()[name = tensor<string, []>("input_7_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 34 |
+
tensor<int32, []> input_7_groups_0 = const()[name = tensor<string, []>("input_7_groups_0"), val = tensor<int32, []>(1)];
|
| 35 |
+
tensor<fp16, [32, 32, 3, 3]> const_5_to_fp16 = const()[name = tensor<string, []>("const_5_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(148160)))];
|
| 36 |
+
tensor<fp16, [32]> const_6_to_fp16 = const()[name = tensor<string, []>("const_6_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(166656)))];
|
| 37 |
+
tensor<fp16, [?, 32, 80, 998]> input_9_cast_fp16 = conv(bias = const_6_to_fp16, dilations = input_7_dilations_0, groups = input_7_groups_0, pad = input_7_pad_0, pad_type = input_7_pad_type_0, strides = input_7_strides_0, weight = const_5_to_fp16, x = input_5_cast_fp16)[name = tensor<string, []>("input_9_cast_fp16")];
|
| 38 |
+
tensor<fp16, [?, 32, 80, 998]> input_11_cast_fp16 = relu(x = input_9_cast_fp16)[name = tensor<string, []>("input_11_cast_fp16")];
|
| 39 |
+
tensor<string, []> input_13_pad_type_0 = const()[name = tensor<string, []>("input_13_pad_type_0"), val = tensor<string, []>("custom")];
|
| 40 |
+
tensor<int32, [4]> input_13_pad_0 = const()[name = tensor<string, []>("input_13_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 41 |
+
tensor<int32, [2]> input_13_strides_0 = const()[name = tensor<string, []>("input_13_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 42 |
+
tensor<int32, [2]> input_13_dilations_0 = const()[name = tensor<string, []>("input_13_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 43 |
+
tensor<int32, []> input_13_groups_0 = const()[name = tensor<string, []>("input_13_groups_0"), val = tensor<int32, []>(1)];
|
| 44 |
+
tensor<fp16, [32, 32, 3, 3]> const_7_to_fp16 = const()[name = tensor<string, []>("const_7_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(166784)))];
|
| 45 |
+
tensor<fp16, [32]> const_8_to_fp16 = const()[name = tensor<string, []>("const_8_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(185280)))];
|
| 46 |
+
tensor<fp16, [?, 32, 80, 998]> out_1_cast_fp16 = conv(bias = const_8_to_fp16, dilations = input_13_dilations_0, groups = input_13_groups_0, pad = input_13_pad_0, pad_type = input_13_pad_type_0, strides = input_13_strides_0, weight = const_7_to_fp16, x = input_11_cast_fp16)[name = tensor<string, []>("out_1_cast_fp16")];
|
| 47 |
+
tensor<fp16, [?, 32, 80, 998]> input_15_cast_fp16 = add(x = out_1_cast_fp16, y = input_5_cast_fp16)[name = tensor<string, []>("input_15_cast_fp16")];
|
| 48 |
+
tensor<fp16, [?, 32, 80, 998]> input_17_cast_fp16 = relu(x = input_15_cast_fp16)[name = tensor<string, []>("input_17_cast_fp16")];
|
| 49 |
+
tensor<string, []> input_19_pad_type_0 = const()[name = tensor<string, []>("input_19_pad_type_0"), val = tensor<string, []>("custom")];
|
| 50 |
+
tensor<int32, [4]> input_19_pad_0 = const()[name = tensor<string, []>("input_19_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 51 |
+
tensor<int32, [2]> input_19_strides_0 = const()[name = tensor<string, []>("input_19_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 52 |
+
tensor<int32, [2]> input_19_dilations_0 = const()[name = tensor<string, []>("input_19_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 53 |
+
tensor<int32, []> input_19_groups_0 = const()[name = tensor<string, []>("input_19_groups_0"), val = tensor<int32, []>(1)];
|
| 54 |
+
tensor<fp16, [32, 32, 3, 3]> const_9_to_fp16 = const()[name = tensor<string, []>("const_9_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(185408)))];
|
| 55 |
+
tensor<fp16, [32]> const_10_to_fp16 = const()[name = tensor<string, []>("const_10_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(203904)))];
|
| 56 |
+
tensor<fp16, [?, 32, 80, 998]> input_21_cast_fp16 = conv(bias = const_10_to_fp16, dilations = input_19_dilations_0, groups = input_19_groups_0, pad = input_19_pad_0, pad_type = input_19_pad_type_0, strides = input_19_strides_0, weight = const_9_to_fp16, x = input_17_cast_fp16)[name = tensor<string, []>("input_21_cast_fp16")];
|
| 57 |
+
tensor<fp16, [?, 32, 80, 998]> input_23_cast_fp16 = relu(x = input_21_cast_fp16)[name = tensor<string, []>("input_23_cast_fp16")];
|
| 58 |
+
tensor<string, []> input_25_pad_type_0 = const()[name = tensor<string, []>("input_25_pad_type_0"), val = tensor<string, []>("custom")];
|
| 59 |
+
tensor<int32, [4]> input_25_pad_0 = const()[name = tensor<string, []>("input_25_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 60 |
+
tensor<int32, [2]> input_25_strides_0 = const()[name = tensor<string, []>("input_25_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 61 |
+
tensor<int32, [2]> input_25_dilations_0 = const()[name = tensor<string, []>("input_25_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 62 |
+
tensor<int32, []> input_25_groups_0 = const()[name = tensor<string, []>("input_25_groups_0"), val = tensor<int32, []>(1)];
|
| 63 |
+
tensor<fp16, [32, 32, 3, 3]> const_11_to_fp16 = const()[name = tensor<string, []>("const_11_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(204032)))];
|
| 64 |
+
tensor<fp16, [32]> const_12_to_fp16 = const()[name = tensor<string, []>("const_12_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(222528)))];
|
| 65 |
+
tensor<fp16, [?, 32, 80, 998]> out_3_cast_fp16 = conv(bias = const_12_to_fp16, dilations = input_25_dilations_0, groups = input_25_groups_0, pad = input_25_pad_0, pad_type = input_25_pad_type_0, strides = input_25_strides_0, weight = const_11_to_fp16, x = input_23_cast_fp16)[name = tensor<string, []>("out_3_cast_fp16")];
|
| 66 |
+
tensor<fp16, [?, 32, 80, 998]> input_27_cast_fp16 = add(x = out_3_cast_fp16, y = input_17_cast_fp16)[name = tensor<string, []>("input_27_cast_fp16")];
|
| 67 |
+
tensor<fp16, [?, 32, 80, 998]> input_29_cast_fp16 = relu(x = input_27_cast_fp16)[name = tensor<string, []>("input_29_cast_fp16")];
|
| 68 |
+
tensor<string, []> input_31_pad_type_0 = const()[name = tensor<string, []>("input_31_pad_type_0"), val = tensor<string, []>("custom")];
|
| 69 |
+
tensor<int32, [4]> input_31_pad_0 = const()[name = tensor<string, []>("input_31_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 70 |
+
tensor<int32, [2]> input_31_strides_0 = const()[name = tensor<string, []>("input_31_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 71 |
+
tensor<int32, [2]> input_31_dilations_0 = const()[name = tensor<string, []>("input_31_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 72 |
+
tensor<int32, []> input_31_groups_0 = const()[name = tensor<string, []>("input_31_groups_0"), val = tensor<int32, []>(1)];
|
| 73 |
+
tensor<fp16, [32, 32, 3, 3]> const_13_to_fp16 = const()[name = tensor<string, []>("const_13_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(222656)))];
|
| 74 |
+
tensor<fp16, [32]> const_14_to_fp16 = const()[name = tensor<string, []>("const_14_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(241152)))];
|
| 75 |
+
tensor<fp16, [?, 32, 80, 998]> input_33_cast_fp16 = conv(bias = const_14_to_fp16, dilations = input_31_dilations_0, groups = input_31_groups_0, pad = input_31_pad_0, pad_type = input_31_pad_type_0, strides = input_31_strides_0, weight = const_13_to_fp16, x = input_29_cast_fp16)[name = tensor<string, []>("input_33_cast_fp16")];
|
| 76 |
+
tensor<fp16, [?, 32, 80, 998]> input_35_cast_fp16 = relu(x = input_33_cast_fp16)[name = tensor<string, []>("input_35_cast_fp16")];
|
| 77 |
+
tensor<string, []> input_37_pad_type_0 = const()[name = tensor<string, []>("input_37_pad_type_0"), val = tensor<string, []>("custom")];
|
| 78 |
+
tensor<int32, [4]> input_37_pad_0 = const()[name = tensor<string, []>("input_37_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 79 |
+
tensor<int32, [2]> input_37_strides_0 = const()[name = tensor<string, []>("input_37_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 80 |
+
tensor<int32, [2]> input_37_dilations_0 = const()[name = tensor<string, []>("input_37_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 81 |
+
tensor<int32, []> input_37_groups_0 = const()[name = tensor<string, []>("input_37_groups_0"), val = tensor<int32, []>(1)];
|
| 82 |
+
tensor<fp16, [32, 32, 3, 3]> const_15_to_fp16 = const()[name = tensor<string, []>("const_15_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(241280)))];
|
| 83 |
+
tensor<fp16, [32]> const_16_to_fp16 = const()[name = tensor<string, []>("const_16_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(259776)))];
|
| 84 |
+
tensor<fp16, [?, 32, 80, 998]> out_5_cast_fp16 = conv(bias = const_16_to_fp16, dilations = input_37_dilations_0, groups = input_37_groups_0, pad = input_37_pad_0, pad_type = input_37_pad_type_0, strides = input_37_strides_0, weight = const_15_to_fp16, x = input_35_cast_fp16)[name = tensor<string, []>("out_5_cast_fp16")];
|
| 85 |
+
tensor<fp16, [?, 32, 80, 998]> input_39_cast_fp16 = add(x = out_5_cast_fp16, y = input_29_cast_fp16)[name = tensor<string, []>("input_39_cast_fp16")];
|
| 86 |
+
tensor<fp16, [?, 32, 80, 998]> input_41_cast_fp16 = relu(x = input_39_cast_fp16)[name = tensor<string, []>("input_41_cast_fp16")];
|
| 87 |
+
tensor<string, []> input_43_pad_type_0 = const()[name = tensor<string, []>("input_43_pad_type_0"), val = tensor<string, []>("custom")];
|
| 88 |
+
tensor<int32, [4]> input_43_pad_0 = const()[name = tensor<string, []>("input_43_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 89 |
+
tensor<int32, [2]> input_43_strides_0 = const()[name = tensor<string, []>("input_43_strides_0"), val = tensor<int32, [2]>([2, 2])];
|
| 90 |
+
tensor<int32, [2]> input_43_dilations_0 = const()[name = tensor<string, []>("input_43_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 91 |
+
tensor<int32, []> input_43_groups_0 = const()[name = tensor<string, []>("input_43_groups_0"), val = tensor<int32, []>(1)];
|
| 92 |
+
tensor<fp16, [64, 32, 3, 3]> const_17_to_fp16 = const()[name = tensor<string, []>("const_17_to_fp16"), val = tensor<fp16, [64, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(259904)))];
|
| 93 |
+
tensor<fp16, [64]> const_18_to_fp16 = const()[name = tensor<string, []>("const_18_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(296832)))];
|
| 94 |
+
tensor<fp16, [?, 64, 40, 499]> input_45_cast_fp16 = conv(bias = const_18_to_fp16, dilations = input_43_dilations_0, groups = input_43_groups_0, pad = input_43_pad_0, pad_type = input_43_pad_type_0, strides = input_43_strides_0, weight = const_17_to_fp16, x = input_41_cast_fp16)[name = tensor<string, []>("input_45_cast_fp16")];
|
| 95 |
+
tensor<fp16, [?, 64, 40, 499]> input_47_cast_fp16 = relu(x = input_45_cast_fp16)[name = tensor<string, []>("input_47_cast_fp16")];
|
| 96 |
+
tensor<string, []> input_49_pad_type_0 = const()[name = tensor<string, []>("input_49_pad_type_0"), val = tensor<string, []>("custom")];
|
| 97 |
+
tensor<int32, [4]> input_49_pad_0 = const()[name = tensor<string, []>("input_49_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 98 |
+
tensor<int32, [2]> input_49_strides_0 = const()[name = tensor<string, []>("input_49_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 99 |
+
tensor<int32, [2]> input_49_dilations_0 = const()[name = tensor<string, []>("input_49_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 100 |
+
tensor<int32, []> input_49_groups_0 = const()[name = tensor<string, []>("input_49_groups_0"), val = tensor<int32, []>(1)];
|
| 101 |
+
tensor<fp16, [64, 64, 3, 3]> const_19_to_fp16 = const()[name = tensor<string, []>("const_19_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(297024)))];
|
| 102 |
+
tensor<fp16, [64]> const_20_to_fp16 = const()[name = tensor<string, []>("const_20_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(370816)))];
|
| 103 |
+
tensor<fp16, [?, 64, 40, 499]> out_7_cast_fp16 = conv(bias = const_20_to_fp16, dilations = input_49_dilations_0, groups = input_49_groups_0, pad = input_49_pad_0, pad_type = input_49_pad_type_0, strides = input_49_strides_0, weight = const_19_to_fp16, x = input_47_cast_fp16)[name = tensor<string, []>("out_7_cast_fp16")];
|
| 104 |
+
tensor<string, []> input_51_pad_type_0 = const()[name = tensor<string, []>("input_51_pad_type_0"), val = tensor<string, []>("valid")];
|
| 105 |
+
tensor<int32, [2]> input_51_strides_0 = const()[name = tensor<string, []>("input_51_strides_0"), val = tensor<int32, [2]>([2, 2])];
|
| 106 |
+
tensor<int32, [4]> input_51_pad_0 = const()[name = tensor<string, []>("input_51_pad_0"), val = tensor<int32, [4]>([0, 0, 0, 0])];
|
| 107 |
+
tensor<int32, [2]> input_51_dilations_0 = const()[name = tensor<string, []>("input_51_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 108 |
+
tensor<int32, []> input_51_groups_0 = const()[name = tensor<string, []>("input_51_groups_0"), val = tensor<int32, []>(1)];
|
| 109 |
+
tensor<fp16, [64, 32, 1, 1]> const_21_to_fp16 = const()[name = tensor<string, []>("const_21_to_fp16"), val = tensor<fp16, [64, 32, 1, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(371008)))];
|
| 110 |
+
tensor<fp16, [64]> const_22_to_fp16 = const()[name = tensor<string, []>("const_22_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(375168)))];
|
| 111 |
+
tensor<fp16, [?, 64, 40, 499]> var_196_cast_fp16 = conv(bias = const_22_to_fp16, dilations = input_51_dilations_0, groups = input_51_groups_0, pad = input_51_pad_0, pad_type = input_51_pad_type_0, strides = input_51_strides_0, weight = const_21_to_fp16, x = input_41_cast_fp16)[name = tensor<string, []>("op_196_cast_fp16")];
|
| 112 |
+
tensor<fp16, [?, 64, 40, 499]> input_53_cast_fp16 = add(x = out_7_cast_fp16, y = var_196_cast_fp16)[name = tensor<string, []>("input_53_cast_fp16")];
|
| 113 |
+
tensor<fp16, [?, 64, 40, 499]> input_55_cast_fp16 = relu(x = input_53_cast_fp16)[name = tensor<string, []>("input_55_cast_fp16")];
|
| 114 |
+
tensor<string, []> input_57_pad_type_0 = const()[name = tensor<string, []>("input_57_pad_type_0"), val = tensor<string, []>("custom")];
|
| 115 |
+
tensor<int32, [4]> input_57_pad_0 = const()[name = tensor<string, []>("input_57_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 116 |
+
tensor<int32, [2]> input_57_strides_0 = const()[name = tensor<string, []>("input_57_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 117 |
+
tensor<int32, [2]> input_57_dilations_0 = const()[name = tensor<string, []>("input_57_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 118 |
+
tensor<int32, []> input_57_groups_0 = const()[name = tensor<string, []>("input_57_groups_0"), val = tensor<int32, []>(1)];
|
| 119 |
+
tensor<fp16, [64, 64, 3, 3]> const_23_to_fp16 = const()[name = tensor<string, []>("const_23_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(375360)))];
|
| 120 |
+
tensor<fp16, [64]> const_24_to_fp16 = const()[name = tensor<string, []>("const_24_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(449152)))];
|
| 121 |
+
tensor<fp16, [?, 64, 40, 499]> input_59_cast_fp16 = conv(bias = const_24_to_fp16, dilations = input_57_dilations_0, groups = input_57_groups_0, pad = input_57_pad_0, pad_type = input_57_pad_type_0, strides = input_57_strides_0, weight = const_23_to_fp16, x = input_55_cast_fp16)[name = tensor<string, []>("input_59_cast_fp16")];
|
| 122 |
+
tensor<fp16, [?, 64, 40, 499]> input_61_cast_fp16 = relu(x = input_59_cast_fp16)[name = tensor<string, []>("input_61_cast_fp16")];
|
| 123 |
+
tensor<string, []> input_63_pad_type_0 = const()[name = tensor<string, []>("input_63_pad_type_0"), val = tensor<string, []>("custom")];
|
| 124 |
+
tensor<int32, [4]> input_63_pad_0 = const()[name = tensor<string, []>("input_63_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 125 |
+
tensor<int32, [2]> input_63_strides_0 = const()[name = tensor<string, []>("input_63_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 126 |
+
tensor<int32, [2]> input_63_dilations_0 = const()[name = tensor<string, []>("input_63_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 127 |
+
tensor<int32, []> input_63_groups_0 = const()[name = tensor<string, []>("input_63_groups_0"), val = tensor<int32, []>(1)];
|
| 128 |
+
tensor<fp16, [64, 64, 3, 3]> const_25_to_fp16 = const()[name = tensor<string, []>("const_25_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(449344)))];
|
| 129 |
+
tensor<fp16, [64]> const_26_to_fp16 = const()[name = tensor<string, []>("const_26_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(523136)))];
|
| 130 |
+
tensor<fp16, [?, 64, 40, 499]> out_9_cast_fp16 = conv(bias = const_26_to_fp16, dilations = input_63_dilations_0, groups = input_63_groups_0, pad = input_63_pad_0, pad_type = input_63_pad_type_0, strides = input_63_strides_0, weight = const_25_to_fp16, x = input_61_cast_fp16)[name = tensor<string, []>("out_9_cast_fp16")];
|
| 131 |
+
tensor<fp16, [?, 64, 40, 499]> input_65_cast_fp16 = add(x = out_9_cast_fp16, y = input_55_cast_fp16)[name = tensor<string, []>("input_65_cast_fp16")];
|
| 132 |
+
tensor<fp16, [?, 64, 40, 499]> input_67_cast_fp16 = relu(x = input_65_cast_fp16)[name = tensor<string, []>("input_67_cast_fp16")];
|
| 133 |
+
tensor<string, []> input_69_pad_type_0 = const()[name = tensor<string, []>("input_69_pad_type_0"), val = tensor<string, []>("custom")];
|
| 134 |
+
tensor<int32, [4]> input_69_pad_0 = const()[name = tensor<string, []>("input_69_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 135 |
+
tensor<int32, [2]> input_69_strides_0 = const()[name = tensor<string, []>("input_69_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 136 |
+
tensor<int32, [2]> input_69_dilations_0 = const()[name = tensor<string, []>("input_69_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 137 |
+
tensor<int32, []> input_69_groups_0 = const()[name = tensor<string, []>("input_69_groups_0"), val = tensor<int32, []>(1)];
|
| 138 |
+
tensor<fp16, [64, 64, 3, 3]> const_27_to_fp16 = const()[name = tensor<string, []>("const_27_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(523328)))];
|
| 139 |
+
tensor<fp16, [64]> const_28_to_fp16 = const()[name = tensor<string, []>("const_28_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(597120)))];
|
| 140 |
+
tensor<fp16, [?, 64, 40, 499]> input_71_cast_fp16 = conv(bias = const_28_to_fp16, dilations = input_69_dilations_0, groups = input_69_groups_0, pad = input_69_pad_0, pad_type = input_69_pad_type_0, strides = input_69_strides_0, weight = const_27_to_fp16, x = input_67_cast_fp16)[name = tensor<string, []>("input_71_cast_fp16")];
|
| 141 |
+
tensor<fp16, [?, 64, 40, 499]> input_73_cast_fp16 = relu(x = input_71_cast_fp16)[name = tensor<string, []>("input_73_cast_fp16")];
|
| 142 |
+
tensor<string, []> input_75_pad_type_0 = const()[name = tensor<string, []>("input_75_pad_type_0"), val = tensor<string, []>("custom")];
|
| 143 |
+
tensor<int32, [4]> input_75_pad_0 = const()[name = tensor<string, []>("input_75_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 144 |
+
tensor<int32, [2]> input_75_strides_0 = const()[name = tensor<string, []>("input_75_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 145 |
+
tensor<int32, [2]> input_75_dilations_0 = const()[name = tensor<string, []>("input_75_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 146 |
+
tensor<int32, []> input_75_groups_0 = const()[name = tensor<string, []>("input_75_groups_0"), val = tensor<int32, []>(1)];
|
| 147 |
+
tensor<fp16, [64, 64, 3, 3]> const_29_to_fp16 = const()[name = tensor<string, []>("const_29_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(597312)))];
|
| 148 |
+
tensor<fp16, [64]> const_30_to_fp16 = const()[name = tensor<string, []>("const_30_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(671104)))];
|
| 149 |
+
tensor<fp16, [?, 64, 40, 499]> out_11_cast_fp16 = conv(bias = const_30_to_fp16, dilations = input_75_dilations_0, groups = input_75_groups_0, pad = input_75_pad_0, pad_type = input_75_pad_type_0, strides = input_75_strides_0, weight = const_29_to_fp16, x = input_73_cast_fp16)[name = tensor<string, []>("out_11_cast_fp16")];
|
| 150 |
+
tensor<fp16, [?, 64, 40, 499]> input_77_cast_fp16 = add(x = out_11_cast_fp16, y = input_67_cast_fp16)[name = tensor<string, []>("input_77_cast_fp16")];
|
| 151 |
+
tensor<fp16, [?, 64, 40, 499]> input_79_cast_fp16 = relu(x = input_77_cast_fp16)[name = tensor<string, []>("input_79_cast_fp16")];
|
| 152 |
+
tensor<string, []> input_81_pad_type_0 = const()[name = tensor<string, []>("input_81_pad_type_0"), val = tensor<string, []>("custom")];
|
| 153 |
+
tensor<int32, [4]> input_81_pad_0 = const()[name = tensor<string, []>("input_81_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 154 |
+
tensor<int32, [2]> input_81_strides_0 = const()[name = tensor<string, []>("input_81_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 155 |
+
tensor<int32, [2]> input_81_dilations_0 = const()[name = tensor<string, []>("input_81_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 156 |
+
tensor<int32, []> input_81_groups_0 = const()[name = tensor<string, []>("input_81_groups_0"), val = tensor<int32, []>(1)];
|
| 157 |
+
tensor<fp16, [64, 64, 3, 3]> const_31_to_fp16 = const()[name = tensor<string, []>("const_31_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(671296)))];
|
| 158 |
+
tensor<fp16, [64]> const_32_to_fp16 = const()[name = tensor<string, []>("const_32_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(745088)))];
|
| 159 |
+
tensor<fp16, [?, 64, 40, 499]> input_83_cast_fp16 = conv(bias = const_32_to_fp16, dilations = input_81_dilations_0, groups = input_81_groups_0, pad = input_81_pad_0, pad_type = input_81_pad_type_0, strides = input_81_strides_0, weight = const_31_to_fp16, x = input_79_cast_fp16)[name = tensor<string, []>("input_83_cast_fp16")];
|
| 160 |
+
tensor<fp16, [?, 64, 40, 499]> input_85_cast_fp16 = relu(x = input_83_cast_fp16)[name = tensor<string, []>("input_85_cast_fp16")];
|
| 161 |
+
tensor<string, []> input_87_pad_type_0 = const()[name = tensor<string, []>("input_87_pad_type_0"), val = tensor<string, []>("custom")];
|
| 162 |
+
tensor<int32, [4]> input_87_pad_0 = const()[name = tensor<string, []>("input_87_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 163 |
+
tensor<int32, [2]> input_87_strides_0 = const()[name = tensor<string, []>("input_87_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 164 |
+
tensor<int32, [2]> input_87_dilations_0 = const()[name = tensor<string, []>("input_87_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 165 |
+
tensor<int32, []> input_87_groups_0 = const()[name = tensor<string, []>("input_87_groups_0"), val = tensor<int32, []>(1)];
|
| 166 |
+
tensor<fp16, [64, 64, 3, 3]> const_33_to_fp16 = const()[name = tensor<string, []>("const_33_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(745280)))];
|
| 167 |
+
tensor<fp16, [64]> const_34_to_fp16 = const()[name = tensor<string, []>("const_34_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(819072)))];
|
| 168 |
+
tensor<fp16, [?, 64, 40, 499]> out_13_cast_fp16 = conv(bias = const_34_to_fp16, dilations = input_87_dilations_0, groups = input_87_groups_0, pad = input_87_pad_0, pad_type = input_87_pad_type_0, strides = input_87_strides_0, weight = const_33_to_fp16, x = input_85_cast_fp16)[name = tensor<string, []>("out_13_cast_fp16")];
|
| 169 |
+
tensor<fp16, [?, 64, 40, 499]> input_89_cast_fp16 = add(x = out_13_cast_fp16, y = input_79_cast_fp16)[name = tensor<string, []>("input_89_cast_fp16")];
|
| 170 |
+
tensor<fp16, [?, 64, 40, 499]> input_91_cast_fp16 = relu(x = input_89_cast_fp16)[name = tensor<string, []>("input_91_cast_fp16")];
|
| 171 |
+
tensor<string, []> input_93_pad_type_0 = const()[name = tensor<string, []>("input_93_pad_type_0"), val = tensor<string, []>("custom")];
|
| 172 |
+
tensor<int32, [4]> input_93_pad_0 = const()[name = tensor<string, []>("input_93_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 173 |
+
tensor<int32, [2]> input_93_strides_0 = const()[name = tensor<string, []>("input_93_strides_0"), val = tensor<int32, [2]>([2, 2])];
|
| 174 |
+
tensor<int32, [2]> input_93_dilations_0 = const()[name = tensor<string, []>("input_93_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 175 |
+
tensor<int32, []> input_93_groups_0 = const()[name = tensor<string, []>("input_93_groups_0"), val = tensor<int32, []>(1)];
|
| 176 |
+
tensor<fp16, [128, 64, 3, 3]> const_35_to_fp16 = const()[name = tensor<string, []>("const_35_to_fp16"), val = tensor<fp16, [128, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(819264)))];
|
| 177 |
+
tensor<fp16, [128]> const_36_to_fp16 = const()[name = tensor<string, []>("const_36_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(966784)))];
|
| 178 |
+
tensor<fp16, [?, 128, 20, 250]> input_95_cast_fp16 = conv(bias = const_36_to_fp16, dilations = input_93_dilations_0, groups = input_93_groups_0, pad = input_93_pad_0, pad_type = input_93_pad_type_0, strides = input_93_strides_0, weight = const_35_to_fp16, x = input_91_cast_fp16)[name = tensor<string, []>("input_95_cast_fp16")];
|
| 179 |
+
tensor<fp16, [?, 128, 20, 250]> input_97_cast_fp16 = relu(x = input_95_cast_fp16)[name = tensor<string, []>("input_97_cast_fp16")];
|
| 180 |
+
tensor<string, []> input_99_pad_type_0 = const()[name = tensor<string, []>("input_99_pad_type_0"), val = tensor<string, []>("custom")];
|
| 181 |
+
tensor<int32, [4]> input_99_pad_0 = const()[name = tensor<string, []>("input_99_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 182 |
+
tensor<int32, [2]> input_99_strides_0 = const()[name = tensor<string, []>("input_99_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 183 |
+
tensor<int32, [2]> input_99_dilations_0 = const()[name = tensor<string, []>("input_99_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 184 |
+
tensor<int32, []> input_99_groups_0 = const()[name = tensor<string, []>("input_99_groups_0"), val = tensor<int32, []>(1)];
|
| 185 |
+
tensor<fp16, [128, 128, 3, 3]> const_37_to_fp16 = const()[name = tensor<string, []>("const_37_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(967104)))];
|
| 186 |
+
tensor<fp16, [128]> const_38_to_fp16 = const()[name = tensor<string, []>("const_38_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1262080)))];
|
| 187 |
+
tensor<fp16, [?, 128, 20, 250]> out_15_cast_fp16 = conv(bias = const_38_to_fp16, dilations = input_99_dilations_0, groups = input_99_groups_0, pad = input_99_pad_0, pad_type = input_99_pad_type_0, strides = input_99_strides_0, weight = const_37_to_fp16, x = input_97_cast_fp16)[name = tensor<string, []>("out_15_cast_fp16")];
|
| 188 |
+
tensor<string, []> input_101_pad_type_0 = const()[name = tensor<string, []>("input_101_pad_type_0"), val = tensor<string, []>("valid")];
|
| 189 |
+
tensor<int32, [2]> input_101_strides_0 = const()[name = tensor<string, []>("input_101_strides_0"), val = tensor<int32, [2]>([2, 2])];
|
| 190 |
+
tensor<int32, [4]> input_101_pad_0 = const()[name = tensor<string, []>("input_101_pad_0"), val = tensor<int32, [4]>([0, 0, 0, 0])];
|
| 191 |
+
tensor<int32, [2]> input_101_dilations_0 = const()[name = tensor<string, []>("input_101_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 192 |
+
tensor<int32, []> input_101_groups_0 = const()[name = tensor<string, []>("input_101_groups_0"), val = tensor<int32, []>(1)];
|
| 193 |
+
tensor<fp16, [128, 64, 1, 1]> const_39_to_fp16 = const()[name = tensor<string, []>("const_39_to_fp16"), val = tensor<fp16, [128, 64, 1, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1262400)))];
|
| 194 |
+
tensor<fp16, [128]> const_40_to_fp16 = const()[name = tensor<string, []>("const_40_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1278848)))];
|
| 195 |
+
tensor<fp16, [?, 128, 20, 250]> var_332_cast_fp16 = conv(bias = const_40_to_fp16, dilations = input_101_dilations_0, groups = input_101_groups_0, pad = input_101_pad_0, pad_type = input_101_pad_type_0, strides = input_101_strides_0, weight = const_39_to_fp16, x = input_91_cast_fp16)[name = tensor<string, []>("op_332_cast_fp16")];
|
| 196 |
+
tensor<fp16, [?, 128, 20, 250]> input_103_cast_fp16 = add(x = out_15_cast_fp16, y = var_332_cast_fp16)[name = tensor<string, []>("input_103_cast_fp16")];
|
| 197 |
+
tensor<fp16, [?, 128, 20, 250]> input_105_cast_fp16 = relu(x = input_103_cast_fp16)[name = tensor<string, []>("input_105_cast_fp16")];
|
| 198 |
+
tensor<string, []> input_107_pad_type_0 = const()[name = tensor<string, []>("input_107_pad_type_0"), val = tensor<string, []>("custom")];
|
| 199 |
+
tensor<int32, [4]> input_107_pad_0 = const()[name = tensor<string, []>("input_107_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 200 |
+
tensor<int32, [2]> input_107_strides_0 = const()[name = tensor<string, []>("input_107_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 201 |
+
tensor<int32, [2]> input_107_dilations_0 = const()[name = tensor<string, []>("input_107_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 202 |
+
tensor<int32, []> input_107_groups_0 = const()[name = tensor<string, []>("input_107_groups_0"), val = tensor<int32, []>(1)];
|
| 203 |
+
tensor<fp16, [128, 128, 3, 3]> const_41_to_fp16 = const()[name = tensor<string, []>("const_41_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1279168)))];
|
| 204 |
+
tensor<fp16, [128]> const_42_to_fp16 = const()[name = tensor<string, []>("const_42_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1574144)))];
|
| 205 |
+
tensor<fp16, [?, 128, 20, 250]> input_109_cast_fp16 = conv(bias = const_42_to_fp16, dilations = input_107_dilations_0, groups = input_107_groups_0, pad = input_107_pad_0, pad_type = input_107_pad_type_0, strides = input_107_strides_0, weight = const_41_to_fp16, x = input_105_cast_fp16)[name = tensor<string, []>("input_109_cast_fp16")];
|
| 206 |
+
tensor<fp16, [?, 128, 20, 250]> input_111_cast_fp16 = relu(x = input_109_cast_fp16)[name = tensor<string, []>("input_111_cast_fp16")];
|
| 207 |
+
tensor<string, []> input_113_pad_type_0 = const()[name = tensor<string, []>("input_113_pad_type_0"), val = tensor<string, []>("custom")];
|
| 208 |
+
tensor<int32, [4]> input_113_pad_0 = const()[name = tensor<string, []>("input_113_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 209 |
+
tensor<int32, [2]> input_113_strides_0 = const()[name = tensor<string, []>("input_113_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 210 |
+
tensor<int32, [2]> input_113_dilations_0 = const()[name = tensor<string, []>("input_113_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 211 |
+
tensor<int32, []> input_113_groups_0 = const()[name = tensor<string, []>("input_113_groups_0"), val = tensor<int32, []>(1)];
|
| 212 |
+
tensor<fp16, [128, 128, 3, 3]> const_43_to_fp16 = const()[name = tensor<string, []>("const_43_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1574464)))];
|
| 213 |
+
tensor<fp16, [128]> const_44_to_fp16 = const()[name = tensor<string, []>("const_44_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1869440)))];
|
| 214 |
+
tensor<fp16, [?, 128, 20, 250]> out_17_cast_fp16 = conv(bias = const_44_to_fp16, dilations = input_113_dilations_0, groups = input_113_groups_0, pad = input_113_pad_0, pad_type = input_113_pad_type_0, strides = input_113_strides_0, weight = const_43_to_fp16, x = input_111_cast_fp16)[name = tensor<string, []>("out_17_cast_fp16")];
|
| 215 |
+
tensor<fp16, [?, 128, 20, 250]> input_115_cast_fp16 = add(x = out_17_cast_fp16, y = input_105_cast_fp16)[name = tensor<string, []>("input_115_cast_fp16")];
|
| 216 |
+
tensor<fp16, [?, 128, 20, 250]> input_117_cast_fp16 = relu(x = input_115_cast_fp16)[name = tensor<string, []>("input_117_cast_fp16")];
|
| 217 |
+
tensor<string, []> input_119_pad_type_0 = const()[name = tensor<string, []>("input_119_pad_type_0"), val = tensor<string, []>("custom")];
|
| 218 |
+
tensor<int32, [4]> input_119_pad_0 = const()[name = tensor<string, []>("input_119_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 219 |
+
tensor<int32, [2]> input_119_strides_0 = const()[name = tensor<string, []>("input_119_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 220 |
+
tensor<int32, [2]> input_119_dilations_0 = const()[name = tensor<string, []>("input_119_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 221 |
+
tensor<int32, []> input_119_groups_0 = const()[name = tensor<string, []>("input_119_groups_0"), val = tensor<int32, []>(1)];
|
| 222 |
+
tensor<fp16, [128, 128, 3, 3]> const_45_to_fp16 = const()[name = tensor<string, []>("const_45_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1869760)))];
|
| 223 |
+
tensor<fp16, [128]> const_46_to_fp16 = const()[name = tensor<string, []>("const_46_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2164736)))];
|
| 224 |
+
tensor<fp16, [?, 128, 20, 250]> input_121_cast_fp16 = conv(bias = const_46_to_fp16, dilations = input_119_dilations_0, groups = input_119_groups_0, pad = input_119_pad_0, pad_type = input_119_pad_type_0, strides = input_119_strides_0, weight = const_45_to_fp16, x = input_117_cast_fp16)[name = tensor<string, []>("input_121_cast_fp16")];
|
| 225 |
+
tensor<fp16, [?, 128, 20, 250]> input_123_cast_fp16 = relu(x = input_121_cast_fp16)[name = tensor<string, []>("input_123_cast_fp16")];
|
| 226 |
+
tensor<string, []> input_125_pad_type_0 = const()[name = tensor<string, []>("input_125_pad_type_0"), val = tensor<string, []>("custom")];
|
| 227 |
+
tensor<int32, [4]> input_125_pad_0 = const()[name = tensor<string, []>("input_125_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 228 |
+
tensor<int32, [2]> input_125_strides_0 = const()[name = tensor<string, []>("input_125_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 229 |
+
tensor<int32, [2]> input_125_dilations_0 = const()[name = tensor<string, []>("input_125_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 230 |
+
tensor<int32, []> input_125_groups_0 = const()[name = tensor<string, []>("input_125_groups_0"), val = tensor<int32, []>(1)];
|
| 231 |
+
tensor<fp16, [128, 128, 3, 3]> const_47_to_fp16 = const()[name = tensor<string, []>("const_47_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2165056)))];
|
| 232 |
+
tensor<fp16, [128]> const_48_to_fp16 = const()[name = tensor<string, []>("const_48_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2460032)))];
|
| 233 |
+
tensor<fp16, [?, 128, 20, 250]> out_19_cast_fp16 = conv(bias = const_48_to_fp16, dilations = input_125_dilations_0, groups = input_125_groups_0, pad = input_125_pad_0, pad_type = input_125_pad_type_0, strides = input_125_strides_0, weight = const_47_to_fp16, x = input_123_cast_fp16)[name = tensor<string, []>("out_19_cast_fp16")];
|
| 234 |
+
tensor<fp16, [?, 128, 20, 250]> input_127_cast_fp16 = add(x = out_19_cast_fp16, y = input_117_cast_fp16)[name = tensor<string, []>("input_127_cast_fp16")];
|
| 235 |
+
tensor<fp16, [?, 128, 20, 250]> input_129_cast_fp16 = relu(x = input_127_cast_fp16)[name = tensor<string, []>("input_129_cast_fp16")];
|
| 236 |
+
tensor<string, []> input_131_pad_type_0 = const()[name = tensor<string, []>("input_131_pad_type_0"), val = tensor<string, []>("custom")];
|
| 237 |
+
tensor<int32, [4]> input_131_pad_0 = const()[name = tensor<string, []>("input_131_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 238 |
+
tensor<int32, [2]> input_131_strides_0 = const()[name = tensor<string, []>("input_131_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 239 |
+
tensor<int32, [2]> input_131_dilations_0 = const()[name = tensor<string, []>("input_131_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 240 |
+
tensor<int32, []> input_131_groups_0 = const()[name = tensor<string, []>("input_131_groups_0"), val = tensor<int32, []>(1)];
|
| 241 |
+
tensor<fp16, [128, 128, 3, 3]> const_49_to_fp16 = const()[name = tensor<string, []>("const_49_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2460352)))];
|
| 242 |
+
tensor<fp16, [128]> const_50_to_fp16 = const()[name = tensor<string, []>("const_50_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2755328)))];
|
| 243 |
+
tensor<fp16, [?, 128, 20, 250]> input_133_cast_fp16 = conv(bias = const_50_to_fp16, dilations = input_131_dilations_0, groups = input_131_groups_0, pad = input_131_pad_0, pad_type = input_131_pad_type_0, strides = input_131_strides_0, weight = const_49_to_fp16, x = input_129_cast_fp16)[name = tensor<string, []>("input_133_cast_fp16")];
|
| 244 |
+
tensor<fp16, [?, 128, 20, 250]> input_135_cast_fp16 = relu(x = input_133_cast_fp16)[name = tensor<string, []>("input_135_cast_fp16")];
|
| 245 |
+
tensor<string, []> input_137_pad_type_0 = const()[name = tensor<string, []>("input_137_pad_type_0"), val = tensor<string, []>("custom")];
|
| 246 |
+
tensor<int32, [4]> input_137_pad_0 = const()[name = tensor<string, []>("input_137_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 247 |
+
tensor<int32, [2]> input_137_strides_0 = const()[name = tensor<string, []>("input_137_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 248 |
+
tensor<int32, [2]> input_137_dilations_0 = const()[name = tensor<string, []>("input_137_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 249 |
+
tensor<int32, []> input_137_groups_0 = const()[name = tensor<string, []>("input_137_groups_0"), val = tensor<int32, []>(1)];
|
| 250 |
+
tensor<fp16, [128, 128, 3, 3]> const_51_to_fp16 = const()[name = tensor<string, []>("const_51_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2755648)))];
|
| 251 |
+
tensor<fp16, [128]> const_52_to_fp16 = const()[name = tensor<string, []>("const_52_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3050624)))];
|
| 252 |
+
tensor<fp16, [?, 128, 20, 250]> out_21_cast_fp16 = conv(bias = const_52_to_fp16, dilations = input_137_dilations_0, groups = input_137_groups_0, pad = input_137_pad_0, pad_type = input_137_pad_type_0, strides = input_137_strides_0, weight = const_51_to_fp16, x = input_135_cast_fp16)[name = tensor<string, []>("out_21_cast_fp16")];
|
| 253 |
+
tensor<fp16, [?, 128, 20, 250]> input_139_cast_fp16 = add(x = out_21_cast_fp16, y = input_129_cast_fp16)[name = tensor<string, []>("input_139_cast_fp16")];
|
| 254 |
+
tensor<fp16, [?, 128, 20, 250]> input_141_cast_fp16 = relu(x = input_139_cast_fp16)[name = tensor<string, []>("input_141_cast_fp16")];
|
| 255 |
+
tensor<string, []> input_143_pad_type_0 = const()[name = tensor<string, []>("input_143_pad_type_0"), val = tensor<string, []>("custom")];
|
| 256 |
+
tensor<int32, [4]> input_143_pad_0 = const()[name = tensor<string, []>("input_143_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 257 |
+
tensor<int32, [2]> input_143_strides_0 = const()[name = tensor<string, []>("input_143_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 258 |
+
tensor<int32, [2]> input_143_dilations_0 = const()[name = tensor<string, []>("input_143_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 259 |
+
tensor<int32, []> input_143_groups_0 = const()[name = tensor<string, []>("input_143_groups_0"), val = tensor<int32, []>(1)];
|
| 260 |
+
tensor<fp16, [128, 128, 3, 3]> const_53_to_fp16 = const()[name = tensor<string, []>("const_53_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3050944)))];
|
| 261 |
+
tensor<fp16, [128]> const_54_to_fp16 = const()[name = tensor<string, []>("const_54_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3345920)))];
|
| 262 |
+
tensor<fp16, [?, 128, 20, 250]> input_145_cast_fp16 = conv(bias = const_54_to_fp16, dilations = input_143_dilations_0, groups = input_143_groups_0, pad = input_143_pad_0, pad_type = input_143_pad_type_0, strides = input_143_strides_0, weight = const_53_to_fp16, x = input_141_cast_fp16)[name = tensor<string, []>("input_145_cast_fp16")];
|
| 263 |
+
tensor<fp16, [?, 128, 20, 250]> input_147_cast_fp16 = relu(x = input_145_cast_fp16)[name = tensor<string, []>("input_147_cast_fp16")];
|
| 264 |
+
tensor<string, []> input_149_pad_type_0 = const()[name = tensor<string, []>("input_149_pad_type_0"), val = tensor<string, []>("custom")];
|
| 265 |
+
tensor<int32, [4]> input_149_pad_0 = const()[name = tensor<string, []>("input_149_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 266 |
+
tensor<int32, [2]> input_149_strides_0 = const()[name = tensor<string, []>("input_149_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 267 |
+
tensor<int32, [2]> input_149_dilations_0 = const()[name = tensor<string, []>("input_149_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 268 |
+
tensor<int32, []> input_149_groups_0 = const()[name = tensor<string, []>("input_149_groups_0"), val = tensor<int32, []>(1)];
|
| 269 |
+
tensor<fp16, [128, 128, 3, 3]> const_55_to_fp16 = const()[name = tensor<string, []>("const_55_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3346240)))];
|
| 270 |
+
tensor<fp16, [128]> const_56_to_fp16 = const()[name = tensor<string, []>("const_56_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3641216)))];
|
| 271 |
+
tensor<fp16, [?, 128, 20, 250]> out_23_cast_fp16 = conv(bias = const_56_to_fp16, dilations = input_149_dilations_0, groups = input_149_groups_0, pad = input_149_pad_0, pad_type = input_149_pad_type_0, strides = input_149_strides_0, weight = const_55_to_fp16, x = input_147_cast_fp16)[name = tensor<string, []>("out_23_cast_fp16")];
|
| 272 |
+
tensor<fp16, [?, 128, 20, 250]> input_151_cast_fp16 = add(x = out_23_cast_fp16, y = input_141_cast_fp16)[name = tensor<string, []>("input_151_cast_fp16")];
|
| 273 |
+
tensor<fp16, [?, 128, 20, 250]> input_153_cast_fp16 = relu(x = input_151_cast_fp16)[name = tensor<string, []>("input_153_cast_fp16")];
|
| 274 |
+
tensor<string, []> input_155_pad_type_0 = const()[name = tensor<string, []>("input_155_pad_type_0"), val = tensor<string, []>("custom")];
|
| 275 |
+
tensor<int32, [4]> input_155_pad_0 = const()[name = tensor<string, []>("input_155_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 276 |
+
tensor<int32, [2]> input_155_strides_0 = const()[name = tensor<string, []>("input_155_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 277 |
+
tensor<int32, [2]> input_155_dilations_0 = const()[name = tensor<string, []>("input_155_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 278 |
+
tensor<int32, []> input_155_groups_0 = const()[name = tensor<string, []>("input_155_groups_0"), val = tensor<int32, []>(1)];
|
| 279 |
+
tensor<fp16, [128, 128, 3, 3]> const_57_to_fp16 = const()[name = tensor<string, []>("const_57_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3641536)))];
|
| 280 |
+
tensor<fp16, [128]> const_58_to_fp16 = const()[name = tensor<string, []>("const_58_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3936512)))];
|
| 281 |
+
tensor<fp16, [?, 128, 20, 250]> input_157_cast_fp16 = conv(bias = const_58_to_fp16, dilations = input_155_dilations_0, groups = input_155_groups_0, pad = input_155_pad_0, pad_type = input_155_pad_type_0, strides = input_155_strides_0, weight = const_57_to_fp16, x = input_153_cast_fp16)[name = tensor<string, []>("input_157_cast_fp16")];
|
| 282 |
+
tensor<fp16, [?, 128, 20, 250]> input_159_cast_fp16 = relu(x = input_157_cast_fp16)[name = tensor<string, []>("input_159_cast_fp16")];
|
| 283 |
+
tensor<string, []> input_161_pad_type_0 = const()[name = tensor<string, []>("input_161_pad_type_0"), val = tensor<string, []>("custom")];
|
| 284 |
+
tensor<int32, [4]> input_161_pad_0 = const()[name = tensor<string, []>("input_161_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 285 |
+
tensor<int32, [2]> input_161_strides_0 = const()[name = tensor<string, []>("input_161_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 286 |
+
tensor<int32, [2]> input_161_dilations_0 = const()[name = tensor<string, []>("input_161_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 287 |
+
tensor<int32, []> input_161_groups_0 = const()[name = tensor<string, []>("input_161_groups_0"), val = tensor<int32, []>(1)];
|
| 288 |
+
tensor<fp16, [128, 128, 3, 3]> const_59_to_fp16 = const()[name = tensor<string, []>("const_59_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3936832)))];
|
| 289 |
+
tensor<fp16, [128]> const_60_to_fp16 = const()[name = tensor<string, []>("const_60_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4231808)))];
|
| 290 |
+
tensor<fp16, [?, 128, 20, 250]> out_25_cast_fp16 = conv(bias = const_60_to_fp16, dilations = input_161_dilations_0, groups = input_161_groups_0, pad = input_161_pad_0, pad_type = input_161_pad_type_0, strides = input_161_strides_0, weight = const_59_to_fp16, x = input_159_cast_fp16)[name = tensor<string, []>("out_25_cast_fp16")];
|
| 291 |
+
tensor<fp16, [?, 128, 20, 250]> input_163_cast_fp16 = add(x = out_25_cast_fp16, y = input_153_cast_fp16)[name = tensor<string, []>("input_163_cast_fp16")];
|
| 292 |
+
tensor<fp16, [?, 128, 20, 250]> input_165_cast_fp16 = relu(x = input_163_cast_fp16)[name = tensor<string, []>("input_165_cast_fp16")];
|
| 293 |
+
tensor<string, []> input_167_pad_type_0 = const()[name = tensor<string, []>("input_167_pad_type_0"), val = tensor<string, []>("custom")];
|
| 294 |
+
tensor<int32, [4]> input_167_pad_0 = const()[name = tensor<string, []>("input_167_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 295 |
+
tensor<int32, [2]> input_167_strides_0 = const()[name = tensor<string, []>("input_167_strides_0"), val = tensor<int32, [2]>([2, 2])];
|
| 296 |
+
tensor<int32, [2]> input_167_dilations_0 = const()[name = tensor<string, []>("input_167_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 297 |
+
tensor<int32, []> input_167_groups_0 = const()[name = tensor<string, []>("input_167_groups_0"), val = tensor<int32, []>(1)];
|
| 298 |
+
tensor<fp16, [256, 128, 3, 3]> const_61_to_fp16 = const()[name = tensor<string, []>("const_61_to_fp16"), val = tensor<fp16, [256, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4232128)))];
|
| 299 |
+
tensor<fp16, [256]> const_62_to_fp16 = const()[name = tensor<string, []>("const_62_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4822016)))];
|
| 300 |
+
tensor<fp16, [?, 256, 10, 125]> input_169_cast_fp16 = conv(bias = const_62_to_fp16, dilations = input_167_dilations_0, groups = input_167_groups_0, pad = input_167_pad_0, pad_type = input_167_pad_type_0, strides = input_167_strides_0, weight = const_61_to_fp16, x = input_165_cast_fp16)[name = tensor<string, []>("input_169_cast_fp16")];
|
| 301 |
+
tensor<fp16, [?, 256, 10, 125]> input_171_cast_fp16 = relu(x = input_169_cast_fp16)[name = tensor<string, []>("input_171_cast_fp16")];
|
| 302 |
+
tensor<string, []> input_173_pad_type_0 = const()[name = tensor<string, []>("input_173_pad_type_0"), val = tensor<string, []>("custom")];
|
| 303 |
+
tensor<int32, [4]> input_173_pad_0 = const()[name = tensor<string, []>("input_173_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 304 |
+
tensor<int32, [2]> input_173_strides_0 = const()[name = tensor<string, []>("input_173_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 305 |
+
tensor<int32, [2]> input_173_dilations_0 = const()[name = tensor<string, []>("input_173_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 306 |
+
tensor<int32, []> input_173_groups_0 = const()[name = tensor<string, []>("input_173_groups_0"), val = tensor<int32, []>(1)];
|
| 307 |
+
tensor<fp16, [256, 256, 3, 3]> const_63_to_fp16 = const()[name = tensor<string, []>("const_63_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4822592)))];
|
| 308 |
+
tensor<fp16, [256]> const_64_to_fp16 = const()[name = tensor<string, []>("const_64_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(6002304)))];
|
| 309 |
+
tensor<fp16, [?, 256, 10, 125]> out_27_cast_fp16 = conv(bias = const_64_to_fp16, dilations = input_173_dilations_0, groups = input_173_groups_0, pad = input_173_pad_0, pad_type = input_173_pad_type_0, strides = input_173_strides_0, weight = const_63_to_fp16, x = input_171_cast_fp16)[name = tensor<string, []>("out_27_cast_fp16")];
|
| 310 |
+
tensor<string, []> input_175_pad_type_0 = const()[name = tensor<string, []>("input_175_pad_type_0"), val = tensor<string, []>("valid")];
|
| 311 |
+
tensor<int32, [2]> input_175_strides_0 = const()[name = tensor<string, []>("input_175_strides_0"), val = tensor<int32, [2]>([2, 2])];
|
| 312 |
+
tensor<int32, [4]> input_175_pad_0 = const()[name = tensor<string, []>("input_175_pad_0"), val = tensor<int32, [4]>([0, 0, 0, 0])];
|
| 313 |
+
tensor<int32, [2]> input_175_dilations_0 = const()[name = tensor<string, []>("input_175_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 314 |
+
tensor<int32, []> input_175_groups_0 = const()[name = tensor<string, []>("input_175_groups_0"), val = tensor<int32, []>(1)];
|
| 315 |
+
tensor<fp16, [256, 128, 1, 1]> const_65_to_fp16 = const()[name = tensor<string, []>("const_65_to_fp16"), val = tensor<fp16, [256, 128, 1, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(6002880)))];
|
| 316 |
+
tensor<fp16, [256]> const_66_to_fp16 = const()[name = tensor<string, []>("const_66_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(6068480)))];
|
| 317 |
+
tensor<fp16, [?, 256, 10, 125]> var_523_cast_fp16 = conv(bias = const_66_to_fp16, dilations = input_175_dilations_0, groups = input_175_groups_0, pad = input_175_pad_0, pad_type = input_175_pad_type_0, strides = input_175_strides_0, weight = const_65_to_fp16, x = input_165_cast_fp16)[name = tensor<string, []>("op_523_cast_fp16")];
|
| 318 |
+
tensor<fp16, [?, 256, 10, 125]> input_177_cast_fp16 = add(x = out_27_cast_fp16, y = var_523_cast_fp16)[name = tensor<string, []>("input_177_cast_fp16")];
|
| 319 |
+
tensor<fp16, [?, 256, 10, 125]> input_179_cast_fp16 = relu(x = input_177_cast_fp16)[name = tensor<string, []>("input_179_cast_fp16")];
|
| 320 |
+
tensor<string, []> input_181_pad_type_0 = const()[name = tensor<string, []>("input_181_pad_type_0"), val = tensor<string, []>("custom")];
|
| 321 |
+
tensor<int32, [4]> input_181_pad_0 = const()[name = tensor<string, []>("input_181_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 322 |
+
tensor<int32, [2]> input_181_strides_0 = const()[name = tensor<string, []>("input_181_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 323 |
+
tensor<int32, [2]> input_181_dilations_0 = const()[name = tensor<string, []>("input_181_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 324 |
+
tensor<int32, []> input_181_groups_0 = const()[name = tensor<string, []>("input_181_groups_0"), val = tensor<int32, []>(1)];
|
| 325 |
+
tensor<fp16, [256, 256, 3, 3]> const_67_to_fp16 = const()[name = tensor<string, []>("const_67_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(6069056)))];
|
| 326 |
+
tensor<fp16, [256]> const_68_to_fp16 = const()[name = tensor<string, []>("const_68_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(7248768)))];
|
| 327 |
+
tensor<fp16, [?, 256, 10, 125]> input_183_cast_fp16 = conv(bias = const_68_to_fp16, dilations = input_181_dilations_0, groups = input_181_groups_0, pad = input_181_pad_0, pad_type = input_181_pad_type_0, strides = input_181_strides_0, weight = const_67_to_fp16, x = input_179_cast_fp16)[name = tensor<string, []>("input_183_cast_fp16")];
|
| 328 |
+
tensor<fp16, [?, 256, 10, 125]> input_185_cast_fp16 = relu(x = input_183_cast_fp16)[name = tensor<string, []>("input_185_cast_fp16")];
|
| 329 |
+
tensor<string, []> input_187_pad_type_0 = const()[name = tensor<string, []>("input_187_pad_type_0"), val = tensor<string, []>("custom")];
|
| 330 |
+
tensor<int32, [4]> input_187_pad_0 = const()[name = tensor<string, []>("input_187_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 331 |
+
tensor<int32, [2]> input_187_strides_0 = const()[name = tensor<string, []>("input_187_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 332 |
+
tensor<int32, [2]> input_187_dilations_0 = const()[name = tensor<string, []>("input_187_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 333 |
+
tensor<int32, []> input_187_groups_0 = const()[name = tensor<string, []>("input_187_groups_0"), val = tensor<int32, []>(1)];
|
| 334 |
+
tensor<fp16, [256, 256, 3, 3]> const_69_to_fp16 = const()[name = tensor<string, []>("const_69_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(7249344)))];
|
| 335 |
+
tensor<fp16, [256]> const_70_to_fp16 = const()[name = tensor<string, []>("const_70_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(8429056)))];
|
| 336 |
+
tensor<fp16, [?, 256, 10, 125]> out_29_cast_fp16 = conv(bias = const_70_to_fp16, dilations = input_187_dilations_0, groups = input_187_groups_0, pad = input_187_pad_0, pad_type = input_187_pad_type_0, strides = input_187_strides_0, weight = const_69_to_fp16, x = input_185_cast_fp16)[name = tensor<string, []>("out_29_cast_fp16")];
|
| 337 |
+
tensor<fp16, [?, 256, 10, 125]> input_189_cast_fp16 = add(x = out_29_cast_fp16, y = input_179_cast_fp16)[name = tensor<string, []>("input_189_cast_fp16")];
|
| 338 |
+
tensor<fp16, [?, 256, 10, 125]> input_191_cast_fp16 = relu(x = input_189_cast_fp16)[name = tensor<string, []>("input_191_cast_fp16")];
|
| 339 |
+
tensor<string, []> input_193_pad_type_0 = const()[name = tensor<string, []>("input_193_pad_type_0"), val = tensor<string, []>("custom")];
|
| 340 |
+
tensor<int32, [4]> input_193_pad_0 = const()[name = tensor<string, []>("input_193_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 341 |
+
tensor<int32, [2]> input_193_strides_0 = const()[name = tensor<string, []>("input_193_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 342 |
+
tensor<int32, [2]> input_193_dilations_0 = const()[name = tensor<string, []>("input_193_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 343 |
+
tensor<int32, []> input_193_groups_0 = const()[name = tensor<string, []>("input_193_groups_0"), val = tensor<int32, []>(1)];
|
| 344 |
+
tensor<fp16, [256, 256, 3, 3]> const_71_to_fp16 = const()[name = tensor<string, []>("const_71_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(8429632)))];
|
| 345 |
+
tensor<fp16, [256]> const_72_to_fp16 = const()[name = tensor<string, []>("const_72_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(9609344)))];
|
| 346 |
+
tensor<fp16, [?, 256, 10, 125]> input_195_cast_fp16 = conv(bias = const_72_to_fp16, dilations = input_193_dilations_0, groups = input_193_groups_0, pad = input_193_pad_0, pad_type = input_193_pad_type_0, strides = input_193_strides_0, weight = const_71_to_fp16, x = input_191_cast_fp16)[name = tensor<string, []>("input_195_cast_fp16")];
|
| 347 |
+
tensor<fp16, [?, 256, 10, 125]> input_197_cast_fp16 = relu(x = input_195_cast_fp16)[name = tensor<string, []>("input_197_cast_fp16")];
|
| 348 |
+
tensor<string, []> input_199_pad_type_0 = const()[name = tensor<string, []>("input_199_pad_type_0"), val = tensor<string, []>("custom")];
|
| 349 |
+
tensor<int32, [4]> input_199_pad_0 = const()[name = tensor<string, []>("input_199_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
|
| 350 |
+
tensor<int32, [2]> input_199_strides_0 = const()[name = tensor<string, []>("input_199_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 351 |
+
tensor<int32, [2]> input_199_dilations_0 = const()[name = tensor<string, []>("input_199_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 352 |
+
tensor<int32, []> input_199_groups_0 = const()[name = tensor<string, []>("input_199_groups_0"), val = tensor<int32, []>(1)];
|
| 353 |
+
tensor<fp16, [256, 256, 3, 3]> const_73_to_fp16 = const()[name = tensor<string, []>("const_73_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(9609920)))];
|
| 354 |
+
tensor<fp16, [256]> const_74_to_fp16 = const()[name = tensor<string, []>("const_74_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(10789632)))];
|
| 355 |
+
tensor<fp16, [?, 256, 10, 125]> out_cast_fp16 = conv(bias = const_74_to_fp16, dilations = input_199_dilations_0, groups = input_199_groups_0, pad = input_199_pad_0, pad_type = input_199_pad_type_0, strides = input_199_strides_0, weight = const_73_to_fp16, x = input_197_cast_fp16)[name = tensor<string, []>("out_cast_fp16")];
|
| 356 |
+
tensor<fp16, [?, 256, 10, 125]> input_201_cast_fp16 = add(x = out_cast_fp16, y = input_191_cast_fp16)[name = tensor<string, []>("input_201_cast_fp16")];
|
| 357 |
+
tensor<fp16, [?, 256, 10, 125]> features_cast_fp16 = relu(x = input_201_cast_fp16)[name = tensor<string, []>("features_cast_fp16")];
|
| 358 |
+
tensor<int32, [3]> concat_0x = const()[name = tensor<string, []>("concat_0x"), val = tensor<int32, [3]>([-1, 2560, 125])];
|
| 359 |
+
tensor<fp16, [?, 2560, 125]> sequences_1_cast_fp16 = reshape(shape = concat_0x, x = features_cast_fp16)[name = tensor<string, []>("sequences_1_cast_fp16")];
|
| 360 |
+
tensor<int32, [1]> weights_fp32_axes_0 = const()[name = tensor<string, []>("weights_fp32_axes_0"), val = tensor<int32, [1]>([1])];
|
| 361 |
+
tensor<fp16, [?, 1, 125]> weights_fp32_cast_fp16 = expand_dims(axes = weights_fp32_axes_0, x = weights_3_cast_fp16)[name = tensor<string, []>("weights_fp32_cast_fp16")];
|
| 362 |
+
tensor<int32, [1]> weights_expanded_axes_0 = const()[name = tensor<string, []>("weights_expanded_axes_0"), val = tensor<int32, [1]>([2])];
|
| 363 |
+
tensor<fp16, [?, 1, 1, 125]> weights_expanded_cast_fp16 = expand_dims(axes = weights_expanded_axes_0, x = weights_fp32_cast_fp16)[name = tensor<string, []>("weights_expanded_cast_fp16")];
|
| 364 |
+
tensor<int32, [1]> var_599_axes_0 = const()[name = tensor<string, []>("op_599_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 365 |
+
tensor<bool, []> var_599_keep_dims_0 = const()[name = tensor<string, []>("op_599_keep_dims_0"), val = tensor<bool, []>(false)];
|
| 366 |
+
tensor<fp16, [?, 1, 1]> var_599_cast_fp16 = reduce_sum(axes = var_599_axes_0, keep_dims = var_599_keep_dims_0, x = weights_expanded_cast_fp16)[name = tensor<string, []>("op_599_cast_fp16")];
|
| 367 |
+
tensor<fp16, []> var_600_to_fp16 = const()[name = tensor<string, []>("op_600_to_fp16"), val = tensor<fp16, []>(0x1.a38p-14)];
|
| 368 |
+
tensor<fp16, [?, 1, 1]> v1_cast_fp16 = add(x = var_599_cast_fp16, y = var_600_to_fp16)[name = tensor<string, []>("v1_cast_fp16")];
|
| 369 |
+
tensor<int32, [1]> var_602_axes_0 = const()[name = tensor<string, []>("op_602_axes_0"), val = tensor<int32, [1]>([1])];
|
| 370 |
+
tensor<fp16, [?, 1, 2560, 125]> var_602_cast_fp16 = expand_dims(axes = var_602_axes_0, x = sequences_1_cast_fp16)[name = tensor<string, []>("op_602_cast_fp16")];
|
| 371 |
+
tensor<fp16, [?, 1, 2560, 125]> weighted_cast_fp16 = mul(x = var_602_cast_fp16, y = weights_expanded_cast_fp16)[name = tensor<string, []>("weighted_cast_fp16")];
|
| 372 |
+
tensor<int32, [1]> var_605_axes_0 = const()[name = tensor<string, []>("op_605_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 373 |
+
tensor<bool, []> var_605_keep_dims_0 = const()[name = tensor<string, []>("op_605_keep_dims_0"), val = tensor<bool, []>(false)];
|
| 374 |
+
tensor<fp16, [?, 1, 2560]> var_605_cast_fp16 = reduce_sum(axes = var_605_axes_0, keep_dims = var_605_keep_dims_0, x = weighted_cast_fp16)[name = tensor<string, []>("op_605_cast_fp16")];
|
| 375 |
+
tensor<fp16, [?, 1, 2560]> mean_cast_fp16 = real_div(x = var_605_cast_fp16, y = v1_cast_fp16)[name = tensor<string, []>("mean_cast_fp16")];
|
| 376 |
+
tensor<int32, [1]> var_608_axes_0 = const()[name = tensor<string, []>("op_608_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 377 |
+
tensor<fp16, [?, 1, 2560, 1]> var_608_cast_fp16 = expand_dims(axes = var_608_axes_0, x = mean_cast_fp16)[name = tensor<string, []>("op_608_cast_fp16")];
|
| 378 |
+
tensor<fp16, [?, 1, 2560, 125]> diff_cast_fp16 = sub(x = var_602_cast_fp16, y = var_608_cast_fp16)[name = tensor<string, []>("diff_cast_fp16")];
|
| 379 |
+
tensor<fp16, [?, 1, 1, 125]> var_610_cast_fp16 = mul(x = weights_expanded_cast_fp16, y = weights_expanded_cast_fp16)[name = tensor<string, []>("op_610_cast_fp16")];
|
| 380 |
+
tensor<int32, [1]> v2_axes_0 = const()[name = tensor<string, []>("v2_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 381 |
+
tensor<bool, []> v2_keep_dims_0 = const()[name = tensor<string, []>("v2_keep_dims_0"), val = tensor<bool, []>(false)];
|
| 382 |
+
tensor<fp16, [?, 1, 1]> v2_cast_fp16 = reduce_sum(axes = v2_axes_0, keep_dims = v2_keep_dims_0, x = var_610_cast_fp16)[name = tensor<string, []>("v2_cast_fp16")];
|
| 383 |
+
tensor<fp16, [?, 1, 1]> var_613_cast_fp16 = real_div(x = v2_cast_fp16, y = v1_cast_fp16)[name = tensor<string, []>("op_613_cast_fp16")];
|
| 384 |
+
tensor<fp16, [?, 1, 1]> var_614_cast_fp16 = sub(x = v1_cast_fp16, y = var_613_cast_fp16)[name = tensor<string, []>("op_614_cast_fp16")];
|
| 385 |
+
tensor<fp16, []> var_615_to_fp16 = const()[name = tensor<string, []>("op_615_to_fp16"), val = tensor<fp16, []>(0x1.a38p-14)];
|
| 386 |
+
tensor<fp16, [?, 1, 1]> denom_cast_fp16 = add(x = var_614_cast_fp16, y = var_615_to_fp16)[name = tensor<string, []>("denom_cast_fp16")];
|
| 387 |
+
tensor<fp16, [?, 1, 2560, 125]> var_617_cast_fp16 = mul(x = diff_cast_fp16, y = diff_cast_fp16)[name = tensor<string, []>("op_617_cast_fp16")];
|
| 388 |
+
tensor<fp16, [?, 1, 2560, 125]> var_618_cast_fp16 = mul(x = var_617_cast_fp16, y = weights_expanded_cast_fp16)[name = tensor<string, []>("op_618_cast_fp16")];
|
| 389 |
+
tensor<int32, [1]> var_620_axes_0 = const()[name = tensor<string, []>("op_620_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 390 |
+
tensor<bool, []> var_620_keep_dims_0 = const()[name = tensor<string, []>("op_620_keep_dims_0"), val = tensor<bool, []>(false)];
|
| 391 |
+
tensor<fp16, [?, 1, 2560]> var_620_cast_fp16 = reduce_sum(axes = var_620_axes_0, keep_dims = var_620_keep_dims_0, x = var_618_cast_fp16)[name = tensor<string, []>("op_620_cast_fp16")];
|
| 392 |
+
tensor<fp16, [?, 1, 2560]> var_cast_fp16 = real_div(x = var_620_cast_fp16, y = denom_cast_fp16)[name = tensor<string, []>("var_cast_fp16")];
|
| 393 |
+
tensor<fp16, []> var_34_to_fp16 = const()[name = tensor<string, []>("op_34_to_fp16"), val = tensor<fp16, []>(0x1.1p-20)];
|
| 394 |
+
tensor<fp16, []> const_1_to_fp16 = const()[name = tensor<string, []>("const_1_to_fp16"), val = tensor<fp16, []>(inf)];
|
| 395 |
+
tensor<fp16, [?, 1, 2560]> clip_0_cast_fp16 = clip(alpha = var_34_to_fp16, beta = const_1_to_fp16, x = var_cast_fp16)[name = tensor<string, []>("clip_0_cast_fp16")];
|
| 396 |
+
tensor<fp16, [?, 1, 2560]> std_cast_fp16 = sqrt(x = clip_0_cast_fp16)[name = tensor<string, []>("std_cast_fp16")];
|
| 397 |
+
tensor<bool, []> output_interleave_0 = const()[name = tensor<string, []>("output_interleave_0"), val = tensor<bool, []>(false)];
|
| 398 |
+
tensor<fp16, [?, 1, 5120]> output_cast_fp16 = concat(axis = var_33, interleave = output_interleave_0, values = (mean_cast_fp16, std_cast_fp16))[name = tensor<string, []>("output_cast_fp16")];
|
| 399 |
+
tensor<int32, [1]> var_626_axes_0 = const()[name = tensor<string, []>("op_626_axes_0"), val = tensor<int32, [1]>([1])];
|
| 400 |
+
tensor<fp16, [?, 5120]> var_626_cast_fp16 = squeeze(axes = var_626_axes_0, x = output_cast_fp16)[name = tensor<string, []>("op_626_cast_fp16")];
|
| 401 |
+
tensor<int32, [1]> var_628_axes_0 = const()[name = tensor<string, []>("op_628_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 402 |
+
tensor<fp16, [?, 5120, 1]> var_628_cast_fp16 = expand_dims(axes = var_628_axes_0, x = var_626_cast_fp16)[name = tensor<string, []>("op_628_cast_fp16")];
|
| 403 |
+
tensor<int32, [1]> input_203_axes_0 = const()[name = tensor<string, []>("input_203_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 404 |
+
tensor<fp16, [?, 5120, 1, 1]> input_203_cast_fp16 = expand_dims(axes = input_203_axes_0, x = var_628_cast_fp16)[name = tensor<string, []>("input_203_cast_fp16")];
|
| 405 |
+
tensor<string, []> var_636_pad_type_0 = const()[name = tensor<string, []>("op_636_pad_type_0"), val = tensor<string, []>("valid")];
|
| 406 |
+
tensor<int32, [2]> var_636_strides_0 = const()[name = tensor<string, []>("op_636_strides_0"), val = tensor<int32, [2]>([1, 1])];
|
| 407 |
+
tensor<int32, [4]> var_636_pad_0 = const()[name = tensor<string, []>("op_636_pad_0"), val = tensor<int32, [4]>([0, 0, 0, 0])];
|
| 408 |
+
tensor<int32, [2]> var_636_dilations_0 = const()[name = tensor<string, []>("op_636_dilations_0"), val = tensor<int32, [2]>([1, 1])];
|
| 409 |
+
tensor<int32, []> var_636_groups_0 = const()[name = tensor<string, []>("op_636_groups_0"), val = tensor<int32, []>(1)];
|
| 410 |
+
tensor<fp16, [256, 5120, 1, 1]> resnet_seg_1_weight_to_fp16 = const()[name = tensor<string, []>("resnet_seg_1_weight_to_fp16"), val = tensor<fp16, [256, 5120, 1, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(10790208)))];
|
| 411 |
+
tensor<fp16, [256]> resnet_seg_1_bias_to_fp16 = const()[name = tensor<string, []>("resnet_seg_1_bias_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(13411712)))];
|
| 412 |
+
tensor<fp16, [?, 256, 1, 1]> var_636_cast_fp16 = conv(bias = resnet_seg_1_bias_to_fp16, dilations = var_636_dilations_0, groups = var_636_groups_0, pad = var_636_pad_0, pad_type = var_636_pad_type_0, strides = var_636_strides_0, weight = resnet_seg_1_weight_to_fp16, x = input_203_cast_fp16)[name = tensor<string, []>("op_636_cast_fp16")];
|
| 413 |
+
tensor<int32, [2]> concat_1x = const()[name = tensor<string, []>("concat_1x"), val = tensor<int32, [2]>([-1, 256])];
|
| 414 |
+
tensor<fp16, [?, 256]> input_cast_fp16 = reshape(shape = concat_1x, x = var_636_cast_fp16)[name = tensor<string, []>("input_cast_fp16")];
|
| 415 |
+
tensor<string, []> input_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("input_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
|
| 416 |
+
tensor<int32, [1]> var_640 = const()[name = tensor<string, []>("op_640"), val = tensor<int32, [1]>([-1])];
|
| 417 |
+
tensor<bool, []> var_641 = const()[name = tensor<string, []>("op_641"), val = tensor<bool, []>(true)];
|
| 418 |
+
tensor<fp32, [?, 256]> input_cast_fp16_to_fp32 = cast(dtype = input_cast_fp16_to_fp32_dtype_0, x = input_cast_fp16)[name = tensor<string, []>("cast_12")];
|
| 419 |
+
tensor<fp32, [?, 1]> norms_1 = reduce_l2_norm(axes = var_640, keep_dims = var_641, x = input_cast_fp16_to_fp32)[name = tensor<string, []>("norms_1")];
|
| 420 |
+
tensor<string, []> norms_1_to_fp16_dtype_0 = const()[name = tensor<string, []>("norms_1_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
|
| 421 |
+
tensor<fp16, []> var_644_to_fp16 = const()[name = tensor<string, []>("op_644_to_fp16"), val = tensor<fp16, []>(0x1.a38p-14)];
|
| 422 |
+
tensor<fp16, []> const_2_to_fp16 = const()[name = tensor<string, []>("const_2_to_fp16"), val = tensor<fp16, []>(inf)];
|
| 423 |
+
tensor<fp16, [?, 1]> norms_1_to_fp16 = cast(dtype = norms_1_to_fp16_dtype_0, x = norms_1)[name = tensor<string, []>("cast_11")];
|
| 424 |
+
tensor<fp16, [?, 1]> clip_1_cast_fp16 = clip(alpha = var_644_to_fp16, beta = const_2_to_fp16, x = norms_1_to_fp16)[name = tensor<string, []>("clip_1_cast_fp16")];
|
| 425 |
+
tensor<fp16, [?, 256]> var_647_cast_fp16 = real_div(x = input_cast_fp16, y = clip_1_cast_fp16)[name = tensor<string, []>("op_647_cast_fp16")];
|
| 426 |
+
tensor<string, []> var_647_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("op_647_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
|
| 427 |
+
tensor<fp32, [?, 256]> embedding = cast(dtype = var_647_cast_fp16_to_fp32_dtype_0, x = var_647_cast_fp16)[name = tensor<string, []>("cast_10")];
|
| 428 |
+
} -> (embedding);
|
| 429 |
+
}
|
Embedding.mlmodelc/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:99356b2985b8d43880a657024d941d450b38820451ccff903f76ed4e52d1868b
|
| 3 |
+
size 13412288
|
FBank.mlmodelc/metadata.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"shortDescription" : "pyannote community-1 FBANK frontend (10 s audio preprocessing to 80×998 features, batch 1-32, CPU preferred)",
|
| 4 |
+
"metadataOutputVersion" : "3.0",
|
| 5 |
+
"outputSchema" : [
|
| 6 |
+
{
|
| 7 |
+
"hasShapeFlexibility" : "0",
|
| 8 |
+
"isOptional" : "0",
|
| 9 |
+
"dataType" : "Float32",
|
| 10 |
+
"formattedType" : "MultiArray (Float32)",
|
| 11 |
+
"shortDescription" : "",
|
| 12 |
+
"shape" : "[]",
|
| 13 |
+
"name" : "fbank_features",
|
| 14 |
+
"type" : "MultiArray"
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"version" : "pyannote-speaker-diarization-community-1",
|
| 18 |
+
"modelParameters" : [
|
| 19 |
+
|
| 20 |
+
],
|
| 21 |
+
"author" : "Fluid Inference",
|
| 22 |
+
"specificationVersion" : 8,
|
| 23 |
+
"storagePrecision" : "Float32",
|
| 24 |
+
"license" : "CC-BY-4.0",
|
| 25 |
+
"mlProgramOperationTypeHistogram" : {
|
| 26 |
+
"Ios17.mul" : 3,
|
| 27 |
+
"Ios17.transpose" : 2,
|
| 28 |
+
"Ios17.sub" : 3,
|
| 29 |
+
"Ios17.conv" : 4,
|
| 30 |
+
"Ios17.log" : 1,
|
| 31 |
+
"Ios17.sliceByIndex" : 1,
|
| 32 |
+
"Ios16.reduceMean" : 2,
|
| 33 |
+
"Ios17.add" : 2,
|
| 34 |
+
"Ios17.clip" : 1,
|
| 35 |
+
"Ios17.pow" : 2,
|
| 36 |
+
"Ios17.expandDims" : 4,
|
| 37 |
+
"Ios17.squeeze" : 4,
|
| 38 |
+
"Ios17.reshape" : 2,
|
| 39 |
+
"Pad" : 2
|
| 40 |
+
},
|
| 41 |
+
"computePrecision" : "Mixed (Float32, Int32)",
|
| 42 |
+
"stateSchema" : [
|
| 43 |
+
|
| 44 |
+
],
|
| 45 |
+
"isUpdatable" : "0",
|
| 46 |
+
"availability" : {
|
| 47 |
+
"macOS" : "14.0",
|
| 48 |
+
"tvOS" : "17.0",
|
| 49 |
+
"visionOS" : "1.0",
|
| 50 |
+
"watchOS" : "10.0",
|
| 51 |
+
"iOS" : "17.0",
|
| 52 |
+
"macCatalyst" : "17.0"
|
| 53 |
+
},
|
| 54 |
+
"modelType" : {
|
| 55 |
+
"name" : "MLModelType_mlProgram"
|
| 56 |
+
},
|
| 57 |
+
"inputSchema" : [
|
| 58 |
+
{
|
| 59 |
+
"shortDescription" : "",
|
| 60 |
+
"dataType" : "Float32",
|
| 61 |
+
"hasShapeFlexibility" : "1",
|
| 62 |
+
"isOptional" : "0",
|
| 63 |
+
"shapeFlexibility" : "1 × 1 × 160000 | 2 × 1 × 160000 | 3 × 1 × 160000 | 4 × 1 × 160000 | 5 × 1 × 160000 | 6 × 1 × 160000 | 7 × 1 × 160000 | 8 × 1 × 160000 | 9 × 1 × 160000 | 10 × 1 × 160000 | 11 × 1 × 160000 | 12 × 1 × 160000 | 13 × 1 × 160000 | 14 × 1 × 160000 | 15 × 1 × 160000 | 16 × 1 × 160000 | 17 × 1 × 160000 | 18 × 1 × 160000 | 19 × 1 × 160000 | 20 × 1 × 160000 | 21 × 1 × 160000 | 22 × 1 × 160000 | 23 × 1 × 160000 | 24 × 1 × 160000 | 25 × 1 × 160000 | 26 × 1 × 160000 | 27 × 1 × 160000 | 28 × 1 × 160000 | 29 × 1 × 160000 | 30 × 1 × 160000 | 31 × 1 × 160000 | 32 × 1 × 160000",
|
| 64 |
+
"formattedType" : "MultiArray (Float32 1 × 1 × 160000)",
|
| 65 |
+
"type" : "MultiArray",
|
| 66 |
+
"shape" : "[1, 1, 160000]",
|
| 67 |
+
"name" : "audio",
|
| 68 |
+
"enumeratedShapes" : "[[1, 1, 160000], [2, 1, 160000], [3, 1, 160000], [4, 1, 160000], [5, 1, 160000], [6, 1, 160000], [7, 1, 160000], [8, 1, 160000], [9, 1, 160000], [10, 1, 160000], [11, 1, 160000], [12, 1, 160000], [13, 1, 160000], [14, 1, 160000], [15, 1, 160000], [16, 1, 160000], [17, 1, 160000], [18, 1, 160000], [19, 1, 160000], [20, 1, 160000], [21, 1, 160000], [22, 1, 160000], [23, 1, 160000], [24, 1, 160000], [25, 1, 160000], [26, 1, 160000], [27, 1, 160000], [28, 1, 160000], [29, 1, 160000], [30, 1, 160000], [31, 1, 160000], [32, 1, 160000]]"
|
| 69 |
+
}
|
| 70 |
+
],
|
| 71 |
+
"userDefinedMetadata" : {
|
| 72 |
+
"com.github.apple.coremltools.conversion_date" : "2025-10-15",
|
| 73 |
+
"com.github.apple.coremltools.source" : "torch==2.8.0",
|
| 74 |
+
"com.github.apple.coremltools.version" : "9.0b1",
|
| 75 |
+
"com.github.apple.coremltools.source_dialect" : "TorchScript"
|
| 76 |
+
},
|
| 77 |
+
"generatedClassName" : "fbank_community_1",
|
| 78 |
+
"method" : "predict"
|
| 79 |
+
}
|
| 80 |
+
]
|
FBank.mlmodelc/model.mil
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
program(1.0)
|
| 2 |
+
[buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
|
| 3 |
+
{
|
| 4 |
+
func main<ios17>(tensor<fp32, [?, 1, 160000]> audio) [FlexibleShapeInformation = tuple<tuple<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>, tuple<tensor<string, []>, dict<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>>>((("DefaultShapes", {{"audio", [1, 1, 160000]}}), ("EnumeratedShapes", {{"audio_1_1_10_1_160000_", {{"audio", [10, 1, 160000]}}}, {"audio_1_1_11_1_160000_", {{"audio", [11, 1, 160000]}}}, {"audio_1_1_12_1_160000_", {{"audio", [12, 1, 160000]}}}, {"audio_1_1_13_1_160000_", {{"audio", [13, 1, 160000]}}}, {"audio_1_1_14_1_160000_", {{"audio", [14, 1, 160000]}}}, {"audio_1_1_15_1_160000_", {{"audio", [15, 1, 160000]}}}, {"audio_1_1_16_1_160000_", {{"audio", [16, 1, 160000]}}}, {"audio_1_1_17_1_160000_", {{"audio", [17, 1, 160000]}}}, {"audio_1_1_18_1_160000_", {{"audio", [18, 1, 160000]}}}, {"audio_1_1_19_1_160000_", {{"audio", [19, 1, 160000]}}}, {"audio_1_1_1_1_160000_", {{"audio", [1, 1, 160000]}}}, {"audio_1_1_20_1_160000_", {{"audio", [20, 1, 160000]}}}, {"audio_1_1_21_1_160000_", {{"audio", [21, 1, 160000]}}}, {"audio_1_1_22_1_160000_", {{"audio", [22, 1, 160000]}}}, {"audio_1_1_23_1_160000_", {{"audio", [23, 1, 160000]}}}, {"audio_1_1_24_1_160000_", {{"audio", [24, 1, 160000]}}}, {"audio_1_1_25_1_160000_", {{"audio", [25, 1, 160000]}}}, {"audio_1_1_26_1_160000_", {{"audio", [26, 1, 160000]}}}, {"audio_1_1_27_1_160000_", {{"audio", [27, 1, 160000]}}}, {"audio_1_1_28_1_160000_", {{"audio", [28, 1, 160000]}}}, {"audio_1_1_29_1_160000_", {{"audio", [29, 1, 160000]}}}, {"audio_1_1_2_1_160000_", {{"audio", [2, 1, 160000]}}}, {"audio_1_1_30_1_160000_", {{"audio", [30, 1, 160000]}}}, {"audio_1_1_31_1_160000_", {{"audio", [31, 1, 160000]}}}, {"audio_1_1_32_1_160000_", {{"audio", [32, 1, 160000]}}}, {"audio_1_1_3_1_160000_", {{"audio", [3, 1, 160000]}}}, {"audio_1_1_4_1_160000_", {{"audio", [4, 1, 160000]}}}, {"audio_1_1_5_1_160000_", {{"audio", [5, 1, 160000]}}}, {"audio_1_1_6_1_160000_", {{"audio", [6, 1, 160000]}}}, {"audio_1_1_7_1_160000_", {{"audio", [7, 1, 160000]}}}, {"audio_1_1_8_1_160000_", {{"audio", [8, 1, 160000]}}}, {"audio_1_1_9_1_160000_", {{"audio", [9, 1, 160000]}}}})))] {
|
| 5 |
+
tensor<fp32, [80, 257, 1]> _fbank_mel_weight = const()[name = tensor<string, []>("_fbank_mel_weight"), val = tensor<fp32, [80, 257, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
|
| 6 |
+
tensor<fp32, [257, 1, 512]> _fbank_dft_imag_weight = const()[name = tensor<string, []>("_fbank_dft_imag_weight"), val = tensor<fp32, [257, 1, 512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(82368)))];
|
| 7 |
+
tensor<fp32, [257, 1, 512]> _fbank_dft_real_weight = const()[name = tensor<string, []>("_fbank_dft_real_weight"), val = tensor<fp32, [257, 1, 512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(608768)))];
|
| 8 |
+
tensor<fp32, [1, 400]> _fbank_window = const()[name = tensor<string, []>("_fbank_window"), val = tensor<fp32, [1, 400]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1135168)))];
|
| 9 |
+
tensor<fp32, []> _fbank_eps = const()[name = tensor<string, []>("_fbank_eps"), val = tensor<fp32, []>(0x1.0c6f7ap-20)];
|
| 10 |
+
tensor<fp32, [400, 1, 400]> _fbank_frame_kernel = const()[name = tensor<string, []>("_fbank_frame_kernel"), val = tensor<fp32, [400, 1, 400]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1136832)))];
|
| 11 |
+
tensor<fp32, []> var_3_promoted = const()[name = tensor<string, []>("op_3_promoted"), val = tensor<fp32, []>(0x1p+15)];
|
| 12 |
+
tensor<fp32, [?, 1, 160000]> waveforms_3 = mul(x = audio, y = var_3_promoted)[name = tensor<string, []>("waveforms_3")];
|
| 13 |
+
tensor<string, []> frames_1_pad_type_0 = const()[name = tensor<string, []>("frames_1_pad_type_0"), val = tensor<string, []>("valid")];
|
| 14 |
+
tensor<int32, [1]> frames_1_strides_0 = const()[name = tensor<string, []>("frames_1_strides_0"), val = tensor<int32, [1]>([160])];
|
| 15 |
+
tensor<int32, [2]> frames_1_pad_0 = const()[name = tensor<string, []>("frames_1_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 16 |
+
tensor<int32, [1]> frames_1_dilations_0 = const()[name = tensor<string, []>("frames_1_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 17 |
+
tensor<int32, []> frames_1_groups_0 = const()[name = tensor<string, []>("frames_1_groups_0"), val = tensor<int32, []>(1)];
|
| 18 |
+
tensor<fp32, [?, 400, 998]> frames_1 = conv(dilations = frames_1_dilations_0, groups = frames_1_groups_0, pad = frames_1_pad_0, pad_type = frames_1_pad_type_0, strides = frames_1_strides_0, weight = _fbank_frame_kernel, x = waveforms_3)[name = tensor<string, []>("frames_1")];
|
| 19 |
+
tensor<int32, [3]> frames_3_perm_0 = const()[name = tensor<string, []>("frames_3_perm_0"), val = tensor<int32, [3]>([0, 2, 1])];
|
| 20 |
+
tensor<int32, [2]> concat_0x = const()[name = tensor<string, []>("concat_0x"), val = tensor<int32, [2]>([-1, 400])];
|
| 21 |
+
tensor<fp32, [?, 998, 400]> frames_3 = transpose(perm = frames_3_perm_0, x = frames_1)[name = tensor<string, []>("transpose_1")];
|
| 22 |
+
tensor<fp32, [?, 400]> frames_5 = reshape(shape = concat_0x, x = frames_3)[name = tensor<string, []>("frames_5")];
|
| 23 |
+
tensor<int32, [1]> var_53_axes_0 = const()[name = tensor<string, []>("op_53_axes_0"), val = tensor<int32, [1]>([1])];
|
| 24 |
+
tensor<bool, []> var_53_keep_dims_0 = const()[name = tensor<string, []>("op_53_keep_dims_0"), val = tensor<bool, []>(true)];
|
| 25 |
+
tensor<fp32, [?, 1]> var_53 = reduce_mean(axes = var_53_axes_0, keep_dims = var_53_keep_dims_0, x = frames_5)[name = tensor<string, []>("op_53")];
|
| 26 |
+
tensor<fp32, [?, 400]> frames_7 = sub(x = frames_5, y = var_53)[name = tensor<string, []>("frames_7")];
|
| 27 |
+
tensor<int32, [1]> input_1_axes_0 = const()[name = tensor<string, []>("input_1_axes_0"), val = tensor<int32, [1]>([1])];
|
| 28 |
+
tensor<fp32, [?, 1, 400]> input_1 = expand_dims(axes = input_1_axes_0, x = frames_7)[name = tensor<string, []>("input_1")];
|
| 29 |
+
tensor<fp32, []> const_0 = const()[name = tensor<string, []>("const_0"), val = tensor<fp32, []>(0x0p+0)];
|
| 30 |
+
tensor<int32, [6]> var_57_pad_0 = const()[name = tensor<string, []>("op_57_pad_0"), val = tensor<int32, [6]>([0, 0, 0, 0, 1, 0])];
|
| 31 |
+
tensor<string, []> var_57_mode_0 = const()[name = tensor<string, []>("op_57_mode_0"), val = tensor<string, []>("replicate")];
|
| 32 |
+
tensor<fp32, [?, 1, 401]> var_57 = pad(constant_val = const_0, mode = var_57_mode_0, pad = var_57_pad_0, x = input_1)[name = tensor<string, []>("op_57")];
|
| 33 |
+
tensor<int32, [1]> padded_axes_0 = const()[name = tensor<string, []>("padded_axes_0"), val = tensor<int32, [1]>([1])];
|
| 34 |
+
tensor<fp32, [?, 401]> padded = squeeze(axes = padded_axes_0, x = var_57)[name = tensor<string, []>("padded")];
|
| 35 |
+
tensor<int32, [2]> var_60_begin_0 = const()[name = tensor<string, []>("op_60_begin_0"), val = tensor<int32, [2]>([0, 0])];
|
| 36 |
+
tensor<int32, [2]> var_60_end_0 = const()[name = tensor<string, []>("op_60_end_0"), val = tensor<int32, [2]>([0, 400])];
|
| 37 |
+
tensor<bool, [2]> var_60_end_mask_0 = const()[name = tensor<string, []>("op_60_end_mask_0"), val = tensor<bool, [2]>([true, false])];
|
| 38 |
+
tensor<fp32, [?, 400]> var_60 = slice_by_index(begin = var_60_begin_0, end = var_60_end_0, end_mask = var_60_end_mask_0, x = padded)[name = tensor<string, []>("op_60")];
|
| 39 |
+
tensor<fp32, []> var_61 = const()[name = tensor<string, []>("op_61"), val = tensor<fp32, []>(0x1.f0a3d8p-1)];
|
| 40 |
+
tensor<fp32, [?, 400]> var_62 = mul(x = var_60, y = var_61)[name = tensor<string, []>("op_62")];
|
| 41 |
+
tensor<fp32, [?, 400]> frames_9 = sub(x = frames_7, y = var_62)[name = tensor<string, []>("frames_9")];
|
| 42 |
+
tensor<fp32, [?, 400]> frames_11 = mul(x = frames_9, y = _fbank_window)[name = tensor<string, []>("frames_11")];
|
| 43 |
+
tensor<int32, [1]> input_axes_0 = const()[name = tensor<string, []>("input_axes_0"), val = tensor<int32, [1]>([1])];
|
| 44 |
+
tensor<fp32, [?, 1, 400]> input = expand_dims(axes = input_axes_0, x = frames_11)[name = tensor<string, []>("input")];
|
| 45 |
+
tensor<fp32, []> const_1 = const()[name = tensor<string, []>("const_1"), val = tensor<fp32, []>(0x0p+0)];
|
| 46 |
+
tensor<int32, [6]> var_67_pad_0 = const()[name = tensor<string, []>("op_67_pad_0"), val = tensor<int32, [6]>([0, 0, 0, 0, 0, 112])];
|
| 47 |
+
tensor<string, []> var_67_mode_0 = const()[name = tensor<string, []>("op_67_mode_0"), val = tensor<string, []>("constant")];
|
| 48 |
+
tensor<fp32, [?, 1, 512]> var_67 = pad(constant_val = const_1, mode = var_67_mode_0, pad = var_67_pad_0, x = input)[name = tensor<string, []>("op_67")];
|
| 49 |
+
tensor<string, []> var_74_pad_type_0 = const()[name = tensor<string, []>("op_74_pad_type_0"), val = tensor<string, []>("valid")];
|
| 50 |
+
tensor<int32, [1]> var_74_strides_0 = const()[name = tensor<string, []>("op_74_strides_0"), val = tensor<int32, [1]>([1])];
|
| 51 |
+
tensor<int32, [2]> var_74_pad_0 = const()[name = tensor<string, []>("op_74_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 52 |
+
tensor<int32, [1]> var_74_dilations_0 = const()[name = tensor<string, []>("op_74_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 53 |
+
tensor<int32, []> var_74_groups_0 = const()[name = tensor<string, []>("op_74_groups_0"), val = tensor<int32, []>(1)];
|
| 54 |
+
tensor<fp32, [?, 257, 1]> var_74 = conv(dilations = var_74_dilations_0, groups = var_74_groups_0, pad = var_74_pad_0, pad_type = var_74_pad_type_0, strides = var_74_strides_0, weight = _fbank_dft_real_weight, x = var_67)[name = tensor<string, []>("op_74")];
|
| 55 |
+
tensor<int32, [1]> real_axes_0 = const()[name = tensor<string, []>("real_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 56 |
+
tensor<fp32, [?, 257]> real = squeeze(axes = real_axes_0, x = var_74)[name = tensor<string, []>("real")];
|
| 57 |
+
tensor<string, []> var_80_pad_type_0 = const()[name = tensor<string, []>("op_80_pad_type_0"), val = tensor<string, []>("valid")];
|
| 58 |
+
tensor<int32, [1]> var_80_strides_0 = const()[name = tensor<string, []>("op_80_strides_0"), val = tensor<int32, [1]>([1])];
|
| 59 |
+
tensor<int32, [2]> var_80_pad_0 = const()[name = tensor<string, []>("op_80_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 60 |
+
tensor<int32, [1]> var_80_dilations_0 = const()[name = tensor<string, []>("op_80_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 61 |
+
tensor<int32, []> var_80_groups_0 = const()[name = tensor<string, []>("op_80_groups_0"), val = tensor<int32, []>(1)];
|
| 62 |
+
tensor<fp32, [?, 257, 1]> var_80 = conv(dilations = var_80_dilations_0, groups = var_80_groups_0, pad = var_80_pad_0, pad_type = var_80_pad_type_0, strides = var_80_strides_0, weight = _fbank_dft_imag_weight, x = var_67)[name = tensor<string, []>("op_80")];
|
| 63 |
+
tensor<int32, [1]> imag_axes_0 = const()[name = tensor<string, []>("imag_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 64 |
+
tensor<fp32, [?, 257]> imag = squeeze(axes = imag_axes_0, x = var_80)[name = tensor<string, []>("imag")];
|
| 65 |
+
tensor<fp32, []> var_22_promoted = const()[name = tensor<string, []>("op_22_promoted"), val = tensor<fp32, []>(0x1p+1)];
|
| 66 |
+
tensor<fp32, [?, 257]> var_82 = pow(x = real, y = var_22_promoted)[name = tensor<string, []>("op_82")];
|
| 67 |
+
tensor<fp32, []> var_22_promoted_1 = const()[name = tensor<string, []>("op_22_promoted_1"), val = tensor<fp32, []>(0x1p+1)];
|
| 68 |
+
tensor<fp32, [?, 257]> var_83 = pow(x = imag, y = var_22_promoted_1)[name = tensor<string, []>("op_83")];
|
| 69 |
+
tensor<fp32, [?, 257]> power = add(x = var_82, y = var_83)[name = tensor<string, []>("power")];
|
| 70 |
+
tensor<int32, [1]> var_85_axes_0 = const()[name = tensor<string, []>("op_85_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 71 |
+
tensor<fp32, [?, 257, 1]> var_85 = expand_dims(axes = var_85_axes_0, x = power)[name = tensor<string, []>("op_85")];
|
| 72 |
+
tensor<string, []> var_90_pad_type_0 = const()[name = tensor<string, []>("op_90_pad_type_0"), val = tensor<string, []>("valid")];
|
| 73 |
+
tensor<int32, [1]> var_90_strides_0 = const()[name = tensor<string, []>("op_90_strides_0"), val = tensor<int32, [1]>([1])];
|
| 74 |
+
tensor<int32, [2]> var_90_pad_0 = const()[name = tensor<string, []>("op_90_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 75 |
+
tensor<int32, [1]> var_90_dilations_0 = const()[name = tensor<string, []>("op_90_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 76 |
+
tensor<int32, []> var_90_groups_0 = const()[name = tensor<string, []>("op_90_groups_0"), val = tensor<int32, []>(1)];
|
| 77 |
+
tensor<fp32, [?, 80, 1]> var_90 = conv(dilations = var_90_dilations_0, groups = var_90_groups_0, pad = var_90_pad_0, pad_type = var_90_pad_type_0, strides = var_90_strides_0, weight = _fbank_mel_weight, x = var_85)[name = tensor<string, []>("op_90")];
|
| 78 |
+
tensor<int32, [1]> mel_1_axes_0 = const()[name = tensor<string, []>("mel_1_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 79 |
+
tensor<fp32, [?, 80]> mel_1 = squeeze(axes = mel_1_axes_0, x = var_90)[name = tensor<string, []>("mel_1")];
|
| 80 |
+
tensor<fp32, [?, 80]> mel_3 = add(x = mel_1, y = _fbank_eps)[name = tensor<string, []>("mel_3")];
|
| 81 |
+
tensor<fp32, []> const_2 = const()[name = tensor<string, []>("const_2"), val = tensor<fp32, []>(0x1.fffffep+127)];
|
| 82 |
+
tensor<fp32, [?, 80]> clip_0 = clip(alpha = _fbank_eps, beta = const_2, x = mel_3)[name = tensor<string, []>("clip_0")];
|
| 83 |
+
tensor<fp32, []> mel_epsilon_0 = const()[name = tensor<string, []>("mel_epsilon_0"), val = tensor<fp32, []>(0x1p-149)];
|
| 84 |
+
tensor<fp32, [?, 80]> mel = log(epsilon = mel_epsilon_0, x = clip_0)[name = tensor<string, []>("mel")];
|
| 85 |
+
tensor<int32, [3]> concat_1x = const()[name = tensor<string, []>("concat_1x"), val = tensor<int32, [3]>([-1, 998, 80])];
|
| 86 |
+
tensor<fp32, [?, 998, 80]> var_96 = reshape(shape = concat_1x, x = mel)[name = tensor<string, []>("op_96")];
|
| 87 |
+
tensor<int32, [1]> centered_axes_0 = const()[name = tensor<string, []>("centered_axes_0"), val = tensor<int32, [1]>([1])];
|
| 88 |
+
tensor<bool, []> centered_keep_dims_0 = const()[name = tensor<string, []>("centered_keep_dims_0"), val = tensor<bool, []>(true)];
|
| 89 |
+
tensor<fp32, [?, 1, 80]> centered = reduce_mean(axes = centered_axes_0, keep_dims = centered_keep_dims_0, x = var_96)[name = tensor<string, []>("centered")];
|
| 90 |
+
tensor<fp32, [?, 998, 80]> features = sub(x = var_96, y = centered)[name = tensor<string, []>("features")];
|
| 91 |
+
tensor<int32, [3]> var_115 = const()[name = tensor<string, []>("op_115"), val = tensor<int32, [3]>([0, 2, 1])];
|
| 92 |
+
tensor<int32, [1]> var_118_axes_0 = const()[name = tensor<string, []>("op_118_axes_0"), val = tensor<int32, [1]>([1])];
|
| 93 |
+
tensor<fp32, [?, 80, 998]> var_116 = transpose(perm = var_115, x = features)[name = tensor<string, []>("transpose_0")];
|
| 94 |
+
tensor<fp32, [?, 1, 80, 998]> fbank_features = expand_dims(axes = var_118_axes_0, x = var_116)[name = tensor<string, []>("op_118")];
|
| 95 |
+
} -> (fbank_features);
|
| 96 |
+
}
|
LICENSE
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Creative Commons Attribution 4.0 International
|
| 3 |
+
spdx-id: CC-BY-4.0
|
| 4 |
+
|
| 5 |
+
description: Permits almost any use subject to providing credit and license notice. Frequently used for media assets and educational materials. The most common license for Open Access scientific publications. Not recommended for software.
|
| 6 |
+
|
| 7 |
+
how: Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file. It is also acceptable to solely supply a link to a copy of the license, usually to the <a href='https://creativecommons.org/licenses/by/4.0/'>canonical URL for the license</a>.
|
| 8 |
+
|
| 9 |
+
using:
|
| 10 |
+
caniuse: https://github.com/Fyrd/caniuse/blob/master/LICENSE
|
| 11 |
+
FiveThirtyEight data: https://github.com/fivethirtyeight/data/blob/master/LICENSE
|
| 12 |
+
Kubernetes documentation: https://github.com/kubernetes/website/blob/master/LICENSE
|
| 13 |
+
|
| 14 |
+
permissions:
|
| 15 |
+
- commercial-use
|
| 16 |
+
- modifications
|
| 17 |
+
- distribution
|
| 18 |
+
- private-use
|
| 19 |
+
|
| 20 |
+
conditions:
|
| 21 |
+
- include-copyright
|
| 22 |
+
- document-changes
|
| 23 |
+
|
| 24 |
+
limitations:
|
| 25 |
+
- liability
|
| 26 |
+
- trademark-use
|
| 27 |
+
- patent-use
|
| 28 |
+
- warranty
|
| 29 |
+
|
| 30 |
+
---
|
| 31 |
+
|
| 32 |
+
Attribution 4.0 International
|
| 33 |
+
|
| 34 |
+
=======================================================================
|
| 35 |
+
|
| 36 |
+
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
| 37 |
+
does not provide legal services or legal advice. Distribution of
|
| 38 |
+
Creative Commons public licenses does not create a lawyer-client or
|
| 39 |
+
other relationship. Creative Commons makes its licenses and related
|
| 40 |
+
information available on an "as-is" basis. Creative Commons gives no
|
| 41 |
+
warranties regarding its licenses, any material licensed under their
|
| 42 |
+
terms and conditions, or any related information. Creative Commons
|
| 43 |
+
disclaims all liability for damages resulting from their use to the
|
| 44 |
+
fullest extent possible.
|
| 45 |
+
|
| 46 |
+
Using Creative Commons Public Licenses
|
| 47 |
+
|
| 48 |
+
Creative Commons public licenses provide a standard set of terms and
|
| 49 |
+
conditions that creators and other rights holders may use to share
|
| 50 |
+
original works of authorship and other material subject to copyright
|
| 51 |
+
and certain other rights specified in the public license below. The
|
| 52 |
+
following considerations are for informational purposes only, are not
|
| 53 |
+
exhaustive, and do not form part of our licenses.
|
| 54 |
+
|
| 55 |
+
Considerations for licensors: Our public licenses are
|
| 56 |
+
intended for use by those authorized to give the public
|
| 57 |
+
permission to use material in ways otherwise restricted by
|
| 58 |
+
copyright and certain other rights. Our licenses are
|
| 59 |
+
irrevocable. Licensors should read and understand the terms
|
| 60 |
+
and conditions of the license they choose before applying it.
|
| 61 |
+
Licensors should also secure all rights necessary before
|
| 62 |
+
applying our licenses so that the public can reuse the
|
| 63 |
+
material as expected. Licensors should clearly mark any
|
| 64 |
+
material not subject to the license. This includes other CC-
|
| 65 |
+
licensed material, or material used under an exception or
|
| 66 |
+
limitation to copyright. More considerations for licensors:
|
| 67 |
+
wiki.creativecommons.org/Considerations_for_licensors
|
| 68 |
+
|
| 69 |
+
Considerations for the public: By using one of our public
|
| 70 |
+
licenses, a licensor grants the public permission to use the
|
| 71 |
+
licensed material under specified terms and conditions. If
|
| 72 |
+
the licensor's permission is not necessary for any reason--for
|
| 73 |
+
example, because of any applicable exception or limitation to
|
| 74 |
+
copyright--then that use is not regulated by the license. Our
|
| 75 |
+
licenses grant only permissions under copyright and certain
|
| 76 |
+
other rights that a licensor has authority to grant. Use of
|
| 77 |
+
the licensed material may still be restricted for other
|
| 78 |
+
reasons, including because others have copyright or other
|
| 79 |
+
rights in the material. A licensor may make special requests,
|
| 80 |
+
such as asking that all changes be marked or described.
|
| 81 |
+
Although not required by our licenses, you are encouraged to
|
| 82 |
+
respect those requests where reasonable. More considerations
|
| 83 |
+
for the public:
|
| 84 |
+
wiki.creativecommons.org/Considerations_for_licensees
|
| 85 |
+
|
| 86 |
+
=======================================================================
|
| 87 |
+
|
| 88 |
+
Creative Commons Attribution 4.0 International Public License
|
| 89 |
+
|
| 90 |
+
By exercising the Licensed Rights (defined below), You accept and agree
|
| 91 |
+
to be bound by the terms and conditions of this Creative Commons
|
| 92 |
+
Attribution 4.0 International Public License ("Public License"). To the
|
| 93 |
+
extent this Public License may be interpreted as a contract, You are
|
| 94 |
+
granted the Licensed Rights in consideration of Your acceptance of
|
| 95 |
+
these terms and conditions, and the Licensor grants You such rights in
|
| 96 |
+
consideration of benefits the Licensor receives from making the
|
| 97 |
+
Licensed Material available under these terms and conditions.
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
Section 1 -- Definitions.
|
| 101 |
+
|
| 102 |
+
a. Adapted Material means material subject to Copyright and Similar
|
| 103 |
+
Rights that is derived from or based upon the Licensed Material
|
| 104 |
+
and in which the Licensed Material is translated, altered,
|
| 105 |
+
arranged, transformed, or otherwise modified in a manner requiring
|
| 106 |
+
permission under the Copyright and Similar Rights held by the
|
| 107 |
+
Licensor. For purposes of this Public License, where the Licensed
|
| 108 |
+
Material is a musical work, performance, or sound recording,
|
| 109 |
+
Adapted Material is always produced where the Licensed Material is
|
| 110 |
+
synched in timed relation with a moving image.
|
| 111 |
+
|
| 112 |
+
b. Adapter's License means the license You apply to Your Copyright
|
| 113 |
+
and Similar Rights in Your contributions to Adapted Material in
|
| 114 |
+
accordance with the terms and conditions of this Public License.
|
| 115 |
+
|
| 116 |
+
c. Copyright and Similar Rights means copyright and/or similar rights
|
| 117 |
+
closely related to copyright including, without limitation,
|
| 118 |
+
performance, broadcast, sound recording, and Sui Generis Database
|
| 119 |
+
Rights, without regard to how the rights are labeled or
|
| 120 |
+
categorized. For purposes of this Public License, the rights
|
| 121 |
+
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
| 122 |
+
Rights.
|
| 123 |
+
|
| 124 |
+
d. Effective Technological Measures means those measures that, in the
|
| 125 |
+
absence of proper authority, may not be circumvented under laws
|
| 126 |
+
fulfilling obligations under Article 11 of the WIPO Copyright
|
| 127 |
+
Treaty adopted on December 20, 1996, and/or similar international
|
| 128 |
+
agreements.
|
| 129 |
+
|
| 130 |
+
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
| 131 |
+
any other exception or limitation to Copyright and Similar Rights
|
| 132 |
+
that applies to Your use of the Licensed Material.
|
| 133 |
+
|
| 134 |
+
f. Licensed Material means the artistic or literary work, database,
|
| 135 |
+
or other material to which the Licensor applied this Public
|
| 136 |
+
License.
|
| 137 |
+
|
| 138 |
+
g. Licensed Rights means the rights granted to You subject to the
|
| 139 |
+
terms and conditions of this Public License, which are limited to
|
| 140 |
+
all Copyright and Similar Rights that apply to Your use of the
|
| 141 |
+
Licensed Material and that the Licensor has authority to license.
|
| 142 |
+
|
| 143 |
+
h. Licensor means the individual(s) or entity(ies) granting rights
|
| 144 |
+
under this Public License.
|
| 145 |
+
|
| 146 |
+
i. Share means to provide material to the public by any means or
|
| 147 |
+
process that requires permission under the Licensed Rights, such
|
| 148 |
+
as reproduction, public display, public performance, distribution,
|
| 149 |
+
dissemination, communication, or importation, and to make material
|
| 150 |
+
available to the public including in ways that members of the
|
| 151 |
+
public may access the material from a place and at a time
|
| 152 |
+
individually chosen by them.
|
| 153 |
+
|
| 154 |
+
j. Sui Generis Database Rights means rights other than copyright
|
| 155 |
+
resulting from Directive 96/9/EC of the European Parliament and of
|
| 156 |
+
the Council of 11 March 1996 on the legal protection of databases,
|
| 157 |
+
as amended and/or succeeded, as well as other essentially
|
| 158 |
+
equivalent rights anywhere in the world.
|
| 159 |
+
|
| 160 |
+
k. You means the individual or entity exercising the Licensed Rights
|
| 161 |
+
under this Public License. Your has a corresponding meaning.
|
| 162 |
+
|
| 163 |
+
|
| 164 |
+
Section 2 -- Scope.
|
| 165 |
+
|
| 166 |
+
a. License grant.
|
| 167 |
+
|
| 168 |
+
1. Subject to the terms and conditions of this Public License,
|
| 169 |
+
the Licensor hereby grants You a worldwide, royalty-free,
|
| 170 |
+
non-sublicensable, non-exclusive, irrevocable license to
|
| 171 |
+
exercise the Licensed Rights in the Licensed Material to:
|
| 172 |
+
|
| 173 |
+
a. reproduce and Share the Licensed Material, in whole or
|
| 174 |
+
in part; and
|
| 175 |
+
|
| 176 |
+
b. produce, reproduce, and Share Adapted Material.
|
| 177 |
+
|
| 178 |
+
2. Exceptions and Limitations. For the avoidance of doubt, where
|
| 179 |
+
Exceptions and Limitations apply to Your use, this Public
|
| 180 |
+
License does not apply, and You do not need to comply with
|
| 181 |
+
its terms and conditions.
|
| 182 |
+
|
| 183 |
+
3. Term. The term of this Public License is specified in Section
|
| 184 |
+
6(a).
|
| 185 |
+
|
| 186 |
+
4. Media and formats; technical modifications allowed. The
|
| 187 |
+
Licensor authorizes You to exercise the Licensed Rights in
|
| 188 |
+
all media and formats whether now known or hereafter created,
|
| 189 |
+
and to make technical modifications necessary to do so. The
|
| 190 |
+
Licensor waives and/or agrees not to assert any right or
|
| 191 |
+
authority to forbid You from making technical modifications
|
| 192 |
+
necessary to exercise the Licensed Rights, including
|
| 193 |
+
technical modifications necessary to circumvent Effective
|
| 194 |
+
Technological Measures. For purposes of this Public License,
|
| 195 |
+
simply making modifications authorized by this Section 2(a)
|
| 196 |
+
(4) never produces Adapted Material.
|
| 197 |
+
|
| 198 |
+
5. Downstream recipients.
|
| 199 |
+
|
| 200 |
+
a. Offer from the Licensor -- Licensed Material. Every
|
| 201 |
+
recipient of the Licensed Material automatically
|
| 202 |
+
receives an offer from the Licensor to exercise the
|
| 203 |
+
Licensed Rights under the terms and conditions of this
|
| 204 |
+
Public License.
|
| 205 |
+
|
| 206 |
+
b. No downstream restrictions. You may not offer or impose
|
| 207 |
+
any additional or different terms or conditions on, or
|
| 208 |
+
apply any Effective Technological Measures to, the
|
| 209 |
+
Licensed Material if doing so restricts exercise of the
|
| 210 |
+
Licensed Rights by any recipient of the Licensed
|
| 211 |
+
Material.
|
| 212 |
+
|
| 213 |
+
6. No endorsement. Nothing in this Public License constitutes or
|
| 214 |
+
may be construed as permission to assert or imply that You
|
| 215 |
+
are, or that Your use of the Licensed Material is, connected
|
| 216 |
+
with, or sponsored, endorsed, or granted official status by,
|
| 217 |
+
the Licensor or others designated to receive attribution as
|
| 218 |
+
provided in Section 3(a)(1)(A)(i).
|
| 219 |
+
|
| 220 |
+
b. Other rights.
|
| 221 |
+
|
| 222 |
+
1. Moral rights, such as the right of integrity, are not
|
| 223 |
+
licensed under this Public License, nor are publicity,
|
| 224 |
+
privacy, and/or other similar personality rights; however, to
|
| 225 |
+
the extent possible, the Licensor waives and/or agrees not to
|
| 226 |
+
assert any such rights held by the Licensor to the limited
|
| 227 |
+
extent necessary to allow You to exercise the Licensed
|
| 228 |
+
Rights, but not otherwise.
|
| 229 |
+
|
| 230 |
+
2. Patent and trademark rights are not licensed under this
|
| 231 |
+
Public License.
|
| 232 |
+
|
| 233 |
+
3. To the extent possible, the Licensor waives any right to
|
| 234 |
+
collect royalties from You for the exercise of the Licensed
|
| 235 |
+
Rights, whether directly or through a collecting society
|
| 236 |
+
under any voluntary or waivable statutory or compulsory
|
| 237 |
+
licensing scheme. In all other cases the Licensor expressly
|
| 238 |
+
reserves any right to collect such royalties.
|
| 239 |
+
|
| 240 |
+
|
| 241 |
+
Section 3 -- License Conditions.
|
| 242 |
+
|
| 243 |
+
Your exercise of the Licensed Rights is expressly made subject to the
|
| 244 |
+
following conditions.
|
| 245 |
+
|
| 246 |
+
a. Attribution.
|
| 247 |
+
|
| 248 |
+
1. If You Share the Licensed Material (including in modified
|
| 249 |
+
form), You must:
|
| 250 |
+
|
| 251 |
+
a. retain the following if it is supplied by the Licensor
|
| 252 |
+
with the Licensed Material:
|
| 253 |
+
|
| 254 |
+
i. identification of the creator(s) of the Licensed
|
| 255 |
+
Material and any others designated to receive
|
| 256 |
+
attribution, in any reasonable manner requested by
|
| 257 |
+
the Licensor (including by pseudonym if
|
| 258 |
+
designated);
|
| 259 |
+
|
| 260 |
+
ii. a copyright notice;
|
| 261 |
+
|
| 262 |
+
iii. a notice that refers to this Public License;
|
| 263 |
+
|
| 264 |
+
iv. a notice that refers to the disclaimer of
|
| 265 |
+
warranties;
|
| 266 |
+
|
| 267 |
+
v. a URI or hyperlink to the Licensed Material to the
|
| 268 |
+
extent reasonably practicable;
|
| 269 |
+
|
| 270 |
+
b. indicate if You modified the Licensed Material and
|
| 271 |
+
retain an indication of any previous modifications; and
|
| 272 |
+
|
| 273 |
+
c. indicate the Licensed Material is licensed under this
|
| 274 |
+
Public License, and include the text of, or the URI or
|
| 275 |
+
hyperlink to, this Public License.
|
| 276 |
+
|
| 277 |
+
2. You may satisfy the conditions in Section 3(a)(1) in any
|
| 278 |
+
reasonable manner based on the medium, means, and context in
|
| 279 |
+
which You Share the Licensed Material. For example, it may be
|
| 280 |
+
reasonable to satisfy the conditions by providing a URI or
|
| 281 |
+
hyperlink to a resource that includes the required
|
| 282 |
+
information.
|
| 283 |
+
|
| 284 |
+
3. If requested by the Licensor, You must remove any of the
|
| 285 |
+
information required by Section 3(a)(1)(A) to the extent
|
| 286 |
+
reasonably practicable.
|
| 287 |
+
|
| 288 |
+
4. If You Share Adapted Material You produce, the Adapter's
|
| 289 |
+
License You apply must not prevent recipients of the Adapted
|
| 290 |
+
Material from complying with this Public License.
|
| 291 |
+
|
| 292 |
+
|
| 293 |
+
Section 4 -- Sui Generis Database Rights.
|
| 294 |
+
|
| 295 |
+
Where the Licensed Rights include Sui Generis Database Rights that
|
| 296 |
+
apply to Your use of the Licensed Material:
|
| 297 |
+
|
| 298 |
+
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
| 299 |
+
to extract, reuse, reproduce, and Share all or a substantial
|
| 300 |
+
portion of the contents of the database;
|
| 301 |
+
|
| 302 |
+
b. if You include all or a substantial portion of the database
|
| 303 |
+
contents in a database in which You have Sui Generis Database
|
| 304 |
+
Rights, then the database in which You have Sui Generis Database
|
| 305 |
+
Rights (but not its individual contents) is Adapted Material; and
|
| 306 |
+
|
| 307 |
+
c. You must comply with the conditions in Section 3(a) if You Share
|
| 308 |
+
all or a substantial portion of the contents of the database.
|
| 309 |
+
|
| 310 |
+
For the avoidance of doubt, this Section 4 supplements and does not
|
| 311 |
+
replace Your obligations under this Public License where the Licensed
|
| 312 |
+
Rights include other Copyright and Similar Rights.
|
| 313 |
+
|
| 314 |
+
|
| 315 |
+
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
| 316 |
+
|
| 317 |
+
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
| 318 |
+
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
| 319 |
+
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
| 320 |
+
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
| 321 |
+
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
| 322 |
+
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
| 323 |
+
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
| 324 |
+
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
| 325 |
+
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
| 326 |
+
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
| 327 |
+
|
| 328 |
+
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
| 329 |
+
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
| 330 |
+
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
| 331 |
+
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
| 332 |
+
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
| 333 |
+
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
| 334 |
+
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
| 335 |
+
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
| 336 |
+
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
| 337 |
+
|
| 338 |
+
c. The disclaimer of warranties and limitation of liability provided
|
| 339 |
+
above shall be interpreted in a manner that, to the extent
|
| 340 |
+
possible, most closely approximates an absolute disclaimer and
|
| 341 |
+
waiver of all liability.
|
| 342 |
+
|
| 343 |
+
|
| 344 |
+
Section 6 -- Term and Termination.
|
| 345 |
+
|
| 346 |
+
a. This Public License applies for the term of the Copyright and
|
| 347 |
+
Similar Rights licensed here. However, if You fail to comply with
|
| 348 |
+
this Public License, then Your rights under this Public License
|
| 349 |
+
terminate automatically.
|
| 350 |
+
|
| 351 |
+
b. Where Your right to use the Licensed Material has terminated under
|
| 352 |
+
Section 6(a), it reinstates:
|
| 353 |
+
|
| 354 |
+
1. automatically as of the date the violation is cured, provided
|
| 355 |
+
it is cured within 30 days of Your discovery of the
|
| 356 |
+
violation; or
|
| 357 |
+
|
| 358 |
+
2. upon express reinstatement by the Licensor.
|
| 359 |
+
|
| 360 |
+
For the avoidance of doubt, this Section 6(b) does not affect any
|
| 361 |
+
right the Licensor may have to seek remedies for Your violations
|
| 362 |
+
of this Public License.
|
| 363 |
+
|
| 364 |
+
c. For the avoidance of doubt, the Licensor may also offer the
|
| 365 |
+
Licensed Material under separate terms or conditions or stop
|
| 366 |
+
distributing the Licensed Material at any time; however, doing so
|
| 367 |
+
will not terminate this Public License.
|
| 368 |
+
|
| 369 |
+
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
| 370 |
+
License.
|
| 371 |
+
|
| 372 |
+
|
| 373 |
+
Section 7 -- Other Terms and Conditions.
|
| 374 |
+
|
| 375 |
+
a. The Licensor shall not be bound by any additional or different
|
| 376 |
+
terms or conditions communicated by You unless expressly agreed.
|
| 377 |
+
|
| 378 |
+
b. Any arrangements, understandings, or agreements regarding the
|
| 379 |
+
Licensed Material not stated herein are separate from and
|
| 380 |
+
independent of the terms and conditions of this Public License.
|
| 381 |
+
|
| 382 |
+
|
| 383 |
+
Section 8 -- Interpretation.
|
| 384 |
+
|
| 385 |
+
a. For the avoidance of doubt, this Public License does not, and
|
| 386 |
+
shall not be interpreted to, reduce, limit, restrict, or impose
|
| 387 |
+
conditions on any use of the Licensed Material that could lawfully
|
| 388 |
+
be made without permission under this Public License.
|
| 389 |
+
|
| 390 |
+
b. To the extent possible, if any provision of this Public License is
|
| 391 |
+
deemed unenforceable, it shall be automatically reformed to the
|
| 392 |
+
minimum extent necessary to make it enforceable. If the provision
|
| 393 |
+
cannot be reformed, it shall be severed from this Public License
|
| 394 |
+
without affecting the enforceability of the remaining terms and
|
| 395 |
+
conditions.
|
| 396 |
+
|
| 397 |
+
c. No term or condition of this Public License will be waived and no
|
| 398 |
+
failure to comply consented to unless expressly agreed to by the
|
| 399 |
+
Licensor.
|
| 400 |
+
|
| 401 |
+
d. Nothing in this Public License constitutes or may be interpreted
|
| 402 |
+
as a limitation upon, or waiver of, any privileges and immunities
|
| 403 |
+
that apply to the Licensor or You, including from the legal
|
| 404 |
+
processes of any jurisdiction or authority.
|
| 405 |
+
|
| 406 |
+
|
| 407 |
+
=======================================================================
|
| 408 |
+
|
| 409 |
+
Creative Commons is not a party to its public licenses.
|
| 410 |
+
Notwithstanding, Creative Commons may elect to apply one of its public
|
| 411 |
+
licenses to material it publishes and in those instances will be
|
| 412 |
+
considered the “Licensor.” The text of the Creative Commons public
|
| 413 |
+
licenses is dedicated to the public domain under the CC0 Public Domain
|
| 414 |
+
Dedication. Except for the limited purpose of indicating that material
|
| 415 |
+
is shared under a Creative Commons public license or as otherwise
|
| 416 |
+
permitted by the Creative Commons policies published at
|
| 417 |
+
creativecommons.org/policies, Creative Commons does not authorize the
|
| 418 |
+
use of the trademark "Creative Commons" or any other trademark or logo
|
| 419 |
+
of Creative Commons without its prior written consent including,
|
| 420 |
+
without limitation, in connection with any unauthorized modifications
|
| 421 |
+
to any of its public licenses or any other arrangements,
|
| 422 |
+
understandings, or agreements concerning use of licensed material. For
|
| 423 |
+
the avoidance of doubt, this paragraph does not form part of the public
|
| 424 |
+
licenses.
|
| 425 |
+
|
| 426 |
+
Creative Commons may be contacted at creativecommons.org.
|
NOTICE.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Attribution and license scope
|
| 2 |
+
|
| 3 |
+
This is a mixed-license-scope repository. Fluid Inference intends the included
|
| 4 |
+
CC-BY-4.0 license text to cover only the following exact Community-1-derived
|
| 5 |
+
artifacts and their uncompiled counterparts listed in `provenance.json`:
|
| 6 |
+
|
| 7 |
+
- `Segmentation.mlmodelc`
|
| 8 |
+
- `FBank.mlmodelc`
|
| 9 |
+
- `Embedding.mlmodelc`
|
| 10 |
+
- `PLDA.mlmodelc`
|
| 11 |
+
- `PldaRho.mlmodelc`
|
| 12 |
+
- `plda-parameters.json`
|
| 13 |
+
- `xvector-transform.json`
|
| 14 |
+
|
| 15 |
+
The underlying Community-1 pipeline is published by pyannote under CC-BY-4.0:
|
| 16 |
+
https://huggingface.co/pyannote/speaker-diarization-community-1
|
| 17 |
+
|
| 18 |
+
The PLDA parameters originate from Brno University of Technology / BUT
|
| 19 |
+
Speech@FIT. The rights holder explicitly licenses `plda.npz` and
|
| 20 |
+
`xvec_transform.npz` under CC-BY-4.0, including commercial use:
|
| 21 |
+
https://huggingface.co/BUT-FIT/diarizen-wavlm-large-s80-md/blob/6285693ddd5b38e8229acb93f864f3d04a82bee1/plda/LICENSE
|
| 22 |
+
|
| 23 |
+
Fluid Inference converted the PyTorch components to Core ML, introduced fixed
|
| 24 |
+
and enumerated input shapes, applied mixed-precision storage where recorded in
|
| 25 |
+
the model metadata, separated the FBank frontend from the embedding backend,
|
| 26 |
+
and compiled packages for Apple platforms.
|
| 27 |
+
|
| 28 |
+
Appropriate attribution should identify pyannote, WeSpeaker, BUT Speech@FIT,
|
| 29 |
+
and Fluid Inference, retain the citations in README.md, link CC-BY-4.0, and
|
| 30 |
+
indicate that the files are modified Core ML conversions.
|
| 31 |
+
|
| 32 |
+
## Legacy artifacts
|
| 33 |
+
|
| 34 |
+
`pyannote_segmentation.mlmodelc`, `wespeaker.mlmodelc`,
|
| 35 |
+
`wespeaker_v2.mlmodelc`, `wespeaker_int8.mlmodelc`, and their packages predate
|
| 36 |
+
the Community-1 artifact set and are not covered by the Community-1 scope
|
| 37 |
+
above. They are Core ML conversions of the pyannote/speaker-diarization-3.1
|
| 38 |
+
components, under their own upstream licenses:
|
| 39 |
+
|
| 40 |
+
| Artifact | Upstream checkpoint | License |
|
| 41 |
+
|---|---|---|
|
| 42 |
+
| `pyannote_segmentation` | [`pyannote/segmentation-3.0`](https://huggingface.co/pyannote/segmentation-3.0) @ `e66f3d3b` (Copyright (c) 2023 CNRS) | MIT |
|
| 43 |
+
| `wespeaker` (fp32) | [`pyannote/wespeaker-voxceleb-resnet34-LM`](https://huggingface.co/pyannote/wespeaker-voxceleb-resnet34-LM) @ `837717dd`, wrapping WeSpeaker's VoxCeleb ResNet34-LM | CC-BY-4.0 |
|
| 44 |
+
| `wespeaker_v2`, `wespeaker_int8` (byte-identical; 8-bit palettized weights) | same as `wespeaker` | CC-BY-4.0 |
|
| 45 |
+
|
| 46 |
+
The original conversion scripts were not preserved, so this was confirmed by
|
| 47 |
+
output parity on AMI ES2004a against the PyTorch checkpoints above (pyannote.audio
|
| 48 |
+
3.3.2, CPU): segmentation frame-level argmax agreement 99.98%; speaker
|
| 49 |
+
embeddings cosine 1.0000 (`wespeaker`) and >= 0.997 (`wespeaker_v2`/`wespeaker_int8`).
|
| 50 |
+
|
| 51 |
+
Fluid Inference converted these checkpoints to Core ML with fixed input shapes,
|
| 52 |
+
fused the fbank frontend into the embedding model, and palettized the
|
| 53 |
+
`wespeaker_v2`/`wespeaker_int8` weights to 8 bits. Attribution for the
|
| 54 |
+
embedding models should identify WeSpeaker, pyannote, and Fluid Inference,
|
| 55 |
+
link CC-BY-4.0, and indicate that the files are modified Core ML conversions.
|
| 56 |
+
The segmentation model's MIT notice is reproduced below.
|
| 57 |
+
|
| 58 |
+
```
|
| 59 |
+
MIT License
|
| 60 |
+
|
| 61 |
+
Copyright (c) 2023 CNRS
|
| 62 |
+
|
| 63 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 64 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 65 |
+
in the Software without restriction, including without limitation the rights
|
| 66 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 67 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 68 |
+
furnished to do so, subject to the following conditions:
|
| 69 |
+
|
| 70 |
+
The above copyright notice and this permission notice shall be included in all
|
| 71 |
+
copies or substantial portions of the Software.
|
| 72 |
+
|
| 73 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 74 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 75 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 76 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 77 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 78 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 79 |
+
SOFTWARE.
|
| 80 |
+
```
|
| 81 |
+
|
| 82 |
+
Fluid Inference can grant rights only to the extent it is authorized to do so.
|
| 83 |
+
This notice does not restrict or replace rights granted directly by upstream
|
| 84 |
+
licensors.
|
PLDA.mlmodelc/metadata.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"shortDescription" : "pyannote community-1 PLDA transformation (x-vector whitening + PLDA projection)",
|
| 4 |
+
"metadataOutputVersion" : "3.0",
|
| 5 |
+
"outputSchema" : [
|
| 6 |
+
{
|
| 7 |
+
"hasShapeFlexibility" : "0",
|
| 8 |
+
"isOptional" : "0",
|
| 9 |
+
"dataType" : "Float32",
|
| 10 |
+
"formattedType" : "MultiArray (Float32 1 × 128)",
|
| 11 |
+
"shortDescription" : "",
|
| 12 |
+
"shape" : "[1, 128]",
|
| 13 |
+
"name" : "plda_features",
|
| 14 |
+
"type" : "MultiArray"
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"version" : "pyannote-speaker-diarization-community-1",
|
| 18 |
+
"modelParameters" : [
|
| 19 |
+
|
| 20 |
+
],
|
| 21 |
+
"author" : "Fluid Inference",
|
| 22 |
+
"specificationVersion" : 8,
|
| 23 |
+
"storagePrecision" : "Float32",
|
| 24 |
+
"license" : "CC-BY-4.0",
|
| 25 |
+
"mlProgramOperationTypeHistogram" : {
|
| 26 |
+
"Ios16.reduceSum" : 2,
|
| 27 |
+
"Ios17.clip" : 2,
|
| 28 |
+
"Ios17.sqrt" : 2,
|
| 29 |
+
"Ios17.linear" : 2,
|
| 30 |
+
"Ios17.realDiv" : 2,
|
| 31 |
+
"Ios17.mul" : 4,
|
| 32 |
+
"Ios17.sub" : 3
|
| 33 |
+
},
|
| 34 |
+
"computePrecision" : "Mixed (Float32, Int32)",
|
| 35 |
+
"stateSchema" : [
|
| 36 |
+
|
| 37 |
+
],
|
| 38 |
+
"isUpdatable" : "0",
|
| 39 |
+
"availability" : {
|
| 40 |
+
"macOS" : "14.0",
|
| 41 |
+
"tvOS" : "17.0",
|
| 42 |
+
"visionOS" : "1.0",
|
| 43 |
+
"watchOS" : "10.0",
|
| 44 |
+
"iOS" : "17.0",
|
| 45 |
+
"macCatalyst" : "17.0"
|
| 46 |
+
},
|
| 47 |
+
"modelType" : {
|
| 48 |
+
"name" : "MLModelType_mlProgram"
|
| 49 |
+
},
|
| 50 |
+
"inputSchema" : [
|
| 51 |
+
{
|
| 52 |
+
"hasShapeFlexibility" : "0",
|
| 53 |
+
"isOptional" : "0",
|
| 54 |
+
"dataType" : "Float32",
|
| 55 |
+
"formattedType" : "MultiArray (Float32 1 × 256)",
|
| 56 |
+
"shortDescription" : "",
|
| 57 |
+
"shape" : "[1, 256]",
|
| 58 |
+
"name" : "embeddings",
|
| 59 |
+
"type" : "MultiArray"
|
| 60 |
+
}
|
| 61 |
+
],
|
| 62 |
+
"userDefinedMetadata" : {
|
| 63 |
+
"com.github.apple.coremltools.conversion_date" : "2025-10-01",
|
| 64 |
+
"com.github.apple.coremltools.source" : "torch==2.8.0",
|
| 65 |
+
"com.github.apple.coremltools.version" : "9.0b1",
|
| 66 |
+
"com.github.apple.coremltools.source_dialect" : "TorchScript"
|
| 67 |
+
},
|
| 68 |
+
"generatedClassName" : "plda_community_1",
|
| 69 |
+
"method" : "predict"
|
| 70 |
+
}
|
| 71 |
+
]
|
PLDA.mlmodelc/model.mil
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
program(1.0)
|
| 2 |
+
[buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
|
| 3 |
+
{
|
| 4 |
+
func main<ios17>(tensor<fp32, [1, 256]> embeddings) {
|
| 5 |
+
tensor<fp32, [128, 128]> plda_tr = const()[name = tensor<string, []>("plda_tr"), val = tensor<fp32, [128, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
|
| 6 |
+
tensor<fp32, [128]> mu = const()[name = tensor<string, []>("mu"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(65664)))];
|
| 7 |
+
tensor<fp32, []> lda_dim_scale = const()[name = tensor<string, []>("lda_dim_scale"), val = tensor<fp32, []>(0x1.6a09e6p+3)];
|
| 8 |
+
tensor<fp32, [128]> mean2 = const()[name = tensor<string, []>("mean2"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(66240)))];
|
| 9 |
+
tensor<fp32, []> lda_scale = const()[name = tensor<string, []>("lda_scale"), val = tensor<fp32, []>(0x1p+4)];
|
| 10 |
+
tensor<fp32, [256]> mean1 = const()[name = tensor<string, []>("mean1"), val = tensor<fp32, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(66816)))];
|
| 11 |
+
tensor<fp32, [1, 256]> x_1 = sub(x = embeddings, y = mean1)[name = tensor<string, []>("x_1")];
|
| 12 |
+
tensor<fp32, [1, 256]> var_11 = mul(x = x_1, y = x_1)[name = tensor<string, []>("op_11")];
|
| 13 |
+
tensor<int32, [1]> var_16_axes_0 = const()[name = tensor<string, []>("op_16_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 14 |
+
tensor<bool, []> var_16_keep_dims_0 = const()[name = tensor<string, []>("op_16_keep_dims_0"), val = tensor<bool, []>(true)];
|
| 15 |
+
tensor<fp32, [1, 1]> var_16 = reduce_sum(axes = var_16_axes_0, keep_dims = var_16_keep_dims_0, x = var_11)[name = tensor<string, []>("op_16")];
|
| 16 |
+
tensor<fp32, []> var_17 = const()[name = tensor<string, []>("op_17"), val = tensor<fp32, []>(0x1.197998p-40)];
|
| 17 |
+
tensor<fp32, []> const_0 = const()[name = tensor<string, []>("const_0"), val = tensor<fp32, []>(0x1.fffffep+127)];
|
| 18 |
+
tensor<fp32, [1, 1]> clip_0 = clip(alpha = var_17, beta = const_0, x = var_16)[name = tensor<string, []>("clip_0")];
|
| 19 |
+
tensor<fp32, [1, 1]> norm_1 = sqrt(x = clip_0)[name = tensor<string, []>("norm_1")];
|
| 20 |
+
tensor<fp32, [1, 256]> normalized1 = real_div(x = x_1, y = norm_1)[name = tensor<string, []>("normalized1")];
|
| 21 |
+
tensor<fp32, [128, 256]> transpose_0 = const()[name = tensor<string, []>("transpose_0"), val = tensor<fp32, [128, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(67904)))];
|
| 22 |
+
tensor<fp32, [128]> var_22_bias_0 = const()[name = tensor<string, []>("op_22_bias_0"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(199040)))];
|
| 23 |
+
tensor<fp32, [1, 128]> var_22 = linear(bias = var_22_bias_0, weight = transpose_0, x = normalized1)[name = tensor<string, []>("op_22")];
|
| 24 |
+
tensor<fp32, [1, 128]> projected = mul(x = var_22, y = lda_scale)[name = tensor<string, []>("projected")];
|
| 25 |
+
tensor<fp32, [1, 128]> x = sub(x = projected, y = mean2)[name = tensor<string, []>("x")];
|
| 26 |
+
tensor<fp32, [1, 128]> var_26 = mul(x = x, y = x)[name = tensor<string, []>("op_26")];
|
| 27 |
+
tensor<int32, [1]> var_31_axes_0 = const()[name = tensor<string, []>("op_31_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 28 |
+
tensor<bool, []> var_31_keep_dims_0 = const()[name = tensor<string, []>("op_31_keep_dims_0"), val = tensor<bool, []>(true)];
|
| 29 |
+
tensor<fp32, [1, 1]> var_31 = reduce_sum(axes = var_31_axes_0, keep_dims = var_31_keep_dims_0, x = var_26)[name = tensor<string, []>("op_31")];
|
| 30 |
+
tensor<fp32, []> var_32 = const()[name = tensor<string, []>("op_32"), val = tensor<fp32, []>(0x1.197998p-40)];
|
| 31 |
+
tensor<fp32, []> const_1 = const()[name = tensor<string, []>("const_1"), val = tensor<fp32, []>(0x1.fffffep+127)];
|
| 32 |
+
tensor<fp32, [1, 1]> clip_1 = clip(alpha = var_32, beta = const_1, x = var_31)[name = tensor<string, []>("clip_1")];
|
| 33 |
+
tensor<fp32, [1, 1]> norm = sqrt(x = clip_1)[name = tensor<string, []>("norm")];
|
| 34 |
+
tensor<fp32, [1, 128]> var_36 = real_div(x = x, y = norm)[name = tensor<string, []>("op_36")];
|
| 35 |
+
tensor<fp32, [1, 128]> normalized2 = mul(x = var_36, y = lda_dim_scale)[name = tensor<string, []>("normalized2")];
|
| 36 |
+
tensor<fp32, [1, 128]> plda_centered = sub(x = normalized2, y = mu)[name = tensor<string, []>("plda_centered")];
|
| 37 |
+
tensor<fp32, [1, 128]> plda_features = linear(bias = var_22_bias_0, weight = plda_tr, x = plda_centered)[name = tensor<string, []>("op_41")];
|
| 38 |
+
} -> (plda_features);
|
| 39 |
+
}
|
PROVENANCE.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Community-1 artifact provenance
|
| 2 |
+
|
| 3 |
+
This document covers the supported Community-1 artifacts in repository snapshot
|
| 4 |
+
`1ed7a662fdc7109e36d822db793ee6eebdaf8594`. Exact artifact hashes are recorded
|
| 5 |
+
in `provenance.json`.
|
| 6 |
+
|
| 7 |
+
## Source mapping
|
| 8 |
+
|
| 9 |
+
| Converted artifact | Upstream input |
|
| 10 |
+
| --- | --- |
|
| 11 |
+
| `Segmentation` | `segmentation/pytorch_model.bin` |
|
| 12 |
+
| `Embedding` | `embedding/pytorch_model.bin` (WeSpeaker ResNet34) |
|
| 13 |
+
| `FBank` | Feature-extraction graph configured from the embedding checkpoint; no separate learned checkpoint |
|
| 14 |
+
| `PLDA`, `PldaRho` | `plda/plda.npz`, `plda/xvec_transform.npz` |
|
| 15 |
+
| PLDA JSON resources | The same two NPZ files, serialized as Float32 tensors |
|
| 16 |
+
|
| 17 |
+
The immutable upstream reference snapshot is
|
| 18 |
+
`pyannote/speaker-diarization-community-1@3533c8cf8e369892e6b79ff1bf80f7b0286a54ee`.
|
| 19 |
+
Its relevant file history identifies checkpoint commit
|
| 20 |
+
`5428423440de6baac451412694bb79a0ad644bea` and PLDA import commit
|
| 21 |
+
`7aa6699f402495053a3898e112874cb3e68ee064`.
|
| 22 |
+
|
| 23 |
+
The PLDA files are byte-identical to the BUT Speech@FIT files with these hashes:
|
| 24 |
+
|
| 25 |
+
| File | SHA-256 |
|
| 26 |
+
| --- | --- |
|
| 27 |
+
| `plda.npz` | `9b77bcd840692710dd3496f62ecfeed8d8e5f002fd991b785079b244eab7d255` |
|
| 28 |
+
| `xvec_transform.npz` | `325f1ce8e48f7e55e9c8aa47e05d2766b7c48c4b25b8de8dd751e7a4cc5fbe8f` |
|
| 29 |
+
|
| 30 |
+
All six tensors in the two published JSON resources exactly match these inputs
|
| 31 |
+
after conversion to Float32. The six constants derived by the published PLDA
|
| 32 |
+
transformation also occur byte-for-byte in `PldaRho.mlmodelc` at the locations
|
| 33 |
+
referenced by its MIL graph.
|
| 34 |
+
|
| 35 |
+
## Recorded conversion environment
|
| 36 |
+
|
| 37 |
+
The modern artifacts record:
|
| 38 |
+
|
| 39 |
+
- PyTorch 2.8.0
|
| 40 |
+
- coremltools 9.0b1
|
| 41 |
+
- TorchScript source dialect
|
| 42 |
+
- coremlc 3500.32.1
|
| 43 |
+
- MIL component 3500.14.1
|
| 44 |
+
|
| 45 |
+
The public conversion reference is Mobius commit
|
| 46 |
+
`33fd6eab634966ae7db4d73da3376a90379642fb`, including conversion and
|
| 47 |
+
compilation scripts plus the locked Python environment. That commit postdates
|
| 48 |
+
the artifact conversion dates, so it is a reference implementation rather than
|
| 49 |
+
an attestation of the exact historical build.
|
| 50 |
+
|
| 51 |
+
## Reproducible successor pipeline
|
| 52 |
+
|
| 53 |
+
Mobius commit `ffbc3c8cae2d0ac83912a005a25a2874ced98a3a` adds a release command that:
|
| 54 |
+
|
| 55 |
+
1. Rejects mutable or abbreviated upstream revisions.
|
| 56 |
+
2. Downloads material inputs from the selected immutable revision.
|
| 57 |
+
3. Embeds source paths, hashes, upstream revision, and converter revision in the
|
| 58 |
+
generated Core ML packages and JSON resources.
|
| 59 |
+
4. Compiles the packages and emits `provenance.json` containing every input and
|
| 60 |
+
output SHA-256 plus the build environment and commands.
|
| 61 |
+
5. Refuses release builds from a dirty converter checkout.
|
| 62 |
+
|
| 63 |
+
Example:
|
| 64 |
+
|
| 65 |
+
```bash
|
| 66 |
+
uv run python build-release.py \
|
| 67 |
+
--upstream-revision 3533c8cf8e369892e6b79ff1bf80f7b0286a54ee \
|
| 68 |
+
--work-dir ./build/community-1-3533c8cf \
|
| 69 |
+
--release-dir ./build/release-3533c8cf \
|
| 70 |
+
--selective-fp16
|
| 71 |
+
```
|
| 72 |
+
|
| 73 |
+
Access to the gated upstream model and acceptance of its user conditions are
|
| 74 |
+
required.
|
| 75 |
+
|
| 76 |
+
## Historical limitations
|
| 77 |
+
|
| 78 |
+
- The exact upstream checkout used for the original 2025 segmentation and
|
| 79 |
+
embedding exports was not recorded.
|
| 80 |
+
- The exact historical converter commit, invocation, Xcode installation, and
|
| 81 |
+
SDK were not recorded.
|
| 82 |
+
- The existing segmentation and embedding artifacts therefore remain
|
| 83 |
+
historically reconstructed, not build-attested.
|
| 84 |
+
- The older `pyannote_segmentation` and `wespeaker*` artifacts are outside this
|
| 85 |
+
document's scope.
|
PldaRho.mlmodelc/metadata.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"shortDescription" : "pyannote community-1 PLDA rho (features scaled by sqrt(phi) for VBx clustering, batch 1-32)",
|
| 4 |
+
"metadataOutputVersion" : "3.0",
|
| 5 |
+
"outputSchema" : [
|
| 6 |
+
{
|
| 7 |
+
"hasShapeFlexibility" : "0",
|
| 8 |
+
"isOptional" : "0",
|
| 9 |
+
"dataType" : "Float32",
|
| 10 |
+
"formattedType" : "MultiArray (Float32)",
|
| 11 |
+
"shortDescription" : "",
|
| 12 |
+
"shape" : "[]",
|
| 13 |
+
"name" : "rho",
|
| 14 |
+
"type" : "MultiArray"
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"version" : "pyannote-speaker-diarization-community-1",
|
| 18 |
+
"modelParameters" : [
|
| 19 |
+
|
| 20 |
+
],
|
| 21 |
+
"author" : "Fluid Inference",
|
| 22 |
+
"specificationVersion" : 8,
|
| 23 |
+
"storagePrecision" : "Float32",
|
| 24 |
+
"license" : "CC-BY-4.0",
|
| 25 |
+
"mlProgramOperationTypeHistogram" : {
|
| 26 |
+
"Ios16.reduceSum" : 2,
|
| 27 |
+
"Ios17.clip" : 2,
|
| 28 |
+
"Ios17.sqrt" : 2,
|
| 29 |
+
"Ios17.linear" : 2,
|
| 30 |
+
"Ios17.realDiv" : 2,
|
| 31 |
+
"Ios17.mul" : 5,
|
| 32 |
+
"Ios17.sub" : 3
|
| 33 |
+
},
|
| 34 |
+
"computePrecision" : "Mixed (Float32, Int32)",
|
| 35 |
+
"stateSchema" : [
|
| 36 |
+
|
| 37 |
+
],
|
| 38 |
+
"isUpdatable" : "0",
|
| 39 |
+
"availability" : {
|
| 40 |
+
"macOS" : "14.0",
|
| 41 |
+
"tvOS" : "17.0",
|
| 42 |
+
"visionOS" : "1.0",
|
| 43 |
+
"watchOS" : "10.0",
|
| 44 |
+
"iOS" : "17.0",
|
| 45 |
+
"macCatalyst" : "17.0"
|
| 46 |
+
},
|
| 47 |
+
"modelType" : {
|
| 48 |
+
"name" : "MLModelType_mlProgram"
|
| 49 |
+
},
|
| 50 |
+
"inputSchema" : [
|
| 51 |
+
{
|
| 52 |
+
"shortDescription" : "",
|
| 53 |
+
"dataType" : "Float32",
|
| 54 |
+
"hasShapeFlexibility" : "1",
|
| 55 |
+
"isOptional" : "0",
|
| 56 |
+
"shapeFlexibility" : "32 × 256 | 1 × 256 | 2 × 256 | 3 × 256 | 4 × 256 | 5 × 256 | 6 × 256 | 7 × 256 | 8 × 256 | 9 × 256 | 10 × 256 | 11 × 256 | 12 × 256 | 13 × 256 | 14 × 256 | 15 × 256 | 16 × 256 | 17 × 256 | 18 × 256 | 19 × 256 | 20 × 256 | 21 × 256 | 22 × 256 | 23 × 256 | 24 × 256 | 25 × 256 | 26 × 256 | 27 × 256 | 28 × 256 | 29 × 256 | 30 × 256 | 31 × 256",
|
| 57 |
+
"formattedType" : "MultiArray (Float32 32 × 256)",
|
| 58 |
+
"type" : "MultiArray",
|
| 59 |
+
"shape" : "[32, 256]",
|
| 60 |
+
"name" : "embeddings",
|
| 61 |
+
"enumeratedShapes" : "[[32, 256], [1, 256], [2, 256], [3, 256], [4, 256], [5, 256], [6, 256], [7, 256], [8, 256], [9, 256], [10, 256], [11, 256], [12, 256], [13, 256], [14, 256], [15, 256], [16, 256], [17, 256], [18, 256], [19, 256], [20, 256], [21, 256], [22, 256], [23, 256], [24, 256], [25, 256], [26, 256], [27, 256], [28, 256], [29, 256], [30, 256], [31, 256]]"
|
| 62 |
+
}
|
| 63 |
+
],
|
| 64 |
+
"userDefinedMetadata" : {
|
| 65 |
+
"com.github.apple.coremltools.conversion_date" : "2025-10-04",
|
| 66 |
+
"com.github.apple.coremltools.source" : "torch==2.8.0",
|
| 67 |
+
"com.github.apple.coremltools.version" : "9.0b1",
|
| 68 |
+
"com.github.apple.coremltools.source_dialect" : "TorchScript"
|
| 69 |
+
},
|
| 70 |
+
"generatedClassName" : "plda_rho_community_1",
|
| 71 |
+
"method" : "predict"
|
| 72 |
+
}
|
| 73 |
+
]
|
PldaRho.mlmodelc/model.mil
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
program(1.0)
|
| 2 |
+
[buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
|
| 3 |
+
{
|
| 4 |
+
func main<ios17>(tensor<fp32, [?, 256]> embeddings) [FlexibleShapeInformation = tuple<tuple<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>, tuple<tensor<string, []>, dict<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>>>((("DefaultShapes", {{"embeddings", [32, 256]}}), ("EnumeratedShapes", {{"embeddings_1_1_1_10_256_", {{"embeddings", [10, 256]}}}, {"embeddings_1_1_1_11_256_", {{"embeddings", [11, 256]}}}, {"embeddings_1_1_1_12_256_", {{"embeddings", [12, 256]}}}, {"embeddings_1_1_1_13_256_", {{"embeddings", [13, 256]}}}, {"embeddings_1_1_1_14_256_", {{"embeddings", [14, 256]}}}, {"embeddings_1_1_1_15_256_", {{"embeddings", [15, 256]}}}, {"embeddings_1_1_1_16_256_", {{"embeddings", [16, 256]}}}, {"embeddings_1_1_1_17_256_", {{"embeddings", [17, 256]}}}, {"embeddings_1_1_1_18_256_", {{"embeddings", [18, 256]}}}, {"embeddings_1_1_1_19_256_", {{"embeddings", [19, 256]}}}, {"embeddings_1_1_1_1_256_", {{"embeddings", [1, 256]}}}, {"embeddings_1_1_1_20_256_", {{"embeddings", [20, 256]}}}, {"embeddings_1_1_1_21_256_", {{"embeddings", [21, 256]}}}, {"embeddings_1_1_1_22_256_", {{"embeddings", [22, 256]}}}, {"embeddings_1_1_1_23_256_", {{"embeddings", [23, 256]}}}, {"embeddings_1_1_1_24_256_", {{"embeddings", [24, 256]}}}, {"embeddings_1_1_1_25_256_", {{"embeddings", [25, 256]}}}, {"embeddings_1_1_1_26_256_", {{"embeddings", [26, 256]}}}, {"embeddings_1_1_1_27_256_", {{"embeddings", [27, 256]}}}, {"embeddings_1_1_1_28_256_", {{"embeddings", [28, 256]}}}, {"embeddings_1_1_1_29_256_", {{"embeddings", [29, 256]}}}, {"embeddings_1_1_1_2_256_", {{"embeddings", [2, 256]}}}, {"embeddings_1_1_1_30_256_", {{"embeddings", [30, 256]}}}, {"embeddings_1_1_1_31_256_", {{"embeddings", [31, 256]}}}, {"embeddings_1_1_1_32_256_", {{"embeddings", [32, 256]}}}, {"embeddings_1_1_1_3_256_", {{"embeddings", [3, 256]}}}, {"embeddings_1_1_1_4_256_", {{"embeddings", [4, 256]}}}, {"embeddings_1_1_1_5_256_", {{"embeddings", [5, 256]}}}, {"embeddings_1_1_1_6_256_", {{"embeddings", [6, 256]}}}, {"embeddings_1_1_1_7_256_", {{"embeddings", [7, 256]}}}, {"embeddings_1_1_1_8_256_", {{"embeddings", [8, 256]}}}, {"embeddings_1_1_1_9_256_", {{"embeddings", [9, 256]}}}})))] {
|
| 5 |
+
tensor<fp32, [128]> sqrt_phi = const()[name = tensor<string, []>("sqrt_phi"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
|
| 6 |
+
tensor<fp32, [128, 128]> transform_plda_tr = const()[name = tensor<string, []>("transform_plda_tr"), val = tensor<fp32, [128, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(640)))];
|
| 7 |
+
tensor<fp32, [128]> transform_mu = const()[name = tensor<string, []>("transform_mu"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(66240)))];
|
| 8 |
+
tensor<fp32, []> transform_lda_dim_scale = const()[name = tensor<string, []>("transform_lda_dim_scale"), val = tensor<fp32, []>(0x1.6a09e6p+3)];
|
| 9 |
+
tensor<fp32, [128]> transform_mean2 = const()[name = tensor<string, []>("transform_mean2"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(66816)))];
|
| 10 |
+
tensor<fp32, []> transform_lda_scale = const()[name = tensor<string, []>("transform_lda_scale"), val = tensor<fp32, []>(0x1p+4)];
|
| 11 |
+
tensor<fp32, [256]> transform_mean1 = const()[name = tensor<string, []>("transform_mean1"), val = tensor<fp32, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(67392)))];
|
| 12 |
+
tensor<fp32, []> var_4 = const()[name = tensor<string, []>("op_4"), val = tensor<fp32, []>(0x1.197998p-40)];
|
| 13 |
+
tensor<fp32, [?, 256]> x_1 = sub(x = embeddings, y = transform_mean1)[name = tensor<string, []>("x_1")];
|
| 14 |
+
tensor<fp32, [?, 256]> var_17 = mul(x = x_1, y = x_1)[name = tensor<string, []>("op_17")];
|
| 15 |
+
tensor<int32, [1]> var_19_axes_0 = const()[name = tensor<string, []>("op_19_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 16 |
+
tensor<bool, []> var_19_keep_dims_0 = const()[name = tensor<string, []>("op_19_keep_dims_0"), val = tensor<bool, []>(true)];
|
| 17 |
+
tensor<fp32, [?, 1]> var_19 = reduce_sum(axes = var_19_axes_0, keep_dims = var_19_keep_dims_0, x = var_17)[name = tensor<string, []>("op_19")];
|
| 18 |
+
tensor<fp32, []> const_0 = const()[name = tensor<string, []>("const_0"), val = tensor<fp32, []>(0x1.fffffep+127)];
|
| 19 |
+
tensor<fp32, [?, 1]> clip_0 = clip(alpha = var_4, beta = const_0, x = var_19)[name = tensor<string, []>("clip_0")];
|
| 20 |
+
tensor<fp32, [?, 1]> norm_1 = sqrt(x = clip_0)[name = tensor<string, []>("norm_1")];
|
| 21 |
+
tensor<fp32, [?, 256]> normalized1 = real_div(x = x_1, y = norm_1)[name = tensor<string, []>("normalized1")];
|
| 22 |
+
tensor<fp32, [128, 256]> transpose_0 = const()[name = tensor<string, []>("transpose_0"), val = tensor<fp32, [128, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(68480)))];
|
| 23 |
+
tensor<fp32, [128]> var_23_bias_0 = const()[name = tensor<string, []>("op_23_bias_0"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(199616)))];
|
| 24 |
+
tensor<fp32, [?, 128]> var_23 = linear(bias = var_23_bias_0, weight = transpose_0, x = normalized1)[name = tensor<string, []>("op_23")];
|
| 25 |
+
tensor<fp32, [?, 128]> projected = mul(x = var_23, y = transform_lda_scale)[name = tensor<string, []>("projected")];
|
| 26 |
+
tensor<fp32, [?, 128]> x = sub(x = projected, y = transform_mean2)[name = tensor<string, []>("x")];
|
| 27 |
+
tensor<fp32, [?, 128]> var_26 = mul(x = x, y = x)[name = tensor<string, []>("op_26")];
|
| 28 |
+
tensor<int32, [1]> var_28_axes_0 = const()[name = tensor<string, []>("op_28_axes_0"), val = tensor<int32, [1]>([-1])];
|
| 29 |
+
tensor<bool, []> var_28_keep_dims_0 = const()[name = tensor<string, []>("op_28_keep_dims_0"), val = tensor<bool, []>(true)];
|
| 30 |
+
tensor<fp32, [?, 1]> var_28 = reduce_sum(axes = var_28_axes_0, keep_dims = var_28_keep_dims_0, x = var_26)[name = tensor<string, []>("op_28")];
|
| 31 |
+
tensor<fp32, []> const_1 = const()[name = tensor<string, []>("const_1"), val = tensor<fp32, []>(0x1.fffffep+127)];
|
| 32 |
+
tensor<fp32, [?, 1]> clip_1 = clip(alpha = var_4, beta = const_1, x = var_28)[name = tensor<string, []>("clip_1")];
|
| 33 |
+
tensor<fp32, [?, 1]> norm = sqrt(x = clip_1)[name = tensor<string, []>("norm")];
|
| 34 |
+
tensor<fp32, [?, 128]> var_31 = real_div(x = x, y = norm)[name = tensor<string, []>("op_31")];
|
| 35 |
+
tensor<fp32, [?, 128]> normalized2 = mul(x = var_31, y = transform_lda_dim_scale)[name = tensor<string, []>("normalized2")];
|
| 36 |
+
tensor<fp32, [?, 128]> plda_centered = sub(x = normalized2, y = transform_mu)[name = tensor<string, []>("plda_centered")];
|
| 37 |
+
tensor<fp32, [?, 128]> features = linear(bias = var_23_bias_0, weight = transform_plda_tr, x = plda_centered)[name = tensor<string, []>("features")];
|
| 38 |
+
tensor<fp32, [?, 128]> rho = mul(x = features, y = sqrt_phi)[name = tensor<string, []>("op_36")];
|
| 39 |
+
} -> (rho);
|
| 40 |
+
}
|
README.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: other
|
| 3 |
+
license_name: scoped-cc-by-4.0
|
| 4 |
+
license_link: https://huggingface.co/FluidInference/speaker-diarization-coreml/blob/main/NOTICE.md
|
| 5 |
+
tags:
|
| 6 |
+
- speech
|
| 7 |
+
- audio
|
| 8 |
+
- voice
|
| 9 |
+
- speaker-diarization
|
| 10 |
+
- speaker-change-detection
|
| 11 |
+
- coreml
|
| 12 |
+
- speaker-segmentation
|
| 13 |
+
base_model:
|
| 14 |
+
- pyannote/speaker-diarization-community-1
|
| 15 |
+
pipeline_tag: voice-activity-detection
|
| 16 |
+
---
|
| 17 |
+
|
| 18 |
+
> Mirror of FluidInference/speaker-diarization-coreml at revision 7eab74f3463c736418d0eb10296261ae581146c9, kept by the PrivateWispr team as a backup host. Licence: scoped CC-BY-4.0 (mixed-licence repo; see NOTICE.md and LICENSE, kept unchanged). Original authors: pyannote (Community-1 pipeline, segmentation-3.0), WeSpeaker, BUT Speech@FIT (PLDA parameters) and FluidInference (Core ML conversions, modified from the originals). All model files are byte-identical to the upstream revision; only this header was added to the README.
|
| 19 |
+
|
| 20 |
+
# Speaker Diarization Core ML
|
| 21 |
+
|
| 22 |
+
Core ML conversions used by
|
| 23 |
+
[FluidAudio](https://github.com/FluidInference/FluidAudio) for on-device speaker
|
| 24 |
+
diarization on Apple platforms.
|
| 25 |
+
|
| 26 |
+
The supported Community-1 artifact set is distributed under CC-BY-4.0. See
|
| 27 |
+
[NOTICE.md](NOTICE.md) for attribution and the precise license scope, and
|
| 28 |
+
[PROVENANCE.md](PROVENANCE.md) plus [provenance.json](provenance.json) for
|
| 29 |
+
source, conversion, environment, and file-integrity records.
|
| 30 |
+
|
| 31 |
+
## Supported Community-1 artifacts
|
| 32 |
+
|
| 33 |
+
| Artifact | Source |
|
| 34 |
+
| --- | --- |
|
| 35 |
+
| `Segmentation.mlmodelc` | `pyannote/speaker-diarization-community-1/segmentation/pytorch_model.bin` |
|
| 36 |
+
| `FBank.mlmodelc` | Deterministic feature-extraction graph configured from the embedding checkpoint |
|
| 37 |
+
| `Embedding.mlmodelc` | `pyannote/speaker-diarization-community-1/embedding/pytorch_model.bin` |
|
| 38 |
+
| `PLDA.mlmodelc`, `PldaRho.mlmodelc` | `plda/plda.npz` and `plda/xvec_transform.npz` |
|
| 39 |
+
| `plda-parameters.json`, `xvector-transform.json` | Serialized tensors from the same two PLDA files |
|
| 40 |
+
|
| 41 |
+
The snapshot includes uncompiled packages for `Segmentation`, `FBank`,
|
| 42 |
+
`Embedding`, and `PldaRho` under `mlpackages/`; no uncompiled `PLDA` package was
|
| 43 |
+
published. These are Core ML conversions, not fine-tuned models.
|
| 44 |
+
|
| 45 |
+
## Provenance status
|
| 46 |
+
|
| 47 |
+
The artifacts are pinned by SHA-256 in `provenance.json`. Their historical
|
| 48 |
+
source lineage has been reconstructed from the public Community-1 repository,
|
| 49 |
+
artifact metadata, and the published conversion source. The exact local
|
| 50 |
+
upstream checkout and Mobius commit used for the original 2025 conversion were
|
| 51 |
+
not recorded, so the existing binaries are not described as a fully attested
|
| 52 |
+
reproducible build.
|
| 53 |
+
|
| 54 |
+
The immutable upstream reference used for reconstruction is
|
| 55 |
+
[`pyannote/speaker-diarization-community-1@3533c8cf`](https://huggingface.co/pyannote/speaker-diarization-community-1/tree/3533c8cf8e369892e6b79ff1bf80f7b0286a54ee).
|
| 56 |
+
The public historical conversion reference is
|
| 57 |
+
[`FluidInference/mobius@33fd6eab`](https://github.com/FluidInference/mobius/tree/33fd6eab634966ae7db4d73da3376a90379642fb/models/speaker-diarization/pyannote-community-1/coreml).
|
| 58 |
+
|
| 59 |
+
The current conversion pipeline requires a full upstream commit SHA, records
|
| 60 |
+
input and output hashes, embeds source metadata in each model, and captures the
|
| 61 |
+
build environment. It is available at
|
| 62 |
+
[`FluidInference/mobius@ffbc3c8`](https://github.com/FluidInference/mobius/tree/ffbc3c8cae2d0ac83912a005a25a2874ced98a3a/models/speaker-diarization/pyannote-community-1/coreml).
|
| 63 |
+
|
| 64 |
+
## Legacy compatibility artifacts
|
| 65 |
+
|
| 66 |
+
The repository also retains `pyannote_segmentation.mlmodelc`,
|
| 67 |
+
`wespeaker.mlmodelc`, `wespeaker_v2.mlmodelc`, and `wespeaker_int8.mlmodelc`
|
| 68 |
+
for FluidAudio's legacy online diarizer. They predate the Community-1 export
|
| 69 |
+
and are not covered by its license scope. They are Core ML conversions of
|
| 70 |
+
[`pyannote/segmentation-3.0`](https://huggingface.co/pyannote/segmentation-3.0)
|
| 71 |
+
(MIT) and [`pyannote/wespeaker-voxceleb-resnet34-LM`](https://huggingface.co/pyannote/wespeaker-voxceleb-resnet34-LM)
|
| 72 |
+
(CC-BY-4.0); see `NOTICE.md` for revisions, parity evidence, and attribution.
|
| 73 |
+
|
| 74 |
+
## Technical specifications
|
| 75 |
+
|
| 76 |
+
- Input: 16 kHz mono audio
|
| 77 |
+
- Output: speaker segments with timestamps and speaker identifiers
|
| 78 |
+
- Framework: Core ML converted from PyTorch
|
| 79 |
+
- Deployment target: iOS 17 / macOS 14 or later
|
| 80 |
+
- Community-1 conversion metadata: PyTorch 2.8.0, coremltools 9.0b1,
|
| 81 |
+
TorchScript source dialect
|
| 82 |
+
- Compiled MIL metadata: coremlc 3500.32.1, MIL 3500.14.1
|
| 83 |
+
|
| 84 |
+
## Usage
|
| 85 |
+
|
| 86 |
+
See the [FluidAudio diarization documentation](https://github.com/FluidInference/FluidAudio/tree/main/Documentation/Diarization).
|
| 87 |
+
|
| 88 |
+
## Citations
|
| 89 |
+
|
| 90 |
+
### Speaker segmentation
|
| 91 |
+
|
| 92 |
+
```bibtex
|
| 93 |
+
@inproceedings{Plaquet23,
|
| 94 |
+
author={Alexis Plaquet and Hervé Bredin},
|
| 95 |
+
title={{Powerset multi-class cross entropy loss for neural speaker diarization}},
|
| 96 |
+
year=2023,
|
| 97 |
+
booktitle={Proc. INTERSPEECH 2023},
|
| 98 |
+
}
|
| 99 |
+
```
|
| 100 |
+
|
| 101 |
+
### Speaker embedding
|
| 102 |
+
|
| 103 |
+
```bibtex
|
| 104 |
+
@inproceedings{Wang2023,
|
| 105 |
+
title={Wespeaker: A research and production oriented speaker embedding learning toolkit},
|
| 106 |
+
author={Wang, Hongji and Liang, Chengdong and Wang, Shuai and Chen, Zhengyang and Zhang, Binbin and Xiang, Xu and Deng, Yanlei and Qian, Yanmin},
|
| 107 |
+
booktitle={ICASSP 2023, IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},
|
| 108 |
+
pages={1--5},
|
| 109 |
+
year={2023},
|
| 110 |
+
organization={IEEE}
|
| 111 |
+
}
|
| 112 |
+
```
|
| 113 |
+
|
| 114 |
+
### Speaker clustering
|
| 115 |
+
|
| 116 |
+
```bibtex
|
| 117 |
+
@article{Landini2022,
|
| 118 |
+
author={Landini, Federico and Profant, J{\'a}n and Diez, Mireia and Burget, Luk{\'a}{\v{s}}},
|
| 119 |
+
title={{Bayesian HMM clustering of x-vector sequences (VBx) in speaker diarization: theory, implementation and analysis on standard tasks}},
|
| 120 |
+
year={2022},
|
| 121 |
+
journal={Computer Speech & Language},
|
| 122 |
+
}
|
| 123 |
+
```
|
Segmentation.mlmodelc/analytics/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:64265f8e7ad41a5f68d630c15288c2499cca5892ad49e20096819cdeac004cdb
|
| 3 |
+
size 243
|
Segmentation.mlmodelc/metadata.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"shortDescription" : "pyannote community-1 segmentation (10 s powerset diarization, batch 1-32)",
|
| 4 |
+
"metadataOutputVersion" : "3.0",
|
| 5 |
+
"outputSchema" : [
|
| 6 |
+
{
|
| 7 |
+
"hasShapeFlexibility" : "0",
|
| 8 |
+
"isOptional" : "0",
|
| 9 |
+
"dataType" : "Float32",
|
| 10 |
+
"formattedType" : "MultiArray (Float32)",
|
| 11 |
+
"shortDescription" : "",
|
| 12 |
+
"shape" : "[]",
|
| 13 |
+
"name" : "log_probs",
|
| 14 |
+
"type" : "MultiArray"
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"version" : "pyannote-speaker-diarization-community-1",
|
| 18 |
+
"modelParameters" : [
|
| 19 |
+
|
| 20 |
+
],
|
| 21 |
+
"author" : "Fluid Inference",
|
| 22 |
+
"specificationVersion" : 8,
|
| 23 |
+
"storagePrecision" : "Float32",
|
| 24 |
+
"license" : "CC-BY-4.0",
|
| 25 |
+
"mlProgramOperationTypeHistogram" : {
|
| 26 |
+
"Ios17.linear" : 3,
|
| 27 |
+
"Ios17.transpose" : 3,
|
| 28 |
+
"Ios17.conv" : 3,
|
| 29 |
+
"Ios17.log" : 1,
|
| 30 |
+
"Shape" : 1,
|
| 31 |
+
"Ios17.leakyRelu" : 5,
|
| 32 |
+
"Ios17.gather" : 1,
|
| 33 |
+
"Ios17.concat" : 9,
|
| 34 |
+
"Fill" : 1,
|
| 35 |
+
"Ios17.abs" : 1,
|
| 36 |
+
"Ios16.maxPool" : 3,
|
| 37 |
+
"Ios17.lstm" : 4,
|
| 38 |
+
"Ios16.softmax" : 1,
|
| 39 |
+
"Ios17.instanceNorm" : 4,
|
| 40 |
+
"Split" : 10,
|
| 41 |
+
"Ios17.squeeze" : 8
|
| 42 |
+
},
|
| 43 |
+
"computePrecision" : "Mixed (Float32, Int32)",
|
| 44 |
+
"stateSchema" : [
|
| 45 |
+
|
| 46 |
+
],
|
| 47 |
+
"isUpdatable" : "0",
|
| 48 |
+
"availability" : {
|
| 49 |
+
"macOS" : "14.0",
|
| 50 |
+
"tvOS" : "17.0",
|
| 51 |
+
"visionOS" : "1.0",
|
| 52 |
+
"watchOS" : "10.0",
|
| 53 |
+
"iOS" : "17.0",
|
| 54 |
+
"macCatalyst" : "17.0"
|
| 55 |
+
},
|
| 56 |
+
"modelType" : {
|
| 57 |
+
"name" : "MLModelType_mlProgram"
|
| 58 |
+
},
|
| 59 |
+
"inputSchema" : [
|
| 60 |
+
{
|
| 61 |
+
"shortDescription" : "",
|
| 62 |
+
"dataType" : "Float32",
|
| 63 |
+
"hasShapeFlexibility" : "1",
|
| 64 |
+
"isOptional" : "0",
|
| 65 |
+
"shapeFlexibility" : "32 × 1 × 160000 | 1 × 1 × 160000 | 2 × 1 × 160000 | 3 × 1 × 160000 | 4 × 1 × 160000 | 5 × 1 × 160000 | 6 × 1 × 160000 | 7 × 1 × 160000 | 8 × 1 × 160000 | 9 × 1 × 160000 | 10 × 1 × 160000 | 11 × 1 × 160000 | 12 × 1 × 160000 | 13 × 1 × 160000 | 14 × 1 × 160000 | 15 × 1 × 160000 | 16 × 1 × 160000 | 17 × 1 × 160000 | 18 × 1 × 160000 | 19 × 1 × 160000 | 20 × 1 × 160000 | 21 × 1 × 160000 | 22 × 1 × 160000 | 23 × 1 × 160000 | 24 × 1 × 160000 | 25 × 1 × 160000 | 26 × 1 × 160000 | 27 × 1 × 160000 | 28 × 1 × 160000 | 29 × 1 × 160000 | 30 × 1 × 160000 | 31 × 1 × 160000",
|
| 66 |
+
"formattedType" : "MultiArray (Float32 32 × 1 × 160000)",
|
| 67 |
+
"type" : "MultiArray",
|
| 68 |
+
"shape" : "[32, 1, 160000]",
|
| 69 |
+
"name" : "audio",
|
| 70 |
+
"enumeratedShapes" : "[[32, 1, 160000], [1, 1, 160000], [2, 1, 160000], [3, 1, 160000], [4, 1, 160000], [5, 1, 160000], [6, 1, 160000], [7, 1, 160000], [8, 1, 160000], [9, 1, 160000], [10, 1, 160000], [11, 1, 160000], [12, 1, 160000], [13, 1, 160000], [14, 1, 160000], [15, 1, 160000], [16, 1, 160000], [17, 1, 160000], [18, 1, 160000], [19, 1, 160000], [20, 1, 160000], [21, 1, 160000], [22, 1, 160000], [23, 1, 160000], [24, 1, 160000], [25, 1, 160000], [26, 1, 160000], [27, 1, 160000], [28, 1, 160000], [29, 1, 160000], [30, 1, 160000], [31, 1, 160000]]"
|
| 71 |
+
}
|
| 72 |
+
],
|
| 73 |
+
"userDefinedMetadata" : {
|
| 74 |
+
"com.github.apple.coremltools.conversion_date" : "2025-10-13",
|
| 75 |
+
"com.github.apple.coremltools.source" : "torch==2.8.0",
|
| 76 |
+
"com.github.apple.coremltools.version" : "9.0b1",
|
| 77 |
+
"com.github.apple.coremltools.source_dialect" : "TorchScript"
|
| 78 |
+
},
|
| 79 |
+
"generatedClassName" : "Segmentation",
|
| 80 |
+
"method" : "predict"
|
| 81 |
+
}
|
| 82 |
+
]
|
Segmentation.mlmodelc/model.mil
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
program(1.0)
|
| 2 |
+
[buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
|
| 3 |
+
{
|
| 4 |
+
func main<ios17>(tensor<fp32, [?, 1, 160000]> audio) [FlexibleShapeInformation = tuple<tuple<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>, tuple<tensor<string, []>, dict<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>>>((("DefaultShapes", {{"audio", [32, 1, 160000]}}), ("EnumeratedShapes", {{"audio_1_1_10_1_160000_", {{"audio", [10, 1, 160000]}}}, {"audio_1_1_11_1_160000_", {{"audio", [11, 1, 160000]}}}, {"audio_1_1_12_1_160000_", {{"audio", [12, 1, 160000]}}}, {"audio_1_1_13_1_160000_", {{"audio", [13, 1, 160000]}}}, {"audio_1_1_14_1_160000_", {{"audio", [14, 1, 160000]}}}, {"audio_1_1_15_1_160000_", {{"audio", [15, 1, 160000]}}}, {"audio_1_1_16_1_160000_", {{"audio", [16, 1, 160000]}}}, {"audio_1_1_17_1_160000_", {{"audio", [17, 1, 160000]}}}, {"audio_1_1_18_1_160000_", {{"audio", [18, 1, 160000]}}}, {"audio_1_1_19_1_160000_", {{"audio", [19, 1, 160000]}}}, {"audio_1_1_1_1_160000_", {{"audio", [1, 1, 160000]}}}, {"audio_1_1_20_1_160000_", {{"audio", [20, 1, 160000]}}}, {"audio_1_1_21_1_160000_", {{"audio", [21, 1, 160000]}}}, {"audio_1_1_22_1_160000_", {{"audio", [22, 1, 160000]}}}, {"audio_1_1_23_1_160000_", {{"audio", [23, 1, 160000]}}}, {"audio_1_1_24_1_160000_", {{"audio", [24, 1, 160000]}}}, {"audio_1_1_25_1_160000_", {{"audio", [25, 1, 160000]}}}, {"audio_1_1_26_1_160000_", {{"audio", [26, 1, 160000]}}}, {"audio_1_1_27_1_160000_", {{"audio", [27, 1, 160000]}}}, {"audio_1_1_28_1_160000_", {{"audio", [28, 1, 160000]}}}, {"audio_1_1_29_1_160000_", {{"audio", [29, 1, 160000]}}}, {"audio_1_1_2_1_160000_", {{"audio", [2, 1, 160000]}}}, {"audio_1_1_30_1_160000_", {{"audio", [30, 1, 160000]}}}, {"audio_1_1_31_1_160000_", {{"audio", [31, 1, 160000]}}}, {"audio_1_1_32_1_160000_", {{"audio", [32, 1, 160000]}}}, {"audio_1_1_3_1_160000_", {{"audio", [3, 1, 160000]}}}, {"audio_1_1_4_1_160000_", {{"audio", [4, 1, 160000]}}}, {"audio_1_1_5_1_160000_", {{"audio", [5, 1, 160000]}}}, {"audio_1_1_6_1_160000_", {{"audio", [6, 1, 160000]}}}, {"audio_1_1_7_1_160000_", {{"audio", [7, 1, 160000]}}}, {"audio_1_1_8_1_160000_", {{"audio", [8, 1, 160000]}}}, {"audio_1_1_9_1_160000_", {{"audio", [9, 1, 160000]}}}})))] {
|
| 5 |
+
tensor<fp32, [1]> sincnet_wav_norm1d_bias = const()[name = tensor<string, []>("sincnet_wav_norm1d_bias"), val = tensor<fp32, [1]>([0x1.73505ep-5])];
|
| 6 |
+
tensor<fp32, [1]> sincnet_wav_norm1d_weight = const()[name = tensor<string, []>("sincnet_wav_norm1d_weight"), val = tensor<fp32, [1]>([0x1.43f862p-7])];
|
| 7 |
+
tensor<fp32, [80]> sincnet_norm1d_0_bias = const()[name = tensor<string, []>("sincnet_norm1d_0_bias"), val = tensor<fp32, [80]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
|
| 8 |
+
tensor<fp32, [80]> sincnet_norm1d_0_weight = const()[name = tensor<string, []>("sincnet_norm1d_0_weight"), val = tensor<fp32, [80]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(448)))];
|
| 9 |
+
tensor<fp32, [60]> sincnet_conv1d_1_bias = const()[name = tensor<string, []>("sincnet_conv1d_1_bias"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(832)))];
|
| 10 |
+
tensor<fp32, [60, 80, 5]> sincnet_conv1d_1_weight = const()[name = tensor<string, []>("sincnet_conv1d_1_weight"), val = tensor<fp32, [60, 80, 5]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1152)))];
|
| 11 |
+
tensor<fp32, [60]> sincnet_norm1d_1_bias = const()[name = tensor<string, []>("sincnet_norm1d_1_bias"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(97216)))];
|
| 12 |
+
tensor<fp32, [60]> sincnet_norm1d_1_weight = const()[name = tensor<string, []>("sincnet_norm1d_1_weight"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(97536)))];
|
| 13 |
+
tensor<fp32, [60]> sincnet_conv1d_2_bias = const()[name = tensor<string, []>("sincnet_conv1d_2_bias"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(97856)))];
|
| 14 |
+
tensor<fp32, [60, 60, 5]> sincnet_conv1d_2_weight = const()[name = tensor<string, []>("sincnet_conv1d_2_weight"), val = tensor<fp32, [60, 60, 5]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(98176)))];
|
| 15 |
+
tensor<fp32, [60]> sincnet_norm1d_2_bias = const()[name = tensor<string, []>("sincnet_norm1d_2_bias"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(170240)))];
|
| 16 |
+
tensor<fp32, [60]> sincnet_norm1d_2_weight = const()[name = tensor<string, []>("sincnet_norm1d_2_weight"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(170560)))];
|
| 17 |
+
tensor<fp32, [128]> linear_0_bias = const()[name = tensor<string, []>("linear_0_bias"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(170880)))];
|
| 18 |
+
tensor<fp32, [128, 256]> linear_0_weight = const()[name = tensor<string, []>("linear_0_weight"), val = tensor<fp32, [128, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(171456)))];
|
| 19 |
+
tensor<fp32, [128]> linear_1_bias = const()[name = tensor<string, []>("linear_1_bias"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(302592)))];
|
| 20 |
+
tensor<fp32, [128, 128]> linear_1_weight = const()[name = tensor<string, []>("linear_1_weight"), val = tensor<fp32, [128, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(303168)))];
|
| 21 |
+
tensor<fp32, [7]> classifier_bias = const()[name = tensor<string, []>("classifier_bias"), val = tensor<fp32, [7]>([-0x1.00e888p+0, 0x1.67cb52p-2, 0x1.3d87fp-1, 0x1.c8aa8p-2, -0x1.445f5ep-2, -0x1.591274p-1, -0x1.8fb70ep-2])];
|
| 22 |
+
tensor<fp32, [7, 128]> classifier_weight = const()[name = tensor<string, []>("classifier_weight"), val = tensor<fp32, [7, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(368768)))];
|
| 23 |
+
tensor<fp32, []> var_9 = const()[name = tensor<string, []>("op_9"), val = tensor<fp32, []>(0x1.47ae14p-7)];
|
| 24 |
+
tensor<fp32, []> var_24 = const()[name = tensor<string, []>("op_24"), val = tensor<fp32, []>(0x1.4f8b58p-17)];
|
| 25 |
+
tensor<fp32, [?, 1, 160000]> waveform = instance_norm(beta = sincnet_wav_norm1d_bias, epsilon = var_24, gamma = sincnet_wav_norm1d_weight, x = audio)[name = tensor<string, []>("waveform")];
|
| 26 |
+
tensor<fp32, [80, 1, 251]> filters = const()[name = tensor<string, []>("filters"), val = tensor<fp32, [80, 1, 251]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(372416)))];
|
| 27 |
+
tensor<string, []> outputs_pad_type_0 = const()[name = tensor<string, []>("outputs_pad_type_0"), val = tensor<string, []>("valid")];
|
| 28 |
+
tensor<int32, [1]> outputs_strides_0 = const()[name = tensor<string, []>("outputs_strides_0"), val = tensor<int32, [1]>([10])];
|
| 29 |
+
tensor<int32, [2]> outputs_pad_0 = const()[name = tensor<string, []>("outputs_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 30 |
+
tensor<int32, [1]> outputs_dilations_0 = const()[name = tensor<string, []>("outputs_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 31 |
+
tensor<int32, []> outputs_groups_0 = const()[name = tensor<string, []>("outputs_groups_0"), val = tensor<int32, []>(1)];
|
| 32 |
+
tensor<fp32, [?, 80, 15975]> outputs = conv(dilations = outputs_dilations_0, groups = outputs_groups_0, pad = outputs_pad_0, pad_type = outputs_pad_type_0, strides = outputs_strides_0, weight = filters, x = waveform)[name = tensor<string, []>("outputs")];
|
| 33 |
+
tensor<fp32, [?, 80, 15975]> input_1 = abs(x = outputs)[name = tensor<string, []>("input_1")];
|
| 34 |
+
tensor<int32, [1]> var_119 = const()[name = tensor<string, []>("op_119"), val = tensor<int32, [1]>([3])];
|
| 35 |
+
tensor<int32, [1]> var_120 = const()[name = tensor<string, []>("op_120"), val = tensor<int32, [1]>([3])];
|
| 36 |
+
tensor<string, []> input_3_pad_type_0 = const()[name = tensor<string, []>("input_3_pad_type_0"), val = tensor<string, []>("custom")];
|
| 37 |
+
tensor<int32, [2]> input_3_pad_0 = const()[name = tensor<string, []>("input_3_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 38 |
+
tensor<bool, []> input_3_ceil_mode_0 = const()[name = tensor<string, []>("input_3_ceil_mode_0"), val = tensor<bool, []>(false)];
|
| 39 |
+
tensor<fp32, [?, 80, 5325]> input_3 = max_pool(ceil_mode = input_3_ceil_mode_0, kernel_sizes = var_119, pad = input_3_pad_0, pad_type = input_3_pad_type_0, strides = var_120, x = input_1)[name = tensor<string, []>("input_3")];
|
| 40 |
+
tensor<fp32, [?, 80, 5325]> input_5 = instance_norm(beta = sincnet_norm1d_0_bias, epsilon = var_24, gamma = sincnet_norm1d_0_weight, x = input_3)[name = tensor<string, []>("input_5")];
|
| 41 |
+
tensor<fp32, [?, 80, 5325]> input_7 = leaky_relu(alpha = var_9, x = input_5)[name = tensor<string, []>("input_7")];
|
| 42 |
+
tensor<string, []> input_9_pad_type_0 = const()[name = tensor<string, []>("input_9_pad_type_0"), val = tensor<string, []>("valid")];
|
| 43 |
+
tensor<int32, [1]> input_9_strides_0 = const()[name = tensor<string, []>("input_9_strides_0"), val = tensor<int32, [1]>([1])];
|
| 44 |
+
tensor<int32, [2]> input_9_pad_0 = const()[name = tensor<string, []>("input_9_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 45 |
+
tensor<int32, [1]> input_9_dilations_0 = const()[name = tensor<string, []>("input_9_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 46 |
+
tensor<int32, []> input_9_groups_0 = const()[name = tensor<string, []>("input_9_groups_0"), val = tensor<int32, []>(1)];
|
| 47 |
+
tensor<fp32, [?, 60, 5321]> input_9 = conv(bias = sincnet_conv1d_1_bias, dilations = input_9_dilations_0, groups = input_9_groups_0, pad = input_9_pad_0, pad_type = input_9_pad_type_0, strides = input_9_strides_0, weight = sincnet_conv1d_1_weight, x = input_7)[name = tensor<string, []>("input_9")];
|
| 48 |
+
tensor<int32, [1]> var_135 = const()[name = tensor<string, []>("op_135"), val = tensor<int32, [1]>([3])];
|
| 49 |
+
tensor<int32, [1]> var_136 = const()[name = tensor<string, []>("op_136"), val = tensor<int32, [1]>([3])];
|
| 50 |
+
tensor<string, []> input_11_pad_type_0 = const()[name = tensor<string, []>("input_11_pad_type_0"), val = tensor<string, []>("custom")];
|
| 51 |
+
tensor<int32, [2]> input_11_pad_0 = const()[name = tensor<string, []>("input_11_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 52 |
+
tensor<bool, []> input_11_ceil_mode_0 = const()[name = tensor<string, []>("input_11_ceil_mode_0"), val = tensor<bool, []>(false)];
|
| 53 |
+
tensor<fp32, [?, 60, 1773]> input_11 = max_pool(ceil_mode = input_11_ceil_mode_0, kernel_sizes = var_135, pad = input_11_pad_0, pad_type = input_11_pad_type_0, strides = var_136, x = input_9)[name = tensor<string, []>("input_11")];
|
| 54 |
+
tensor<fp32, [?, 60, 1773]> input_13 = instance_norm(beta = sincnet_norm1d_1_bias, epsilon = var_24, gamma = sincnet_norm1d_1_weight, x = input_11)[name = tensor<string, []>("input_13")];
|
| 55 |
+
tensor<fp32, [?, 60, 1773]> input_15 = leaky_relu(alpha = var_9, x = input_13)[name = tensor<string, []>("input_15")];
|
| 56 |
+
tensor<string, []> input_17_pad_type_0 = const()[name = tensor<string, []>("input_17_pad_type_0"), val = tensor<string, []>("valid")];
|
| 57 |
+
tensor<int32, [1]> input_17_strides_0 = const()[name = tensor<string, []>("input_17_strides_0"), val = tensor<int32, [1]>([1])];
|
| 58 |
+
tensor<int32, [2]> input_17_pad_0 = const()[name = tensor<string, []>("input_17_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 59 |
+
tensor<int32, [1]> input_17_dilations_0 = const()[name = tensor<string, []>("input_17_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 60 |
+
tensor<int32, []> input_17_groups_0 = const()[name = tensor<string, []>("input_17_groups_0"), val = tensor<int32, []>(1)];
|
| 61 |
+
tensor<fp32, [?, 60, 1769]> input_17 = conv(bias = sincnet_conv1d_2_bias, dilations = input_17_dilations_0, groups = input_17_groups_0, pad = input_17_pad_0, pad_type = input_17_pad_type_0, strides = input_17_strides_0, weight = sincnet_conv1d_2_weight, x = input_15)[name = tensor<string, []>("input_17")];
|
| 62 |
+
tensor<int32, [1]> var_151 = const()[name = tensor<string, []>("op_151"), val = tensor<int32, [1]>([3])];
|
| 63 |
+
tensor<int32, [1]> var_152 = const()[name = tensor<string, []>("op_152"), val = tensor<int32, [1]>([3])];
|
| 64 |
+
tensor<string, []> input_19_pad_type_0 = const()[name = tensor<string, []>("input_19_pad_type_0"), val = tensor<string, []>("custom")];
|
| 65 |
+
tensor<int32, [2]> input_19_pad_0 = const()[name = tensor<string, []>("input_19_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 66 |
+
tensor<bool, []> input_19_ceil_mode_0 = const()[name = tensor<string, []>("input_19_ceil_mode_0"), val = tensor<bool, []>(false)];
|
| 67 |
+
tensor<fp32, [?, 60, 589]> input_19 = max_pool(ceil_mode = input_19_ceil_mode_0, kernel_sizes = var_151, pad = input_19_pad_0, pad_type = input_19_pad_type_0, strides = var_152, x = input_17)[name = tensor<string, []>("input_19")];
|
| 68 |
+
tensor<fp32, [?, 60, 589]> input_21 = instance_norm(beta = sincnet_norm1d_2_bias, epsilon = var_24, gamma = sincnet_norm1d_2_weight, x = input_19)[name = tensor<string, []>("input_21")];
|
| 69 |
+
tensor<fp32, [?, 60, 589]> x = leaky_relu(alpha = var_9, x = input_21)[name = tensor<string, []>("x")];
|
| 70 |
+
tensor<int32, [3]> var_163 = const()[name = tensor<string, []>("op_163"), val = tensor<int32, [3]>([0, 2, 1])];
|
| 71 |
+
tensor<int32, []> var_172 = const()[name = tensor<string, []>("op_172"), val = tensor<int32, []>(128)];
|
| 72 |
+
tensor<int32, []> var_173 = const()[name = tensor<string, []>("op_173"), val = tensor<int32, []>(8)];
|
| 73 |
+
tensor<fp32, [?, 589, 60]> input_23 = transpose(perm = var_163, x = x)[name = tensor<string, []>("transpose_6")];
|
| 74 |
+
tensor<int32, [3]> var_207_shape = shape(x = input_23)[name = tensor<string, []>("op_207_shape")];
|
| 75 |
+
tensor<int32, []> gather_0_batch_dims_0 = const()[name = tensor<string, []>("gather_0_batch_dims_0"), val = tensor<int32, []>(0)];
|
| 76 |
+
tensor<bool, []> gather_0_validate_indices_0 = const()[name = tensor<string, []>("gather_0_validate_indices_0"), val = tensor<bool, []>(false)];
|
| 77 |
+
tensor<int32, []> select_0 = const()[name = tensor<string, []>("select_0"), val = tensor<int32, []>(0)];
|
| 78 |
+
tensor<int32, []> gather_0_axis_1 = const()[name = tensor<string, []>("gather_0_axis_1"), val = tensor<int32, []>(0)];
|
| 79 |
+
tensor<int32, []> gather_0 = gather(axis = gather_0_axis_1, batch_dims = gather_0_batch_dims_0, indices = select_0, validate_indices = gather_0_validate_indices_0, x = var_207_shape)[name = tensor<string, []>("gather_0")];
|
| 80 |
+
tensor<int32, []> concat_0_axis_0 = const()[name = tensor<string, []>("concat_0_axis_0"), val = tensor<int32, []>(0)];
|
| 81 |
+
tensor<bool, []> concat_0_interleave_0 = const()[name = tensor<string, []>("concat_0_interleave_0"), val = tensor<bool, []>(false)];
|
| 82 |
+
tensor<int32, [3]> concat_0 = concat(axis = concat_0_axis_0, interleave = concat_0_interleave_0, values = (var_173, gather_0, var_172))[name = tensor<string, []>("concat_0")];
|
| 83 |
+
tensor<fp32, []> hx_1_value_0 = const()[name = tensor<string, []>("hx_1_value_0"), val = tensor<fp32, []>(0x0p+0)];
|
| 84 |
+
tensor<fp32, [8, ?, 128]> hx_1 = fill(shape = concat_0, value = hx_1_value_0)[name = tensor<string, []>("hx_1")];
|
| 85 |
+
tensor<int32, [3]> input_23_batch_first_transpose_perm_0 = const()[name = tensor<string, []>("input_23_batch_first_transpose_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
|
| 86 |
+
tensor<int32, []> split_0_num_splits_0 = const()[name = tensor<string, []>("split_0_num_splits_0"), val = tensor<int32, []>(4)];
|
| 87 |
+
tensor<int32, []> split_0_axis_0 = const()[name = tensor<string, []>("split_0_axis_0"), val = tensor<int32, []>(0)];
|
| 88 |
+
tensor<fp32, [2, ?, 128]> split_0_0, tensor<fp32, [2, ?, 128]> split_0_1, tensor<fp32, [2, ?, 128]> split_0_2, tensor<fp32, [2, ?, 128]> split_0_3 = split(axis = split_0_axis_0, num_splits = split_0_num_splits_0, x = hx_1)[name = tensor<string, []>("split_0")];
|
| 89 |
+
tensor<int32, []> split_1_num_splits_0 = const()[name = tensor<string, []>("split_1_num_splits_0"), val = tensor<int32, []>(4)];
|
| 90 |
+
tensor<int32, []> split_1_axis_0 = const()[name = tensor<string, []>("split_1_axis_0"), val = tensor<int32, []>(0)];
|
| 91 |
+
tensor<fp32, [2, ?, 128]> split_1_0, tensor<fp32, [2, ?, 128]> split_1_1, tensor<fp32, [2, ?, 128]> split_1_2, tensor<fp32, [2, ?, 128]> split_1_3 = split(axis = split_1_axis_0, num_splits = split_1_num_splits_0, x = hx_1)[name = tensor<string, []>("split_1")];
|
| 92 |
+
tensor<fp32, [512]> add_0 = const()[name = tensor<string, []>("add_0"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(452800)))];
|
| 93 |
+
tensor<fp32, [512]> add_1 = const()[name = tensor<string, []>("add_1"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(454912)))];
|
| 94 |
+
tensor<fp32, [512, 60]> concat_6 = const()[name = tensor<string, []>("concat_6"), val = tensor<fp32, [512, 60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(457024)))];
|
| 95 |
+
tensor<fp32, [512, 128]> concat_7 = const()[name = tensor<string, []>("concat_7"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(579968)))];
|
| 96 |
+
tensor<fp32, [512, 60]> concat_8 = const()[name = tensor<string, []>("concat_8"), val = tensor<fp32, [512, 60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(842176)))];
|
| 97 |
+
tensor<fp32, [512, 128]> concat_9 = const()[name = tensor<string, []>("concat_9"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(965120)))];
|
| 98 |
+
tensor<int32, [2]> split_10_split_sizes_0 = const()[name = tensor<string, []>("split_10_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
|
| 99 |
+
tensor<int32, []> split_10_axis_0 = const()[name = tensor<string, []>("split_10_axis_0"), val = tensor<int32, []>(0)];
|
| 100 |
+
tensor<fp32, [1, ?, 128]> split_10_0, tensor<fp32, [1, ?, 128]> split_10_1 = split(axis = split_10_axis_0, split_sizes = split_10_split_sizes_0, x = split_0_0)[name = tensor<string, []>("split_10")];
|
| 101 |
+
tensor<int32, []> concat_10_axis_0 = const()[name = tensor<string, []>("concat_10_axis_0"), val = tensor<int32, []>(2)];
|
| 102 |
+
tensor<bool, []> concat_10_interleave_0 = const()[name = tensor<string, []>("concat_10_interleave_0"), val = tensor<bool, []>(false)];
|
| 103 |
+
tensor<fp32, [1, ?, 256]> concat_10 = concat(axis = concat_10_axis_0, interleave = concat_10_interleave_0, values = (split_10_0, split_10_1))[name = tensor<string, []>("concat_10")];
|
| 104 |
+
tensor<int32, [1]> input_25_lstm_layer_0_lstm_h0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_lstm_h0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
|
| 105 |
+
tensor<fp32, [?, 256]> input_25_lstm_layer_0_lstm_h0_reshaped = squeeze(axes = input_25_lstm_layer_0_lstm_h0_reshaped_axes_0, x = concat_10)[name = tensor<string, []>("input_25_lstm_layer_0_lstm_h0_reshaped")];
|
| 106 |
+
tensor<int32, [2]> split_11_split_sizes_0 = const()[name = tensor<string, []>("split_11_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
|
| 107 |
+
tensor<int32, []> split_11_axis_0 = const()[name = tensor<string, []>("split_11_axis_0"), val = tensor<int32, []>(0)];
|
| 108 |
+
tensor<fp32, [1, ?, 128]> split_11_0, tensor<fp32, [1, ?, 128]> split_11_1 = split(axis = split_11_axis_0, split_sizes = split_11_split_sizes_0, x = split_1_0)[name = tensor<string, []>("split_11")];
|
| 109 |
+
tensor<int32, []> concat_11_axis_0 = const()[name = tensor<string, []>("concat_11_axis_0"), val = tensor<int32, []>(2)];
|
| 110 |
+
tensor<bool, []> concat_11_interleave_0 = const()[name = tensor<string, []>("concat_11_interleave_0"), val = tensor<bool, []>(false)];
|
| 111 |
+
tensor<fp32, [1, ?, 256]> concat_11 = concat(axis = concat_11_axis_0, interleave = concat_11_interleave_0, values = (split_11_0, split_11_1))[name = tensor<string, []>("concat_11")];
|
| 112 |
+
tensor<int32, [1]> input_25_lstm_layer_0_lstm_c0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_lstm_c0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
|
| 113 |
+
tensor<fp32, [?, 256]> input_25_lstm_layer_0_lstm_c0_reshaped = squeeze(axes = input_25_lstm_layer_0_lstm_c0_reshaped_axes_0, x = concat_11)[name = tensor<string, []>("input_25_lstm_layer_0_lstm_c0_reshaped")];
|
| 114 |
+
tensor<string, []> input_25_lstm_layer_0_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_direction_0"), val = tensor<string, []>("bidirectional")];
|
| 115 |
+
tensor<bool, []> input_25_lstm_layer_0_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_output_sequence_0"), val = tensor<bool, []>(true)];
|
| 116 |
+
tensor<string, []> input_25_lstm_layer_0_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
|
| 117 |
+
tensor<string, []> input_25_lstm_layer_0_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_cell_activation_0"), val = tensor<string, []>("tanh")];
|
| 118 |
+
tensor<string, []> input_25_lstm_layer_0_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_activation_0"), val = tensor<string, []>("tanh")];
|
| 119 |
+
tensor<fp32, [589, ?, 60]> input_23_batch_first_transpose = transpose(perm = input_23_batch_first_transpose_perm_0, x = input_23)[name = tensor<string, []>("transpose_5")];
|
| 120 |
+
tensor<fp32, [589, ?, 256]> input_25_lstm_layer_0_0, tensor<fp32, [?, 256]> input_25_lstm_layer_0_1, tensor<fp32, [?, 256]> input_25_lstm_layer_0_2 = lstm(activation = input_25_lstm_layer_0_activation_0, bias = add_0, bias_back = add_1, cell_activation = input_25_lstm_layer_0_cell_activation_0, direction = input_25_lstm_layer_0_direction_0, initial_c = input_25_lstm_layer_0_lstm_c0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_0_output_sequence_0, recurrent_activation = input_25_lstm_layer_0_recurrent_activation_0, weight_hh = concat_7, weight_hh_back = concat_9, weight_ih = concat_6, weight_ih_back = concat_8, x = input_23_batch_first_transpose)[name = tensor<string, []>("input_25_lstm_layer_0")];
|
| 121 |
+
tensor<fp32, [512]> add_2 = const()[name = tensor<string, []>("add_2"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1227328)))];
|
| 122 |
+
tensor<fp32, [512]> add_3 = const()[name = tensor<string, []>("add_3"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1229440)))];
|
| 123 |
+
tensor<fp32, [512, 256]> concat_16 = const()[name = tensor<string, []>("concat_16"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1231552)))];
|
| 124 |
+
tensor<fp32, [512, 128]> concat_17 = const()[name = tensor<string, []>("concat_17"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1755904)))];
|
| 125 |
+
tensor<fp32, [512, 256]> concat_18 = const()[name = tensor<string, []>("concat_18"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2018112)))];
|
| 126 |
+
tensor<fp32, [512, 128]> concat_19 = const()[name = tensor<string, []>("concat_19"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2542464)))];
|
| 127 |
+
tensor<int32, [2]> split_20_split_sizes_0 = const()[name = tensor<string, []>("split_20_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
|
| 128 |
+
tensor<int32, []> split_20_axis_0 = const()[name = tensor<string, []>("split_20_axis_0"), val = tensor<int32, []>(0)];
|
| 129 |
+
tensor<fp32, [1, ?, 128]> split_20_0, tensor<fp32, [1, ?, 128]> split_20_1 = split(axis = split_20_axis_0, split_sizes = split_20_split_sizes_0, x = split_0_1)[name = tensor<string, []>("split_20")];
|
| 130 |
+
tensor<int32, []> concat_20_axis_0 = const()[name = tensor<string, []>("concat_20_axis_0"), val = tensor<int32, []>(2)];
|
| 131 |
+
tensor<bool, []> concat_20_interleave_0 = const()[name = tensor<string, []>("concat_20_interleave_0"), val = tensor<bool, []>(false)];
|
| 132 |
+
tensor<fp32, [1, ?, 256]> concat_20 = concat(axis = concat_20_axis_0, interleave = concat_20_interleave_0, values = (split_20_0, split_20_1))[name = tensor<string, []>("concat_20")];
|
| 133 |
+
tensor<int32, [1]> input_25_lstm_layer_1_lstm_h0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_lstm_h0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
|
| 134 |
+
tensor<fp32, [?, 256]> input_25_lstm_layer_1_lstm_h0_reshaped = squeeze(axes = input_25_lstm_layer_1_lstm_h0_reshaped_axes_0, x = concat_20)[name = tensor<string, []>("input_25_lstm_layer_1_lstm_h0_reshaped")];
|
| 135 |
+
tensor<int32, [2]> split_21_split_sizes_0 = const()[name = tensor<string, []>("split_21_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
|
| 136 |
+
tensor<int32, []> split_21_axis_0 = const()[name = tensor<string, []>("split_21_axis_0"), val = tensor<int32, []>(0)];
|
| 137 |
+
tensor<fp32, [1, ?, 128]> split_21_0, tensor<fp32, [1, ?, 128]> split_21_1 = split(axis = split_21_axis_0, split_sizes = split_21_split_sizes_0, x = split_1_1)[name = tensor<string, []>("split_21")];
|
| 138 |
+
tensor<int32, []> concat_21_axis_0 = const()[name = tensor<string, []>("concat_21_axis_0"), val = tensor<int32, []>(2)];
|
| 139 |
+
tensor<bool, []> concat_21_interleave_0 = const()[name = tensor<string, []>("concat_21_interleave_0"), val = tensor<bool, []>(false)];
|
| 140 |
+
tensor<fp32, [1, ?, 256]> concat_21 = concat(axis = concat_21_axis_0, interleave = concat_21_interleave_0, values = (split_21_0, split_21_1))[name = tensor<string, []>("concat_21")];
|
| 141 |
+
tensor<int32, [1]> input_25_lstm_layer_1_lstm_c0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_lstm_c0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
|
| 142 |
+
tensor<fp32, [?, 256]> input_25_lstm_layer_1_lstm_c0_reshaped = squeeze(axes = input_25_lstm_layer_1_lstm_c0_reshaped_axes_0, x = concat_21)[name = tensor<string, []>("input_25_lstm_layer_1_lstm_c0_reshaped")];
|
| 143 |
+
tensor<string, []> input_25_lstm_layer_1_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_direction_0"), val = tensor<string, []>("bidirectional")];
|
| 144 |
+
tensor<bool, []> input_25_lstm_layer_1_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_output_sequence_0"), val = tensor<bool, []>(true)];
|
| 145 |
+
tensor<string, []> input_25_lstm_layer_1_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
|
| 146 |
+
tensor<string, []> input_25_lstm_layer_1_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_cell_activation_0"), val = tensor<string, []>("tanh")];
|
| 147 |
+
tensor<string, []> input_25_lstm_layer_1_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_activation_0"), val = tensor<string, []>("tanh")];
|
| 148 |
+
tensor<fp32, [589, ?, 256]> input_25_lstm_layer_1_0, tensor<fp32, [?, 256]> input_25_lstm_layer_1_1, tensor<fp32, [?, 256]> input_25_lstm_layer_1_2 = lstm(activation = input_25_lstm_layer_1_activation_0, bias = add_2, bias_back = add_3, cell_activation = input_25_lstm_layer_1_cell_activation_0, direction = input_25_lstm_layer_1_direction_0, initial_c = input_25_lstm_layer_1_lstm_c0_reshaped, initial_h = input_25_lstm_layer_1_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_1_output_sequence_0, recurrent_activation = input_25_lstm_layer_1_recurrent_activation_0, weight_hh = concat_17, weight_hh_back = concat_19, weight_ih = concat_16, weight_ih_back = concat_18, x = input_25_lstm_layer_0_0)[name = tensor<string, []>("input_25_lstm_layer_1")];
|
| 149 |
+
tensor<fp32, [512]> add_4 = const()[name = tensor<string, []>("add_4"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2804672)))];
|
| 150 |
+
tensor<fp32, [512]> add_5 = const()[name = tensor<string, []>("add_5"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2806784)))];
|
| 151 |
+
tensor<fp32, [512, 256]> concat_26 = const()[name = tensor<string, []>("concat_26"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2808896)))];
|
| 152 |
+
tensor<fp32, [512, 128]> concat_27 = const()[name = tensor<string, []>("concat_27"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3333248)))];
|
| 153 |
+
tensor<fp32, [512, 256]> concat_28 = const()[name = tensor<string, []>("concat_28"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3595456)))];
|
| 154 |
+
tensor<fp32, [512, 128]> concat_29 = const()[name = tensor<string, []>("concat_29"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4119808)))];
|
| 155 |
+
tensor<int32, [2]> split_30_split_sizes_0 = const()[name = tensor<string, []>("split_30_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
|
| 156 |
+
tensor<int32, []> split_30_axis_0 = const()[name = tensor<string, []>("split_30_axis_0"), val = tensor<int32, []>(0)];
|
| 157 |
+
tensor<fp32, [1, ?, 128]> split_30_0, tensor<fp32, [1, ?, 128]> split_30_1 = split(axis = split_30_axis_0, split_sizes = split_30_split_sizes_0, x = split_0_2)[name = tensor<string, []>("split_30")];
|
| 158 |
+
tensor<int32, []> concat_30_axis_0 = const()[name = tensor<string, []>("concat_30_axis_0"), val = tensor<int32, []>(2)];
|
| 159 |
+
tensor<bool, []> concat_30_interleave_0 = const()[name = tensor<string, []>("concat_30_interleave_0"), val = tensor<bool, []>(false)];
|
| 160 |
+
tensor<fp32, [1, ?, 256]> concat_30 = concat(axis = concat_30_axis_0, interleave = concat_30_interleave_0, values = (split_30_0, split_30_1))[name = tensor<string, []>("concat_30")];
|
| 161 |
+
tensor<int32, [1]> input_25_lstm_layer_2_lstm_h0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_lstm_h0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
|
| 162 |
+
tensor<fp32, [?, 256]> input_25_lstm_layer_2_lstm_h0_reshaped = squeeze(axes = input_25_lstm_layer_2_lstm_h0_reshaped_axes_0, x = concat_30)[name = tensor<string, []>("input_25_lstm_layer_2_lstm_h0_reshaped")];
|
| 163 |
+
tensor<int32, [2]> split_31_split_sizes_0 = const()[name = tensor<string, []>("split_31_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
|
| 164 |
+
tensor<int32, []> split_31_axis_0 = const()[name = tensor<string, []>("split_31_axis_0"), val = tensor<int32, []>(0)];
|
| 165 |
+
tensor<fp32, [1, ?, 128]> split_31_0, tensor<fp32, [1, ?, 128]> split_31_1 = split(axis = split_31_axis_0, split_sizes = split_31_split_sizes_0, x = split_1_2)[name = tensor<string, []>("split_31")];
|
| 166 |
+
tensor<int32, []> concat_31_axis_0 = const()[name = tensor<string, []>("concat_31_axis_0"), val = tensor<int32, []>(2)];
|
| 167 |
+
tensor<bool, []> concat_31_interleave_0 = const()[name = tensor<string, []>("concat_31_interleave_0"), val = tensor<bool, []>(false)];
|
| 168 |
+
tensor<fp32, [1, ?, 256]> concat_31 = concat(axis = concat_31_axis_0, interleave = concat_31_interleave_0, values = (split_31_0, split_31_1))[name = tensor<string, []>("concat_31")];
|
| 169 |
+
tensor<int32, [1]> input_25_lstm_layer_2_lstm_c0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_lstm_c0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
|
| 170 |
+
tensor<fp32, [?, 256]> input_25_lstm_layer_2_lstm_c0_reshaped = squeeze(axes = input_25_lstm_layer_2_lstm_c0_reshaped_axes_0, x = concat_31)[name = tensor<string, []>("input_25_lstm_layer_2_lstm_c0_reshaped")];
|
| 171 |
+
tensor<string, []> input_25_lstm_layer_2_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_direction_0"), val = tensor<string, []>("bidirectional")];
|
| 172 |
+
tensor<bool, []> input_25_lstm_layer_2_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_output_sequence_0"), val = tensor<bool, []>(true)];
|
| 173 |
+
tensor<string, []> input_25_lstm_layer_2_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
|
| 174 |
+
tensor<string, []> input_25_lstm_layer_2_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_cell_activation_0"), val = tensor<string, []>("tanh")];
|
| 175 |
+
tensor<string, []> input_25_lstm_layer_2_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_activation_0"), val = tensor<string, []>("tanh")];
|
| 176 |
+
tensor<fp32, [589, ?, 256]> input_25_lstm_layer_2_0, tensor<fp32, [?, 256]> input_25_lstm_layer_2_1, tensor<fp32, [?, 256]> input_25_lstm_layer_2_2 = lstm(activation = input_25_lstm_layer_2_activation_0, bias = add_4, bias_back = add_5, cell_activation = input_25_lstm_layer_2_cell_activation_0, direction = input_25_lstm_layer_2_direction_0, initial_c = input_25_lstm_layer_2_lstm_c0_reshaped, initial_h = input_25_lstm_layer_2_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_2_output_sequence_0, recurrent_activation = input_25_lstm_layer_2_recurrent_activation_0, weight_hh = concat_27, weight_hh_back = concat_29, weight_ih = concat_26, weight_ih_back = concat_28, x = input_25_lstm_layer_1_0)[name = tensor<string, []>("input_25_lstm_layer_2")];
|
| 177 |
+
tensor<fp32, [512]> add_6 = const()[name = tensor<string, []>("add_6"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4382016)))];
|
| 178 |
+
tensor<fp32, [512]> add_7 = const()[name = tensor<string, []>("add_7"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4384128)))];
|
| 179 |
+
tensor<fp32, [512, 256]> concat_36 = const()[name = tensor<string, []>("concat_36"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4386240)))];
|
| 180 |
+
tensor<fp32, [512, 128]> concat_37 = const()[name = tensor<string, []>("concat_37"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4910592)))];
|
| 181 |
+
tensor<fp32, [512, 256]> concat_38 = const()[name = tensor<string, []>("concat_38"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5172800)))];
|
| 182 |
+
tensor<fp32, [512, 128]> concat_39 = const()[name = tensor<string, []>("concat_39"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5697152)))];
|
| 183 |
+
tensor<int32, [2]> split_40_split_sizes_0 = const()[name = tensor<string, []>("split_40_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
|
| 184 |
+
tensor<int32, []> split_40_axis_0 = const()[name = tensor<string, []>("split_40_axis_0"), val = tensor<int32, []>(0)];
|
| 185 |
+
tensor<fp32, [1, ?, 128]> split_40_0, tensor<fp32, [1, ?, 128]> split_40_1 = split(axis = split_40_axis_0, split_sizes = split_40_split_sizes_0, x = split_0_3)[name = tensor<string, []>("split_40")];
|
| 186 |
+
tensor<int32, []> concat_40_axis_0 = const()[name = tensor<string, []>("concat_40_axis_0"), val = tensor<int32, []>(2)];
|
| 187 |
+
tensor<bool, []> concat_40_interleave_0 = const()[name = tensor<string, []>("concat_40_interleave_0"), val = tensor<bool, []>(false)];
|
| 188 |
+
tensor<fp32, [1, ?, 256]> concat_40 = concat(axis = concat_40_axis_0, interleave = concat_40_interleave_0, values = (split_40_0, split_40_1))[name = tensor<string, []>("concat_40")];
|
| 189 |
+
tensor<int32, [1]> input_25_batch_first_lstm_h0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_batch_first_lstm_h0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
|
| 190 |
+
tensor<fp32, [?, 256]> input_25_batch_first_lstm_h0_reshaped = squeeze(axes = input_25_batch_first_lstm_h0_reshaped_axes_0, x = concat_40)[name = tensor<string, []>("input_25_batch_first_lstm_h0_reshaped")];
|
| 191 |
+
tensor<int32, [2]> split_41_split_sizes_0 = const()[name = tensor<string, []>("split_41_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
|
| 192 |
+
tensor<int32, []> split_41_axis_0 = const()[name = tensor<string, []>("split_41_axis_0"), val = tensor<int32, []>(0)];
|
| 193 |
+
tensor<fp32, [1, ?, 128]> split_41_0, tensor<fp32, [1, ?, 128]> split_41_1 = split(axis = split_41_axis_0, split_sizes = split_41_split_sizes_0, x = split_1_3)[name = tensor<string, []>("split_41")];
|
| 194 |
+
tensor<int32, []> concat_41_axis_0 = const()[name = tensor<string, []>("concat_41_axis_0"), val = tensor<int32, []>(2)];
|
| 195 |
+
tensor<bool, []> concat_41_interleave_0 = const()[name = tensor<string, []>("concat_41_interleave_0"), val = tensor<bool, []>(false)];
|
| 196 |
+
tensor<fp32, [1, ?, 256]> concat_41 = concat(axis = concat_41_axis_0, interleave = concat_41_interleave_0, values = (split_41_0, split_41_1))[name = tensor<string, []>("concat_41")];
|
| 197 |
+
tensor<int32, [1]> input_25_batch_first_lstm_c0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_batch_first_lstm_c0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
|
| 198 |
+
tensor<fp32, [?, 256]> input_25_batch_first_lstm_c0_reshaped = squeeze(axes = input_25_batch_first_lstm_c0_reshaped_axes_0, x = concat_41)[name = tensor<string, []>("input_25_batch_first_lstm_c0_reshaped")];
|
| 199 |
+
tensor<string, []> input_25_batch_first_direction_0 = const()[name = tensor<string, []>("input_25_batch_first_direction_0"), val = tensor<string, []>("bidirectional")];
|
| 200 |
+
tensor<bool, []> input_25_batch_first_output_sequence_0 = const()[name = tensor<string, []>("input_25_batch_first_output_sequence_0"), val = tensor<bool, []>(true)];
|
| 201 |
+
tensor<string, []> input_25_batch_first_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
|
| 202 |
+
tensor<string, []> input_25_batch_first_cell_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_cell_activation_0"), val = tensor<string, []>("tanh")];
|
| 203 |
+
tensor<string, []> input_25_batch_first_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_activation_0"), val = tensor<string, []>("tanh")];
|
| 204 |
+
tensor<fp32, [589, ?, 256]> input_25_batch_first_0, tensor<fp32, [?, 256]> input_25_batch_first_1, tensor<fp32, [?, 256]> input_25_batch_first_2 = lstm(activation = input_25_batch_first_activation_0, bias = add_6, bias_back = add_7, cell_activation = input_25_batch_first_cell_activation_0, direction = input_25_batch_first_direction_0, initial_c = input_25_batch_first_lstm_c0_reshaped, initial_h = input_25_batch_first_lstm_h0_reshaped, output_sequence = input_25_batch_first_output_sequence_0, recurrent_activation = input_25_batch_first_recurrent_activation_0, weight_hh = concat_37, weight_hh_back = concat_39, weight_ih = concat_36, weight_ih_back = concat_38, x = input_25_lstm_layer_2_0)[name = tensor<string, []>("input_25_batch_first")];
|
| 205 |
+
tensor<int32, [3]> input_25_perm_0 = const()[name = tensor<string, []>("input_25_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
|
| 206 |
+
tensor<fp32, [?, 589, 256]> input_25 = transpose(perm = input_25_perm_0, x = input_25_batch_first_0)[name = tensor<string, []>("transpose_4")];
|
| 207 |
+
tensor<fp32, [?, 589, 128]> input_27 = linear(bias = linear_0_bias, weight = linear_0_weight, x = input_25)[name = tensor<string, []>("linear_0")];
|
| 208 |
+
tensor<fp32, []> var_220 = const()[name = tensor<string, []>("op_220"), val = tensor<fp32, []>(0x1.47ae14p-7)];
|
| 209 |
+
tensor<fp32, [?, 589, 128]> input_29 = leaky_relu(alpha = var_220, x = input_27)[name = tensor<string, []>("input_29")];
|
| 210 |
+
tensor<fp32, [?, 589, 128]> input_31 = linear(bias = linear_1_bias, weight = linear_1_weight, x = input_29)[name = tensor<string, []>("linear_1")];
|
| 211 |
+
tensor<fp32, []> var_225 = const()[name = tensor<string, []>("op_225"), val = tensor<fp32, []>(0x1.47ae14p-7)];
|
| 212 |
+
tensor<fp32, [?, 589, 128]> input_33 = leaky_relu(alpha = var_225, x = input_31)[name = tensor<string, []>("input_33")];
|
| 213 |
+
tensor<fp32, [?, 589, 7]> input = linear(bias = classifier_bias, weight = classifier_weight, x = input_33)[name = tensor<string, []>("linear_2")];
|
| 214 |
+
tensor<int32, []> var_231 = const()[name = tensor<string, []>("op_231"), val = tensor<int32, []>(-1)];
|
| 215 |
+
tensor<fp32, [?, 589, 7]> var_232_softmax = softmax(axis = var_231, x = input)[name = tensor<string, []>("op_232_softmax")];
|
| 216 |
+
tensor<fp32, []> var_232_epsilon_0 = const()[name = tensor<string, []>("op_232_epsilon_0"), val = tensor<fp32, []>(0x1p-149)];
|
| 217 |
+
tensor<fp32, [?, 589, 7]> log_probs = log(epsilon = var_232_epsilon_0, x = var_232_softmax)[name = tensor<string, []>("op_232")];
|
| 218 |
+
} -> (log_probs);
|
| 219 |
+
}
|
Segmentation.mlmodelc/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c3189a64946c75bc24fcb98afe89ad78c52bdbadfdf65e857fb1b81e2cc9fbb2
|
| 3 |
+
size 5959360
|
config.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{}
|
latency_timeseries.png
ADDED
|
Git LFS Details
|
metrics_timeseries.png
ADDED
|
Git LFS Details
|
mlpackages/Embedding.mlpackage/Data/com.apple.CoreML/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:99356b2985b8d43880a657024d941d450b38820451ccff903f76ed4e52d1868b
|
| 3 |
+
size 13412288
|
mlpackages/Embedding.mlpackage/Manifest.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"fileFormatVersion": "1.0.0",
|
| 3 |
+
"itemInfoEntries": {
|
| 4 |
+
"DA2168C1-B6B3-4CC5-A25E-52ACC35661D9": {
|
| 5 |
+
"author": "com.apple.CoreML",
|
| 6 |
+
"description": "CoreML Model Weights",
|
| 7 |
+
"name": "weights",
|
| 8 |
+
"path": "com.apple.CoreML/weights"
|
| 9 |
+
},
|
| 10 |
+
"DB1E857E-AF95-4682-8517-9FC174EEB644": {
|
| 11 |
+
"author": "com.apple.CoreML",
|
| 12 |
+
"description": "CoreML Model Specification",
|
| 13 |
+
"name": "model.mlmodel",
|
| 14 |
+
"path": "com.apple.CoreML/model.mlmodel"
|
| 15 |
+
}
|
| 16 |
+
},
|
| 17 |
+
"rootModelIdentifier": "DB1E857E-AF95-4682-8517-9FC174EEB644"
|
| 18 |
+
}
|
mlpackages/Fbank.mlpackage/Manifest.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"fileFormatVersion": "1.0.0",
|
| 3 |
+
"itemInfoEntries": {
|
| 4 |
+
"2ED4FB0D-3597-4106-B4DE-47FA8F437F96": {
|
| 5 |
+
"author": "com.apple.CoreML",
|
| 6 |
+
"description": "CoreML Model Weights",
|
| 7 |
+
"name": "weights",
|
| 8 |
+
"path": "com.apple.CoreML/weights"
|
| 9 |
+
},
|
| 10 |
+
"D6E498F6-7781-4907-ABC8-DA4F1C8E03BD": {
|
| 11 |
+
"author": "com.apple.CoreML",
|
| 12 |
+
"description": "CoreML Model Specification",
|
| 13 |
+
"name": "model.mlmodel",
|
| 14 |
+
"path": "com.apple.CoreML/model.mlmodel"
|
| 15 |
+
}
|
| 16 |
+
},
|
| 17 |
+
"rootModelIdentifier": "D6E498F6-7781-4907-ABC8-DA4F1C8E03BD"
|
| 18 |
+
}
|
mlpackages/PldaRho.mlpackage/Manifest.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"fileFormatVersion": "1.0.0",
|
| 3 |
+
"itemInfoEntries": {
|
| 4 |
+
"24FF4CF7-C6A0-4924-866E-BF4CA046DCA6": {
|
| 5 |
+
"author": "com.apple.CoreML",
|
| 6 |
+
"description": "CoreML Model Weights",
|
| 7 |
+
"name": "weights",
|
| 8 |
+
"path": "com.apple.CoreML/weights"
|
| 9 |
+
},
|
| 10 |
+
"4D333B44-A04E-4369-BAD1-2D9EA4032C46": {
|
| 11 |
+
"author": "com.apple.CoreML",
|
| 12 |
+
"description": "CoreML Model Specification",
|
| 13 |
+
"name": "model.mlmodel",
|
| 14 |
+
"path": "com.apple.CoreML/model.mlmodel"
|
| 15 |
+
}
|
| 16 |
+
},
|
| 17 |
+
"rootModelIdentifier": "4D333B44-A04E-4369-BAD1-2D9EA4032C46"
|
| 18 |
+
}
|
mlpackages/Segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0026d3483c74bc989fdd1649c5765ca5395235a6d140a698a2d87b95cddf56ae
|
| 3 |
+
size 2981120
|
mlpackages/Segmentation.mlpackage/Manifest.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"fileFormatVersion": "1.0.0",
|
| 3 |
+
"itemInfoEntries": {
|
| 4 |
+
"F3D13EE3-12DD-47C9-B314-D5151BC27D14": {
|
| 5 |
+
"author": "com.apple.CoreML",
|
| 6 |
+
"description": "CoreML Model Specification",
|
| 7 |
+
"name": "model.mlmodel",
|
| 8 |
+
"path": "com.apple.CoreML/model.mlmodel"
|
| 9 |
+
},
|
| 10 |
+
"FDDA7263-4CD0-4C69-9383-E91745F0FA4A": {
|
| 11 |
+
"author": "com.apple.CoreML",
|
| 12 |
+
"description": "CoreML Model Weights",
|
| 13 |
+
"name": "weights",
|
| 14 |
+
"path": "com.apple.CoreML/weights"
|
| 15 |
+
}
|
| 16 |
+
},
|
| 17 |
+
"rootModelIdentifier": "F3D13EE3-12DD-47C9-B314-D5151BC27D14"
|
| 18 |
+
}
|
mlpackages/pyannote_segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0266f4ad4d843ecf31ef9220ad6b80616b3ec64a4404b64f3ea0371554e236ec
|
| 3 |
+
size 5734720
|
mlpackages/pyannote_segmentation.mlpackage/Manifest.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"fileFormatVersion": "1.0.0",
|
| 3 |
+
"itemInfoEntries": {
|
| 4 |
+
"83A0819E-7F2D-4DB4-B491-430EC19C3DD4": {
|
| 5 |
+
"author": "com.apple.CoreML",
|
| 6 |
+
"description": "CoreML Model Specification",
|
| 7 |
+
"name": "model.mlmodel",
|
| 8 |
+
"path": "com.apple.CoreML/model.mlmodel"
|
| 9 |
+
},
|
| 10 |
+
"A2C1DADF-F375-41F5-A4F7-4FFCA18AF631": {
|
| 11 |
+
"author": "com.apple.CoreML",
|
| 12 |
+
"description": "CoreML Model Weights",
|
| 13 |
+
"name": "weights",
|
| 14 |
+
"path": "com.apple.CoreML/weights"
|
| 15 |
+
}
|
| 16 |
+
},
|
| 17 |
+
"rootModelIdentifier": "83A0819E-7F2D-4DB4-B491-430EC19C3DD4"
|
| 18 |
+
}
|
mlpackages/wespeaker.mlpackage/Manifest.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"fileFormatVersion": "1.0.0",
|
| 3 |
+
"itemInfoEntries": {
|
| 4 |
+
"009DED40-0975-4516-8D97-1B4C1F2E0194": {
|
| 5 |
+
"author": "com.apple.CoreML",
|
| 6 |
+
"description": "CoreML Model Specification",
|
| 7 |
+
"name": "model.mlmodel",
|
| 8 |
+
"path": "com.apple.CoreML/model.mlmodel"
|
| 9 |
+
},
|
| 10 |
+
"7EADF76B-4665-4535-8666-2071B9C3CDB7": {
|
| 11 |
+
"author": "com.apple.CoreML",
|
| 12 |
+
"description": "CoreML Model Weights",
|
| 13 |
+
"name": "weights",
|
| 14 |
+
"path": "com.apple.CoreML/weights"
|
| 15 |
+
}
|
| 16 |
+
},
|
| 17 |
+
"rootModelIdentifier": "009DED40-0975-4516-8D97-1B4C1F2E0194"
|
| 18 |
+
}
|
pipeline_mps_timing.png
ADDED
|
Git LFS Details
|
pipeline_overview.png
ADDED
|
Git LFS Details
|
plda-parameters.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "plda_parameters",
|
| 3 |
+
"description": "PLDA mean, transform, and psi parameters for VBx clustering",
|
| 4 |
+
"license": "CC-BY-4.0",
|
| 5 |
+
"source": "plda/plda.npz",
|
| 6 |
+
"version": "pyannote-speaker-diarization-community-1",
|
| 7 |
+
"tensors": {
|
| 8 |
+
"mu": {
|
| 9 |
+
"shape": [
|
| 10 |
+
128
|
| 11 |
+
],
|
| 12 |
+
"dtype": "float32",
|
| 13 |
+
"layout": "row-major",
|
| 14 |
+
"data_base64": "zBgdPRxoGT+259A+zCq7PcLxkT2xnSw+1U8GPsdcaz1HgMu9xz3fPTXnqb1R4CA+2nMUPW3GwDsWXAE8KUUjvLBv37wVGmg8fh09PW6rrjweceC8HOmnPDIDFL0SwW+9EHt5PAlaDT1DRnQ8aW+HvZe0ljwNUrM7LwClvGjmVrzNBfY7Iq/fvCWgmTw66l884rEGPR/obLyT8oS78rhmOsMEbTx1U/y7ceh0vLrVhTsPngs9KNo2vOjeqzyp5Ua8YMtZvKnb/Dr9h8s8xbjmu6yUBL30gDG8SNNmPCFSZ7wCmco7tPqqPPGRFDyRCoy8GuWVPKN0ijwYXM47/kFbPNlLAzz+9aU8OYhHuNm3dTqePYi8Vk23u2PojbwFh9e8EleBvNQ2crww2Bs86HFkPBnDIDymm5G8JpCnOg8xMbwWyam6nmJNPKVciTxP/Qg72z0QvLMO2LxmcEw8bs2GuvYrfrwiUWS8j80OvAfgtrtBWcQ873f7OztJkjzu3tC7ynNsuz7Kprtf2ki7ztRVu7ZJv7yBbZ+8vnUBO9Oo1jsDgcM8UAQFPGNRLTycfGC8hP54vKA7Sju/Gkc8v+XmOyt+Ajxqozg76hh3us24B7spgM05mBb5OjP647vB8ha8oGSWO+2dLDxhZ5m8bt56OygLojuE7SI8DeOGO+BI2Do="
|
| 15 |
+
},
|
| 16 |
+
"tr": {
|
| 17 |
+
"shape": [
|
| 18 |
+
128,
|
| 19 |
+
128
|
| 20 |
+
],
|
| 21 |
+
"dtype": "float32",
|
| 22 |
+
"layout": "row-major",
|
| 23 |
+
"data_base64": "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"
|
| 24 |
+
},
|
| 25 |
+
"psi": {
|
| 26 |
+
"shape": [
|
| 27 |
+
128
|
| 28 |
+
],
|
| 29 |
+
"dtype": "float32",
|
| 30 |
+
"layout": "row-major",
|
| 31 |
+
"data_base64": "Hw/PQUJYKkGxHuNAY6u2QLqpqEC14Z9AwDyIQAl9gkCSSnlAaYpsQOOKaUAdVl5A2W5HQFooOUDzjDZACI0vQFC1LEAOIiNAVI8fQLf9FkA0PBRAhQYQQGQ3DUD3ZAdAaiYFQEHXAkC7+v8/WfT4P4Vb8z9mVe8/aKjsP3V26D+yH+I/nKTeP3zA2z8Vcdc/5GHRP8OI0D8Qa8o/wNXEP6wKwz8MvcA/0xy+P9U6uz9CBrs/5DG4PyywtD/CqLM/Pp+xPwpVrT//7as/k7WoPwlkpT+Ld6I/FlugPydUnj8ZgJs/oOWaP/PGmT9Ok5g/igWWPyIkkz8bPJI/y7yPP8qfjj/0Vow/6dKKP6qKiD+yDoc/wB+FPx9Jgz/RkoI/VWiBP40Ifj/xDns/TTN5P5x0dT/TtHM/qTxyP+FNbT8ITWs/6eJpP+IOaD/XdWc/dNRiPw9SYT/aiV8/q2NePzIIXj8J6Fs/QC5ZP2HjVD9bB1M/Tz1RP0dITT9QJ0w/uWdKP893ST+ZuEc//htFP/xzRD8nBkM/8nhBP/qxPz9fNTw/0ms7P4PGOT9G1zg/NtI0P8fRMz9PqzI/xVYwP/+oLD+wBSw/TIgqPzniKD/9/SY/R1olP4/WJD/rJSI/sUQhP65/Hz9Ruhw/az0cP3HZGj8P+Rk/v4EVP6jRET8="
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
}
|
plda_coreml.png
ADDED
|
Git LFS Details
|
plda_parity.png
ADDED
|
Git LFS Details
|
provenance.json
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"artifact_snapshot": "1ed7a662fdc7109e36d822db793ee6eebdaf8594",
|
| 3 |
+
"artifacts": [
|
| 4 |
+
{
|
| 5 |
+
"path": "Embedding.mlmodelc/analytics/coremldata.bin",
|
| 6 |
+
"sha256": "8d6706436639b53830b4dbe8aaf9c9a843f7f582d63e16f3cb8bb7c6ccd58682",
|
| 7 |
+
"size": 243,
|
| 8 |
+
"storage": "git-lfs"
|
| 9 |
+
},
|
| 10 |
+
{
|
| 11 |
+
"path": "Embedding.mlmodelc/coremldata.bin",
|
| 12 |
+
"sha256": "4a705bac27d151d9642f37609296042a15602a42253039e0921dc9e75da7e004",
|
| 13 |
+
"size": 704,
|
| 14 |
+
"storage": "git-lfs"
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"path": "Embedding.mlmodelc/metadata.json",
|
| 18 |
+
"sha256": "1854371eb6b438fb8aeac96afb45c999af7902581c06afdfcd7ff3cb1ce66be5",
|
| 19 |
+
"size": 2818,
|
| 20 |
+
"storage": "git"
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"path": "Embedding.mlmodelc/model.mil",
|
| 24 |
+
"sha256": "22fa958aef72a561c21f874a07cbdcd30fdf40ee961c0bc2fb67c119273b46d3",
|
| 25 |
+
"size": 78432,
|
| 26 |
+
"storage": "git"
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"path": "Embedding.mlmodelc/weights/weight.bin",
|
| 30 |
+
"sha256": "99356b2985b8d43880a657024d941d450b38820451ccff903f76ed4e52d1868b",
|
| 31 |
+
"size": 13412288,
|
| 32 |
+
"storage": "git-lfs"
|
| 33 |
+
},
|
| 34 |
+
{
|
| 35 |
+
"path": "FBank.mlmodelc/analytics/coremldata.bin",
|
| 36 |
+
"sha256": "0e8bd3a8b82ac123580989f490e4d9245127c535857630b543311268accc3f0a",
|
| 37 |
+
"size": 243,
|
| 38 |
+
"storage": "git-lfs"
|
| 39 |
+
},
|
| 40 |
+
{
|
| 41 |
+
"path": "FBank.mlmodelc/coremldata.bin",
|
| 42 |
+
"sha256": "57ac436bb0671cbb5527a339134d695f752eb77f7a18966b93c6835335595759",
|
| 43 |
+
"size": 853,
|
| 44 |
+
"storage": "git-lfs"
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
"path": "FBank.mlmodelc/metadata.json",
|
| 48 |
+
"sha256": "2623785f5d186893b82d01e84aa33a7704ef763c3309e02055f22dc9d871ce9a",
|
| 49 |
+
"size": 3409,
|
| 50 |
+
"storage": "git"
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"path": "FBank.mlmodelc/model.mil",
|
| 54 |
+
"sha256": "27aaeb21569e81bdbe2eef87789f50a37cfea800039bd134448a9417de2f30ed",
|
| 55 |
+
"size": 15667,
|
| 56 |
+
"storage": "git"
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"path": "FBank.mlmodelc/weights/weight.bin",
|
| 60 |
+
"sha256": "9e83fdd3ea78064b078069e4d9141603c61c47a27fd19e7e3142ff7476f8db36",
|
| 61 |
+
"size": 1776896,
|
| 62 |
+
"storage": "git-lfs"
|
| 63 |
+
},
|
| 64 |
+
{
|
| 65 |
+
"path": "PLDA.mlmodelc/analytics/coremldata.bin",
|
| 66 |
+
"sha256": "8e862420707c6fc86c5720adcbc811286235970cf5e0c5afdb7e10e03c937026",
|
| 67 |
+
"size": 243,
|
| 68 |
+
"storage": "git-lfs"
|
| 69 |
+
},
|
| 70 |
+
{
|
| 71 |
+
"path": "PLDA.mlmodelc/coremldata.bin",
|
| 72 |
+
"sha256": "3d5ddb4cf367ad23fb512587f751cddbe4cbf867f53c5395435e6719a6acfd20",
|
| 73 |
+
"size": 535,
|
| 74 |
+
"storage": "git-lfs"
|
| 75 |
+
},
|
| 76 |
+
{
|
| 77 |
+
"path": "PLDA.mlmodelc/metadata.json",
|
| 78 |
+
"sha256": "95eab9a4c9ceb9b16bd36d3eee5530796a0cf78153547088c6c40e9e43999b98",
|
| 79 |
+
"size": 1975,
|
| 80 |
+
"storage": "git"
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"path": "PLDA.mlmodelc/model.mil",
|
| 84 |
+
"sha256": "0c61b5f3fc8d482218ecf3f213ff42e40d6fc38265d3dcf5065da113974b25b8",
|
| 85 |
+
"size": 5088,
|
| 86 |
+
"storage": "git"
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"path": "PLDA.mlmodelc/weights/weight.bin",
|
| 90 |
+
"sha256": "566c14f27af4ef1a4bdfb8ea875adeedd7026a85e1026659f48a3d305d51de0c",
|
| 91 |
+
"size": 199616,
|
| 92 |
+
"storage": "git-lfs"
|
| 93 |
+
},
|
| 94 |
+
{
|
| 95 |
+
"path": "PldaRho.mlmodelc/analytics/coremldata.bin",
|
| 96 |
+
"sha256": "8940ea6044dbcbefa22da8cc41e0b485e1fb5ed89aecaf37c6e0c483a97ddcd7",
|
| 97 |
+
"size": 243,
|
| 98 |
+
"storage": "git-lfs"
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"path": "PldaRho.mlmodelc/coremldata.bin",
|
| 102 |
+
"sha256": "4d9741477f721c79b09fcdfe455110c4b7d4272e2de3496bf1729d966d3ee418",
|
| 103 |
+
"size": 763,
|
| 104 |
+
"storage": "git-lfs"
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"path": "PldaRho.mlmodelc/metadata.json",
|
| 108 |
+
"sha256": "b314cf25a93e46b4076883a6f5a2f8848b73c3851bd9d36074d067f35a1c7945",
|
| 109 |
+
"size": 2749,
|
| 110 |
+
"storage": "git"
|
| 111 |
+
},
|
| 112 |
+
{
|
| 113 |
+
"path": "PldaRho.mlmodelc/model.mil",
|
| 114 |
+
"sha256": "83aee2e5310d19b5f202aea97d07a0e12102556d1b32ef3ed08b36f7f9725041",
|
| 115 |
+
"size": 7613,
|
| 116 |
+
"storage": "git"
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"path": "PldaRho.mlmodelc/weights/weight.bin",
|
| 120 |
+
"sha256": "80f7d229202636d372428c90596f11a91545f07da77259f07153aaf225914a36",
|
| 121 |
+
"size": 200192,
|
| 122 |
+
"storage": "git-lfs"
|
| 123 |
+
},
|
| 124 |
+
{
|
| 125 |
+
"path": "Segmentation.mlmodelc/analytics/coremldata.bin",
|
| 126 |
+
"sha256": "64265f8e7ad41a5f68d630c15288c2499cca5892ad49e20096819cdeac004cdb",
|
| 127 |
+
"size": 243,
|
| 128 |
+
"storage": "git-lfs"
|
| 129 |
+
},
|
| 130 |
+
{
|
| 131 |
+
"path": "Segmentation.mlmodelc/coremldata.bin",
|
| 132 |
+
"sha256": "ea51481b8bd3e496ad3cf16f066ddaa37f20e8772eaac76b3393c28de20e06bc",
|
| 133 |
+
"size": 812,
|
| 134 |
+
"storage": "git-lfs"
|
| 135 |
+
},
|
| 136 |
+
{
|
| 137 |
+
"path": "Segmentation.mlmodelc/metadata.json",
|
| 138 |
+
"sha256": "88dbf0b07208fe142e1729c2b4c974ad3599fcb2ae5d5f18fce782b225384124",
|
| 139 |
+
"size": 3410,
|
| 140 |
+
"storage": "git"
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"path": "Segmentation.mlmodelc/model.mil",
|
| 144 |
+
"sha256": "d37e4ce30b406a6b34f765f769b9baed3178cc0c2b2e299c641daa43a052dd3f",
|
| 145 |
+
"size": 43063,
|
| 146 |
+
"storage": "git"
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"path": "Segmentation.mlmodelc/weights/weight.bin",
|
| 150 |
+
"sha256": "c3189a64946c75bc24fcb98afe89ad78c52bdbadfdf65e857fb1b81e2cc9fbb2",
|
| 151 |
+
"size": 5959360,
|
| 152 |
+
"storage": "git-lfs"
|
| 153 |
+
},
|
| 154 |
+
{
|
| 155 |
+
"path": "mlpackages/Embedding.mlpackage/Data/com.apple.CoreML/model.mlmodel",
|
| 156 |
+
"sha256": "5a4dd0101a27f5d9987005962deee3c1afc84485a1f1ae085054b07e5d1b0473",
|
| 157 |
+
"size": 65850,
|
| 158 |
+
"storage": "git-lfs"
|
| 159 |
+
},
|
| 160 |
+
{
|
| 161 |
+
"path": "mlpackages/Embedding.mlpackage/Data/com.apple.CoreML/weights/weight.bin",
|
| 162 |
+
"sha256": "99356b2985b8d43880a657024d941d450b38820451ccff903f76ed4e52d1868b",
|
| 163 |
+
"size": 13412288,
|
| 164 |
+
"storage": "git-lfs"
|
| 165 |
+
},
|
| 166 |
+
{
|
| 167 |
+
"path": "mlpackages/Embedding.mlpackage/Manifest.json",
|
| 168 |
+
"sha256": "d244a4616ead9bbaebad3c64f999f661af2933cfbcd1ebe12967ff64cb5bd541",
|
| 169 |
+
"size": 617,
|
| 170 |
+
"storage": "git"
|
| 171 |
+
},
|
| 172 |
+
{
|
| 173 |
+
"path": "mlpackages/Fbank.mlpackage/Data/com.apple.CoreML/model.mlmodel",
|
| 174 |
+
"sha256": "fcaf1807057637f7997fa6ee179dc660556ff4cd4812cd51a88c77fca0f25477",
|
| 175 |
+
"size": 12251,
|
| 176 |
+
"storage": "git-lfs"
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"path": "mlpackages/Fbank.mlpackage/Data/com.apple.CoreML/weights/weight.bin",
|
| 180 |
+
"sha256": "9e83fdd3ea78064b078069e4d9141603c61c47a27fd19e7e3142ff7476f8db36",
|
| 181 |
+
"size": 1776896,
|
| 182 |
+
"storage": "git-lfs"
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"path": "mlpackages/Fbank.mlpackage/Manifest.json",
|
| 186 |
+
"sha256": "f56064fcce8fcc8f45053efbe39e15fb3361c3a4e59db888b514396503fa3a3c",
|
| 187 |
+
"size": 617,
|
| 188 |
+
"storage": "git"
|
| 189 |
+
},
|
| 190 |
+
{
|
| 191 |
+
"path": "mlpackages/PldaRho.mlpackage/Data/com.apple.CoreML/model.mlmodel",
|
| 192 |
+
"sha256": "d55f388bb6a47dd3c50bf00098f887e40d40b46a5e32952c3e788280855a62ce",
|
| 193 |
+
"size": 6417,
|
| 194 |
+
"storage": "git-lfs"
|
| 195 |
+
},
|
| 196 |
+
{
|
| 197 |
+
"path": "mlpackages/PldaRho.mlpackage/Data/com.apple.CoreML/weights/weight.bin",
|
| 198 |
+
"sha256": "963b14f282150ec68d498cf4b15bd5e4129595610811862e0bed05f65b95a6de",
|
| 199 |
+
"size": 100352,
|
| 200 |
+
"storage": "git-lfs"
|
| 201 |
+
},
|
| 202 |
+
{
|
| 203 |
+
"path": "mlpackages/PldaRho.mlpackage/Manifest.json",
|
| 204 |
+
"sha256": "1f8e51802df3dfe9f784a98f8b7d841602126e67d6b6c89fb2e24b23f93f5ffd",
|
| 205 |
+
"size": 617,
|
| 206 |
+
"storage": "git"
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"path": "mlpackages/Segmentation.mlpackage/Data/com.apple.CoreML/model.mlmodel",
|
| 210 |
+
"sha256": "aa795d1977b785036f002f551bc073572e663b7da35c695a478158b84d3fd763",
|
| 211 |
+
"size": 38767,
|
| 212 |
+
"storage": "git-lfs"
|
| 213 |
+
},
|
| 214 |
+
{
|
| 215 |
+
"path": "mlpackages/Segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin",
|
| 216 |
+
"sha256": "0026d3483c74bc989fdd1649c5765ca5395235a6d140a698a2d87b95cddf56ae",
|
| 217 |
+
"size": 2981120,
|
| 218 |
+
"storage": "git-lfs"
|
| 219 |
+
},
|
| 220 |
+
{
|
| 221 |
+
"path": "mlpackages/Segmentation.mlpackage/Manifest.json",
|
| 222 |
+
"sha256": "fae4cc479536d097e5ba8eb03f3c8f4210366f7092a075186531c74530302afa",
|
| 223 |
+
"size": 617,
|
| 224 |
+
"storage": "git"
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"path": "plda-parameters.json",
|
| 228 |
+
"sha256": "38ee28d4269c076cef254ee760bbd811f0738a92e0f01f9699ad372828c5de8f",
|
| 229 |
+
"size": 89416,
|
| 230 |
+
"storage": "git"
|
| 231 |
+
},
|
| 232 |
+
{
|
| 233 |
+
"path": "xvector-transform.json",
|
| 234 |
+
"sha256": "f7cd5cc16e63e2d89db052a23018ecfc47a311998ed1e9e39838fbac65048688",
|
| 235 |
+
"size": 177499,
|
| 236 |
+
"storage": "git"
|
| 237 |
+
}
|
| 238 |
+
],
|
| 239 |
+
"conversion": {
|
| 240 |
+
"exact_historical_revision_verified": false,
|
| 241 |
+
"recorded_environment": {
|
| 242 |
+
"coremlc": "3500.32.1",
|
| 243 |
+
"coremltools": "9.0b1",
|
| 244 |
+
"mil": "3500.14.1",
|
| 245 |
+
"pyannote-audio": "4.0.0",
|
| 246 |
+
"python": "3.10.12",
|
| 247 |
+
"torch": "2.8.0"
|
| 248 |
+
},
|
| 249 |
+
"reference_repository": "https://github.com/FluidInference/mobius",
|
| 250 |
+
"reference_revision": "33fd6eab634966ae7db4d73da3376a90379642fb"
|
| 251 |
+
},
|
| 252 |
+
"generated_at": "2026-09-19T22:44:51Z",
|
| 253 |
+
"license": "CC-BY-4.0",
|
| 254 |
+
"limitations": [
|
| 255 |
+
"The exact upstream checkout used for the 2025 conversions was not recorded.",
|
| 256 |
+
"The public conversion commit postdates the converted artifacts and is a reference, not an attested historical build commit.",
|
| 257 |
+
"Segmentation and embedding were not rebuilt because the upstream gated-model terms have not been accepted by the release account."
|
| 258 |
+
],
|
| 259 |
+
"schema_version": 1,
|
| 260 |
+
"source": {
|
| 261 |
+
"exact_historical_revision_verified": false,
|
| 262 |
+
"files": [
|
| 263 |
+
{
|
| 264 |
+
"git_oid": "e3b91de5a5374fc40b556f9cc51317d280b4ea79",
|
| 265 |
+
"path": "segmentation/pytorch_model.bin",
|
| 266 |
+
"size": 5906507,
|
| 267 |
+
"verification": "upstream reference only"
|
| 268 |
+
},
|
| 269 |
+
{
|
| 270 |
+
"git_oid": "6347697826a1958253dd195fa296d8d97b8f6280",
|
| 271 |
+
"path": "embedding/pytorch_model.bin",
|
| 272 |
+
"size": 26646242,
|
| 273 |
+
"verification": "upstream reference only"
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"git_oid": "e61936ef2108eccdff801c440d5e3f6c6995aba4",
|
| 277 |
+
"path": "plda/plda.npz",
|
| 278 |
+
"sha256": "9b77bcd840692710dd3496f62ecfeed8d8e5f002fd991b785079b244eab7d255",
|
| 279 |
+
"size": 133852,
|
| 280 |
+
"verification": "exact tensor match"
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"git_oid": "b8079f30a35a68fe7d996bd7abc2170338ba6767",
|
| 284 |
+
"path": "plda/xvec_transform.npz",
|
| 285 |
+
"sha256": "325f1ce8e48f7e55e9c8aa47e05d2766b7c48c4b25b8de8dd751e7a4cc5fbe8f",
|
| 286 |
+
"size": 134376,
|
| 287 |
+
"verification": "exact tensor match"
|
| 288 |
+
}
|
| 289 |
+
],
|
| 290 |
+
"reference_revision": "3533c8cf8e369892e6b79ff1bf80f7b0286a54ee",
|
| 291 |
+
"repository": "pyannote/speaker-diarization-community-1"
|
| 292 |
+
},
|
| 293 |
+
"status": "historically-reconstructed"
|
| 294 |
+
}
|
pyannote_segmentation.mlmodelc/metadata.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"metadataOutputVersion" : "3.0",
|
| 4 |
+
"storagePrecision" : "Mixed (Float16, Float32)",
|
| 5 |
+
"outputSchema" : [
|
| 6 |
+
{
|
| 7 |
+
"hasShapeFlexibility" : "0",
|
| 8 |
+
"isOptional" : "0",
|
| 9 |
+
"dataType" : "Float32",
|
| 10 |
+
"formattedType" : "MultiArray (Float32 1 × 589 × 7)",
|
| 11 |
+
"shortDescription" : "",
|
| 12 |
+
"shape" : "[1, 589, 7]",
|
| 13 |
+
"name" : "segments",
|
| 14 |
+
"type" : "MultiArray"
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"modelParameters" : [
|
| 18 |
+
|
| 19 |
+
],
|
| 20 |
+
"specificationVersion" : 6,
|
| 21 |
+
"mlProgramOperationTypeHistogram" : {
|
| 22 |
+
"Abs" : 1,
|
| 23 |
+
"InstanceNorm" : 4,
|
| 24 |
+
"Cast" : 4,
|
| 25 |
+
"Conv" : 3,
|
| 26 |
+
"MaxPool" : 3,
|
| 27 |
+
"Lstm" : 4,
|
| 28 |
+
"Transpose" : 2,
|
| 29 |
+
"Linear" : 3,
|
| 30 |
+
"Softmax" : 1,
|
| 31 |
+
"Log" : 1,
|
| 32 |
+
"LeakyRelu" : 5
|
| 33 |
+
},
|
| 34 |
+
"computePrecision" : "Mixed (Float16, Float32, Int32)",
|
| 35 |
+
"isUpdatable" : "0",
|
| 36 |
+
"stateSchema" : [
|
| 37 |
+
|
| 38 |
+
],
|
| 39 |
+
"availability" : {
|
| 40 |
+
"macOS" : "12.0",
|
| 41 |
+
"tvOS" : "15.0",
|
| 42 |
+
"visionOS" : "1.0",
|
| 43 |
+
"watchOS" : "8.0",
|
| 44 |
+
"iOS" : "15.0",
|
| 45 |
+
"macCatalyst" : "15.0"
|
| 46 |
+
},
|
| 47 |
+
"modelType" : {
|
| 48 |
+
"name" : "MLModelType_mlProgram"
|
| 49 |
+
},
|
| 50 |
+
"userDefinedMetadata" : {
|
| 51 |
+
"com.github.apple.coremltools.source_dialect" : "TorchScript",
|
| 52 |
+
"com.github.apple.coremltools.source" : "torch==2.6.0",
|
| 53 |
+
"com.github.apple.coremltools.version" : "8.3.0"
|
| 54 |
+
},
|
| 55 |
+
"inputSchema" : [
|
| 56 |
+
{
|
| 57 |
+
"hasShapeFlexibility" : "0",
|
| 58 |
+
"isOptional" : "0",
|
| 59 |
+
"dataType" : "Float32",
|
| 60 |
+
"formattedType" : "MultiArray (Float32 1 × 1 × 160000)",
|
| 61 |
+
"shortDescription" : "",
|
| 62 |
+
"shape" : "[1, 1, 160000]",
|
| 63 |
+
"name" : "audio",
|
| 64 |
+
"type" : "MultiArray"
|
| 65 |
+
}
|
| 66 |
+
],
|
| 67 |
+
"generatedClassName" : "pyannote_segmentation",
|
| 68 |
+
"method" : "predict"
|
| 69 |
+
}
|
| 70 |
+
]
|
pyannote_segmentation.mlmodelc/model.mil
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
program(1.0)
|
| 2 |
+
[buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3402.3.2"}, {"coremlc-version", "3402.4.1"}, {"coremltools-component-torch", "2.6.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "8.3.0"}})]
|
| 3 |
+
{
|
| 4 |
+
func main<ios15>(tensor<fp32, [1, 1, 160000]> audio) {
|
| 5 |
+
tensor<string, []> audio_to_fp16_dtype_0 = const()[name = tensor<string, []>("audio_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
|
| 6 |
+
tensor<fp16, [1]> sincnet_wav_norm1d_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_wav_norm1d_weight_to_fp16"), val = tensor<fp16, [1]>([0x1.44p-7])];
|
| 7 |
+
tensor<fp16, [1]> sincnet_wav_norm1d_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_wav_norm1d_bias_to_fp16"), val = tensor<fp16, [1]>([0x1.734p-5])];
|
| 8 |
+
tensor<fp16, []> var_25_to_fp16 = const()[name = tensor<string, []>("op_25_to_fp16"), val = tensor<fp16, []>(0x1.5p-17)];
|
| 9 |
+
tensor<fp16, [1, 1, 160000]> audio_to_fp16 = cast(dtype = audio_to_fp16_dtype_0, x = audio)[name = tensor<string, []>("cast_19")];
|
| 10 |
+
tensor<fp16, [1, 1, 160000]> var_41_cast_fp16 = instance_norm(beta = sincnet_wav_norm1d_bias_to_fp16, epsilon = var_25_to_fp16, gamma = sincnet_wav_norm1d_weight_to_fp16, x = audio_to_fp16)[name = tensor<string, []>("op_41_cast_fp16")];
|
| 11 |
+
tensor<string, []> outputs_pad_type_0 = const()[name = tensor<string, []>("outputs_pad_type_0"), val = tensor<string, []>("valid")];
|
| 12 |
+
tensor<int32, [1]> outputs_strides_0 = const()[name = tensor<string, []>("outputs_strides_0"), val = tensor<int32, [1]>([10])];
|
| 13 |
+
tensor<int32, [2]> outputs_pad_0 = const()[name = tensor<string, []>("outputs_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 14 |
+
tensor<int32, [1]> outputs_dilations_0 = const()[name = tensor<string, []>("outputs_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 15 |
+
tensor<int32, []> outputs_groups_0 = const()[name = tensor<string, []>("outputs_groups_0"), val = tensor<int32, []>(1)];
|
| 16 |
+
tensor<fp16, [80, 1, 251]> var_113_to_fp16 = const()[name = tensor<string, []>("op_113_to_fp16"), val = tensor<fp16, [80, 1, 251]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
|
| 17 |
+
tensor<fp16, [1, 80, 15975]> outputs_cast_fp16 = conv(dilations = outputs_dilations_0, groups = outputs_groups_0, pad = outputs_pad_0, pad_type = outputs_pad_type_0, strides = outputs_strides_0, weight = var_113_to_fp16, x = var_41_cast_fp16)[name = tensor<string, []>("outputs_cast_fp16")];
|
| 18 |
+
tensor<fp16, [1, 80, 15975]> input_1_cast_fp16 = abs(x = outputs_cast_fp16)[name = tensor<string, []>("input_1_cast_fp16")];
|
| 19 |
+
tensor<int32, [1]> var_118 = const()[name = tensor<string, []>("op_118"), val = tensor<int32, [1]>([3])];
|
| 20 |
+
tensor<int32, [1]> var_119 = const()[name = tensor<string, []>("op_119"), val = tensor<int32, [1]>([3])];
|
| 21 |
+
tensor<string, []> input_3_pad_type_0 = const()[name = tensor<string, []>("input_3_pad_type_0"), val = tensor<string, []>("custom")];
|
| 22 |
+
tensor<int32, [2]> input_3_pad_0 = const()[name = tensor<string, []>("input_3_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 23 |
+
tensor<bool, []> input_3_ceil_mode_0 = const()[name = tensor<string, []>("input_3_ceil_mode_0"), val = tensor<bool, []>(false)];
|
| 24 |
+
tensor<fp16, [1, 80, 5325]> input_3_cast_fp16 = max_pool(ceil_mode = input_3_ceil_mode_0, kernel_sizes = var_118, pad = input_3_pad_0, pad_type = input_3_pad_type_0, strides = var_119, x = input_1_cast_fp16)[name = tensor<string, []>("input_3_cast_fp16")];
|
| 25 |
+
tensor<fp16, [80]> sincnet_norm1d_0_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_0_weight_to_fp16"), val = tensor<fp16, [80]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(40320)))];
|
| 26 |
+
tensor<fp16, [80]> sincnet_norm1d_0_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_0_bias_to_fp16"), val = tensor<fp16, [80]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(40576)))];
|
| 27 |
+
tensor<fp16, [1, 80, 5325]> input_5_cast_fp16 = instance_norm(beta = sincnet_norm1d_0_bias_to_fp16, epsilon = var_25_to_fp16, gamma = sincnet_norm1d_0_weight_to_fp16, x = input_3_cast_fp16)[name = tensor<string, []>("input_5_cast_fp16")];
|
| 28 |
+
tensor<fp16, []> var_9_to_fp16 = const()[name = tensor<string, []>("op_9_to_fp16"), val = tensor<fp16, []>(0x1.47cp-7)];
|
| 29 |
+
tensor<fp16, [1, 80, 5325]> input_7_cast_fp16 = leaky_relu(alpha = var_9_to_fp16, x = input_5_cast_fp16)[name = tensor<string, []>("input_7_cast_fp16")];
|
| 30 |
+
tensor<string, []> input_9_pad_type_0 = const()[name = tensor<string, []>("input_9_pad_type_0"), val = tensor<string, []>("valid")];
|
| 31 |
+
tensor<int32, [1]> input_9_strides_0 = const()[name = tensor<string, []>("input_9_strides_0"), val = tensor<int32, [1]>([1])];
|
| 32 |
+
tensor<int32, [2]> input_9_pad_0 = const()[name = tensor<string, []>("input_9_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 33 |
+
tensor<int32, [1]> input_9_dilations_0 = const()[name = tensor<string, []>("input_9_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 34 |
+
tensor<int32, []> input_9_groups_0 = const()[name = tensor<string, []>("input_9_groups_0"), val = tensor<int32, []>(1)];
|
| 35 |
+
tensor<fp16, [60, 80, 5]> sincnet_conv1d_1_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_conv1d_1_weight_to_fp16"), val = tensor<fp16, [60, 80, 5]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(40832)))];
|
| 36 |
+
tensor<fp16, [60]> sincnet_conv1d_1_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_conv1d_1_bias_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(88896)))];
|
| 37 |
+
tensor<fp16, [1, 60, 5321]> input_9_cast_fp16 = conv(bias = sincnet_conv1d_1_bias_to_fp16, dilations = input_9_dilations_0, groups = input_9_groups_0, pad = input_9_pad_0, pad_type = input_9_pad_type_0, strides = input_9_strides_0, weight = sincnet_conv1d_1_weight_to_fp16, x = input_7_cast_fp16)[name = tensor<string, []>("input_9_cast_fp16")];
|
| 38 |
+
tensor<int32, [1]> var_134 = const()[name = tensor<string, []>("op_134"), val = tensor<int32, [1]>([3])];
|
| 39 |
+
tensor<int32, [1]> var_135 = const()[name = tensor<string, []>("op_135"), val = tensor<int32, [1]>([3])];
|
| 40 |
+
tensor<string, []> input_11_pad_type_0 = const()[name = tensor<string, []>("input_11_pad_type_0"), val = tensor<string, []>("custom")];
|
| 41 |
+
tensor<int32, [2]> input_11_pad_0 = const()[name = tensor<string, []>("input_11_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 42 |
+
tensor<bool, []> input_11_ceil_mode_0 = const()[name = tensor<string, []>("input_11_ceil_mode_0"), val = tensor<bool, []>(false)];
|
| 43 |
+
tensor<fp16, [1, 60, 1773]> input_11_cast_fp16 = max_pool(ceil_mode = input_11_ceil_mode_0, kernel_sizes = var_134, pad = input_11_pad_0, pad_type = input_11_pad_type_0, strides = var_135, x = input_9_cast_fp16)[name = tensor<string, []>("input_11_cast_fp16")];
|
| 44 |
+
tensor<fp16, [60]> sincnet_norm1d_1_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_1_weight_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(89088)))];
|
| 45 |
+
tensor<fp16, [60]> sincnet_norm1d_1_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_1_bias_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(89280)))];
|
| 46 |
+
tensor<fp16, [1, 60, 1773]> input_13_cast_fp16 = instance_norm(beta = sincnet_norm1d_1_bias_to_fp16, epsilon = var_25_to_fp16, gamma = sincnet_norm1d_1_weight_to_fp16, x = input_11_cast_fp16)[name = tensor<string, []>("input_13_cast_fp16")];
|
| 47 |
+
tensor<fp16, [1, 60, 1773]> input_15_cast_fp16 = leaky_relu(alpha = var_9_to_fp16, x = input_13_cast_fp16)[name = tensor<string, []>("input_15_cast_fp16")];
|
| 48 |
+
tensor<string, []> input_17_pad_type_0 = const()[name = tensor<string, []>("input_17_pad_type_0"), val = tensor<string, []>("valid")];
|
| 49 |
+
tensor<int32, [1]> input_17_strides_0 = const()[name = tensor<string, []>("input_17_strides_0"), val = tensor<int32, [1]>([1])];
|
| 50 |
+
tensor<int32, [2]> input_17_pad_0 = const()[name = tensor<string, []>("input_17_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 51 |
+
tensor<int32, [1]> input_17_dilations_0 = const()[name = tensor<string, []>("input_17_dilations_0"), val = tensor<int32, [1]>([1])];
|
| 52 |
+
tensor<int32, []> input_17_groups_0 = const()[name = tensor<string, []>("input_17_groups_0"), val = tensor<int32, []>(1)];
|
| 53 |
+
tensor<fp16, [60, 60, 5]> sincnet_conv1d_2_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_conv1d_2_weight_to_fp16"), val = tensor<fp16, [60, 60, 5]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(89472)))];
|
| 54 |
+
tensor<fp16, [60]> sincnet_conv1d_2_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_conv1d_2_bias_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(125568)))];
|
| 55 |
+
tensor<fp16, [1, 60, 1769]> input_17_cast_fp16 = conv(bias = sincnet_conv1d_2_bias_to_fp16, dilations = input_17_dilations_0, groups = input_17_groups_0, pad = input_17_pad_0, pad_type = input_17_pad_type_0, strides = input_17_strides_0, weight = sincnet_conv1d_2_weight_to_fp16, x = input_15_cast_fp16)[name = tensor<string, []>("input_17_cast_fp16")];
|
| 56 |
+
tensor<int32, [1]> var_150 = const()[name = tensor<string, []>("op_150"), val = tensor<int32, [1]>([3])];
|
| 57 |
+
tensor<int32, [1]> var_151 = const()[name = tensor<string, []>("op_151"), val = tensor<int32, [1]>([3])];
|
| 58 |
+
tensor<string, []> input_19_pad_type_0 = const()[name = tensor<string, []>("input_19_pad_type_0"), val = tensor<string, []>("custom")];
|
| 59 |
+
tensor<int32, [2]> input_19_pad_0 = const()[name = tensor<string, []>("input_19_pad_0"), val = tensor<int32, [2]>([0, 0])];
|
| 60 |
+
tensor<bool, []> input_19_ceil_mode_0 = const()[name = tensor<string, []>("input_19_ceil_mode_0"), val = tensor<bool, []>(false)];
|
| 61 |
+
tensor<fp16, [1, 60, 589]> input_19_cast_fp16 = max_pool(ceil_mode = input_19_ceil_mode_0, kernel_sizes = var_150, pad = input_19_pad_0, pad_type = input_19_pad_type_0, strides = var_151, x = input_17_cast_fp16)[name = tensor<string, []>("input_19_cast_fp16")];
|
| 62 |
+
tensor<fp16, [60]> sincnet_norm1d_2_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_2_weight_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(125760)))];
|
| 63 |
+
tensor<fp16, [60]> sincnet_norm1d_2_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_2_bias_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(125952)))];
|
| 64 |
+
tensor<fp16, [1, 60, 589]> input_21_cast_fp16 = instance_norm(beta = sincnet_norm1d_2_bias_to_fp16, epsilon = var_25_to_fp16, gamma = sincnet_norm1d_2_weight_to_fp16, x = input_19_cast_fp16)[name = tensor<string, []>("input_21_cast_fp16")];
|
| 65 |
+
tensor<fp16, [1, 60, 589]> x_cast_fp16 = leaky_relu(alpha = var_9_to_fp16, x = input_21_cast_fp16)[name = tensor<string, []>("x_cast_fp16")];
|
| 66 |
+
tensor<int32, [3]> transpose_4_perm_0 = const()[name = tensor<string, []>("transpose_4_perm_0"), val = tensor<int32, [3]>([2, 0, 1])];
|
| 67 |
+
tensor<string, []> transpose_4_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("transpose_4_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
|
| 68 |
+
tensor<fp32, [512]> add_0 = const()[name = tensor<string, []>("add_0"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(126144)))];
|
| 69 |
+
tensor<fp32, [512]> add_1 = const()[name = tensor<string, []>("add_1"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(128256)))];
|
| 70 |
+
tensor<fp32, [512, 60]> concat_4 = const()[name = tensor<string, []>("concat_4"), val = tensor<fp32, [512, 60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(130368)))];
|
| 71 |
+
tensor<fp32, [512, 128]> concat_5 = const()[name = tensor<string, []>("concat_5"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(253312)))];
|
| 72 |
+
tensor<fp32, [512, 60]> concat_6 = const()[name = tensor<string, []>("concat_6"), val = tensor<fp32, [512, 60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(515520)))];
|
| 73 |
+
tensor<fp32, [512, 128]> concat_7 = const()[name = tensor<string, []>("concat_7"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(638464)))];
|
| 74 |
+
tensor<fp32, [1, 256]> input_25_lstm_layer_0_lstm_h0_reshaped = const()[name = tensor<string, []>("input_25_lstm_layer_0_lstm_h0_reshaped"), val = tensor<fp32, [1, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(900672)))];
|
| 75 |
+
tensor<string, []> input_25_lstm_layer_0_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_direction_0"), val = tensor<string, []>("bidirectional")];
|
| 76 |
+
tensor<bool, []> input_25_lstm_layer_0_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_output_sequence_0"), val = tensor<bool, []>(true)];
|
| 77 |
+
tensor<string, []> input_25_lstm_layer_0_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
|
| 78 |
+
tensor<string, []> input_25_lstm_layer_0_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_cell_activation_0"), val = tensor<string, []>("tanh")];
|
| 79 |
+
tensor<string, []> input_25_lstm_layer_0_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_activation_0"), val = tensor<string, []>("tanh")];
|
| 80 |
+
tensor<fp16, [589, 1, 60]> transpose_4_cast_fp16 = transpose(perm = transpose_4_perm_0, x = x_cast_fp16)[name = tensor<string, []>("transpose_6")];
|
| 81 |
+
tensor<fp32, [589, 1, 60]> transpose_4_cast_fp16_to_fp32 = cast(dtype = transpose_4_cast_fp16_to_fp32_dtype_0, x = transpose_4_cast_fp16)[name = tensor<string, []>("cast_18")];
|
| 82 |
+
tensor<fp32, [589, 1, 256]> input_25_lstm_layer_0_0, tensor<fp32, [1, 256]> input_25_lstm_layer_0_1, tensor<fp32, [1, 256]> input_25_lstm_layer_0_2 = lstm(activation = input_25_lstm_layer_0_activation_0, bias = add_0, bias_back = add_1, cell_activation = input_25_lstm_layer_0_cell_activation_0, direction = input_25_lstm_layer_0_direction_0, initial_c = input_25_lstm_layer_0_lstm_h0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_0_output_sequence_0, recurrent_activation = input_25_lstm_layer_0_recurrent_activation_0, weight_hh = concat_5, weight_hh_back = concat_7, weight_ih = concat_4, weight_ih_back = concat_6, x = transpose_4_cast_fp16_to_fp32)[name = tensor<string, []>("input_25_lstm_layer_0")];
|
| 83 |
+
tensor<fp32, [512]> add_2 = const()[name = tensor<string, []>("add_2"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(901760)))];
|
| 84 |
+
tensor<fp32, [512]> add_3 = const()[name = tensor<string, []>("add_3"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(903872)))];
|
| 85 |
+
tensor<fp32, [512, 256]> concat_14 = const()[name = tensor<string, []>("concat_14"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(905984)))];
|
| 86 |
+
tensor<fp32, [512, 128]> concat_15 = const()[name = tensor<string, []>("concat_15"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1430336)))];
|
| 87 |
+
tensor<fp32, [512, 256]> concat_16 = const()[name = tensor<string, []>("concat_16"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1692544)))];
|
| 88 |
+
tensor<fp32, [512, 128]> concat_17 = const()[name = tensor<string, []>("concat_17"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2216896)))];
|
| 89 |
+
tensor<string, []> input_25_lstm_layer_1_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_direction_0"), val = tensor<string, []>("bidirectional")];
|
| 90 |
+
tensor<bool, []> input_25_lstm_layer_1_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_output_sequence_0"), val = tensor<bool, []>(true)];
|
| 91 |
+
tensor<string, []> input_25_lstm_layer_1_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
|
| 92 |
+
tensor<string, []> input_25_lstm_layer_1_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_cell_activation_0"), val = tensor<string, []>("tanh")];
|
| 93 |
+
tensor<string, []> input_25_lstm_layer_1_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_activation_0"), val = tensor<string, []>("tanh")];
|
| 94 |
+
tensor<fp32, [589, 1, 256]> input_25_lstm_layer_1_0, tensor<fp32, [1, 256]> input_25_lstm_layer_1_1, tensor<fp32, [1, 256]> input_25_lstm_layer_1_2 = lstm(activation = input_25_lstm_layer_1_activation_0, bias = add_2, bias_back = add_3, cell_activation = input_25_lstm_layer_1_cell_activation_0, direction = input_25_lstm_layer_1_direction_0, initial_c = input_25_lstm_layer_0_lstm_h0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_1_output_sequence_0, recurrent_activation = input_25_lstm_layer_1_recurrent_activation_0, weight_hh = concat_15, weight_hh_back = concat_17, weight_ih = concat_14, weight_ih_back = concat_16, x = input_25_lstm_layer_0_0)[name = tensor<string, []>("input_25_lstm_layer_1")];
|
| 95 |
+
tensor<fp32, [512]> add_4 = const()[name = tensor<string, []>("add_4"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2479104)))];
|
| 96 |
+
tensor<fp32, [512]> add_5 = const()[name = tensor<string, []>("add_5"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2481216)))];
|
| 97 |
+
tensor<fp32, [512, 256]> concat_24 = const()[name = tensor<string, []>("concat_24"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2483328)))];
|
| 98 |
+
tensor<fp32, [512, 128]> concat_25 = const()[name = tensor<string, []>("concat_25"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3007680)))];
|
| 99 |
+
tensor<fp32, [512, 256]> concat_26 = const()[name = tensor<string, []>("concat_26"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3269888)))];
|
| 100 |
+
tensor<fp32, [512, 128]> concat_27 = const()[name = tensor<string, []>("concat_27"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3794240)))];
|
| 101 |
+
tensor<string, []> input_25_lstm_layer_2_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_direction_0"), val = tensor<string, []>("bidirectional")];
|
| 102 |
+
tensor<bool, []> input_25_lstm_layer_2_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_output_sequence_0"), val = tensor<bool, []>(true)];
|
| 103 |
+
tensor<string, []> input_25_lstm_layer_2_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
|
| 104 |
+
tensor<string, []> input_25_lstm_layer_2_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_cell_activation_0"), val = tensor<string, []>("tanh")];
|
| 105 |
+
tensor<string, []> input_25_lstm_layer_2_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_activation_0"), val = tensor<string, []>("tanh")];
|
| 106 |
+
tensor<fp32, [589, 1, 256]> input_25_lstm_layer_2_0, tensor<fp32, [1, 256]> input_25_lstm_layer_2_1, tensor<fp32, [1, 256]> input_25_lstm_layer_2_2 = lstm(activation = input_25_lstm_layer_2_activation_0, bias = add_4, bias_back = add_5, cell_activation = input_25_lstm_layer_2_cell_activation_0, direction = input_25_lstm_layer_2_direction_0, initial_c = input_25_lstm_layer_0_lstm_h0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_2_output_sequence_0, recurrent_activation = input_25_lstm_layer_2_recurrent_activation_0, weight_hh = concat_25, weight_hh_back = concat_27, weight_ih = concat_24, weight_ih_back = concat_26, x = input_25_lstm_layer_1_0)[name = tensor<string, []>("input_25_lstm_layer_2")];
|
| 107 |
+
tensor<fp32, [512]> add_6 = const()[name = tensor<string, []>("add_6"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4056448)))];
|
| 108 |
+
tensor<fp32, [512]> add_7 = const()[name = tensor<string, []>("add_7"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4058560)))];
|
| 109 |
+
tensor<fp32, [512, 256]> concat_34 = const()[name = tensor<string, []>("concat_34"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4060672)))];
|
| 110 |
+
tensor<fp32, [512, 128]> concat_35 = const()[name = tensor<string, []>("concat_35"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4585024)))];
|
| 111 |
+
tensor<fp32, [512, 256]> concat_36 = const()[name = tensor<string, []>("concat_36"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4847232)))];
|
| 112 |
+
tensor<fp32, [512, 128]> concat_37 = const()[name = tensor<string, []>("concat_37"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5371584)))];
|
| 113 |
+
tensor<string, []> input_25_batch_first_direction_0 = const()[name = tensor<string, []>("input_25_batch_first_direction_0"), val = tensor<string, []>("bidirectional")];
|
| 114 |
+
tensor<bool, []> input_25_batch_first_output_sequence_0 = const()[name = tensor<string, []>("input_25_batch_first_output_sequence_0"), val = tensor<bool, []>(true)];
|
| 115 |
+
tensor<string, []> input_25_batch_first_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
|
| 116 |
+
tensor<string, []> input_25_batch_first_cell_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_cell_activation_0"), val = tensor<string, []>("tanh")];
|
| 117 |
+
tensor<string, []> input_25_batch_first_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_activation_0"), val = tensor<string, []>("tanh")];
|
| 118 |
+
tensor<fp32, [589, 1, 256]> input_25_batch_first_0, tensor<fp32, [1, 256]> input_25_batch_first_1, tensor<fp32, [1, 256]> input_25_batch_first_2 = lstm(activation = input_25_batch_first_activation_0, bias = add_6, bias_back = add_7, cell_activation = input_25_batch_first_cell_activation_0, direction = input_25_batch_first_direction_0, initial_c = input_25_lstm_layer_0_lstm_h0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_batch_first_output_sequence_0, recurrent_activation = input_25_batch_first_recurrent_activation_0, weight_hh = concat_35, weight_hh_back = concat_37, weight_ih = concat_34, weight_ih_back = concat_36, x = input_25_lstm_layer_2_0)[name = tensor<string, []>("input_25_batch_first")];
|
| 119 |
+
tensor<int32, [3]> input_25_perm_0 = const()[name = tensor<string, []>("input_25_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
|
| 120 |
+
tensor<string, []> input_25_batch_first_0_to_fp16_dtype_0 = const()[name = tensor<string, []>("input_25_batch_first_0_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
|
| 121 |
+
tensor<fp16, [128, 256]> linear_0_weight_to_fp16 = const()[name = tensor<string, []>("linear_0_weight_to_fp16"), val = tensor<fp16, [128, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5633792)))];
|
| 122 |
+
tensor<fp16, [128]> linear_0_bias_to_fp16 = const()[name = tensor<string, []>("linear_0_bias_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5699392)))];
|
| 123 |
+
tensor<fp16, [589, 1, 256]> input_25_batch_first_0_to_fp16 = cast(dtype = input_25_batch_first_0_to_fp16_dtype_0, x = input_25_batch_first_0)[name = tensor<string, []>("cast_17")];
|
| 124 |
+
tensor<fp16, [1, 589, 256]> input_25_cast_fp16 = transpose(perm = input_25_perm_0, x = input_25_batch_first_0_to_fp16)[name = tensor<string, []>("transpose_5")];
|
| 125 |
+
tensor<fp16, [1, 589, 128]> linear_0_cast_fp16 = linear(bias = linear_0_bias_to_fp16, weight = linear_0_weight_to_fp16, x = input_25_cast_fp16)[name = tensor<string, []>("linear_0_cast_fp16")];
|
| 126 |
+
tensor<fp16, []> var_219_to_fp16 = const()[name = tensor<string, []>("op_219_to_fp16"), val = tensor<fp16, []>(0x1.47cp-7)];
|
| 127 |
+
tensor<fp16, [1, 589, 128]> input_29_cast_fp16 = leaky_relu(alpha = var_219_to_fp16, x = linear_0_cast_fp16)[name = tensor<string, []>("input_29_cast_fp16")];
|
| 128 |
+
tensor<fp16, [128, 128]> linear_1_weight_to_fp16 = const()[name = tensor<string, []>("linear_1_weight_to_fp16"), val = tensor<fp16, [128, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5699712)))];
|
| 129 |
+
tensor<fp16, [128]> linear_1_bias_to_fp16 = const()[name = tensor<string, []>("linear_1_bias_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5732544)))];
|
| 130 |
+
tensor<fp16, [1, 589, 128]> linear_1_cast_fp16 = linear(bias = linear_1_bias_to_fp16, weight = linear_1_weight_to_fp16, x = input_29_cast_fp16)[name = tensor<string, []>("linear_1_cast_fp16")];
|
| 131 |
+
tensor<fp16, []> var_224_to_fp16 = const()[name = tensor<string, []>("op_224_to_fp16"), val = tensor<fp16, []>(0x1.47cp-7)];
|
| 132 |
+
tensor<fp16, [1, 589, 128]> input_33_cast_fp16 = leaky_relu(alpha = var_224_to_fp16, x = linear_1_cast_fp16)[name = tensor<string, []>("input_33_cast_fp16")];
|
| 133 |
+
tensor<fp16, [7, 128]> classifier_weight_to_fp16 = const()[name = tensor<string, []>("classifier_weight_to_fp16"), val = tensor<fp16, [7, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5732864)))];
|
| 134 |
+
tensor<fp16, [7]> classifier_bias_to_fp16 = const()[name = tensor<string, []>("classifier_bias_to_fp16"), val = tensor<fp16, [7]>([-0x1.01p+0, 0x1.67cp-2, 0x1.3d8p-1, 0x1.c8cp-2, -0x1.444p-2, -0x1.59p-1, -0x1.8fcp-2])];
|
| 135 |
+
tensor<fp16, [1, 589, 7]> linear_2_cast_fp16 = linear(bias = classifier_bias_to_fp16, weight = classifier_weight_to_fp16, x = input_33_cast_fp16)[name = tensor<string, []>("linear_2_cast_fp16")];
|
| 136 |
+
tensor<int32, []> var_230 = const()[name = tensor<string, []>("op_230"), val = tensor<int32, []>(-1)];
|
| 137 |
+
tensor<fp16, [1, 589, 7]> var_231_softmax_cast_fp16 = softmax(axis = var_230, x = linear_2_cast_fp16)[name = tensor<string, []>("op_231_softmax_cast_fp16")];
|
| 138 |
+
tensor<fp16, []> var_231_epsilon_0_to_fp16 = const()[name = tensor<string, []>("op_231_epsilon_0_to_fp16"), val = tensor<fp16, []>(0x0p+0)];
|
| 139 |
+
tensor<fp16, [1, 589, 7]> var_231_cast_fp16 = log(epsilon = var_231_epsilon_0_to_fp16, x = var_231_softmax_cast_fp16)[name = tensor<string, []>("op_231_cast_fp16")];
|
| 140 |
+
tensor<string, []> var_231_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("op_231_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
|
| 141 |
+
tensor<fp32, [1, 589, 7]> segments = cast(dtype = var_231_cast_fp16_to_fp32_dtype_0, x = var_231_cast_fp16)[name = tensor<string, []>("cast_16")];
|
| 142 |
+
} -> (segments);
|
| 143 |
+
}
|
wespeaker.mlmodelc/analytics/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6f79ae5563cd4807a2e10630ce8aac7bdc469e37d7c723acce06f54df75c1f21
|
| 3 |
+
size 243
|
wespeaker.mlmodelc/metadata.json
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"metadataOutputVersion" : "3.0",
|
| 4 |
+
"storagePrecision" : "Float32",
|
| 5 |
+
"outputSchema" : [
|
| 6 |
+
{
|
| 7 |
+
"hasShapeFlexibility" : "0",
|
| 8 |
+
"isOptional" : "0",
|
| 9 |
+
"dataType" : "Float32",
|
| 10 |
+
"formattedType" : "MultiArray (Float32)",
|
| 11 |
+
"shortDescription" : "",
|
| 12 |
+
"shape" : "[]",
|
| 13 |
+
"name" : "constant",
|
| 14 |
+
"type" : "MultiArray"
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"hasShapeFlexibility" : "0",
|
| 18 |
+
"isOptional" : "0",
|
| 19 |
+
"dataType" : "Float32",
|
| 20 |
+
"formattedType" : "MultiArray (Float32 3 × 256)",
|
| 21 |
+
"shortDescription" : "",
|
| 22 |
+
"shape" : "[3, 256]",
|
| 23 |
+
"name" : "embedding",
|
| 24 |
+
"type" : "MultiArray"
|
| 25 |
+
}
|
| 26 |
+
],
|
| 27 |
+
"modelParameters" : [
|
| 28 |
+
|
| 29 |
+
],
|
| 30 |
+
"specificationVersion" : 6,
|
| 31 |
+
"mlProgramOperationTypeHistogram" : {
|
| 32 |
+
"Transpose" : 4,
|
| 33 |
+
"Square" : 2,
|
| 34 |
+
"UpsampleNearestNeighbor" : 1,
|
| 35 |
+
"Squeeze" : 5,
|
| 36 |
+
"Sub" : 5,
|
| 37 |
+
"ReduceMean" : 2,
|
| 38 |
+
"Gather" : 2,
|
| 39 |
+
"Identity" : 1,
|
| 40 |
+
"Reshape" : 1,
|
| 41 |
+
"Matmul" : 2,
|
| 42 |
+
"Concat" : 1,
|
| 43 |
+
"Add" : 19,
|
| 44 |
+
"Sqrt" : 1,
|
| 45 |
+
"RealDiv" : 3,
|
| 46 |
+
"Pad" : 2,
|
| 47 |
+
"Linear" : 2,
|
| 48 |
+
"Relu" : 33,
|
| 49 |
+
"ExpandDims" : 11,
|
| 50 |
+
"Conv" : 36,
|
| 51 |
+
"Maximum" : 1,
|
| 52 |
+
"Log" : 1,
|
| 53 |
+
"SliceByIndex" : 1001,
|
| 54 |
+
"Stack" : 1,
|
| 55 |
+
"ReduceSum" : 4,
|
| 56 |
+
"Mul" : 8
|
| 57 |
+
},
|
| 58 |
+
"computePrecision" : "Mixed (Float32, Int32)",
|
| 59 |
+
"isUpdatable" : "0",
|
| 60 |
+
"stateSchema" : [
|
| 61 |
+
|
| 62 |
+
],
|
| 63 |
+
"availability" : {
|
| 64 |
+
"macOS" : "12.0",
|
| 65 |
+
"tvOS" : "15.0",
|
| 66 |
+
"visionOS" : "1.0",
|
| 67 |
+
"watchOS" : "8.0",
|
| 68 |
+
"iOS" : "15.0",
|
| 69 |
+
"macCatalyst" : "15.0"
|
| 70 |
+
},
|
| 71 |
+
"modelType" : {
|
| 72 |
+
"name" : "MLModelType_mlProgram"
|
| 73 |
+
},
|
| 74 |
+
"userDefinedMetadata" : {
|
| 75 |
+
"com.github.apple.coremltools.source_dialect" : "TorchScript",
|
| 76 |
+
"com.github.apple.coremltools.source" : "torch==2.6.0",
|
| 77 |
+
"com.github.apple.coremltools.version" : "8.3.0"
|
| 78 |
+
},
|
| 79 |
+
"inputSchema" : [
|
| 80 |
+
{
|
| 81 |
+
"hasShapeFlexibility" : "0",
|
| 82 |
+
"isOptional" : "0",
|
| 83 |
+
"dataType" : "Float32",
|
| 84 |
+
"formattedType" : "MultiArray (Float32 3 × 160000)",
|
| 85 |
+
"shortDescription" : "",
|
| 86 |
+
"shape" : "[3, 160000]",
|
| 87 |
+
"name" : "waveform",
|
| 88 |
+
"type" : "MultiArray"
|
| 89 |
+
},
|
| 90 |
+
{
|
| 91 |
+
"hasShapeFlexibility" : "0",
|
| 92 |
+
"isOptional" : "0",
|
| 93 |
+
"dataType" : "Float32",
|
| 94 |
+
"formattedType" : "MultiArray (Float32 3 × 589)",
|
| 95 |
+
"shortDescription" : "",
|
| 96 |
+
"shape" : "[3, 589]",
|
| 97 |
+
"name" : "mask",
|
| 98 |
+
"type" : "MultiArray"
|
| 99 |
+
}
|
| 100 |
+
],
|
| 101 |
+
"generatedClassName" : "wespeaker",
|
| 102 |
+
"method" : "predict"
|
| 103 |
+
}
|
| 104 |
+
]
|
wespeaker.mlmodelc/model.mil
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
wespeaker.mlmodelc/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:680837ec172d67c3197bba93800e1623eebfd35c3b17011802f5f98b8026a0aa
|
| 3 |
+
size 28706752
|
wespeaker_int8.mlmodelc/metadata.json
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"metadataOutputVersion" : "3.0",
|
| 4 |
+
"storagePrecision" : "Mixed (Float32, Palettized (8 bits))",
|
| 5 |
+
"outputSchema" : [
|
| 6 |
+
{
|
| 7 |
+
"hasShapeFlexibility" : "0",
|
| 8 |
+
"isOptional" : "0",
|
| 9 |
+
"dataType" : "Float32",
|
| 10 |
+
"formattedType" : "MultiArray (Float32)",
|
| 11 |
+
"shortDescription" : "",
|
| 12 |
+
"shape" : "[]",
|
| 13 |
+
"name" : "constant",
|
| 14 |
+
"type" : "MultiArray"
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"hasShapeFlexibility" : "0",
|
| 18 |
+
"isOptional" : "0",
|
| 19 |
+
"dataType" : "Float32",
|
| 20 |
+
"formattedType" : "MultiArray (Float32 3 × 256)",
|
| 21 |
+
"shortDescription" : "",
|
| 22 |
+
"shape" : "[3, 256]",
|
| 23 |
+
"name" : "embedding",
|
| 24 |
+
"type" : "MultiArray"
|
| 25 |
+
}
|
| 26 |
+
],
|
| 27 |
+
"modelParameters" : [
|
| 28 |
+
|
| 29 |
+
],
|
| 30 |
+
"specificationVersion" : 7,
|
| 31 |
+
"mlProgramOperationTypeHistogram" : {
|
| 32 |
+
"Transpose" : 4,
|
| 33 |
+
"UpsampleNearestNeighbor" : 1,
|
| 34 |
+
"Squeeze" : 5,
|
| 35 |
+
"Ios16.gather" : 2,
|
| 36 |
+
"Ios16.reduceMean" : 2,
|
| 37 |
+
"Ios16.linear" : 2,
|
| 38 |
+
"Ios16.add" : 19,
|
| 39 |
+
"Ios16.realDiv" : 3,
|
| 40 |
+
"Concat" : 1,
|
| 41 |
+
"Ios16.reduceSum" : 4,
|
| 42 |
+
"Ios16.square" : 2,
|
| 43 |
+
"Pad" : 2,
|
| 44 |
+
"Ios16.log" : 1,
|
| 45 |
+
"ExpandDims" : 11,
|
| 46 |
+
"Ios16.sub" : 5,
|
| 47 |
+
"Ios16.relu" : 33,
|
| 48 |
+
"Ios16.reshape" : 1,
|
| 49 |
+
"Ios16.constexprLutToDense" : 38,
|
| 50 |
+
"Ios16.matmul" : 2,
|
| 51 |
+
"SliceByIndex" : 1001,
|
| 52 |
+
"Stack" : 1,
|
| 53 |
+
"Ios16.maximum" : 1,
|
| 54 |
+
"Ios16.conv" : 36,
|
| 55 |
+
"Ios16.sqrt" : 1,
|
| 56 |
+
"Ios16.mul" : 8
|
| 57 |
+
},
|
| 58 |
+
"computePrecision" : "Mixed (Float32, Int32)",
|
| 59 |
+
"isUpdatable" : "0",
|
| 60 |
+
"stateSchema" : [
|
| 61 |
+
|
| 62 |
+
],
|
| 63 |
+
"availability" : {
|
| 64 |
+
"macOS" : "13.0",
|
| 65 |
+
"tvOS" : "16.0",
|
| 66 |
+
"visionOS" : "1.0",
|
| 67 |
+
"watchOS" : "9.0",
|
| 68 |
+
"iOS" : "16.0",
|
| 69 |
+
"macCatalyst" : "16.0"
|
| 70 |
+
},
|
| 71 |
+
"modelType" : {
|
| 72 |
+
"name" : "MLModelType_mlProgram"
|
| 73 |
+
},
|
| 74 |
+
"userDefinedMetadata" : {
|
| 75 |
+
"com.github.apple.coremltools.source_dialect" : "TorchScript",
|
| 76 |
+
"com.github.apple.coremltools.source" : "torch==2.6.0",
|
| 77 |
+
"com.github.apple.coremltools.version" : "8.3.0"
|
| 78 |
+
},
|
| 79 |
+
"inputSchema" : [
|
| 80 |
+
{
|
| 81 |
+
"hasShapeFlexibility" : "0",
|
| 82 |
+
"isOptional" : "0",
|
| 83 |
+
"dataType" : "Float32",
|
| 84 |
+
"formattedType" : "MultiArray (Float32 3 × 160000)",
|
| 85 |
+
"shortDescription" : "",
|
| 86 |
+
"shape" : "[3, 160000]",
|
| 87 |
+
"name" : "waveform",
|
| 88 |
+
"type" : "MultiArray"
|
| 89 |
+
},
|
| 90 |
+
{
|
| 91 |
+
"hasShapeFlexibility" : "0",
|
| 92 |
+
"isOptional" : "0",
|
| 93 |
+
"dataType" : "Float32",
|
| 94 |
+
"formattedType" : "MultiArray (Float32 3 × 589)",
|
| 95 |
+
"shortDescription" : "",
|
| 96 |
+
"shape" : "[3, 589]",
|
| 97 |
+
"name" : "mask",
|
| 98 |
+
"type" : "MultiArray"
|
| 99 |
+
}
|
| 100 |
+
],
|
| 101 |
+
"generatedClassName" : "wespeaker_int8",
|
| 102 |
+
"method" : "predict"
|
| 103 |
+
}
|
| 104 |
+
]
|
wespeaker_int8.mlmodelc/model.mil
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
wespeaker_v2.mlmodelc/analytics/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d2b1fcde6121aea3ff0e14c1dc50d09dacb0314a2e89156353c31804230a422f
|
| 3 |
+
size 243
|
wespeaker_v2.mlmodelc/metadata.json
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"metadataOutputVersion" : "3.0",
|
| 4 |
+
"storagePrecision" : "Mixed (Float32, Palettized (8 bits))",
|
| 5 |
+
"outputSchema" : [
|
| 6 |
+
{
|
| 7 |
+
"hasShapeFlexibility" : "0",
|
| 8 |
+
"isOptional" : "0",
|
| 9 |
+
"dataType" : "Float32",
|
| 10 |
+
"formattedType" : "MultiArray (Float32)",
|
| 11 |
+
"shortDescription" : "",
|
| 12 |
+
"shape" : "[]",
|
| 13 |
+
"name" : "constant",
|
| 14 |
+
"type" : "MultiArray"
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"hasShapeFlexibility" : "0",
|
| 18 |
+
"isOptional" : "0",
|
| 19 |
+
"dataType" : "Float32",
|
| 20 |
+
"formattedType" : "MultiArray (Float32 3 × 256)",
|
| 21 |
+
"shortDescription" : "",
|
| 22 |
+
"shape" : "[3, 256]",
|
| 23 |
+
"name" : "embedding",
|
| 24 |
+
"type" : "MultiArray"
|
| 25 |
+
}
|
| 26 |
+
],
|
| 27 |
+
"modelParameters" : [
|
| 28 |
+
|
| 29 |
+
],
|
| 30 |
+
"specificationVersion" : 7,
|
| 31 |
+
"mlProgramOperationTypeHistogram" : {
|
| 32 |
+
"Transpose" : 4,
|
| 33 |
+
"UpsampleNearestNeighbor" : 1,
|
| 34 |
+
"Squeeze" : 5,
|
| 35 |
+
"Ios16.gather" : 2,
|
| 36 |
+
"Ios16.reduceMean" : 2,
|
| 37 |
+
"Ios16.linear" : 2,
|
| 38 |
+
"Ios16.add" : 19,
|
| 39 |
+
"Ios16.realDiv" : 3,
|
| 40 |
+
"Concat" : 1,
|
| 41 |
+
"Ios16.reduceSum" : 4,
|
| 42 |
+
"Ios16.square" : 2,
|
| 43 |
+
"Pad" : 2,
|
| 44 |
+
"Ios16.log" : 1,
|
| 45 |
+
"ExpandDims" : 11,
|
| 46 |
+
"Ios16.sub" : 5,
|
| 47 |
+
"Ios16.relu" : 33,
|
| 48 |
+
"Ios16.reshape" : 1,
|
| 49 |
+
"Ios16.constexprLutToDense" : 38,
|
| 50 |
+
"Ios16.matmul" : 2,
|
| 51 |
+
"SliceByIndex" : 1001,
|
| 52 |
+
"Stack" : 1,
|
| 53 |
+
"Ios16.maximum" : 1,
|
| 54 |
+
"Ios16.conv" : 36,
|
| 55 |
+
"Ios16.sqrt" : 1,
|
| 56 |
+
"Ios16.mul" : 8
|
| 57 |
+
},
|
| 58 |
+
"computePrecision" : "Mixed (Float32, Int32)",
|
| 59 |
+
"isUpdatable" : "0",
|
| 60 |
+
"stateSchema" : [
|
| 61 |
+
|
| 62 |
+
],
|
| 63 |
+
"availability" : {
|
| 64 |
+
"macOS" : "13.0",
|
| 65 |
+
"tvOS" : "16.0",
|
| 66 |
+
"visionOS" : "1.0",
|
| 67 |
+
"watchOS" : "9.0",
|
| 68 |
+
"iOS" : "16.0",
|
| 69 |
+
"macCatalyst" : "16.0"
|
| 70 |
+
},
|
| 71 |
+
"modelType" : {
|
| 72 |
+
"name" : "MLModelType_mlProgram"
|
| 73 |
+
},
|
| 74 |
+
"userDefinedMetadata" : {
|
| 75 |
+
"com.github.apple.coremltools.source_dialect" : "TorchScript",
|
| 76 |
+
"com.github.apple.coremltools.source" : "torch==2.6.0",
|
| 77 |
+
"com.github.apple.coremltools.version" : "8.3.0"
|
| 78 |
+
},
|
| 79 |
+
"inputSchema" : [
|
| 80 |
+
{
|
| 81 |
+
"hasShapeFlexibility" : "0",
|
| 82 |
+
"isOptional" : "0",
|
| 83 |
+
"dataType" : "Float32",
|
| 84 |
+
"formattedType" : "MultiArray (Float32 3 × 160000)",
|
| 85 |
+
"shortDescription" : "",
|
| 86 |
+
"shape" : "[3, 160000]",
|
| 87 |
+
"name" : "waveform",
|
| 88 |
+
"type" : "MultiArray"
|
| 89 |
+
},
|
| 90 |
+
{
|
| 91 |
+
"hasShapeFlexibility" : "0",
|
| 92 |
+
"isOptional" : "0",
|
| 93 |
+
"dataType" : "Float32",
|
| 94 |
+
"formattedType" : "MultiArray (Float32 3 × 589)",
|
| 95 |
+
"shortDescription" : "",
|
| 96 |
+
"shape" : "[3, 589]",
|
| 97 |
+
"name" : "mask",
|
| 98 |
+
"type" : "MultiArray"
|
| 99 |
+
}
|
| 100 |
+
],
|
| 101 |
+
"generatedClassName" : "wespeaker_int8",
|
| 102 |
+
"method" : "predict"
|
| 103 |
+
}
|
| 104 |
+
]
|
wespeaker_v2.mlmodelc/model.mil
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
wespeaker_v2.mlmodelc/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:34004f6798d35cad7071e2fdc67e63faaa782f53697e1cb49bcb452cf81ae151
|
| 3 |
+
size 7243904
|
xvector-transform.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|