Benchmarks

Un RTF (facteur temps réel) inférieur à 1,0 signifie plus rapide que le temps réel.

Apple Silicon (MLX + CoreML)

Tous les benchmarks sur Apple M5 Pro, 48 Go, macOS 25.5 avec des builds release et une metallib compilée.

ASR — Taux d'erreur sur les mots

Évalué sur LibriSpeech test-clean (2620 énoncés, ~5,4 heures de parole lue en anglais).

EngineQuantWER%RTFxRTPeak RSS
Qwen3-ASR 1.7B MLX5-bit1.320.02736.4×1.92 GB
Qwen3-ASR 1.7B MLX8-bit1.520.03330.5×2.7 GB
Qwen3-ASR 0.6B MLX8-bit1.820.01566.0×1.3 GB
Qwen3-ASR 0.6B MLX5-bit1.740.01470.5×1.03 GB
WhisperKit Large-v3 TurboFP161.710.08411.9×0.4 GB
WhisperASR native CoreMLFP161.400.08914.0×384 MB
Qwen3-ASR 0.6B MLX4-bit2.200.01285.6×1.0 GB
Parakeet TDT v3INT82.370.009117.4×0.9 GB
Qwen3-ASR 0.6B CoreMLINT83.020.09810.2×1.4 GB
Omnilingual CTC 300M MLX4-bit4.260.005222.1×0.4 GB
Omnilingual CTC 300M CoreMLINT85.670.1287.8×0.5 GB
Nemotron StreamingINT82.820.05817.1×961 MB

Choix clés : Qwen3-ASR MLX 1.7B 5-bit devient le leader en précision à 1.32% WER : il bat WhisperKit Large-v3 Turbo (1.71%) et notre 1.7B 8-bit (1.52%), avec ~600 MB de RSS pic en moins que le 8-bit et 23% de vitesse en plus. Parakeet TDT v3 est le plus rapide pour l’anglais (117× temps réel, 25 langues européennes). Omnilingual CTC 300M MLX 4-bit domine le débit multilingue : 222× temps réel, 384 MB pic, 1 672 langues.

La ligne Qwen3-ASR 0.6B CoreML reflète l’encodeur chunked block-attention reconstruit (aufklarer/Qwen3-ASR-CoreML). L’ancien export exécutait une self-attention globale non masquée sur des mels paddés à zéro et émettait <|im_end|> juste après le premier point final (24.88% WER sur le même fixture avant reconstruction).

Stabilité en forme longue (charge Neural Engine soutenue)

200 énoncés LibriSpeech traités séquentiellement (~30 min d'audio, M5 Pro). Vérifie si le WER ou la latence se dégradent sous transcription soutenue.

MétriquePremier 25%Dernier 25%Global
WER%1,301,232,43
RTF0,6720,4000,539

Aucune dégradation détectée. Le WER reste stable tout au long de la session. Le RTF s'améliore en fait à mesure que CoreML préchauffe son cache de plan d'exécution. Aucune limitation thermique après 42 minutes d'inférence Neural Engine continue. Parakeet traite chaque chunk indépendamment — pas d'accumulation d'état entre chunks.

Résultats multilingues (FLEURS)

CER utilisé pour les langues CJK (pas de séparation de mots). Parakeet prend en charge environ 25 langues européennes (pas de CJK).

LangueMétriqueQwen3 4 bitsQwen3 8 bitsParakeet INT8
EspagnolWER6,445,065,18
AnglaisWER6,575,649,30
ChinoisCER8,417,71
AllemandWER9,456,8112,33
FrançaisWER11,428,5013,02
JaponaisCER16,118,64
RusseWER16,3510,5211,49
CoréenWER19,956,89
HindiWER25,9318,57
ArabeWER33,4720,31

Delta de compression

Perte de précision due à la quantification vers des largeurs en bits inférieures.

VarianteWER%SubstitutionsInsertionsSuppressionsErreurs totalesTaille
Qwen3 0.6B 8 bits2,801111922681471960 Mo
Qwen3 0.6B 4 bits3,3413231233081754675 Mo
Delta+0,54+212+31+40+283-30%
Parakeet TDT INT82,749901253081423634 Mo
À retenir

Qwen3-ASR 1.7B MLX atteint 1.32% WER en 5-bit (1.52% en 8-bit), bat WhisperKit Large-v3 Turbo (1.71%) et tourne à 30-36× le temps réel sur Apple Silicon.

TTS — Intelligibilité aller-retour

Synthétiser du texte, puis retranscrire l'audio avec Qwen3-ASR 0.6B et calculer le WER par rapport au texte original. Évalué sur 30 phrases conversationnelles anglaises intégrées.

MoteurModèleParamètresTailleWER%RTF
CosyVoice30.5B 4 bits500M~1,9 Go3,250,59
Qwen3-TTS1.7B 4 bits1,7B~2,3 Go3,470,79
Qwen3-TTS1.7B 8 bits1,7B~3,5 Go3,660,85
Kokoro-82MCoreML82M~170 Mo3,900,17
Qwen3-TTS0.6B 8 bits600M~960 Mo9,740,76
Qwen3-TTS0.6B 4 bits600M~675 Mo15,580,76

Décomposition de la latence (Qwen3-TTS)

ÉtapeTemps% du totalDescription
Embed1-3 ms<1%Embedding du texte (TTFT)
Generate2-6 s~92%Tokens de codec autorégressifs
Decode244-457 ms~8%Décodeur de codec vers forme d'onde
À retenir

Tous les moteurs TTS s'exécutent plus vite que le temps réel (RTF < 1,0). CosyVoice3 est en tête pour l'intelligibilité (3,25 % de WER). Kokoro est le plus rapide (RTF 0,17) à seulement 170 Mo.

VAD — Précision de détection

Évaluation FLEURS (10 langues, 250 fichiers)

Évalué par rapport à la vérité terrain de référence Python FireRedVAD au même seuil.

MoteurParamètresBackendF1%FAR%MR%RTF
FireRedVAD588KCoreML (ANE)99,122,520,470,007
Silero v5309KCoreML (ANE)95,1315,761,890,022
Silero v5309KMLX (GPU)95,1115,851,890,027
Pyannote1,5MMLX (GPU)94,8614,712,920,358

Évaluation VoxConverse (multi-locuteurs)

5 fichiers de conversation multi-locuteurs évalués à une résolution de trame de 10 ms.

MoteurParamètresBackendF1%FAR%MR%RTF
Pyannote1,5MMLX (GPU)98,2250,090,190,358
Silero v5309KCoreML (ANE)97,5233,292,690,022
Silero v5309KMLX (GPU)95,9821,025,880,027
FireRedVAD588KCoreML (ANE)94,2140,125,050,007

Comparaison avec les chiffres publiés

ModèleF1%FAR%MR%ParamètresJeu de données
Pyannote (nous)98,2250,090,191,5MVoxConverse
FireRedVAD (article)97,572,693,62588KFLEURS-VAD-102
Silero (nous)95,9821,025,88309KVoxConverse
Silero-VAD (article)95,959,413,95309KFLEURS-VAD-102
FireRedVAD (nous)94,2169,335,05588KVoxConverse
À retenir

FireRedVAD atteint 99,12 % de F1 sur FLEURS avec le taux de fausses alertes le plus bas (2,52 %) et s'exécute à 135× le temps réel. Silero v5 offre la meilleure option de streaming avec 32 ms par chunk.

Empreintes de locuteur

Latence d'extraction

Clip audio de 20 secondes, 10 itérations après préchauffage.

ModèleDimBackendLatence
CAM++ (3D-Speaker)192CoreML (ANE)12 ms
WeSpeaker ResNet34-LM256MLX (GPU)64 ms
WeSpeaker ResNet34-LM256CoreML (ANE)143 ms

Qualité des embeddings (VoxConverse)

Similarité cosinus entre embeddings au niveau des segments issus de 5 enregistrements multi-locuteurs. Plus la séparation est élevée, meilleure est la discrimination des locuteurs.

ModèleBackendIntra-locuteurInter-locuteurSéparation
WeSpeakerMLX0,7260,1420,584
WeSpeakerCoreML0,7260,1430,582
CAM++CoreML0,7230,3950,328
À retenir

Les trois moteurs égalent la référence Python pyannote (séparation de 0,577, similarité cosinus > 0,96). WeSpeaker atteint une séparation de 0,584 à la fois sur MLX et CoreML. CAM++ s'exécute 5× plus vite (12 ms contre 65 ms) avec une bonne séparation (0,328).

Séparation de sources — SDR

Rapport signal sur distorsion (SDR) sur MUSDB18-HQ (50 pistes de test complètes, stéréo 44,1 kHz). Plus c'est élevé, mieux c'est. Deux tailles de modèle : HQ (8,9M paramètres/stem) et L (28,3M paramètres/stem).

CibleUMX-HQ (MLX)UMX-L (MLX)UMX-HQ (publié)
Voix6,23 dB~10,5 dB6,32 dB
Batterie6,44 dB~7,0 dB5,73 dB
Basse4,56 dB~5,5 dB5,23 dB
Autre3,41 dB~4,5 dB4,02 dB
ModèleParamètres/stemTailleRTFVitesse
Open-Unmix HQ8,9M136 Mo0,234,3× temps réel
Open-Unmix L28,3M432 Mo0,214,8× temps réel
À retenir

UMX-HQ égale le SDR publié sur les voix et la batterie avec un modèle léger de 8,9M. UMX-L apporte une amélioration de +2–4 dB pour 3× la taille du modèle. Les deux incluent un post-filtrage Wiener EM multicanal et s'exécutent plus vite que le temps réel sur Apple Silicon.

Android — sur l’appareil (Galaxy S23)

Mesuré sur un Samsung Galaxy S23 (SM-S918B), arm64, CPU uniquement, INT8 le cas échéant. Le RTF est temps ÷ audio (plus bas = plus rapide que le temps réel ; <1.0 = temps réel) ; Peak RSS est la mémoire résidente du modèle. STT utilise un extrait de 20 s ; TTS indique le RTF ou le temps jusqu’au premier son (TTFA).

ModelTaskRuntimeSpeedPeak RSS
Parakeet-EOU 120MStreaming STT + EOUONNX INT80.21 RTF232 MB
Omnilingual CTC 300MMultilingual STTLiteRT0.15 RTF831 MB
Nemotron Streaming 0.6BStreaming STTLiteRT0.67 RTF1.30 GB
Parakeet-TDT 0.6BSTT (batch)ONNX INT80.082 RTF1.15 GB
Supertonic-3 99MTTS (preset voice)LiteRT0.34 RTF · ~1.1 s TTFA832 MB
Kokoro-82MTTS (preset voice)ONNX FP320.53 RTF640 MB

À retenir : Parakeet-EOU-120M est le STT le plus léger ici avec ~232 Mo – multilingue (25 langues européennes), en streaming et avec détection de fin de tour intégrée, environ 5–6× plus petit que le Parakeet 0.6B. Désactiver l’arène mémoire CPU d’ONNX (désormais par défaut) fait passer Parakeet-TDT de ~1.34 Go à ~1.15 Go.

Reproduction

# Benchmarks ASR (LibriSpeech test-clean)
make build
python scripts/benchmark_asr.py --batch --engine qwen3 --model 0.6B
python scripts/benchmark_asr.py --batch --engine qwen3 --model 0.6B-8bit
python scripts/benchmark_asr.py --batch --engine parakeet
python scripts/benchmark_asr.py --batch --engine parakeet --model int8

# ASR multilingue (FLEURS, téléchargement automatique)
python scripts/benchmark_asr.py --dataset fleurs --language en_us --batch

# Aller-retour TTS
python scripts/benchmark_tts.py --compare

# Comparaison VAD
python scripts/benchmark_vad.py --compare

# Comparaison d'empreintes de locuteur
python scripts/benchmark_speaker.py --compare

# Séparation de sources (MUSDB18-HQ, téléchargeable depuis Zenodo)
python scripts/benchmark_separation.py --data-dir benchmarks/data/musdb18-hq