--- model_name: Akiki VAD 1.0 license: apache-2.0 library_name: akiki pipeline_tag: audio-classification inference: false tags: - voice-activity-detection - vad - audio - streaming - rust - safetensors - onnx - pytorch datasets: - Akiki-AI/akiki-vad-silero623-v1-commonvoice - Akiki-AI/akiki-vad-silero623-v1-esc10 - Akiki-AI/akiki-vad-silero623-v1-fleurs - Akiki-AI/akiki-vad-silero623-v1-librispeech - Akiki-AI/akiki-vad-silero623-v1-mixtures-cc-by-3.0-and-cc-by-4.0 - Akiki-AI/akiki-vad-silero623-v1-mixtures-cc-by-4.0 - Akiki-AI/akiki-vad-silero623-v1-mixtures-cc-by-4.0-and-cc-by-sa-1.0 - Akiki-AI/akiki-vad-silero623-v1-mixtures-cc-by-4.0-and-cc-by-sa-3.0 - Akiki-AI/akiki-vad-silero623-v1-mixtures-cc-by-4.0-and-cc-by-sa-4.0 - Akiki-AI/akiki-vad-silero623-v1-mixtures-cc-by-official-esc-10-subset-and-cc-by-4.0 - Akiki-AI/akiki-vad-silero623-v1-musan-music-cc-by-3.0 - Akiki-AI/akiki-vad-silero623-v1-musan-music-cc-by-sa-1.0 - Akiki-AI/akiki-vad-silero623-v1-musan-music-cc-by-sa-2.5 - Akiki-AI/akiki-vad-silero623-v1-musan-music-cc-by-sa-3.0 - Akiki-AI/akiki-vad-silero623-v1-musan-music-cc-by-sa-4.0 - Akiki-AI/akiki-vad-silero623-v1-musan-noise - Akiki-AI/akiki-vad-silero623-v1-peoples-speech - Akiki-AI/akiki-vad-silero623-v1-vctk - Akiki-AI/akiki-vad-silero623-v1-voxpopuli - Akiki-AI/akiki-vad-silero623-v1-vystadial-cs - Akiki-AI/akiki-vad-silero623-v1-vystadial-en - Akiki-AI/akiki-vad-silero623-v1-yodas --- # Akiki VAD 1.0 Akiki VAD is a compact, causal voice activity detection model for streaming 16 kHz audio. It returns a speech probability every 16 ms and can be used to identify speech frames before transcription or other audio processing. [Akiki VAD collection](https://huggingface.co/collections/Akiki-AI/akiki-vad-6ade6178d49bbdd8dd83e493) ## Model details | Property | Value | |---|---| | Release ID | `akiki-vad-1.0` | | Source release | `teacher-only623-v2-s1730` | | Architecture | Convolutional network with a 128-unit GRU | | Parameters | 210,561 | | Audio input | Mono, finite float32 samples at 16,000 Hz | | Output interval | 256 samples / 16 ms | | Past audio context | 320 samples / 20 ms, plus recurrent state | | Default speech threshold | 0.5 | | Inference | `akiki` Python package, backed by the Akiki Rust engine | | Weights | Native FP32 safetensors; optional PyTorch and ONNX exports | | Python package | [akiki on PyPI](https://pypi.org/project/akiki/) | | Licence | Apache-2.0 | The model includes the waveform frontend and maintains recurrent state. Each inference step consumes 320 past samples followed by 256 new samples. The waveform frontend and convolutional encoder follow the Silero VAD v5 design. Akiki reimplements that design with a GRU in place of the LSTM and a 16 ms prediction hop. The trainable weights were learned from random initialization using Silero VAD 6.2.3 supervision. **Fast CPU inference is built into the Python package:** the default INT8 path measured **8.90 µs per 16 ms frame through `VAD.push()`** on a Ryzen 9 9900X. See [engine benchmarks](#fast-cpu-inference-with-the-akiki-rust-engine). ## Quickstart Install [akiki](https://pypi.org/project/akiki/) from PyPI: ```bash pip install akiki akiki vad recording.wav ``` The package includes the fast Akiki Rust inference engine and this model's weights on supported platforms. Inference runs locally. You can start using the model without downloading files from this repository or building Rust. ```python import soundfile as sf from akiki import VAD audio, sample_rate = sf.read("recording.wav", dtype="float32") with VAD() as vad: for frame in vad.push(audio, sample_rate=sample_rate): print(frame.start_seconds, frame.end_seconds, frame.probability, frame.speech) vad.reset() # Start a new recording. ``` Audio must be finite mono float32 at 16 kHz. `push()` accepts arbitrary buffer sizes and returns a probability and speech decision for each complete 256-sample frame (16 ms). An incomplete final frame remains pending. Use one detector per stream and call `reset()` between independent recordings. The default speech threshold is 0.5. Use `VAD(threshold=0.6)` or `akiki vad recording.wav --threshold 0.6` to change it; probabilities are always returned. Applications can define their own rules for joining frames into speech segments. The repository's [example.py](example.py) uses the same installed package and prints frames as JSON. Its [requirements.txt](requirements.txt) contains `akiki`: ```bash python example.py recording.wav ``` ## Fast CPU inference with the Akiki Rust engine `pip install akiki` includes the purpose-built Akiki Rust inference engine and this model's weights on supported platforms. One Python API handles streaming, state, buffering and timestamps, with CPU kernels specialized for this VAD. Normal use requires no separate PyTorch/ONNX runtime or Rust build. **The default INT8 path processes a 16 ms audio frame in 8.90 µs through the public Python `VAD.push()` API** in our recorded CPU benchmark. The native call takes 3.78 µs with prepared pointers. RealFFT stays FP32 for every weight precision. ![Akiki VAD 1.0 native and public Python API latency by precision](assets/package-latency.png) Measured with `akiki` 0.0.5 on an AMD Ryzen 9 9900X, one pinned CPU core: three fresh processes per case, 2,000 warmup calls and 7,500 timed calls each. Values are medians of process medians. Whiskers show the range of those three medians, not a confidence interval. Python timing includes input validation, buffering, frontend, recurrent state, timestamps and frame output. Model loading/conversion, audio decoding and acquisition are excluded. Actual speed depends on the CPU and workload; accuracy comparisons are reported separately. ### Recorded comparison with other engines and VAD models The earlier benchmark compared the Akiki Rust engine with ONNX Runtime, PyTorch eager, Candle, tract, Burn Flex and RTen, alongside original TEN-VAD and Silero v5. **The Akiki model in this historical comparison is version 0.2.0**, before the production RealFFT migration; these are not speedup measurements for version 1.0. The chart above measures the current 1.0 model through `akiki`. ![Historical FP32 CPU latency: Akiki, TEN-VAD and Silero across inference engines](assets/engine-comparison.png) All rows include the waveform frontend. Native Rust excludes Python; ONNX/PyTorch include their host-call overhead. The archived campaigns use the same CPU and one thread, with different fixtures and warmup/repetition counts. 16 ms-hop medians are multiplied by two to normalize compute per 32 ms audio; this is not a measured two-call median or audio acquisition latency. The hatched TEN row is a measured RealFFT prototype. Framework neural ports share a native STFT. This comparison does not isolate programming-language cost or accuracy. [Exact values, protocol and source hashes](assets/benchmark-data.json) · [Package plot SVG](assets/package-latency.svg) · [Engine comparison SVG](assets/engine-comparison.svg) ## Evaluation The following table reports the original **FP32** weights. The Python Rust runtime uses INT8 by default while keeping RealFFT FP32. Use `VAD(engine="rust", model_precision="fp32")` for the original precision; [precision-specific results](quantizations/) cover the other variants. | Benchmark | Average precision | F1 at threshold 0.5 | Precision at recall ≥95% | |---|---:|---:|---:| | TEN public test set | 98.0187% | 92.6053% | 90.6487% | | VoxConverse | 99.3045% | 94.9869% | 96.1582% | TEN evaluation covers 30 clips and 8,179 frames; VoxConverse covers 48 recordings and 999,894 frames. Both use 32 ms reference frames. Consecutive 16 ms model probabilities are averaged in pairs for scoring, without timing shifts or smoothing. Average precision is pooled across frames. Precision at recall ≥95% is measured on a threshold grid with a step of 0.01 and uses thresholds that may differ from the default 0.5. The checkpoint within each training run was selected using teacher-labelled validation data. The release seed was then chosen after comparing three seeds on TEN and VoxConverse. These benchmarks were repeatedly inspected during development, so the results are development comparisons rather than an independent final test. ## Training data and method The model was trained from random initialization using speech probabilities from Silero VAD 6.2.3 as supervision. The prepared corpus contains 357,672 training recordings (993.772 hours) and 17,540 validation recordings (28.262 hours), including labelled audio mixtures and instrumental recordings labelled as non-speech. The annotated corpus has been uploaded to the [Akiki VAD training-data collection](https://huggingface.co/collections/Akiki-AI/akiki-vad-silero-623-labelled-data-v1-6add019811a15376ccf6de02) on Hugging Face. It includes audio, 32 ms teacher targets, split assignments and provenance. The collection and all of its datasets are publicly available. Training matches the mean of two consecutive 16 ms model outputs to each 32 ms teacher target using binary cross-entropy. The targets are teacher predictions; they do not establish manually annotated speech boundaries at 16 ms resolution. Source audio was selected under a commercial-use licence allowlist. Data splits exclude source-group overlap and known benchmark audio hashes across the relevant splits. Speaker identity across source corpora has not been exhaustively checked. The [training recipe](training-recipe.json) and [provenance records](provenance/) provide the detailed training configuration, environment and run history. ## Limitations The reported results cover the recordings above. Performance across languages, speakers, recording devices and acoustic conditions is not established by these aggregate scores; assess the model on audio representative of your application. Teacher supervision can also carry over the teacher's detection errors. The 16 ms output interval describes how often predictions are produced. It does not establish 16 ms speech-boundary accuracy or end-to-end application latency. Each prediction requires the complete 256-sample frame to be available. The Python interface returns individual frame scores and decisions. Applications that need continuous speech segments must define their own rules for joining frames and handling brief pauses. ## Quantizations The following separate Hugging Face models are linked to this release as quantized derivatives and appear in its **Quantizations model tree**. All models are public and grouped in the [Akiki VAD collection](https://huggingface.co/collections/Akiki-AI/akiki-vad-6ade6178d49bbdd8dd83e493). RealFFT remains FP32 and unchanged in every variant. | Precision | Model | |---|---| | FP16 | [Akiki-AI/akiki-vad-1.0-fp16](https://huggingface.co/Akiki-AI/akiki-vad-1.0-fp16) | | BF16 | [Akiki-AI/akiki-vad-1.0-bf16](https://huggingface.co/Akiki-AI/akiki-vad-1.0-bf16) | | INT8 | [Akiki-AI/akiki-vad-1.0-int8](https://huggingface.co/Akiki-AI/akiki-vad-1.0-int8) | | INT8-FP32-INPUT | [Akiki-AI/akiki-vad-1.0-int8-fp32-input](https://huggingface.co/Akiki-AI/akiki-vad-1.0-int8-fp32-input) | | INT4 | [Akiki-AI/akiki-vad-1.0-int4](https://huggingface.co/Akiki-AI/akiki-vad-1.0-int4) | [Comparison and precision details](quantizations/) include artifact sizes and the measured TEN/VoxConverse tradeoffs. Each quantized model carries its own `model.safetensors` and `config.json`, evaluation results, source hashes and Python example. Choose the same precision through the installed Python package, for example `VAD(engine="rust", model_precision="int8", fft_precision="fp32")`. The package derives and caches the same numerical precision from bundled FP32 weights, so normal Python inference does not require a model download. ## Optional exports For custom integrations and research, [exports/](exports/) contains the original PyTorch checkpoint and ONNX export with direct tensor examples. Normal inference uses the `akiki` package above. The native safetensors weights are stored once, at the repository root, alongside `config.json`. ## Files and licence - [model.safetensors](model.safetensors) and [config.json](config.json): native weights and model geometry. - [example.py](example.py) and [requirements.txt](requirements.txt): inference through the installed `akiki` package. - [exports/](exports/): optional PyTorch and ONNX artifacts. - [release.json](release.json): release identity, metrics and artifact hashes. - [provenance/](provenance/): training, evaluation and safetensors export records. - [SHA256SUMS](SHA256SUMS): package checksums. Akiki code and weights are provided under [Apache-2.0](LICENSE). The independent Silero teacher is MIT licensed; its notice is included in [SILERO-MIT.txt](SILERO-MIT.txt). Source datasets retain their own licences and attribution, recorded in [attribution/](attribution/). Teacher weights and source audio are not included in this model package.