gravel-ctc-440m

A 440M CTC English ASR model: the conformer speech encoder of ibm-granite/granite-speech-4.1-2b-nar, extracted, LoRA-finetuned with a BPE-256 CTC head, and merged into a standalone greedy-CTC recognizer.

Gravel is granite broken into smaller pieces. This model is the 440M encoder chipped out of IBM's 2B+ ibm-granite/granite-speech-4.1-2b-nar plus a small CTC head. It is not an IBM release, it is a derivative of the granite model.

What it is

  • Encoder: the granite_speech conformer encoder from ibm-granite/granite-speech-4.1-2b-nar instantiated from transformers.models.granite_speech classes, weights extracted, then LoRA-adapted (r=16 on attention + macaron-FFN linears) and merged.
  • Head: a new BPE-256 head (257 with blank) behind a 50โ†’25 Hz average-pool-initialized depthwise downsample.
  • Frontend: log-mel (n_fft 512, win 400, hop 160, 80 mels) โ†’ Whisper-style per-utterance norm โ†’ 2-frame stack (160-dim @ 50 Hz), computed inside the model โ€” feed raw 16 kHz PCM.

How it was made

  1. Extract the encoder weights + config from ibm-granite/granite-speech-4.1-2b-nar.
  2. Attach the 50โ†’25 Hz downsample + new BPE-256 CTC head (the vocab is a 256-piece BPE)
  3. Train with CTC + an emission penalty (a from-scratch BPE-256 head blank-collapses without it) on a large English mix, backbone frozen, {LoRA, downsample, head} trainable.
  4. Merge LoRA โ†’ this standalone checkpoint.

It is used as the knowledge-distillation teacher for FUTO's streaming ASR models.

Usage

import torch, torchaudio
from transformers import AutoModel

model = AutoModel.from_pretrained("futo-org/gravel-ctc-440m", trust_remote_code=True).eval()

wav, sr = torchaudio.load("speech.wav")           # any mono/stereo file
wav = torchaudio.functional.resample(wav.mean(0), sr, 16000)
print(model.transcribe(wav))                       # greedy CTC text

Or via pipeline:

from transformers import pipeline
asr = pipeline("automatic-speech-recognition", model="futo-org/gravel-ctc-440m",
               trust_remote_code=True)
print(asr("speech.wav")["text"])

Lineage & license

Derived from ibm-granite/granite-speech-4.1-2b-nar (Apache-2.0, IBM).

Modifications: encoder extraction, 50โ†’25 Hz downsample, BPE-256 CTC head, LoRA finetune (merged).

Downloads last month
60
Safetensors
Model size
0.4B params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for futo-org/gravel-ctc-440m

Finetuned
(4)
this model