SOUND / YAMNet

YAMNet

reComputer RK3576

reComputer RK3576およびRK3588上で動作する521種類のAudioSet音声イベント分類モデル。

18 ダウンロード
精度
RKNN

使用しているデバイスを選択してください。セットアップガイドとドキュメントがそれに応じて更新されます。

はじめる

OTA overlayroot が有効な Armbian 26.8.7 Gnome 以降: コンテナを実行する前に Docker のストレージを設定してください overlay のマウントエラーを防ぐために必要です。

デプロイ
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-yamnet:latest

REST API

REST API を使用して推論を実行します。以下のコマンドをコピーしてください。

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "yamnet-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "yamnet-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

モデル詳細

OTA overlayroot が有効な Armbian 26.8.7 Gnome 以降: コンテナを実行する前に Docker のストレージを設定してください overlay のマウントエラーを防ぐために必要です。

クイックスタート

1. Docker のインストール

開発ボードで以下のコマンドを実行して Docker をインストールします:

bash
# Download installation script
curl -fsSL https://get.docker.com -o get-docker.sh
# Install using Aliyun mirror source
sudo sh get-docker.sh --mirror Aliyun
# Start Docker and enable auto-start on boot
sudo systemctl enable docker
sudo systemctl start docker

2. プロジェクトの実行(単一コマンド、デュアルモードプレビュー)

このプロジェクトは音声を AudioSet の 521 クラスに分類します。Web 画面で音声のアップロードまたはブラウザーマイクの録音を受け付け、全体の Top-K 予測とスライディングウィンドウのイベントタイムラインを表示します。

ステップ A:イメージの取得

bash
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-yamnet:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-yamnet:latest

ステップ B:ワンクリックで実行

対象:RK3588:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-yamnet:latest

アクセス先: http://<Board_IP>:8000


対象:RK3576:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-yamnet:latest

アクセス先: http://<Board_IP>:8000

ブラウザーの録音はサービスにアップロードされるため、ホスト音声デバイスのマッピングは不要です。

3. コマンドライン推論

bash
python inference.py --platform rk3576 --model_dir model \
    --file samples/test.wav --topk 5 --threshold 0.1 --hop_seconds 1

RK3588 のソースディレクトリで実行する場合は --platform rk3588 を使用してください。


🔌 API ドキュメント

REST API は音声をモノラル 16 kHz に変換し、固定 3 秒のウィンドウで解析します。入力の長さは最大 300 秒です。

1. 音声イベント分類インターフェース

エンドポイント: POST /api/models/yamnet/predict

リクエストパラメータ(Multipart/Form-Data):

  • file:必須の音声ファイル。アップロード上限は 64 MB です。
  • topk:返す上位クラス数。省略可能で、範囲は 1~20、既定値は 5 です。
  • threshold:イベントの最小スコア。省略可能で、範囲は 0~1、既定値は 0.1 です。
  • hop_seconds:連続する 3 秒ウィンドウの間隔。省略可能で、範囲は 0.25~3 秒、既定値は 1 秒です。

使用例:

bash
curl -X POST "http://127.0.0.1:8000/api/models/yamnet/predict" \
    -F 'file=@samples/test.wav' \
    -F 'topk=5' \
    -F 'threshold=0.1' \
    -F 'hop_seconds=1'

レスポンス形式(JSON):

json
{
  "success": true,
  "model": "yamnet",
  "platform": "rk3576",
  "inference_time_ms": 76.1,
  "result": {
    "duration_seconds": 4.5,
    "sample_rate": 16000,
    "window_seconds": 3.0,
    "hop_seconds": 1.0,
    "top_class": {"id": 0, "label": "Speech", "score": 0.83},
    "predictions": [],
    "segments": [],
    "events": []
  }
}

predictions は全体のスコア、segments はウィンドウごとの結果を含み、events は最上位クラスが同じ連続ウィンドウをまとめます。

2. システム設定インターフェース

現在の設定の取得

  • エンドポイント: GET /api/config
  • 既定レスポンス: {"topk": 5, "threshold": 0.1, "hop_seconds": 1.0}

設定の更新

bash
curl -X POST "http://127.0.0.1:8000/api/config" \
    -H 'Content-Type: application/json' \
    -d '{"topk": 10, "threshold": 0.2, "hop_seconds": 0.5}'

GET /api/health で現在のプラットフォーム、読み込み済みモデル、ランタイムの機能を確認します。対話型 OpenAPI ドキュメントは /docs にあります。


🛠️ 開発者ガイド(本番環境向け推奨事項)

コードの説明

  • web_service.py:
    • Web API:アップロードファイル、ブラウザー録音、ランタイム設定、分類レスポンスを処理します。
    • 検証:アップロード、長さ、パラメータの制限を適用します。
  • task_runtime.py:
    • 音声処理:入力をモノラル 16 kHz に変換し、固定 3 秒ウィンドウを配置します。
    • 分類:yamnet.rknn を実行し、521 ラベルを順位付けして Top-K としきい値設定を適用します。
    • タイムライン:ウィンドウごとの区間結果を生成し、連続イベントを結合します。
  • inference.py:単発のコマンドライン分類を提供します。

モデルファイル

構成要素ファイル
YAMNet モデルmodel/yamnet.rknn
AudioSet クラスラベルmodel/yamnet_class_map.txt

モデルの変更

  1. 変換済みモデルを model/yamnet.rknn、対応する 521 ラベルのマップを model/yamnet_class_map.txt に配置します。
  2. モノラル 16 kHz、固定 3 秒入力、出力クラスの順序を維持します。
  3. 短い音声、長い音声のスライディングウィンドウ入力、各パラメータの境界をテストします。

上流プロジェクトは現在、各プラットフォームに RKNN モデルを 一つ提供しています。topk、threshold、hop_seconds は後処理とウィンドウの配置を制御するもので、モデルサイズや量子化の選択肢ではありません。

ローカルイメージのビルド

reComputer-RK-CV のルートディレクトリから実行します:

bash
docker build -f docker/rk3576/yamnet.dockerfile \
    -t rk3576-yamnet:local src/rk3576_yamnet

docker build -f docker/rk3588/yamnet.dockerfile \
    -t rk3588-yamnet:local src/rk3588_yamnet

入力と出力

入力:モノラル16 kHzに変換された音声。出力:全体予測、ウィンドウ別セグメント、統合された音声イベント。