Commit ·
fed42c7
0
Parent(s):
Initial commit: Supertonic2 QNN quantized TTS pipeline
Browse filesAdd complete Qualcomm QNN-optimized TTS pipeline including:
- ONNX models (text encoder, vector estimator, vocoder, duration predictor)
- QNN HTP compiled models and shared libraries
- Calibration data for quantization
- Inference scripts and pipeline runner
- Architecture documentation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This view is limited to 50 files because it contains too many changes. See raw diff
- .claude/settings.local.json +12 -0
- .gitattributes +5 -0
- .gitignore +7 -0
- HUGGINGFACE_UPLOAD.md +51 -0
- QNN_Model_lib/aarch64-oe-linux-gcc11.2/libduration_predictor_htp.so +3 -0
- QNN_Model_lib/aarch64-oe-linux-gcc11.2/libtext_encoder_htp.so +3 -0
- QNN_Model_lib/aarch64-oe-linux-gcc11.2/libvector_estimator_htp.so +3 -0
- QNN_Model_lib/aarch64-oe-linux-gcc11.2/libvocoder_htp.so +3 -0
- QNN_Models/duration_predictor_htp.bin +3 -0
- QNN_Models/duration_predictor_htp.cpp +0 -0
- QNN_Models/duration_predictor_htp_net.json +0 -0
- QNN_Models/text_encoder_htp.bin +3 -0
- QNN_Models/text_encoder_htp.cpp +0 -0
- QNN_Models/text_encoder_htp_net.json +0 -0
- QNN_Models/vector_estimator_htp.bin +3 -0
- QNN_Models/vector_estimator_htp.cpp +0 -0
- QNN_Models/vector_estimator_htp_net.json +0 -0
- QNN_Models/vocoder_htp.bin +3 -0
- QNN_Models/vocoder_htp.cpp +0 -0
- QNN_Models/vocoder_htp_net.json +0 -0
- README.md +229 -0
- Step1_Supertonic2_QNN_Porting.ipynb +289 -0
- board_outputs/samples/final_reference_output.wav +3 -0
- calibration_data/calibration_summary.json +102 -0
- calibration_data/duration_predictor_input_list.txt +10 -0
- calibration_data/sample_001/duration_predictor/input_style_dp.raw +3 -0
- calibration_data/sample_001/duration_predictor/input_style_dp.shape.json +9 -0
- calibration_data/sample_001/duration_predictor/input_text_ids.raw +3 -0
- calibration_data/sample_001/duration_predictor/input_text_ids.shape.json +8 -0
- calibration_data/sample_001/duration_predictor/input_text_mask.raw +3 -0
- calibration_data/sample_001/duration_predictor/input_text_mask.shape.json +9 -0
- calibration_data/sample_001/duration_predictor/output_duration.raw +3 -0
- calibration_data/sample_001/duration_predictor/output_duration.shape.json +7 -0
- calibration_data/sample_001/metadata.json +8 -0
- calibration_data/sample_001/text_encoder/input_style_ttl.raw +3 -0
- calibration_data/sample_001/text_encoder/input_style_ttl.shape.json +9 -0
- calibration_data/sample_001/text_encoder/input_text_ids.raw +3 -0
- calibration_data/sample_001/text_encoder/input_text_ids.shape.json +8 -0
- calibration_data/sample_001/text_encoder/input_text_mask.raw +3 -0
- calibration_data/sample_001/text_encoder/input_text_mask.shape.json +9 -0
- calibration_data/sample_001/text_encoder/output_text_emb.raw +3 -0
- calibration_data/sample_001/text_encoder/output_text_emb.shape.json +9 -0
- calibration_data/sample_001/vector_estimator/step_000/input_current_step.raw +3 -0
- calibration_data/sample_001/vector_estimator/step_000/input_current_step.shape.json +7 -0
- calibration_data/sample_001/vector_estimator/step_000/input_latent_mask.raw +3 -0
- calibration_data/sample_001/vector_estimator/step_000/input_latent_mask.shape.json +9 -0
- calibration_data/sample_001/vector_estimator/step_000/input_noisy_latent.raw +3 -0
- calibration_data/sample_001/vector_estimator/step_000/input_noisy_latent.shape.json +9 -0
- calibration_data/sample_001/vector_estimator/step_000/input_style_ttl.raw +3 -0
- calibration_data/sample_001/vector_estimator/step_000/input_style_ttl.shape.json +9 -0
.claude/settings.local.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"permissions": {
|
| 3 |
+
"allow": [
|
| 4 |
+
"Bash(git -C \"d:/Projects/personal/supertonic2-qualcomm-quantized\" remote -v)",
|
| 5 |
+
"Bash(scp:*)",
|
| 6 |
+
"Bash(du -sh:*)",
|
| 7 |
+
"Bash(/dev/null -exec ls -lh {} ;)",
|
| 8 |
+
"Bash(git lfs track:*)",
|
| 9 |
+
"Bash(git add:*)"
|
| 10 |
+
]
|
| 11 |
+
}
|
| 12 |
+
}
|
.gitattributes
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.so filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.raw filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.wav filter=lfs diff=lfs merge=lfs -text
|
.gitignore
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__pycache__/
|
| 2 |
+
*.pyc
|
| 3 |
+
*.pyo
|
| 4 |
+
.env
|
| 5 |
+
*.egg-info/
|
| 6 |
+
.venv/
|
| 7 |
+
venv/
|
HUGGINGFACE_UPLOAD.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Files to Upload to HuggingFace
|
| 2 |
+
|
| 3 |
+
This document lists all large files that should be uploaded to HuggingFace model repository.
|
| 4 |
+
|
| 5 |
+
## Directory Structure for HuggingFace
|
| 6 |
+
|
| 7 |
+
```
|
| 8 |
+
supertonic2-qcs6490/
|
| 9 |
+
├── README.md (copy from main repo)
|
| 10 |
+
├── QNN_Model_lib/
|
| 11 |
+
│ └── aarch64-oe-linux-gcc11.2/
|
| 12 |
+
│ ├── libduration_predictor_htp.so (1.0 MB)
|
| 13 |
+
│ ├── libtext_encoder_htp.so (7.5 MB)
|
| 14 |
+
│ ├── libvector_estimator_htp.so (34 MB)
|
| 15 |
+
│ └── libvocoder_htp.so (25 MB)
|
| 16 |
+
│
|
| 17 |
+
├── QNN_Models/
|
| 18 |
+
│ ├── duration_predictor_htp.cpp (1.5 MB)
|
| 19 |
+
│ ├── duration_predictor_htp.bin (460 KB)
|
| 20 |
+
│ ├── duration_predictor_htp_net.json (722 KB)
|
| 21 |
+
│ ├── text_encoder_htp.cpp (2.1 MB)
|
| 22 |
+
│ ├── text_encoder_htp.bin (6.7 MB)
|
| 23 |
+
│ ├── text_encoder_htp_net.json (1.1 MB)
|
| 24 |
+
│ ├── vector_estimator_htp.cpp (4.7 MB)
|
| 25 |
+
│ ├── vector_estimator_htp.bin (32 MB)
|
| 26 |
+
│ ├── vector_estimator_htp_net.json (2.3 MB)
|
| 27 |
+
│ ├── vocoder_htp.cpp (1.2 MB)
|
| 28 |
+
│ ├── vocoder_htp.bin (25 MB)
|
| 29 |
+
│ └── vocoder_htp_net.json (581 KB)
|
| 30 |
+
│
|
| 31 |
+
├── model/ (ONNX models and configs)
|
| 32 |
+
├── calibration_data/ (10 samples)
|
| 33 |
+
└── samples/ (example outputs)
|
| 34 |
+
```
|
| 35 |
+
|
| 36 |
+
## Total Size: ~400 MB
|
| 37 |
+
|
| 38 |
+
## Upload Using HuggingFace CLI
|
| 39 |
+
|
| 40 |
+
```bash
|
| 41 |
+
pip install huggingface_hub
|
| 42 |
+
huggingface-cli login
|
| 43 |
+
huggingface-cli repo create supertonic2-qcs6490 --type model
|
| 44 |
+
|
| 45 |
+
# Upload directories
|
| 46 |
+
huggingface-cli upload <username>/supertonic2-qcs6490 QNN_Model_lib
|
| 47 |
+
huggingface-cli upload <username>/supertonic2-qcs6490 QNN_Models
|
| 48 |
+
huggingface-cli upload <username>/supertonic2-qcs6490 model
|
| 49 |
+
huggingface-cli upload <username>/supertonic2-qcs6490 calibration_data
|
| 50 |
+
huggingface-cli upload <username>/supertonic2-qcs6490 board_outputs/samples
|
| 51 |
+
```
|
QNN_Model_lib/aarch64-oe-linux-gcc11.2/libduration_predictor_htp.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b6a67f108b8fb487e9b6e50d65b708d3d1d70254fe01e517f4b76fe19974bfff
|
| 3 |
+
size 1043368
|
QNN_Model_lib/aarch64-oe-linux-gcc11.2/libtext_encoder_htp.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3fed0c8a9d1d1a5d60850a4c4c57b3adbebf6ae99a535cfbfc86733f24ac9d11
|
| 3 |
+
size 7852664
|
QNN_Model_lib/aarch64-oe-linux-gcc11.2/libvector_estimator_htp.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fecf2c23097d8ee55985cf6e271c8352669f416161566591f42fa385b9fce0c7
|
| 3 |
+
size 34938704
|
QNN_Model_lib/aarch64-oe-linux-gcc11.2/libvocoder_htp.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:02626a5cd900c547785a504656d7901ab280269aa8ee12fb63a23c6a1b78a73d
|
| 3 |
+
size 25839920
|
QNN_Models/duration_predictor_htp.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:225c9835d8cc3bd4a81aca5d9995b7e81fca6a7fd5c67668683cfc3788c49948
|
| 3 |
+
size 471040
|
QNN_Models/duration_predictor_htp.cpp
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
QNN_Models/duration_predictor_htp_net.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
QNN_Models/text_encoder_htp.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:224e9771ea52658e2b447daec5a579fc9da5a03520e6a4e37e3acf7624a018d6
|
| 3 |
+
size 7024640
|
QNN_Models/text_encoder_htp.cpp
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
QNN_Models/text_encoder_htp_net.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
QNN_Models/vector_estimator_htp.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8ad4f4c5fbb42ca0cb744911f6c2da4c66209ea86e5b9434403a06284e2b87a9
|
| 3 |
+
size 32993280
|
QNN_Models/vector_estimator_htp.cpp
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
QNN_Models/vector_estimator_htp_net.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
QNN_Models/vocoder_htp.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d9fa5dc1598affedb87e2a2b404c8800299394ef8ee2b3ca18980a9afde4c924
|
| 3 |
+
size 25395200
|
QNN_Models/vocoder_htp.cpp
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
QNN_Models/vocoder_htp_net.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
README.md
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Supertonic-2 ONNX Inference
|
| 2 |
+
|
| 3 |
+
High-quality Text-to-Speech synthesis using Supertonic-2 ONNX models.
|
| 4 |
+
|
| 5 |
+
## Quick Start
|
| 6 |
+
|
| 7 |
+
```bash
|
| 8 |
+
# Basic usage
|
| 9 |
+
python supertonic_inference.py --text "Hello world" --voice M1 -o output.wav
|
| 10 |
+
|
| 11 |
+
# With specific seed for reproducibility
|
| 12 |
+
python supertonic_inference.py \
|
| 13 |
+
--text "Your text here" \
|
| 14 |
+
--voice F1 \
|
| 15 |
+
--seed 42 \
|
| 16 |
+
--output output.wav
|
| 17 |
+
```
|
| 18 |
+
|
| 19 |
+
## Features
|
| 20 |
+
|
| 21 |
+
- ✅ **High Quality**: Matches official Supertonic library behavior
|
| 22 |
+
- ✅ **Reproducible**: Use `--seed` for consistent outputs
|
| 23 |
+
- ✅ **Multilingual**: Supports 5 languages (EN, KO, ES, PT, FR)
|
| 24 |
+
- ✅ **Multiple Voices**: 10 voice styles (5 female, 5 male)
|
| 25 |
+
- ✅ **Customizable**: Adjust quality, speed, and more
|
| 26 |
+
|
| 27 |
+
## QCS6490 Deployment
|
| 28 |
+
|
| 29 |
+
This repository includes complete resources for porting to **Qualcomm QCS6490** (Hexagon HTP V68):
|
| 30 |
+
|
| 31 |
+
- **[QCS6490 Porting Guide](QCS6490_PORTING_GUIDE.md)** - Step-by-step deployment guide
|
| 32 |
+
- **[Architecture Deep Dive](supertonic_architecture.md)** - Complete model architecture documentation
|
| 33 |
+
- **[Calibration Data Guide](CALIBRATION_DATA.md)** - Quantization and validation workflow
|
| 34 |
+
|
| 35 |
+
### Generate Calibration Data
|
| 36 |
+
|
| 37 |
+
```bash
|
| 38 |
+
# Generate 10 calibration samples for quantization and accuracy validation
|
| 39 |
+
python generate_calibration_data.py
|
| 40 |
+
|
| 41 |
+
# Validate QNN model accuracy against ONNX reference
|
| 42 |
+
python validate_qnn_accuracy.py \
|
| 43 |
+
--calibration-dir calibration_data \
|
| 44 |
+
--qnn-dir qnn_outputs \
|
| 45 |
+
--report accuracy_report.json
|
| 46 |
+
```
|
| 47 |
+
|
| 48 |
+
**Expected Performance on QCS6490:**
|
| 49 |
+
- 100-150× real-time inference speed
|
| 50 |
+
- ~75ms latency for 2-second audio (5 diffusion steps)
|
| 51 |
+
- ~70-100 MB total model size (after INT8/FP16 quantization)
|
| 52 |
+
|
| 53 |
+
## Requirements
|
| 54 |
+
|
| 55 |
+
```bash
|
| 56 |
+
pip install numpy onnxruntime
|
| 57 |
+
```
|
| 58 |
+
|
| 59 |
+
## Model Files
|
| 60 |
+
|
| 61 |
+
Required directory structure:
|
| 62 |
+
```
|
| 63 |
+
model/
|
| 64 |
+
├── onnx/
|
| 65 |
+
│ ├── text_encoder.onnx
|
| 66 |
+
│ ├── duration_predictor.onnx
|
| 67 |
+
│ ├── vector_estimator.onnx
|
| 68 |
+
│ ├── vocoder.onnx
|
| 69 |
+
│ ├── tts.json
|
| 70 |
+
│ └── unicode_indexer.json
|
| 71 |
+
└── voice_styles/
|
| 72 |
+
├── F1.json ... F5.json (Female voices)
|
| 73 |
+
└── M1.json ... M5.json (Male voices)
|
| 74 |
+
```
|
| 75 |
+
|
| 76 |
+
## Command Line Options
|
| 77 |
+
|
| 78 |
+
| Option | Description | Default |
|
| 79 |
+
|--------|-------------|---------|
|
| 80 |
+
| `--text`, `-t` | Text to synthesize | **Required** |
|
| 81 |
+
| `--voice`, `-v` | Voice style (F1-F5, M1-M5) | M1 |
|
| 82 |
+
| `--lang`, `-l` | Language (en, ko, es, pt, fr) | en |
|
| 83 |
+
| `--output`, `-o` | Output WAV file path | output/output.wav |
|
| 84 |
+
| `--steps` | Diffusion steps (more = better) | 10 |
|
| 85 |
+
| `--speed` | Speech speed multiplier | 1.0 |
|
| 86 |
+
| `--seed` | Random seed (for reproducibility) | None |
|
| 87 |
+
| `--quiet`, `-q` | Suppress progress messages | False |
|
| 88 |
+
|
| 89 |
+
## Examples
|
| 90 |
+
|
| 91 |
+
### Basic Synthesis
|
| 92 |
+
```bash
|
| 93 |
+
python supertonic_inference.py \
|
| 94 |
+
--text "The weather is nice today." \
|
| 95 |
+
--voice F1 \
|
| 96 |
+
--output weather.wav
|
| 97 |
+
```
|
| 98 |
+
|
| 99 |
+
### High Quality with Reproducible Output
|
| 100 |
+
```bash
|
| 101 |
+
python supertonic_inference.py \
|
| 102 |
+
--text "Important announcement." \
|
| 103 |
+
--voice M1 \
|
| 104 |
+
--steps 20 \
|
| 105 |
+
--seed 42 \
|
| 106 |
+
--output announcement.wav
|
| 107 |
+
```
|
| 108 |
+
|
| 109 |
+
### Faster Speech
|
| 110 |
+
```bash
|
| 111 |
+
python supertonic_inference.py \
|
| 112 |
+
--text "Quick update message." \
|
| 113 |
+
--voice F2 \
|
| 114 |
+
--speed 1.2 \
|
| 115 |
+
--output quick.wav
|
| 116 |
+
```
|
| 117 |
+
|
| 118 |
+
### Spanish Language
|
| 119 |
+
```bash
|
| 120 |
+
python supertonic_inference.py \
|
| 121 |
+
--text "Hola mundo" \
|
| 122 |
+
--lang es \
|
| 123 |
+
--voice M3 \
|
| 124 |
+
--output spanish.wav
|
| 125 |
+
```
|
| 126 |
+
|
| 127 |
+
## Voice Styles
|
| 128 |
+
|
| 129 |
+
| Code | Type | Description |
|
| 130 |
+
|------|------|-------------|
|
| 131 |
+
| F1-F5 | Female | 5 distinct female voices |
|
| 132 |
+
| M1-M5 | Male | 5 distinct male voices |
|
| 133 |
+
|
| 134 |
+
## Supported Languages
|
| 135 |
+
|
| 136 |
+
- `en` - English
|
| 137 |
+
- `ko` - Korean
|
| 138 |
+
- `es` - Spanish
|
| 139 |
+
- `pt` - Portuguese
|
| 140 |
+
- `fr` - French
|
| 141 |
+
|
| 142 |
+
## Python API
|
| 143 |
+
|
| 144 |
+
```python
|
| 145 |
+
from supertonic_inference import SupertonicTTS, save_wav
|
| 146 |
+
|
| 147 |
+
# Initialize
|
| 148 |
+
tts = SupertonicTTS(model_dir="model/onnx")
|
| 149 |
+
|
| 150 |
+
# Synthesize
|
| 151 |
+
waveform, duration = tts.synthesize(
|
| 152 |
+
text="Hello world",
|
| 153 |
+
voice_name="M1",
|
| 154 |
+
lang="en",
|
| 155 |
+
diffusion_steps=10,
|
| 156 |
+
speed=1.0,
|
| 157 |
+
seed=42
|
| 158 |
+
)
|
| 159 |
+
|
| 160 |
+
# Save
|
| 161 |
+
save_wav("output.wav", waveform, tts.sample_rate)
|
| 162 |
+
```
|
| 163 |
+
|
| 164 |
+
## Performance
|
| 165 |
+
|
| 166 |
+
- **Speed**: ~25× faster than real-time on CPU
|
| 167 |
+
- **Quality**: Matches official Supertonic library
|
| 168 |
+
- **Sample Rate**: 44.1 kHz
|
| 169 |
+
- **Variance**: ~5% duration variance due to diffusion randomness
|
| 170 |
+
|
| 171 |
+
## Parameters Guide
|
| 172 |
+
|
| 173 |
+
### Diffusion Steps
|
| 174 |
+
- **5-10 steps**: Fast, good quality (default: 10)
|
| 175 |
+
- **15-20 steps**: Higher quality, slower
|
| 176 |
+
- **Trade-off**: Each step improves quality but increases compute time
|
| 177 |
+
|
| 178 |
+
### Speed
|
| 179 |
+
- **0.8-1.0**: Slower, more natural
|
| 180 |
+
- **1.0**: Normal speed (default)
|
| 181 |
+
- **1.1-1.5**: Faster, still intelligible
|
| 182 |
+
|
| 183 |
+
### Seed
|
| 184 |
+
- **None**: Different output each run (random)
|
| 185 |
+
- **Integer**: Reproducible output with same seed
|
| 186 |
+
- **Use case**: Testing, demos, consistent results
|
| 187 |
+
|
| 188 |
+
## Project Structure
|
| 189 |
+
|
| 190 |
+
```
|
| 191 |
+
supertonic2-qualcomm/
|
| 192 |
+
├── supertonic_inference.py # Main inference script
|
| 193 |
+
├── README.md # This file
|
| 194 |
+
├── model/
|
| 195 |
+
│ ├── onnx/ # ONNX models
|
| 196 |
+
│ └── voice_styles/ # Voice embeddings
|
| 197 |
+
├── inputs/ # Test inputs
|
| 198 |
+
└── output/ # Generated audio
|
| 199 |
+
```
|
| 200 |
+
|
| 201 |
+
## Notes
|
| 202 |
+
|
| 203 |
+
- Text is automatically preprocessed (normalization, punctuation)
|
| 204 |
+
- Periods are added automatically if missing
|
| 205 |
+
- Unicode characters are handled transparently
|
| 206 |
+
- Emoji are automatically removed
|
| 207 |
+
|
| 208 |
+
## Troubleshooting
|
| 209 |
+
|
| 210 |
+
**No output generated:**
|
| 211 |
+
- Check that all model files exist in `model/onnx/`
|
| 212 |
+
- Ensure voice style file exists in `model/voice_styles/`
|
| 213 |
+
|
| 214 |
+
**Poor quality output:**
|
| 215 |
+
- Increase `--steps` to 15-20
|
| 216 |
+
- Try different voice styles
|
| 217 |
+
- Check that input text is properly formatted
|
| 218 |
+
|
| 219 |
+
**Different outputs each run:**
|
| 220 |
+
- Use `--seed` parameter for reproducibility
|
| 221 |
+
- Same seed = same output
|
| 222 |
+
|
| 223 |
+
## License
|
| 224 |
+
|
| 225 |
+
This implementation uses models from [Supertone/supertonic-2](https://huggingface.co/Supertone/supertonic-2).
|
| 226 |
+
|
| 227 |
+
## Reference
|
| 228 |
+
|
| 229 |
+
Official repository: https://github.com/supertone-inc/supertonic
|
Step1_Supertonic2_QNN_Porting.ipynb
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "markdown",
|
| 5 |
+
"metadata": {},
|
| 6 |
+
"source": [
|
| 7 |
+
"# Supertonic-2 QNN Porting Guide\n",
|
| 8 |
+
"\n",
|
| 9 |
+
"This notebook walks through the complete process of porting **Supertone/supertonic-2** TTS model to Qualcomm QNN for deployment on QCS6490.\n",
|
| 10 |
+
"\n",
|
| 11 |
+
"**Model**: [Supertone/supertonic-2](https://huggingface.co/Supertone/supertonic-2) (66M params, ONNX)\n",
|
| 12 |
+
"\n",
|
| 13 |
+
"## Pipeline Architecture\n",
|
| 14 |
+
"\n",
|
| 15 |
+
"```\n",
|
| 16 |
+
"Text Input → [Duration Predictor] → duration\n",
|
| 17 |
+
" → [Text Encoder] → text_emb \n",
|
| 18 |
+
" → [Vector Estimator x N steps] → denoised_latent\n",
|
| 19 |
+
" → [Vocoder] → Audio WAV (44.1kHz)\n",
|
| 20 |
+
"```\n",
|
| 21 |
+
"\n",
|
| 22 |
+
"## Model Specifications (Actual ONNX Shapes)\n",
|
| 23 |
+
"\n",
|
| 24 |
+
"| Model | Size | Key Inputs | Output |\n",
|
| 25 |
+
"|-------|------|------------|--------|\n",
|
| 26 |
+
"| Duration Predictor | 1.5 MB | text_ids [1,seq], style_dp [1,8,16], text_mask [1,1,seq] | duration [1] |\n",
|
| 27 |
+
"| Text Encoder | 27 MB | text_ids [1,seq], style_ttl [1,50,256], text_mask [1,1,seq] | text_emb [1,256,seq] |\n",
|
| 28 |
+
"| Vector Estimator | 132 MB | noisy_latent [1,144,lat], text_emb [1,256,seq], +5 more | denoised_latent [1,144,lat] |\n",
|
| 29 |
+
"| Vocoder | 101 MB | latent [1,144,lat] | wav_tts [1,samples] |\n",
|
| 30 |
+
"\n",
|
| 31 |
+
"Note: `seq` = text sequence length (dynamic), `lat` = latent length (dynamic)"
|
| 32 |
+
]
|
| 33 |
+
},
|
| 34 |
+
{
|
| 35 |
+
"cell_type": "markdown",
|
| 36 |
+
"metadata": {},
|
| 37 |
+
"source": [
|
| 38 |
+
"## Step 0: Environment Setup"
|
| 39 |
+
]
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"cell_type": "code",
|
| 43 |
+
"execution_count": 9,
|
| 44 |
+
"metadata": {},
|
| 45 |
+
"outputs": [],
|
| 46 |
+
"source": [
|
| 47 |
+
"import os\n",
|
| 48 |
+
"import json\n",
|
| 49 |
+
"import numpy as np\n",
|
| 50 |
+
"import onnxruntime as ort"
|
| 51 |
+
]
|
| 52 |
+
},
|
| 53 |
+
{
|
| 54 |
+
"cell_type": "markdown",
|
| 55 |
+
"metadata": {},
|
| 56 |
+
"source": [
|
| 57 |
+
"## Step 1: Generate Calibration Data\n",
|
| 58 |
+
"\n",
|
| 59 |
+
"Run the ONNX models with representative inputs to create calibration data for QNN quantization."
|
| 60 |
+
]
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"cell_type": "code",
|
| 64 |
+
"execution_count": 1,
|
| 65 |
+
"metadata": {},
|
| 66 |
+
"outputs": [
|
| 67 |
+
{
|
| 68 |
+
"name": "stdout",
|
| 69 |
+
"output_type": "stream",
|
| 70 |
+
"text": [
|
| 71 |
+
"[INFO] QAIRT_SDK_ROOT=/opt/qcom/aistack/qairt/2.37.1.250807\n",
|
| 72 |
+
"[WARN] QNN_SDK_ROOT/SNPE_ROOT set to QAIRT_SDK_ROOT for backwards compatibility and will be deprecated in a future release.\n",
|
| 73 |
+
"[INFO] QAIRT SDK environment setup complete\n"
|
| 74 |
+
]
|
| 75 |
+
}
|
| 76 |
+
],
|
| 77 |
+
"source": [
|
| 78 |
+
"%%bash\n",
|
| 79 |
+
"unset PYTHONPATH\n",
|
| 80 |
+
"unset LD_LIBRARY_PATH\n",
|
| 81 |
+
"source /opt/qcom/aistack/qairt/2.37.1.250807/bin/envsetup.sh"
|
| 82 |
+
]
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"cell_type": "markdown",
|
| 86 |
+
"metadata": {},
|
| 87 |
+
"source": [
|
| 88 |
+
"## Step 2: ONNX → QNN Conversion\n",
|
| 89 |
+
"\n",
|
| 90 |
+
"Convert each ONNX model to QNN format with HTP (Hexagon Tensor Processor) optimization and 8-bit quantization."
|
| 91 |
+
]
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"cell_type": "code",
|
| 95 |
+
"execution_count": null,
|
| 96 |
+
"metadata": {},
|
| 97 |
+
"outputs": [],
|
| 98 |
+
"source": [
|
| 99 |
+
"%%bash\n",
|
| 100 |
+
"# Convert Duration Predictor\n",
|
| 101 |
+
"unset PYTHONPATH\n",
|
| 102 |
+
"unset LD_LIBRARY_PATH\n",
|
| 103 |
+
"source /opt/qcom/aistack/qairt/2.37.1.250807/bin/envsetup.sh\n",
|
| 104 |
+
"\n",
|
| 105 |
+
"qnn-onnx-converter \\\n",
|
| 106 |
+
" --input_network ./model/onnx/duration_predictor.onnx \\\n",
|
| 107 |
+
" --input_dim text_ids 1,128 \\\n",
|
| 108 |
+
" --input_dim style_dp 1,8,16 \\\n",
|
| 109 |
+
" --input_dim text_mask 1,1,128 \\\n",
|
| 110 |
+
" --output_path ./QNN_Models/duration_predictor_htp.cpp \\\n",
|
| 111 |
+
" --input_list ./calibration_data/duration_predictor_input_list.txt \\\n",
|
| 112 |
+
" --param_quantizer tf \\\n",
|
| 113 |
+
" --act_quantizer tf \\\n",
|
| 114 |
+
" --weights_bitwidth 8 \\\n",
|
| 115 |
+
" --act_bitwidth 16 "
|
| 116 |
+
]
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"cell_type": "code",
|
| 120 |
+
"execution_count": null,
|
| 121 |
+
"metadata": {},
|
| 122 |
+
"outputs": [],
|
| 123 |
+
"source": [
|
| 124 |
+
"%%bash\n",
|
| 125 |
+
"# Compile all 4 models for aarch64 target\n",
|
| 126 |
+
"unset LD_LIBRARY_PATH\n",
|
| 127 |
+
"source /opt/qcom-sdk/environment-setup-armv8-2a-qcom-linux\n",
|
| 128 |
+
"source /opt/qcom/aistack/qairt/2.37.1.250807/bin/envsetup.sh\n",
|
| 129 |
+
"\n",
|
| 130 |
+
"MODELS=(\"duration_predictor_htp\" \"text_encoder_htp\" \"vector_estimator_htp\" \"vocoder_htp\")\n",
|
| 131 |
+
"\n",
|
| 132 |
+
"for MODEL in \"${MODELS[@]}\"; do\n",
|
| 133 |
+
" echo \"=== Compiling $MODEL ===\"\n",
|
| 134 |
+
" qnn-model-lib-generator \\\n",
|
| 135 |
+
" -c ./QNN_Models/${MODEL}.cpp \\\n",
|
| 136 |
+
" -b ./QNN_Models/${MODEL}.bin \\\n",
|
| 137 |
+
" -o ./QNN_Model_lib/ \\\n",
|
| 138 |
+
" -t aarch64-oe-linux-gcc11.2\n",
|
| 139 |
+
"done\n",
|
| 140 |
+
"\n",
|
| 141 |
+
"echo \"=== All models compiled ===\"\n",
|
| 142 |
+
"ls -lh QNN_Model_lib/aarch64-oe-linux-gcc11.2/*.so"
|
| 143 |
+
]
|
| 144 |
+
},
|
| 145 |
+
{
|
| 146 |
+
"cell_type": "markdown",
|
| 147 |
+
"metadata": {},
|
| 148 |
+
"source": [
|
| 149 |
+
"## Key Configuration Notes\n",
|
| 150 |
+
"\n",
|
| 151 |
+
"**Quantization Settings:**\n",
|
| 152 |
+
"- Weights: 8-bit (w8)\n",
|
| 153 |
+
"- Activations: 8-bit (a8)\n",
|
| 154 |
+
"- Float operations: 32-bit\n",
|
| 155 |
+
"- Quantizers: TensorFlow (tf) for both params and activations\n",
|
| 156 |
+
"\n",
|
| 157 |
+
"**Critical Requirement:**\n",
|
| 158 |
+
"- QNN automatically converts INT64 inputs to INT32\n",
|
| 159 |
+
"- All `text_ids` inputs in calibration data must be INT32 (not INT64)\n",
|
| 160 |
+
"- Other inputs (FP32) remain unchanged\n",
|
| 161 |
+
"\n",
|
| 162 |
+
"**Fixed Input Dimensions:**\n",
|
| 163 |
+
"- text_ids: [1, 128]\n",
|
| 164 |
+
"- style_dp: [1, 8, 16]\n",
|
| 165 |
+
"- style_ttl: [1, 50, 256]\n",
|
| 166 |
+
"- noisy_latent: [1, 144, 192]\n",
|
| 167 |
+
"- latent: [1, 144, 192]\n",
|
| 168 |
+
"\n",
|
| 169 |
+
"## Step 3: Compile to Shared Libraries\n",
|
| 170 |
+
"\n",
|
| 171 |
+
"Compile all QNN models into `.so` shared libraries for ARM64 deployment."
|
| 172 |
+
]
|
| 173 |
+
},
|
| 174 |
+
{
|
| 175 |
+
"cell_type": "code",
|
| 176 |
+
"execution_count": null,
|
| 177 |
+
"metadata": {},
|
| 178 |
+
"outputs": [],
|
| 179 |
+
"source": [
|
| 180 |
+
"%%bash\n",
|
| 181 |
+
"# Convert Vector Estimator\n",
|
| 182 |
+
"unset PYTHONPATH\n",
|
| 183 |
+
"unset LD_LIBRARY_PATH\n",
|
| 184 |
+
"source /opt/qcom/aistack/qairt/2.37.1.250807/bin/envsetup.sh\n",
|
| 185 |
+
"\n",
|
| 186 |
+
"qnn-onnx-converter \\\n",
|
| 187 |
+
" --input_network ./model/onnx/vector_estimator.onnx \\\n",
|
| 188 |
+
" --input_dim noisy_latent 1,144,192 \\\n",
|
| 189 |
+
" --input_dim text_emb 1,256,128 \\\n",
|
| 190 |
+
" --input_dim style_ttl 1,50,256 \\\n",
|
| 191 |
+
" --input_dim latent_mask 1,1,192 \\\n",
|
| 192 |
+
" --input_dim text_mask 1,1,128 \\\n",
|
| 193 |
+
" --input_dim current_step 1 \\\n",
|
| 194 |
+
" --input_dim total_step 1 \\\n",
|
| 195 |
+
" --output_path ./QNN_Models/vector_estimator_htp.cpp \\\n",
|
| 196 |
+
" --input_list ./calibration_data/vector_estimator_input_list.txt \\\n",
|
| 197 |
+
" --param_quantizer tf \\\n",
|
| 198 |
+
" --act_quantizer tf \\\n",
|
| 199 |
+
" --weights_bitwidth 8 \\\n",
|
| 200 |
+
" --act_bitwidth 8 \\\n",
|
| 201 |
+
" --float_bitwidth 32"
|
| 202 |
+
]
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"cell_type": "code",
|
| 206 |
+
"execution_count": null,
|
| 207 |
+
"metadata": {},
|
| 208 |
+
"outputs": [],
|
| 209 |
+
"source": [
|
| 210 |
+
"%%bash\n",
|
| 211 |
+
"# Convert Text Encoder\n",
|
| 212 |
+
"unset PYTHONPATH\n",
|
| 213 |
+
"unset LD_LIBRARY_PATH\n",
|
| 214 |
+
"source /opt/qcom/aistack/qairt/2.37.1.250807/bin/envsetup.sh\n",
|
| 215 |
+
"\n",
|
| 216 |
+
"qnn-onnx-converter \\\n",
|
| 217 |
+
" --input_network ./model/onnx/text_encoder.onnx \\\n",
|
| 218 |
+
" --input_dim text_ids 1,128 \\\n",
|
| 219 |
+
" --input_dim style_ttl 1,50,256 \\\n",
|
| 220 |
+
" --input_dim text_mask 1,1,128 \\\n",
|
| 221 |
+
" --output_path ./QNN_Models/text_encoder_htp.cpp \\\n",
|
| 222 |
+
" --input_list ./calibration_data/text_encoder_input_list.txt \\\n",
|
| 223 |
+
" --param_quantizer tf \\\n",
|
| 224 |
+
" --act_quantizer tf \\\n",
|
| 225 |
+
" --weights_bitwidth 8 \\\n",
|
| 226 |
+
" --act_bitwidth 8 \\\n",
|
| 227 |
+
" --float_bitwidth 32"
|
| 228 |
+
]
|
| 229 |
+
},
|
| 230 |
+
{
|
| 231 |
+
"cell_type": "code",
|
| 232 |
+
"execution_count": 8,
|
| 233 |
+
"metadata": {},
|
| 234 |
+
"outputs": [
|
| 235 |
+
{
|
| 236 |
+
"name": "stdout",
|
| 237 |
+
"output_type": "stream",
|
| 238 |
+
"text": [
|
| 239 |
+
"SDK environment now set up; additionally you may now run devtool to perform development tasks.\n",
|
| 240 |
+
"Run devtool --help for further details.\n",
|
| 241 |
+
"[INFO] QAIRT_SDK_ROOT=/opt/qcom/aistack/qairt/2.37.1.250807\n",
|
| 242 |
+
"[WARN] QNN_SDK_ROOT/SNPE_ROOT set to QAIRT_SDK_ROOT for backwards compatibility and will be deprecated in a future release.\n",
|
| 243 |
+
"[INFO] QAIRT SDK environment setup complete\n",
|
| 244 |
+
"2026-02-15 23:04:47,744 - INFO - qnn-model-lib-generator: Model cpp file path : QNN_Models/duration_predictor_htp.cpp\n",
|
| 245 |
+
"2026-02-15 23:04:47,744 - INFO - qnn-model-lib-generator: Model bin file path : QNN_Models/duration_predictor_htp.bin\n",
|
| 246 |
+
"2026-02-15 23:04:47,744 - INFO - qnn-model-lib-generator: Library target : [['aarch64-oe-linux-gcc11.2']]\n",
|
| 247 |
+
"2026-02-15 23:04:47,744 - INFO - qnn-model-lib-generator: Library name : duration_predictor_htp\n",
|
| 248 |
+
"2026-02-15 23:04:47,744 - INFO - qnn-model-lib-generator: Output directory : QNN_Model_lib\n",
|
| 249 |
+
"2026-02-15 23:04:47,744 - INFO - qnn-model-lib-generator: Output library name : duration_predictor_htp\n",
|
| 250 |
+
"2026-02-15 23:04:58,370 - INFO - qnn-model-lib-generator: Target: aarch64-oe-linux-gcc11.2\tLibrary: /mnt/nunnari3/devansh/supertonic2-qualcomm/QNN_Model_lib/aarch64-oe-linux-gcc11.2/libduration_predictor_htp.so\n"
|
| 251 |
+
]
|
| 252 |
+
}
|
| 253 |
+
],
|
| 254 |
+
"source": [
|
| 255 |
+
"%%bash\n",
|
| 256 |
+
"unset LD_LIBRARY_PATH\n",
|
| 257 |
+
"source /home/advantech/qcom-wayland_sdk/environment-setup-armv8-2a-qcom-linux\n",
|
| 258 |
+
"source /opt/qcom/aistack/qairt/2.37.1.250807/bin/envsetup.sh\n",
|
| 259 |
+
"\n",
|
| 260 |
+
"qnn-model-lib-generator \\\n",
|
| 261 |
+
" -c ./QNN_Models/duration_predictor_htp.cpp \\\n",
|
| 262 |
+
" -b ./QNN_Models/duration_predictor_htp.bin \\\n",
|
| 263 |
+
" -o ./QNN_Model_lib/ \\\n",
|
| 264 |
+
" -t aarch64-oe-linux-gcc11.2"
|
| 265 |
+
]
|
| 266 |
+
}
|
| 267 |
+
],
|
| 268 |
+
"metadata": {
|
| 269 |
+
"kernelspec": {
|
| 270 |
+
"display_name": "Python 3",
|
| 271 |
+
"language": "python",
|
| 272 |
+
"name": "python3"
|
| 273 |
+
},
|
| 274 |
+
"language_info": {
|
| 275 |
+
"codemirror_mode": {
|
| 276 |
+
"name": "ipython",
|
| 277 |
+
"version": 3
|
| 278 |
+
},
|
| 279 |
+
"file_extension": ".py",
|
| 280 |
+
"mimetype": "text/x-python",
|
| 281 |
+
"name": "python",
|
| 282 |
+
"nbconvert_exporter": "python",
|
| 283 |
+
"pygments_lexer": "ipython3",
|
| 284 |
+
"version": "3.10.12"
|
| 285 |
+
}
|
| 286 |
+
},
|
| 287 |
+
"nbformat": 4,
|
| 288 |
+
"nbformat_minor": 4
|
| 289 |
+
}
|
board_outputs/samples/final_reference_output.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0da80426dd249ac18147756a29f4f2833083ceecff09a59cfdab17679306eb09
|
| 3 |
+
size 1179692
|
calibration_data/calibration_summary.json
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"num_samples": 10,
|
| 3 |
+
"samples": [
|
| 4 |
+
{
|
| 5 |
+
"sample_id": "sample_001",
|
| 6 |
+
"text": "Hello world, this is a test.",
|
| 7 |
+
"voice": "F1",
|
| 8 |
+
"lang": "en",
|
| 9 |
+
"category": "short",
|
| 10 |
+
"diffusion_steps": 10,
|
| 11 |
+
"seed": 42
|
| 12 |
+
},
|
| 13 |
+
{
|
| 14 |
+
"sample_id": "sample_002",
|
| 15 |
+
"text": "Good morning everyone.",
|
| 16 |
+
"voice": "F1",
|
| 17 |
+
"lang": "en",
|
| 18 |
+
"category": "short",
|
| 19 |
+
"diffusion_steps": 10,
|
| 20 |
+
"seed": 100
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"sample_id": "sample_003",
|
| 24 |
+
"text": "The weather is nice today.",
|
| 25 |
+
"voice": "F1",
|
| 26 |
+
"lang": "en",
|
| 27 |
+
"category": "short",
|
| 28 |
+
"diffusion_steps": 10,
|
| 29 |
+
"seed": 150
|
| 30 |
+
},
|
| 31 |
+
{
|
| 32 |
+
"sample_id": "sample_004",
|
| 33 |
+
"text": "The quick brown fox jumps over the lazy dog. This sentence contains every letter of the alphabet.",
|
| 34 |
+
"voice": "F1",
|
| 35 |
+
"lang": "en",
|
| 36 |
+
"category": "medium",
|
| 37 |
+
"diffusion_steps": 10,
|
| 38 |
+
"seed": 200
|
| 39 |
+
},
|
| 40 |
+
{
|
| 41 |
+
"sample_id": "sample_005",
|
| 42 |
+
"text": "Machine learning models require careful calibration to ensure accuracy on edge devices.",
|
| 43 |
+
"voice": "F1",
|
| 44 |
+
"lang": "en",
|
| 45 |
+
"category": "medium",
|
| 46 |
+
"diffusion_steps": 10,
|
| 47 |
+
"seed": 300
|
| 48 |
+
},
|
| 49 |
+
{
|
| 50 |
+
"sample_id": "sample_006",
|
| 51 |
+
"text": "Text to speech synthesis has improved dramatically with the advent of neural networks and deep learning.",
|
| 52 |
+
"voice": "F1",
|
| 53 |
+
"lang": "en",
|
| 54 |
+
"category": "medium",
|
| 55 |
+
"diffusion_steps": 10,
|
| 56 |
+
"seed": 350
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"sample_id": "sample_007",
|
| 60 |
+
"text": "Artificial intelligence has revolutionized many aspects of our daily lives, from smartphone assistants to recommendation systems. The deployment of neural networks on edge devices requires careful optimization, including quantization and calibration, to maintain accuracy while meeting strict latency and power constraints.",
|
| 61 |
+
"voice": "F1",
|
| 62 |
+
"lang": "en",
|
| 63 |
+
"category": "long",
|
| 64 |
+
"diffusion_steps": 10,
|
| 65 |
+
"seed": 400
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"sample_id": "sample_008",
|
| 69 |
+
"text": "Qualcomm's Hexagon processor provides dedicated hardware acceleration for neural network inference. By leveraging the tensor processing units and optimized kernels, developers can achieve real-time performance for complex models like text-to-speech systems on mobile and edge devices.",
|
| 70 |
+
"voice": "F1",
|
| 71 |
+
"lang": "en",
|
| 72 |
+
"category": "long",
|
| 73 |
+
"diffusion_steps": 10,
|
| 74 |
+
"seed": 450
|
| 75 |
+
},
|
| 76 |
+
{
|
| 77 |
+
"sample_id": "sample_009",
|
| 78 |
+
"text": "Numbers: 1, 2, 3, 4, 5. Dates: January 1st, 2024. Time: 3:45 PM.",
|
| 79 |
+
"voice": "F1",
|
| 80 |
+
"lang": "en",
|
| 81 |
+
"category": "numbers",
|
| 82 |
+
"diffusion_steps": 10,
|
| 83 |
+
"seed": 500
|
| 84 |
+
},
|
| 85 |
+
{
|
| 86 |
+
"sample_id": "sample_010",
|
| 87 |
+
"text": "Dr. Smith's presentation at 9:00 AM covered topics including: AI, ML, NLP, and TTS. The conference runs from Mon. to Fri.",
|
| 88 |
+
"voice": "F1",
|
| 89 |
+
"lang": "en",
|
| 90 |
+
"category": "abbreviations",
|
| 91 |
+
"diffusion_steps": 10,
|
| 92 |
+
"seed": 600
|
| 93 |
+
}
|
| 94 |
+
],
|
| 95 |
+
"model_info": {
|
| 96 |
+
"sample_rate": 44100,
|
| 97 |
+
"base_chunk_size": 512,
|
| 98 |
+
"chunk_compress_factor": 6,
|
| 99 |
+
"latent_dim": 24,
|
| 100 |
+
"effective_chunk_size": 3072
|
| 101 |
+
}
|
| 102 |
+
}
|
calibration_data/duration_predictor_input_list.txt
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
calibration_data/sample_001/duration_predictor/input_text_ids.raw calibration_data/sample_001/duration_predictor/input_style_dp.raw calibration_data/sample_001/duration_predictor/input_text_mask.raw
|
| 2 |
+
calibration_data/sample_002/duration_predictor/input_text_ids.raw calibration_data/sample_002/duration_predictor/input_style_dp.raw calibration_data/sample_002/duration_predictor/input_text_mask.raw
|
| 3 |
+
calibration_data/sample_003/duration_predictor/input_text_ids.raw calibration_data/sample_003/duration_predictor/input_style_dp.raw calibration_data/sample_003/duration_predictor/input_text_mask.raw
|
| 4 |
+
calibration_data/sample_004/duration_predictor/input_text_ids.raw calibration_data/sample_004/duration_predictor/input_style_dp.raw calibration_data/sample_004/duration_predictor/input_text_mask.raw
|
| 5 |
+
calibration_data/sample_005/duration_predictor/input_text_ids.raw calibration_data/sample_005/duration_predictor/input_style_dp.raw calibration_data/sample_005/duration_predictor/input_text_mask.raw
|
| 6 |
+
calibration_data/sample_006/duration_predictor/input_text_ids.raw calibration_data/sample_006/duration_predictor/input_style_dp.raw calibration_data/sample_006/duration_predictor/input_text_mask.raw
|
| 7 |
+
calibration_data/sample_007/duration_predictor/input_text_ids.raw calibration_data/sample_007/duration_predictor/input_style_dp.raw calibration_data/sample_007/duration_predictor/input_text_mask.raw
|
| 8 |
+
calibration_data/sample_008/duration_predictor/input_text_ids.raw calibration_data/sample_008/duration_predictor/input_style_dp.raw calibration_data/sample_008/duration_predictor/input_text_mask.raw
|
| 9 |
+
calibration_data/sample_009/duration_predictor/input_text_ids.raw calibration_data/sample_009/duration_predictor/input_style_dp.raw calibration_data/sample_009/duration_predictor/input_text_mask.raw
|
| 10 |
+
calibration_data/sample_010/duration_predictor/input_text_ids.raw calibration_data/sample_010/duration_predictor/input_style_dp.raw calibration_data/sample_010/duration_predictor/input_text_mask.raw
|
calibration_data/sample_001/duration_predictor/input_style_dp.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:29e4e81fc88383a584874cb7a228697eaf6447d0b043415dcd1fd34427e7bdec
|
| 3 |
+
size 512
|
calibration_data/sample_001/duration_predictor/input_style_dp.shape.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
8,
|
| 5 |
+
16
|
| 6 |
+
],
|
| 7 |
+
"dtype": "float32",
|
| 8 |
+
"size_bytes": 512
|
| 9 |
+
}
|
calibration_data/sample_001/duration_predictor/input_text_ids.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fb44d944e1589f9fe1361fe633dd9af6c708c1a2b4a7b49835dc6465ab446d4c
|
| 3 |
+
size 512
|
calibration_data/sample_001/duration_predictor/input_text_ids.shape.json
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
128
|
| 5 |
+
],
|
| 6 |
+
"dtype": "int64",
|
| 7 |
+
"size_bytes": 1024
|
| 8 |
+
}
|
calibration_data/sample_001/duration_predictor/input_text_mask.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1d4e653f366878929e48d8bdef353484ad32ddfe6afe9114e410d648065fd641
|
| 3 |
+
size 512
|
calibration_data/sample_001/duration_predictor/input_text_mask.shape.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
1,
|
| 5 |
+
128
|
| 6 |
+
],
|
| 7 |
+
"dtype": "float32",
|
| 8 |
+
"size_bytes": 512
|
| 9 |
+
}
|
calibration_data/sample_001/duration_predictor/output_duration.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:81a63a40052325815b9f6a1aa660dde1ecb7f4c1b700912e38a88c40a39fbe7c
|
| 3 |
+
size 4
|
calibration_data/sample_001/duration_predictor/output_duration.shape.json
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1
|
| 4 |
+
],
|
| 5 |
+
"dtype": "float32",
|
| 6 |
+
"size_bytes": 4
|
| 7 |
+
}
|
calibration_data/sample_001/metadata.json
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"text": "Hello world, this is a test.",
|
| 3 |
+
"voice": "F1",
|
| 4 |
+
"lang": "en",
|
| 5 |
+
"steps": 10,
|
| 6 |
+
"seed": 42,
|
| 7 |
+
"category": "short"
|
| 8 |
+
}
|
calibration_data/sample_001/text_encoder/input_style_ttl.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ba4cccfeb373f92b7124290fdf35136085c0e4c91fe4b8c6d0010d360af25249
|
| 3 |
+
size 51200
|
calibration_data/sample_001/text_encoder/input_style_ttl.shape.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
50,
|
| 5 |
+
256
|
| 6 |
+
],
|
| 7 |
+
"dtype": "float32",
|
| 8 |
+
"size_bytes": 51200
|
| 9 |
+
}
|
calibration_data/sample_001/text_encoder/input_text_ids.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fb44d944e1589f9fe1361fe633dd9af6c708c1a2b4a7b49835dc6465ab446d4c
|
| 3 |
+
size 512
|
calibration_data/sample_001/text_encoder/input_text_ids.shape.json
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
128
|
| 5 |
+
],
|
| 6 |
+
"dtype": "int64",
|
| 7 |
+
"size_bytes": 1024
|
| 8 |
+
}
|
calibration_data/sample_001/text_encoder/input_text_mask.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1d4e653f366878929e48d8bdef353484ad32ddfe6afe9114e410d648065fd641
|
| 3 |
+
size 512
|
calibration_data/sample_001/text_encoder/input_text_mask.shape.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
1,
|
| 5 |
+
128
|
| 6 |
+
],
|
| 7 |
+
"dtype": "float32",
|
| 8 |
+
"size_bytes": 512
|
| 9 |
+
}
|
calibration_data/sample_001/text_encoder/output_text_emb.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c2f1502e1f35030bb38ae46be3ffa9b0583832d109c84f461c45398fbf93113e
|
| 3 |
+
size 131072
|
calibration_data/sample_001/text_encoder/output_text_emb.shape.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
256,
|
| 5 |
+
128
|
| 6 |
+
],
|
| 7 |
+
"dtype": "float32",
|
| 8 |
+
"size_bytes": 131072
|
| 9 |
+
}
|
calibration_data/sample_001/vector_estimator/step_000/input_current_step.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:df3f619804a92fdb4057192dc43dd748ea778adc52bc498ce80524c014b81119
|
| 3 |
+
size 4
|
calibration_data/sample_001/vector_estimator/step_000/input_current_step.shape.json
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1
|
| 4 |
+
],
|
| 5 |
+
"dtype": "float32",
|
| 6 |
+
"size_bytes": 4
|
| 7 |
+
}
|
calibration_data/sample_001/vector_estimator/step_000/input_latent_mask.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2819331d90a416c644b161b28b30415dace23b2184f56659f2dec82c014e16ab
|
| 3 |
+
size 768
|
calibration_data/sample_001/vector_estimator/step_000/input_latent_mask.shape.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
1,
|
| 5 |
+
192
|
| 6 |
+
],
|
| 7 |
+
"dtype": "float32",
|
| 8 |
+
"size_bytes": 768
|
| 9 |
+
}
|
calibration_data/sample_001/vector_estimator/step_000/input_noisy_latent.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2cf56269c3d938b6ceef88966e93251ea2fd8f31cf1b80f9afae21e774561b2a
|
| 3 |
+
size 110592
|
calibration_data/sample_001/vector_estimator/step_000/input_noisy_latent.shape.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
144,
|
| 5 |
+
192
|
| 6 |
+
],
|
| 7 |
+
"dtype": "float32",
|
| 8 |
+
"size_bytes": 110592
|
| 9 |
+
}
|
calibration_data/sample_001/vector_estimator/step_000/input_style_ttl.raw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ba4cccfeb373f92b7124290fdf35136085c0e4c91fe4b8c6d0010d360af25249
|
| 3 |
+
size 51200
|
calibration_data/sample_001/vector_estimator/step_000/input_style_ttl.shape.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"shape": [
|
| 3 |
+
1,
|
| 4 |
+
50,
|
| 5 |
+
256
|
| 6 |
+
],
|
| 7 |
+
"dtype": "float32",
|
| 8 |
+
"size_bytes": 51200
|
| 9 |
+
}
|