? 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文件并验证元数据的能力。