Releases: arcosoph/nanowakeword
Release list
v3.0.1
Reduced 🤏 augmentation_rounds in E2E model training notebook because it takes a lot of time to generate data
Full Changelog: v3.0.0...v3.0.1
v3.0.0
[3.0.0] - 2026-08-19
🚀 Major Update: End-to-End (E2E) Model Training
Added
-
End-to-End (E2E) Training - train wake word models directly on raw PCM audio waveforms. The model learns its own feature extraction internally, eliminating the need for pre-computed mel-spectrogram embeddings or a separate embedding model.
- Three E2E architectures available via
model_type:e2e_dnn- Lightweight DNN with aRawAudioFrontend(fastest, smallest)e2e_cnn- CNN with aRawAudioFrontendandRawAudioBackbone(balanced accuracy/size)e2e_quartznet- QuartzNet-style blocks with configurablee2e_quartznet_config(most expressive)
- E2E-specific config parameters:
mode: "e2e",clip_samples(fixed audio length in samples),e2e_frontend_channels,e2e_frontend_depth,e2e_quartznet_config - E2E data pipeline uses
data_generation_manifest(augmented WAV clips) anddata_manifest(WAV directories) instead offeature_generation_manifest/.npyfiles - E2E ONNX export includes a
mode: "e2e"metadata tag and patchesMelSpectrogramlayers for ONNX-safe STFT - Colab notebook:
notebooks/Train_Your_First_E2E_Wake_Word_Model.ipynb - Example config:
examples/e2e_training_config.yaml
- Three E2E architectures available via
-
E2E Inference in
NanoInterpreter- E2E models are auto-detected via themodemetadata tag in the ONNX file. When an E2E model is loaded, the interpreter setspreprocessor = None(no mel-spectrogram extraction needed), accumulates raw audio in an internal buffer, and runs inference directly on raw PCM clips ofclip_sampleslength once enough audio is collected. This means E2E models require zero external dependencies - no embedding model, no mel-spectrogram model, nothing. A single.onnxfile is fully self-contained. -
Custom E2E Architectures -
model_type: "custom"now works in E2E mode. Provide acustom_model_configwithmodule_pathandclass_namepointing to any PyTorchnn.Modulethat accepts raw waveform input and returns an embedding. The custom class receivesinput_shape,embedding_dim,dropout_prob,activation_fn,config, andfrontend_channelskwargs (with signature-based filtering). -
E2E Cascade Support - E2E models can be used in 2-stage cascade mode just like embedding models. The gate model can be an E2E model or a lightweight embedding model; the interpreter automatically detects each model's type.
-
E2E Remote Verifier - the WebSocket server supports a new
e2epipeline mode (--pipeline e2e). The edge device sends raw PCM audio and the server runs the full E2E model directly. Also added_TAG_AUDIO = 0x03wire protocol tag for raw audio transmission in bothfullande2epipeline modes. -
E2E Distillation -
distill_model_e2e()trains a tinye2e_dnnstudent model from an E2E teacher, producing a compact_lite.onnxgate model. Configurable viadistillation:block (student_layer_size,student_n_blocks,student_embedding_dim,student_dropout_prob).
Changed
NanoInterpreternow acceptsvad_thresholdandenable_noise_reductionas kwargs onload_model(), in addition to the existing constructor parameters.predict_clip()auto-detects E2E models viaself.preprocessor is Noneand routes raw audio directly topredict()without chunking for feature extraction.- ONNX export now writes
modemetadata ("e2e"or"embedding") to the model file for reliable detection at inference time.
v2.1.4
v2.1.3
v2.1.2
v2.1.0
v2.0.5
v2.0.4
v2.0.3
Update v2.0.3 - Improve model performance
v2.0.2
What's Changed
- Please see full Changelog
New Contributors
- @shepardxia made their first contribution in #18 . Thank you @shepardxia
Full Changelog: v2.0.1...v2.0.2