Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Native Silero VAD model on Lstm with weights from the upstream ONNX file

オープン
#1,278 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
30/100
issue の種類
機能追加
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
android, kotlin

調査の方向性

Start by reading the existing Lstm state-step API from #823 and the ONNX weight reader in skainet-io-onnx; the issue does not name specific files. Implement the Silero graph with ctx.ops.*, load weights from the pinned upstream ONNX initializers, and add the streaming adapter. Done means parity within 1e-4 over at least 1,000 frames, Android performance under 1 ms per frame, and a Python-side ground-truth entry.

索引モデルが issue の本文から書いたものです。

説明

enhancement model skill:numerics

Context

Silero VAD (v6.x, MIT) is the de-facto on-device voice activity detector. A SKaiNET consumer currently has to ship ONNX Runtime only for it, next to whatever runs the ASR model, which costs a second native runtime, an extra ~2.3 MB model on a separate loader, and a minSdk floor set by ORT rather than by SKaiNET.

The model is small: an STFT front end baked into the graph as conv weights, a conv encoder, one LSTM cell with a carried [2,1,128] state, and a dense sigmoid head. Input per call is a 64-sample context prepended to a 512-sample frame at 16 kHz. Lstm with LstmState(h, c) and an explicit step already exists in skainet-lang-core (#823), which was added with exactly this kind of streaming use in mind.

Scope

  • SileroVad module (skainet-models or a new skainet-model-vad): the graph expressed with ctx.ops.* only, so it runs eagerly and lowers through the tape path like every other SKaiNET model. Reuse Lstm.
  • Weights loaded from the initializers of the pinned upstream silero_vad.onnx through skainet-io-onnx's weight reader (no new file format; upstream stays the source of truth). Load the STFT basis as weights rather than re-deriving it so the model matches bit for bit.
  • Streaming API: process(frame: FloatArray): Float returning speech probability, reset(), and the state carried across calls; a VoiceActivityDetector-shaped adapter for the audio-side libraries.
  • Parity test: probabilities within 1e-4 of ONNX Runtime over ≥ 1000 consecutive frames from three clips including state carry-over, checked against a committed golden (ORT is a test-time dependency only).
  • Android measurement: < 1 ms per frame on one thread with the JNI tier.
  • Ground-truth entry so the Python-side suite (#985) covers the op set.

Non-goals

  • Importing the Silero graph through the ONNX graph importer. That needs LSTM/Gather/Unsqueeze/Where/If converters and is tracked separately as the verification path; the hand-written module is the shipping path.

Related

  • #823 — Lstm layer with explicit state step API
  • #230 — ONNX I/O module MVP
主要言語
Kotlin
スター
52
フォーク
15
平均マージ
1日 15時間
マージ済み PR(30日)
36

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

SKaiNET-developers/SKaiNET のほかの issue

SKaiNET-developers/SKaiNET の issue をすべて見る

似ている issue

Kotlin の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。