音声認識ソフトUTMOSv2をPCに入れて簡易評価

 ***最新更新 2026年9月25日***

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. UTMOSv2をインストールする。

*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

3.  その他 諸々

重みづけファイルを入力します。
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  をオプションに追加します。

 4. テストします。UTMOSは文字起こしは出来ません。

Whisperで使用した評価用ファイルをC:\UTMOSv2\sourceに入れます。
結果(推定MOS値)はC:\UTMOSv2\result\にcvsファイルで出力されます。

以下を実行します。

*一旦Power Shellを閉じた場合には以下のように入れます。

cd C:\UTMOSv2\source\UTMOSv2-main
C:\UTMOSv2\venv\Scripts\Activate.ps1

*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 -1 --num_workers 0 --num_repetitions 5

*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 -1 --num_workers 0 --num_repetitions 5

*オリジナル
python inference.py --input_path "C:\UTMOSv2\source\3729-6852-0033_clean.wav" --out_path "C:\UTMOSv2\result\3729-6852-0033_clean.csv" --fold -1 --num_workers 0 --num_repetitions 5

注意: UNEXPECTEDが表示されますが問題ありません。

-----------簡易測定結果     ----------

結果 推定MOS値(声の自然さなど)はCSVファイル(C:\UTMOSv2\resultの下)に出力されます。この程度の音声ファイルだとPCにもよりますが数秒です。

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に聞いてみました。**

FreeDVに使った場合に分かること

UTMOSv2は、音声を入力すると、およそ1~5の予測MOSを出します。

  • 声が自然に聞こえるか
  • 音声に不自然な歪みがないか
  • 合成音声・ボコーダー音声として違和感がないか
  • スペクトル上に品質低下の特徴がないか

このため、RADE・Codec2・FARGANのようなニューラル音声処理による「声の自然さ」を比較する実験には一定の価値があります。

UTMOSv2だけでは分からないこと

評価対象UTMOSv2で評価できるか
声の自然さ比較的向いている
音声の歪み・不快感ある程度可能
言葉が正しく伝わったか評価できない
コールサインや数字の聞き取り評価できない
フェージングへの強さ未検証
無線雑音への強さ学習範囲外の可能性が高い
通信可能限界のSNRUTMOSv2だけでは決められない
日本人が感じる実際の音質必ず一致するとは限らない

例えば、RADE音声が人間には明瞭でも、ニューラル・ボコーダー特有の音にUTMOSv2が低い点を付ける可能性があります。反対に、声が滑らかでも単語が別の言葉に化けていれば、MOSは高いのに通信内容は間違っていることもあります。

VoiceMOS Challenge自身も、学習データと評価対象が異なる「ドメイン不一致」では、MOS予測モデルの一般化性能が低下することを指摘しています。VoiceMOS Challenge 2022


コメント

このブログの人気の投稿

WSJT-X Improved v2.8.0がリリースされました!

WWAコンテストって?