--- license: apache-2.0 language: en tags: - zipformer - ctc - streaming - icefall - k2 - safetensors base_model: csukuangfj/icefall-asr-librispeech-streaming-zipformer-small-2024-03-18 --- # zipformer-streaming-ctc-small-en Streaming Zipformer2 encoder with a CTC head, trained on LibriSpeech by the k2-fsa / icefall project (`--causal 1 --use-ctc 1`, chunk sizes 16/32/64 at 50 Hz, left context 64/128/256), repackaged as `safetensors` for the [maxi-ml](https://github.com/maxi-tools/maxi-ml) native port (`asr-models::zipformer`). - **Source checkpoint:** `csukuangfj/icefall-asr-librispeech-streaming-zipformer-small-2024-03-18`, `exp-ctc-rnnt-small`, weights averaged over epochs 28–30 exactly as the upstream `ctc-epoch-30-avg-3-chunk-16-left-128.onnx` export (`average_checkpoints_with_averaged_model(epoch-27.pt, epoch-30.pt)`). - **Converter:** `scripts/convert_zipformer_checkpoint.py` in maxi-ml. Only the inference parameters are kept (`encoder_embed.*`, `encoder.*`, `ctc_output.*`); the transducer decoder/joiner are dropped. - **Files:** `model.safetensors` (fp32, 22.46 M parameters), `config.json` (architecture hyper-parameters), `tokens.txt` (BPE 500 + ``). - **Features:** 80-bin Kaldi fbank, 16 kHz, dither 0, snip_edges false, high_freq −400. - **CoreML packages:** - `coreml/zipformer-chunk{16,8}-left128.mlpackage`: the icefall streaming forward traced with coremltools (`scripts/coreml/convert_zipformer_to_coreml.py`), caches in `MLState`. Runs on the GPU; the ANE compiler rejects it. - `coreml-ane/zipformer-chunk{16,8}-left128.mlpackage` and `…-stateless.mlpackage`: the same step emitted directly as a MIL program in the `(B, C, 1, S)` layout the ANE accepts (`maxi-ml convert-zipformer-ane`, `maxi_ml_compile_mil::zipformer_emitter`, maxi-ml commit bc970670e), caches packed into 14 `MLState` tensors, or carried as inputs/outputs in the `-stateless` twin for macOS 27.0, which cannot load `MLState` programs. Both have the traced package's I/O (`x: [1, 2·chunk+13, 80]` fp32 in, `log_probs: [1, chunk/2, 500]` fp32 out; the stateless one adds `` inputs and `_out` outputs). Measured with `examples/zipformer_latency.rs`: 1.6–2.5 ms per 320 ms chunk on the ANE across M3 / M4 Pro / M5 Max, 4–6 ms at microphone pacing, same WER as the fp32 MLX port on the corpus (one near-tie word can differ at chunk 16 — fp16 end to end). - **License:** Apache-2.0, as upstream.