AI・機械学習
Show HN: Contrastive Language-Audio Pretraining を使用して機械的故障を分類する
Show HN: Classify mechanical faults using Contrastive Language-Audio Pretraining (github.com)
要約
cardiag は、車の故障音を YouTube や TikTok から収集し、音声処理と CLAP モデルによる埋め込みを経て、機械学習で故障を分類するエンドツーエンドのパイプラインです。このツールは、完全な診断ではなく、故障の有無、発生箇所、および可能性のある部品のリストを提示する「トリアージ補助」として機能します。特に、音声データが不十分な場合に「不確実」と正直に報告する点が特徴で、他の音声データセットにも応用可能なクリーニングと学習のレシピを提供します。
全文翻訳
cardiag — 音から車の故障を診断する
cardiag は、エンドツーエンドのオーディオ ML パイプラインです。YouTube/TikTok から故障音のクリップをスクレイピングし、音声をクリーニングします(機械音を音声、音楽、ノイズから分離)。その後、凍結された CLAP モデルで埋め込みを行い、小さな線形ヘッドをトレーニングして故障をトリアージします。これは CLI およびライブ Web アプリとして公開されています。
cardiag-demo.mp4
これは概念実証であり、その意味するところについて正直です。電話での録音から車の故障を診断するのは非常に難しいため、cardiag は診断ツールではなく、調整されたトリアージ補助として構築されています。何かがおかしく聞こえるかどうか、車のどこで発生しているか、そして可能性のある部品のランク付けされた短いリストを教えてくれます。音声が判断をサポートできない場合は、ごまかす代わりに「不確実」と表示します。
真の貢献は、クリーニング + 正直なトレーニングのレシピであり、他の音声データセットで再利用可能です。ここでの控えめな精度は、粗い電話音声から問題がどれほど難しいかを反映しています(文献の天井に達しました)。同じ手法は、クリーンなエンジン音声では 0.93 AUROC に達します。詳細は docs/DEFENSE.md を参照してください。
インタラクティブデモ
2つのページがパイプラインの最初の2つのステージを視覚化します。
エンジン音の分離 — クリーン() カスケードが、ノイズの多い YouTube 音声(音声、音楽、ロードノイズ)から短い機械音の範囲を抽出するインタラクティブな表示。
CLAP、視覚化 — 凍結された CLAP モデルが、それらの範囲を線形ヘッドが分類する 512 次元埋め込みにどのように変換するか。
実際の結果
漏洩を安全に保った(ビデオごとのグループ化された CV、1,031 ビデオグループ、順列 p = 0.0005)アウトオブサンプルで測定。
これらはリーダーボードではなく、正直な数値です。
機能
結果(チャンスと比較)
何か問題がありますか? (故障/正常)
AUROC 0.79 [0.76, 0.83]
0.50
車のどこで? (6ゾーン)
トップ 3 に右ゾーン ≈ 75%
2倍
どの部品? (12+ファミリー)
トップ 3 に右部品 ≈ 45–65%
3–4倍
わからないときにわかる
キャリブレーション済み (ECE ≈ 0.04)、UNCERTAIN を返します。
詳細、およびアウトオブサンプルで失敗した(ノック)ために降格した唯一のヘッドは、docs/MODEL_CARD.md にあります。
クイックスタート:推論のためにクローンする
新しくクローンしたリポジトリはすぐに使用できます。小さな事前トレーニング済みモデルが models/ に含まれており、合成デモクリップがバンドルされているため、何もダウンロードまたはスクレイピングする必要はありません。
git clone <this-repo> && cd car-diagnosis
uv venv && source .venv/bin/activate
uv pip install -e ".[scrape,web,dev,viz]" # Python 3.11
cardiag doctor # 事前チェック:インストールされているもの
cardiag train --fixtures # 約 2 秒でオフラインで動作するモデル(スクレイピングなし、2 GB ダウンロードなし)
cardiag diagnose <clip.wav> # 判定 + 車のどこか + 部品リスト
cardiag serve --model models # ライブ Web アプリ:クリップをドロップ / リンクを貼り付け、「理由を説明」
隔離されたワークツリーで全体をエンドツーエンドで検証します:
bash scripts/clone_verify.sh。
仕組み
オーディオ ──► clean() カスケード ──► CLAP 埋め込み ──► 線形ヘッド ──► 診断
(範囲を分離) (凍結、512 次元) (故障/領域/ (キャリブレーション済み、
(部品/ノック) 不確実性認識))
セグメンテーションパスは 1 つです。スクレイピングされたクリップ、独自の録音(cardiag ingest、任意の長さ)、および推論時のアップロードはすべて、短い機械音の範囲を分離する同じ clean() カスケードを流れます。CLAP がサイレントに切り捨てないように、約 10 秒を超える範囲はウィンドウに分割されます。トレーニングとサービングは 1 つの埋め込み契約を共有するため、トレーニング/サービングのスキューはありません。
使用方法
cardiag diagnose clip.wav # フルモデル:判定 + 領域 + 部品リスト
cardiag triage clip.wav # キャリブレーション済みエンジン対走行系
cardiag clean clip.wav # 機械音を分離(モデル不要)
cardiag inspect clip.wav -o r.html # パイプラインを表示/聞く:範囲、スペクトログラム、スコア
cardiag ingest ./my_audio --kind fault --cause wheel_bearing # 独自のオーディオを取り込む
cardiag scrape youtube|tiktok # コーパスを構築(Reddit は非推奨 — ノイズが多すぎる)
cardiag train # コーパスでトレーニングする
機械可読出力のために、任意の推論コマンドに --json を追加します。
ドキュメント
docs/DEFENSE.md — 意図的に粗い方法が実際のトリアージ結果を生み出すという正直な議論。
docs/MODEL_CARD.md — ヘッドごとのメトリクス、意図された使用法、制限事項。
docs/architecture.md — パイプライン図。
docs/scraping-guide.md — 最初から最後までコーパス構築ガイド。
スコープと正直さ
ソーシャルスタイル/ターゲットアップロードオーディオ(YouTube、TikTok、またはユーザーが意図的に録音した電話クリップ)に有効です。これは安全クリティカルまたはスタンドアロンの診断ではありません。どこを見るべきかを絞り込み、不確実性について正直であるトリアージアシスタントです。モデルファイルは joblib アーティファクトです。信頼できるもののみをロードしてください。
ライセンス:LICENSE を参照してください。