音声認識ソフトUTMOSv2をPCに入れてみる
***最新更新 2026年9月15日 22時00分***
FreeDVの評価で使用されたWhisperの次にUTMOSv2をPCに入れてみることにします。
UTMOS(UTokyo-SaruLab MOS prediction system)については以下のブログを参照ください。
https://jk1gpc.blogspot.com/2026/09/freedv_0435876116.html
Windowsに入れるかLinuxに入れるかですが、先にWindowsを試してみます。
-------- Windows よりも Linuxの方が良さそうです GPUはなくともOK-------
以下Pythonがインストールされていることを前提に進めます。
参考: https://jk1gpc.blogspot.com/2026/09/wisper-large-v3.html
1.専用フォルダーと仮想環境を作る。
Windowsターミナル MSマークを右クリック ターミナルを起動します。
以下の太字の部分をコピペ (コピーしてターミナルプロンプトにカーソルを置き右クリックします)
cd C:\
mkdir UTMOSv2 *Windowsエクスプローラで作成しても可能
mkdir UTMOSv2\result *同上
C:/UTMOSv2
python -m venv venv
venv\Scripts\activate
(venv) PS C:\UTMOSv2> がでればOKです。
2. pipを更新する。
python -m pip install --upgrade pip setuptools wheel
3. UTMOSv2をインストールする。
pip install git+https://github.com/sarulab-speech/UTMOSv2.git
*Pipでは手順が複雑なので今回はgithubよりダウンロードします。
以下Pythonの仮想環境(venv)でも良いしなくても構いません。
cd C:\UTMOSv2
Invoke-WebRequest -Uri "https://github.com/sarulab-speech/UTMOSv2/archive/refs/heads/main.zip" -OutFile "UTMOSv2-main.zip"
Expand-Archive -Path "UTMOSv2-main.zip" -DestinationPath "source"
以下で見つかればOKです。
dir C:\UTMOSv2\source\UTMOSv2-main\inference.py
以下を入力します
cd C:\UTMOSv2\source\UTMOSv2-main
C:\UTMOSv2\venv\Scripts\Activate.ps1
必要なライブラリをインストールします。
python -m pip install -e ".[optional]"
*一旦Power Shellを閉じた場合には以下のように入れます。
cd C:\UTMOSv2\source\UTMOSv2-main
C:\UTMOSv2\venv\Scripts\Activate.ps1
4. テストします。UTMOSは文字起こしは出来ません。
Whisperで使用したファイルをC:\UTMOSv2\audioに入れます。
結果(推定MOS値)はcvsファイルに出力されます。
重みづけファイルを入力します。
Get-Content .\utmosv2\utils\_download.py | Select-Object -Index (30..55)
*これが妥当かどうか要検証です
------ここでエラー発生です。-------------
Linuxの方が良いようですが、Windowsで続けます。
python -c "from utmosv2.utils._download import _UTMOSV2_CHACHE; print(_UTMOSV2_CHACHE)"
$utmosCache = python -c "from utmosv2.utils._download import _UTMOSV2_CHACHE; print(_UTMOSV2_CHACHE)"
$modelDir = Join-Path $utmosCache "models\fusion_stage3"
New-Item -ItemType Directory -Force -Path $modelDir
Invoke-WebRequest -Uri "https://huggingface.co/sarulab-speech/UTMOSv2/resolve/main/fold0_s42_best_model.pth" -OutFile (Join-Path $modelDir "fold0_s42_best_model.pth")
Get-ChildItem $modelDir
でfold0_s42_best_model.pthが表示されれば成功です。
notepad .\utmosv2\utils\_task_dependents\initializers.pyで initializers.pyを編集します。*WindowsでやってもOK
model.load_state_dict(torch.load(weight_path)) を探します。106行目にありました。
model.load_state_dict(torch.load(weight_path, map_location=device)) に変更して上書きします。
Select-String -Path .\utmosv2\utils\_task_dependents\initializers.py -Pattern "load_state_dict" でmodel.load_state_dict(torch.load(weight_path, map_location=device)) となっていればOKです。
Windowsの場合これでもエラーです。
原因はWindowsのmultiprocessingです。UTMOSv2の既定値は--num_workers 4ですが、Windowsでは音声読み込み処理を複数プロセス化できず、cannot pickle 'module' objectになっています。
--num_workers 0 をオプションに追加します。
----------------------------------------------------
評価用の3つのファイルをC:\UTMOSv2\sourceに入れて以下を実行します。
*SSB
python inference.py --input_path "C:\UTMOSv2\source\3729-6852-0033_ssb_6db.wav" --out_path "C:\UTMOSv2\result\3729-6852-0033_ssb.csv" --fold 0 --num_workers 0
*RADE
python inference.py --input_path "C:\UTMOSv2\source\3729-6852-0033_rade_6dB.wav" --out_path "C:\UTMOSv2\result\3729-6852-0033_rade_6dB.csv" --fold 0 --num_workers 0
*オリジナル
python inference.py --input_path "C:\UTMOSv2\source\3729-6852-0033_clean.wav" --out_path "C:\UTMOSv2\result\3729-6852-0033_clean.csv" --fold 0 --num_workers 0
注意: UNEXPECTEDが表示されますが問題ありません。
-----------結果 ----------
結果 推定MOS値はCSVファイルに出力されます。
SSB: 1.82381772994995
RADE: 2.18330430984497
オリジナル: 3.65122485160827
---------------------------------
UTMOSv2をFreeDVの評価に使う時の注意点(Chat-GPTによる)
UTMOSv2は主に合成音声の自然性評価用に開発されたMOS予測モデルです。そのため、FreeDVのRADE、SSB、フェージング、無線雑音を含む音声に対する数値は、ITU-T P.800による実際の聴取MOSと一致するとは限りません。
FreeDVの比較に使う場合は、
- 全音声を同じ音量にそろえる
- 同じ文章・同じ話者を使う
- WAVの先頭と末尾の無音条件をそろえる
- 原音・RADE・SSBを同条件で評価する
- MOSの絶対値より相対的な差を見る
という使い方が適切です。
** このUTMOSv2をFreeDV評価に使う事についてChat-GPTに聞いてみました。**
コメント
コメントを投稿