? aivmlib : ai vis v oice m odel文件(.AIVM/.AIVMX)實用程序lib rary
AIVM ( AI Vis v oice M Odel) / AIVMX ( AI Vis v oice M Odel for Onn X )是AI語音合成模型的開放文件格式,該模型結合了預訓練的模型,超參數,樣式矢量,樣式矢量,揚聲器,揚聲器,揚聲器元數據(名稱,概述,概述,概述,許可,ICONS,ICONS,ICONS,ICONS,ICONS,ICONS,語音樣本等) 。
筆記
“ AIVM”也是AIVM/AIVMX格式規格和元數據規範的一般術語。
具體來說,AIVM文件是“添加了具有AIVM元數據的SafetEnsors格式”中的模型文件,並且AIVMX文件是“添加了AIVM Metadata”的“ ONNX格式”中的模型文件。
“ AIVM元數據”是指與AIVM規範中定義的訓練模型相關的各種元數據。
您可以通過在支持AIVM規範的軟件中添加AIVM/AIVMX文件來輕鬆使用AI語音合成模型,包括Aivisspeech/aivisspeech-engine。
AIVMLIB/AIVMLIB-WEB提供了用於在AIVM/AIVMX文件中讀取和編寫元數據的實用程序。
該AIVMLIB是用Python編寫的AIVM規範的參考實現。如果您使用的是Web瀏覽器,請使用AIVMLIB-WEB。
提示
AIVM Generator允許您使用瀏覽器上的GUI輕鬆生成和編輯AIVM/AIVMX文件。
我們建議在手動生成和編輯AIVM/AIVMX文件時使用AIVM生成器。
如果您使用PIP安裝它,命令行工具aivmlib也將自動安裝。
需要Python 3.11或更高。
pip install aivmlib我在發展過程中使用詩歌。
pip install poetry
git clone https://github.com/Aivis-Project/aivmlib.git
cd aivmlib
poetry install --with dev
poetry run aivmlib --help以下是如何使用CLI工具本身。
$ aivmlib --help
Usage: aivmlib [OPTIONS] COMMAND [ARGS]...
Aivis Voice Model File (.aivm/.aivmx) Utility Library
╭─ Options ─────────────────────────────────────────────────────────────────────────╮
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it │
│ or customize the installation. │
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────╮
│ create-aivm 与えられたアーキテクチャ, 学習済みモデル, ハイパーパラメータ, │
│ スタイルベクトルから AIVM メタデータを生成した上で、 │
│ それを書き込んだ仮の AIVM ファイルを生成する │
│ create-aivmx 与えられたアーキテクチャ, 学習済みモデル, ハイパーパラメータ, │
│ スタイルベクトルから AIVM メタデータを生成した上で、 │
│ それを書き込んだ仮の AIVMX ファイルを生成する │
│ show-metadata 指定されたパスの AIVM / AIVMX ファイル内に記録されている AIVM │
│ メタデータを見やすく出力する │
╰───────────────────────────────────────────────────────────────────────────────────╯
$ aivmlib show-metadata --help
Usage: aivmlib show-metadata [OPTIONS] FILE_PATH
指定されたパスの AIVM / AIVMX ファイル内に記録されている AIVM メタデータを見やすく出力する
╭─ Arguments ───────────────────────────────────────────────────────────────────────╮
│ * file_path PATH Path to the AIVM / AIVMX file [default: None] │
│ [required] │
╰───────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────╯
$ aivmlib create-aivm --help
Usage: aivmlib create-aivm [OPTIONS]
与えられたアーキテクチャ, 学習済みモデル, ハイパーパラメータ, スタイルベクトルから
AIVM メタデータを生成した上で、それを書き込んだ仮の AIVM ファイルを生成する
╭─ Options ─────────────────────────────────────────────────────────────────────────╮
│ * --output -o PATH Path to the output AIVM │
│ file │
│ [default: None] │
│ [required] │
│ * --model -m PATH Path to the Safetensors │
│ model file │
│ [default: None] │
│ [required] │
│ --hyper-parameters -h PATH Path to the hyper │
│ parameters file │
│ (optional) │
│ [default: None] │
│ --style-vectors -s PATH Path to the style │
│ vectors file (optional) │
│ [default: None] │
│ --model-architecture -a [Style-Bert-VITS2 | Styl Model architecture │
│ e-Bert-VITS2 [default: │
│ (JP-Extra)] Style-Bert-VITS2 │
│ (JP-Extra)] │
│ --help Show this message and │
│ exit. │
╰───────────────────────────────────────────────────────────────────────────────────╯
$ aivmlib create-aivmx --help
Usage: aivmlib create-aivmx [OPTIONS]
与えられたアーキテクチャ, 学習済みモデル, ハイパーパラメータ, スタイルベクトルから
AIVM メタデータを生成した上で、それを書き込んだ仮の AIVMX ファイルを生成する
╭─ Options ─────────────────────────────────────────────────────────────────────────╮
│ * --output -o PATH Path to the output AIVMX │
│ file │
│ [default: None] │
│ [required] │
│ * --model -m PATH Path to the ONNX model │
│ file │
│ [default: None] │
│ [required] │
│ --hyper-parameters -h PATH Path to the hyper │
│ parameters file │
│ (optional) │
│ [default: None] │
│ --style-vectors -s PATH Path to the style │
│ vectors file (optional) │
│ [default: None] │
│ --model-architecture -a [Style-Bert-VITS2 | Styl Model architecture │
│ e-Bert-VITS2 [default: │
│ (JP-Extra)] Style-Bert-VITS2 │
│ (JP-Extra)] │
│ --help Show this message and │
│ exit. │
╰───────────────────────────────────────────────────────────────────────────────────╯以下是執行命令的示例。
# Safetensors 形式で保存された "Style-Bert-VITS2 (JP-Extra)" モデルアーキテクチャの学習済みモデルから AIVM ファイルを生成
# .safetensors と同じディレクトリに config.json と style_vectors.npy があることが前提
# -a オプションを省略した場合、既定で "Style-Bert-VITS2 (JP-Extra)" の学習済みモデルと判定される
$ aivmlib create-aivm -o ./output.aivm -m ./model.safetensors
# 明示的にハイパーパラメータとスタイルベクトルのパスを指定して生成
$ aivmlib create-aivm -o ./output.aivm -m ./model.safetensors -h ./config.json -s ./style-vectors.npy
# ONNX 形式で保存された "Style-Bert-VITS2" モデルアーキテクチャの学習済みモデルから AIVMX ファイルを生成
# .onnx と同じディレクトリに config.json と style_vectors.npy があることが前提
$ aivmlib create-aivmx -o ./output.aivmx -m ./model.onnx -a " Style-Bert-VITS2 "
# 明示的にハイパーパラメータとスタイルベクトルのパスを指定して生成
$ aivmlib create-aivmx -o ./output.aivmx -m ./model.onnx -a " Style-Bert-VITS2 " -h ./config.json -s ./style-vectors.npy
# AIVM ファイルに格納された AIVM メタデータを確認
$ aivmlib show-metadata ./output.aivm
# AIVMX ファイルに格納された AIVM メタデータを確認
$ aivmlib show-metadata ./output.aivmx提示
有關用作庫的用法,請參見實現__main__.py中實現的CLI工具。
重要的
AIVMLIB/AIVMLIB-WEB是一個僅讀取/編寫aivm/aivmx文件格式的函數的庫。
每個模型體系結構的AI語音合成模型的推理邏輯以及從AIVMLIB/AIVMLIB-WEB獲得的數據留給了庫的用戶。
麻省理工學院許可證
本節定義了“ AIVM規格”中包含的以下技術規範:
目的是將訓練有素的AI語音合成模型和將其用於單個文件中所需的各種元數據組合在一起,防止文件耗散和混亂,並使其更易於使用和共享模型。
提示
通過將其組合到一個文件中,您可以通過簡單地下載AIVM/AIVMX文件並將其放置在指定的文件夾中,並立即使用兼容軟件使用語音合成模型來輕鬆操作它。
另一個優點是它不是壓縮文件,因此無需部署它。
AIVM規範不依賴語音合成模型的模型結構。
它的設計具有未來的可擴展性和多功能性,以便可以以通用文件格式處理不同模型架構的語音合成模型。
如果基本訓練的模型保存在單個安全器或ONNX格式中,則無論模型體系結構如何,您都可以添加元數據以生成AIVM/AIVMX文件。
在設計時,我們強調與現有生態系統的兼容性,以便可以將它們作為常規安全器或ONNX文件加載而無需任何轉換處理。
重要的
AIVM規範不能為每個模型體系結構定義推理方法。規格定義為“總結AI語音合成模型元數據的文件”。
例如,對於AIVM文件,存儲的AI語音合成模型可能適用於Pytorch或TensorFlow。
如何推斷AI語音合成模型保留支持支持AIVM/AIVMX文件的軟件的實現。
AIVM文件格式的規格如下所示。
AIVM ( AI Vis V oice M Odel)是一種擴展的SafetEnsor格式規範,該規範存儲了各種信息,例如揚聲器元數據(AIVM明顯),超參數和样式向量,作為定制元數據,在訓練有素的模型的標頭中,存儲在SafetEnsors(.safeters)格式中。
也可以說是“以安全性格式保存的AI語音合成模型的常見元數據描述規範”。
因為它是SafetEnsor格式中的擴展規範,因此可以按原樣將其作為普通SafetEnsor文件加載。
像SafetEnsor一樣,未簽名的小型64位整數的前8個字節是標頭尺寸,然後是UTF-8 JSON字符串,按標頭尺寸的長度為單位。
SAFETENSORS的JSON標題存儲了張量等的偏移,但是__metadata__鍵使您可以自由地將映射從字符串設置為字符串。
利用此規範,AIVM將以下字符串數據存儲在__metadata__ __:
aivm_manifest :AIVM清單aivm_hyper_parameters :語音合成模型的超參數Style-Bert-VITS2和Style-Bert-VITS2 (JP-Extra)模型架構存儲JSON字符串aivm_style_vectors :BASE64編碼語音合成模型樣式矢量(二進制)Style-Bert-VITS2和Style-Bert-VITS2 (JP-Extra)模型體系結構中,存儲了帶有base64編碼的numpy陣列(.npy)的字符串。以下是AIVMX文件格式的規格。
AIVMX ( AI Vis v oice M Odel for onnx )是一種擴展的ONNX格式規範,該規範存儲了各種信息,例如揚聲器元數據(AIVM清單),超參數樣式矢量作為定制元數據中的自定義元數據,該元數據以ONNX格式訓練有素的模型的元數據區域。
也可以說是“以ONNX格式保存的AI語音合成模型的常見元數據描述規範”。
因為它是ONNX格式的擴展規範,因此可以將其作為正常的ONNX文件加載。
ONNX文件以協議緩衝區格式定義,旨在將元數據存儲為root ModelProto消息的metadata_props字段中的StringStringEntryProto列表。
利用此規範,AIVMX將以下字符串數據存儲在metadata_props中的以下鍵:
aivm_manifest :AIVM清單aivm_hyper_parameters :語音合成模型的超參數Style-Bert-VITS2和Style-Bert-VITS2 (JP-Extra)模型架構存儲JSON字符串aivm_style_vectors :BASE64編碼語音合成模型樣式矢量(二進制)Style-Bert-VITS2和Style-Bert-VITS2 (JP-Extra)模型體系結構中,存儲了帶有base64編碼的numpy陣列(.npy)的字符串。以下是AIVM/AIVMX文件格式中包含的AIVM清單(版本1.0)的規格。
AIVM清單包含使用語音合成模型所需的各種信息,例如清單版本,模型架構,模型名稱,揚聲器元數據和样式信息。
AIVM清單的數據格式是以JSON格式編寫的UTF-8字符串。
由於JSON格式,圖像和音頻數據被存儲為Base64編碼字符串。
筆記
AIVM(SAFETENSOR)當前定義為AIVM表現的容器格式 - AIVMX(ONNX)的元數據區域必須是從字符串類型到字符串類型的鍵值,而無需嵌套,因此所有元數據都被序列化為字符串並存儲並存儲。
二進制數據(例如圖像和音頻)編碼後,將圖像和音頻作為字符串存儲。
Style-Bert-VITS2Style-Bert-VITS2 (JP-Extra) 重要的
支持AIVM/AIVMX文件的軟件必須適當驗證您自己軟件不支持的模型架構的AIVM/AIVMX文件。
例如,當被要求安裝Style-Bert-VITS2 (JP-Extra) Style-Bert-VITS2的其他模型架構,將顯示“不支持此模型體系結構”,並將其中止安裝。
重要的
從技術上講,可以存儲模型體系結構的語音綜合模型可以存儲,但是上面提到的唯一模型體系結構字符串是在AIVM清單(版本1.0)規範中正式定義的。
在定義自己的模型體系結構字符串時,您需要非常小心,以避免名稱與現有模型架構或不同軟件之間的未對準發生衝突。
建議盡可能多地將拉力請求發送到此存儲庫,並正式將對新模型體系結構的支持添加到AIVM規範中。
以下是AIVM清單(版本1.0)規範(摘自AIVMLIB的Pydantic Schema定義)的AIVM表現的字段定義。
重要的
將來更新AIVM規範時,AIVM清單中的字段可能會添加,擴展或刪除。
也很有可能將新的元數據添加到AIVM清單和AIVM/AIVMX文件格式中,並支持未來版本更新和其他模型架構。
當前唯一活躍的AIVM清單版本是1.0 。
class ModelArchitecture ( StrEnum ):
StyleBertVITS2 = 'Style-Bert-VITS2' # 対応言語: "ja", "en-US", "zh-CN"
StyleBertVITS2JPExtra = 'Style-Bert-VITS2 (JP-Extra)' # 対応言語: "ja"
class ModelFormat ( StrEnum ):
Safetensors = 'Safetensors'
ONNX = 'ONNX'
class AivmManifest ( BaseModel ):
""" AIVM マニフェストのスキーマ """
# AIVM マニフェストのバージョン (ex: 1.0)
# 現在は 1.0 のみサポート
manifest_version : Literal [ '1.0' ]
# 音声合成モデルの名前 (最大 80 文字)
# 音声合成モデル内の話者が 1 名の場合は話者名と同じ値を設定すべき
name : Annotated [ str , StringConstraints ( min_length = 1 , max_length = 80 )]
# 音声合成モデルの簡潔な説明 (最大 140 文字 / 省略時は空文字列を設定)
description : Annotated [ str , StringConstraints ( max_length = 140 )] = ''
# 音声合成モデルの制作者名のリスト (省略時は空リストを設定)
# 制作者名には npm package.json の "author", "contributors" に指定できるものと同じ書式を利用できる
# 例: ["John Doe", "Jane Doe <[email protected]>", "John Doe <[email protected]> (https://example.com)"]
creators : list [ Annotated [ str , StringConstraints ( min_length = 1 , max_length = 255 )]] = []
# 音声合成モデルのライセンス情報 (Markdown 形式またはプレーンテキスト / 省略時は None を設定)
# AIVM 仕様に対応するソフトでライセンス情報を表示できるよう、Markdown 形式またはプレーンテキストでライセンスの全文を設定する想定
# 社内のみでの利用など、この音声合成モデルの公開・配布を行わない場合は None を設定する
license : Annotated [ str , StringConstraints ( min_length = 1 )] | None = None
# 音声合成モデルのアーキテクチャ (音声合成技術の種類)
model_architecture : ModelArchitecture
# 音声合成モデルのモデル形式 (Safetensors または ONNX)
# AIVM ファイル (.aivm) のモデル形式は Safetensors 、AIVMX ファイル (.aivmx) のモデル形式は ONNX である
model_format : ModelFormat
# 音声合成モデル学習時のエポック数 (省略時は None を設定)
training_epochs : Annotated [ int , Field ( ge = 0 )] | None = None
# 音声合成モデル学習時のステップ数 (省略時は None を設定)
training_steps : Annotated [ int , Field ( ge = 0 )] | None = None
# 音声合成モデルを一意に識別する UUID
uuid : UUID
# 音声合成モデルのバージョン (SemVer 2.0 準拠 / ex: 1.0.0)
version : Annotated [ str , StringConstraints ( pattern = r'^(0|[1-9]d*).(0|[1-9]d*).(0|[1-9]d*)(?:-((?:0|[1-9]d*|d*[a-zA-Z-][0-9a-zA-Z-]*)(?:.(?:0|[1-9]d*|d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:+([0-9a-zA-Z-]+(?:.[0-9a-zA-Z-]+)*))?$' )]
# 音声合成モデルの話者情報 (最低 1 人以上の話者が必要)
speakers : list [ AivmManifestSpeaker ]
class AivmManifestSpeaker ( BaseModel ):
""" AIVM マニフェストの話者情報 """
# 話者の名前 (最大 80 文字)
# 音声合成モデル内の話者が 1 名の場合は音声合成モデル名と同じ値を設定すべき
name : Annotated [ str , StringConstraints ( min_length = 1 , max_length = 80 )]
# 話者のアイコン画像 (Data URL)
# 画像ファイル形式は 512×512 の JPEG (image/jpeg)・PNG (image/png) のいずれか (JPEG を推奨)
icon : Annotated [ str , StringConstraints ( pattern = r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$' )]
# 話者の対応言語のリスト (BCP 47 言語タグ)
# 例: 日本語: "ja", アメリカ英語: "en-US", 標準中国語: "zh-CN"
supported_languages : list [ Annotated [ str , StringConstraints ( pattern = r'^[a-z]{2,3}(?:-[A-Z]{4})?(?:-(?:[A-Z]{2}|d{3}))?(?:-(?:[A-Za-z0-9]{5,8}|d[A-Za-z0-9]{3}))*(?:-[A-Za-z](?:-[A-Za-z0-9]{2,8})+)*(?:-x(?:-[A-Za-z0-9]{1,8})+)?$' )]]
# 話者を一意に識別する UUID
uuid : UUID
# 話者のローカル ID (この音声合成モデル内で話者を識別するための一意なローカル ID で、uuid とは異なる)
local_id : Annotated [ int , Field ( ge = 0 )]
# 話者のスタイル情報 (最低 1 つ以上のスタイルが必要)
styles : list [ AivmManifestSpeakerStyle ]
class AivmManifestSpeakerStyle ( BaseModel ):
""" AIVM マニフェストの話者スタイル情報 """
# スタイルの名前 (最大 20 文字)
name : Annotated [ str , StringConstraints ( min_length = 1 , max_length = 20 )]
# スタイルのアイコン画像 (Data URL, 省略可能)
# 省略時は話者のアイコン画像がスタイルのアイコン画像として使われる想定
# 画像ファイル形式は 512×512 の JPEG (image/jpeg)・PNG (image/png) のいずれか (JPEG を推奨)
icon : Annotated [ str , StringConstraints ( pattern = r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$' )] | None = None
# スタイルの ID (この話者内でスタイルを識別するための一意なローカル ID で、uuid とは異なる)
local_id : Annotated [ int , Field ( ge = 0 , le = 31 )] # 最大 32 スタイルまでサポート
# スタイルごとのボイスサンプル (省略時は空リストを設定)
voice_samples : list [ AivmManifestVoiceSample ] = []
class AivmManifestVoiceSample ( BaseModel ):
""" AIVM マニフェストのボイスサンプル情報 """
# ボイスサンプルの音声ファイル (Data URL)
# 音声ファイル形式は WAV (audio/wav, Codec: PCM 16bit)・M4A (audio/mp4, Codec: AAC-LC) のいずれか (M4A を推奨)
audio : Annotated [ str , StringConstraints ( pattern = r'^data:audio/(wav|mp4);base64,[A-Za-z0-9+/=]+$' )]
# ボイスサンプルの書き起こし文
# 書き起こし文は音声ファイルでの発話内容と一致している必要がある
transcript : Annotated [ str , StringConstraints ( min_length = 1 )]答:提供針對不同應用和環境優化的兩種格式,以便更靈活地使用。
答:是的,有可能。
AIVM被設計為SafetEnsors格式的擴展,而AIVMX則被設計為ONNX格式的擴展名,因此可以將其讀取為常規SafetEnsors文件或ONNX文件。
AIVM元數據存儲在由現有模型格式規範定義的元數據區域中,並且不會影響現有工具的行為。
答:有兩種方法:
請注意,您要轉換的模型必須保存在單個SafetEnsor或ONNX格式中。
答:AIVM清單版本控制是在以下政策下進行的:
目前,1.0是最新的。
答:AIVMLIB和AIVMLIB-WEB是對不同語言/操作環境實現相同AIVM規範的庫。
BinaryIO成為JavaScript Web API的File (BLOB),但基本API設計與AIVMLIB相同。提示
目前,除了AIVMLIB/AIVMLIB-WEB之外,還沒有官方維護AIVM規範庫。
未來,其他語言的第三方庫可能會出現。
重要的
在添加對新模型體系結構的支持時,您必須在AIVMLIB和AIVMLIB-WEB中添加實現。
由於AIVM Generator使用AIVMLIB-WEB,因此必須更新兩個庫以向最終用戶提供新功能。
答:AIVM規範並未為模型體系結構指定實現詳細信息,從而使添加新的模型體系結構相對容易。
GPT-SoVITS2 )添加到ModelArchitecture中。generate_aivm_metadata()函數的新模型體系結構的支持。aivm_style_vectors字段,然後提交拉動請求。重要的
提交的AIVM清單規範必須在技術上得到AIVMLIB(Python)和Aivmlib-Web(Typescript Web)的支持。
AIVMLIB-WEB用於AIVM Generator內部。
一旦您增加了對AIVMLIB的支持,請還為AIVMLIB-WEB添加支持。
筆記
AIVM清單旨在僅定義獨立於模型體系結構的常見元數據。
特定於實現的超參數應存儲在aivm_hyper_parameters字段中。
我們還接受用於超參數的Pydantic模式定義。當前,僅定義了用於Style-Bert-VITS2架構的高參數架構。
筆記
當然,必須將AIVM/AIVMX的源模型保存在單個SafetEnsors或ONNX格式中。
因此,不支持跨越多個模型文件的模型體系結構。
請考慮如何將模型文件組合到一個或刪除不必要的模型文件中。
答:許可證信息在Markdown或純文本中,並設置了直接嵌入AIVM/AIVMX文件中的許可證的完整副本。
嵌入完整許可文本而不是指定URL的原因如下:
答:儘管沒有特定的尺寸限制,但模型文件本身通常是巨大的,因此由於元數據而導致的進一步增加的文件大小應保持在最低限度。
提示
參考實現AIVM Generator遵循這些準則,以確保適當的尺寸優化。
A.不建議進行手動編輯,因為元數據直接嵌入了二進制中。
如果您是最終用戶,請使用AIVM Generator。
提示
開發人員可以使用AIVMLIB/AIVMLIB-WEB編寫自己的應用程序。
AIVMLIB CLI僅提供具有最小元數據生成AIVM/AIVMX文件並驗證元數據的能力。