機械学習とは
大量のデータからパターンや規則性を抽出し、それをもとに予測や判断を行うAIを作成する技術。
DiffSingerにおいては歌声データベースを学習し、譜面(ustx)が与えられたときその結果を予測するAIモデルを生成する工程です。
DiffSingerにおいては歌声データベースを学習し、譜面(ustx)が与えられたときその結果を予測するAIモデルを生成する工程です。
Google Colabでの学習
ブラウザ上で学習を行います。ある程度は無料で使えますが、時間制限があるため何日かに分けて少しずつ進める必要があります。
- セットアップ:Google Driveを接続し、歌声DBをアップロードします。
- 学習:VarianceモデルとAcousticモデルを作成します。
- エクスポート:ONNX(オニキス)形式でモデルをエクスポートし、OpenUtauにモデルを読み込むための設定ファイルを作成します。
ローカルでの学習
Colabでの学習に比べて、高性能なハードウェアと高度な知識が必要になります。
- 環境の構築:Python、pip(パッケージ管理ツール)、Gitなどをインストールします。
- CUDA/cuDNNの導入:NVIDIA GPU上で深層学習を高速実行するための環境(CUDAとそのライブラリcuDNN)を、PCとインストールするPyTorchのバージョンに合わせて導入します。
- リポジトリのクローン:学習用リポジトリ(ソースコード)をPCにダウンロード(クローン)します。
- 依存関係のインストール:学習に必要なライブラリ(PyTorch、numpyなど)をインストールします。
- データセットの配置:歌声データベースを、リポジトリの指定された場所に指定のフォルダ構造で配置します。
- 学習の実行:コマンドライン(ターミナル)から、設定ファイルを参照して学習スクリプトを実行します。
AcousticモデルとVarianceモデル
DiffSingerでは、以下の2種類のモデルを学習し生成します。
- Varianceモデル:歌声のプロソディ(リズム、ピッチ、強弱などの変化)を予測するモデル
- Acousticモデル:上記のプロソディ情報と歌詞情報から、最終的な音響特徴量(歌声の「スペクトル」情報)を拡散モデルによって生成するモデル
エポック、ステップについて
エポック(Epoch)とステップ(Step)は、機械学習でモデルのトレーニングの進捗度を表す単位です。
基本的にはステップの数字が重視されます。
基本的にはステップの数字が重視されます。
エポック
学習データセット全体をモデルが一度学習し終えるのが1エポックです。
エポック数が多ければ多いほど、モデルは同じデータセットを何度も見ることになり、理論上はデータのパターンをより深く学習します。ただし、多すぎると過学習(特定の訓練データにだけ最適化されすぎて、未知のデータへの対応力が落ちること)を引き起こす可能性があります。
エポック数が多ければ多いほど、モデルは同じデータセットを何度も見ることになり、理論上はデータのパターンをより深く学習します。ただし、多すぎると過学習(特定の訓練データにだけ最適化されすぎて、未知のデータへの対応力が落ちること)を引き起こす可能性があります。
ステップ
モデルのパラメーター(重み)が一度更新されると1ステップになります。
DiffSingerの学習では、大量の歌声DBのデータを小さな塊(ミニバッチ)に分けて処理します。ミニバッチがモデルに入力され、勾配計算とパラメーターの更新が一回行われるサイクルを1ステップと呼びます。
例えば、歌声DBを1エポック学習させる際にデータを10個のミニバッチに分けて学習させると、1エポック完了までに10ステップが進むことになります。
DiffSingerの学習では、大量の歌声DBのデータを小さな塊(ミニバッチ)に分けて処理します。ミニバッチがモデルに入力され、勾配計算とパラメーターの更新が一回行われるサイクルを1ステップと呼びます。
例えば、歌声DBを1エポック学習させる際にデータを10個のミニバッチに分けて学習させると、1エポック完了までに10ステップが進むことになります。