|
Download README.md from m96-chan/MioCodec-encoder-webgpu: direct link, hf CLI and curl.
- Browser
- Download file 4.82 kB
-
https://huggingface.co/m96-chan/MioCodec-encoder-webgpu/resolve/main/README.md
- Command line
-
hf download hf://m96-chan/MioCodec-encoder-webgpu/README.md
-
curl -L -o README.md https://huggingface.co/m96-chan/MioCodec-encoder-webgpu/resolve/main/README.md
4.82 kB
| license: mit | |
| base_model: Aratako/MioCodec-25Hz-24kHz | |
| base_model_relation: adapter | |
| language: | |
| - ja | |
| - en | |
| tags: | |
| - speaker-embedding | |
| - webgpu | |
| - browser | |
| - voice-cloning | |
| # MioCodec's speaker encoder, in one file for the browser | |
| The global-embedding path of | |
| [Aratako/MioCodec-25Hz-24kHz](https://huggingface.co/Aratako/MioCodec-25Hz-24kHz)'s | |
| encoder β reference audio in, a 128-dimensional speaker embedding out β | |
| collected into a single f32 safetensors so a browser can fetch it in one | |
| request. Built for [voxshot](https://github.com/m96-chan/voxshot). | |
| **This is a repackaging, not a new model.** No weight here was trained; every | |
| tensor is copied from one of the two sources below. | |
| | | | | |
| | --- | ---: | | |
| | `encoder-weights.safetensors` | 117,303,232 B, 99 tensors, 29,322,838 params | | |
| | `encoder-weights.json` | 8,905 B β tensor index and provenance | | |
| ## Why it exists | |
| The weights for this one path live in **two different places**: the | |
| `GlobalEncoder` (50 tensors) is in MioCodec's own checkpoint, while the WavLM | |
| front end it runs on top of is a torchaudio download. A browser should not | |
| have to know that, nor fetch a 378 MB `.pth` to use 4 MB of it. So the path is | |
| collected once, ahead of time, into one file. | |
| Only the **global** branch is included. MioCodec's encoder also produces | |
| content tokens β that half is not here, and is not needed for speaker | |
| embedding. | |
| ## What the path is | |
| ``` | |
| 24 kHz mono | |
| β symmetric zero pad | |
| β resample 24kβ16k (torchaudio's polyphase filter, precomputed | |
| here as a conv1d kernel [2, 1, 23], stride 3) | |
| β WavLM feature extractor (7 strided convs, GroupNorm on the first, GELU) | |
| β LayerNorm + Linear 512β768 | |
| β positional conv (grouped k=128, weight-norm already folded) | |
| β transformer layers 1 and 2 (12 heads; bucketed, gated relative-position | |
| bias β the global branch reads only these two) | |
| β mean of the two layers | |
| β ConvNeXt backbone, 4 blocks, 768β384 | |
| β attentive statistics pooling β Linear 768β128 β LayerNorm | |
| β 128-dim embedding | |
| ``` | |
| Two details a reimplementation gets wrong and this file cannot tell you, so | |
| they are written down here: | |
| - torchaudio's Base+ WavLM is **post-norm**, so an encoder-level LayerNorm runs | |
| between the positional-conv residual and layer 1. | |
| - the pooling softmax is over **time**, not channels. | |
| ## Naming | |
| WavLM tensors keep torchaudio's own names under a `wavlm.` prefix, the | |
| `GlobalEncoder` tensors keep MioCodec's names under `global_encoder.`, and the | |
| precomputed resampler is `resample.kernel`. `encoder-weights.json` lists every | |
| tensor with its shape. | |
| The positional convolution's weight normalization is **already folded** into | |
| its weight β there is no separate `weight_g` / `weight_v` to combine. | |
| ## Provenance | |
| Produced by [`spike/miocodec/export_encoder_weights.py`](https://github.com/m96-chan/voxshot/blob/main/spike/miocodec/export_encoder_weights.py) from: | |
| ``` | |
| Aratako/MioCodec-25Hz-24kHz model.safetensors | |
| 523,087,956 bytes | |
| sha256 60483759cde136451d53ff5a2f7e283c015758ab540de9037b5d4519366a7705 | |
| torchaudio WAVLM_BASE_PLUS wavlm_base_plus.pth | |
| 377,604,347 bytes | |
| sha256 136a3e720c04f2c77bf7a4dc6a3868b14d5a2c145a988114b733cb1a8428be98 | |
| ``` | |
| Both digests are recorded in `encoder-weights.json` and cross-checked at export | |
| time against the golden this port is verified with, so the weights and the | |
| checkpoints they came from cannot drift apart unnoticed. | |
| ## Accuracy | |
| The TypeScript port that consumes this file was checked stage by stage against | |
| the reference encoder running under torch, on two real reference clips and one | |
| synthetic input. Every stage agrees to 1e-4 relative to its own peak, except | |
| four ConvNeXt stages on one clip which reach 1e-4 in the reference's *own* | |
| f32-versus-f64 comparison β conditioning of that clip, not port error. The | |
| final embedding agrees to 7.3e-7. | |
| ## License and attribution | |
| MIT, which both sources carry. | |
| - **MioCodec**: [Aratako/MioCodec-25Hz-24kHz](https://huggingface.co/Aratako/MioCodec-25Hz-24kHz) by Chihiro Arata, MIT. | |
| - **WavLM Base+**: originally published by the authors of *WavLM* (Chen et al., 2022) under the MIT License and redistributed by torchaudio under the same license. | |
| [Source](https://github.com/microsoft/unilm/tree/65f15af2a307ebb64cfb25adf54375b002e6fe8d/wavlm#pre-trained-models) Β· | |
| [License](https://github.com/microsoft/unilm/blob/65f15af2a307ebb64cfb25adf54375b002e6fe8d/LICENSE) | |
| ```bibtex | |
| @article{chen2022wavlm, | |
| title = {WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing}, | |
| author = {Chen, Sanyuan and Wang, Chengyi and Chen, Zhengyang and others}, | |
| journal = {IEEE Journal of Selected Topics in Signal Processing}, | |
| year = {2022} | |
| } | |
| ``` | |