Skip to content

Commit

Permalink
Update: Readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
tsukumijima committed Oct 28, 2024
1 parent f6ac985 commit 3d0a499
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
25 changes: 22 additions & 3 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,22 @@ Safetensors のヘッダー JSON にはテンソルのオフセット等が格

### ONNX 形式との互換性

執筆中...
ONNX 形式の拡張仕様のため、そのまま通常の ONNX ファイルとしてロードできる。

ONNX ファイルは Protocol Buffers 形式で定義されており、ルートである `ModelProto` メッセージの `metadata_props` フィールドに、`StringStringEntryProto` のリストとしてメタデータを格納できる仕様となっている。

この仕様を活用し、AIVMX は `metadata_props` 内の以下のキーに、次のデータを格納する:

- **`aivm_manifest` : [AIVM マニフェスト](#aivm-manifest-specification-version-10)**
- JSON 文字列として格納される
- マニフェストバージョンや話者メタデータを含む大半の情報が含まれる
- **`aivm_hyper_parameters` : 音声合成モデルのハイパーパラメータ**
- 格納フォーマットはモデルアーキテクチャ依存
- `Style-Bert-VITS2``Style-Bert-VITS2 (JP-Extra)` モデルアーキテクチャでは JSON 文字列が格納される
- **`aivm_style_vectors` : Base64 エンコードされた音声合成モデルのスタイルベクトル (バイナリ)**
- Base64 デコード後のフォーマットはモデルアーキテクチャ依存
- `Style-Bert-VITS2``Style-Bert-VITS2 (JP-Extra)` モデルアーキテクチャでは NumPy 配列 (.npy) を Base64 エンコードした文字列が格納される
- モデルアーキテクチャ次第では省略されうる

### 参考文献

Expand All @@ -269,6 +284,10 @@ Safetensors のヘッダー JSON にはテンソルのオフセット等が格
AIVM マニフェストのデータ形式は、JSON フォーマットで記述された UTF-8 文字列である。
JSON フォーマットの都合上、画像や音声データは Base64 エンコードされた文字列で格納される。

> [!NOTE]
> 現在 AIVM マニフェストのコンテナフォーマットとして定義されている AIVM (Safetensors) ・AIVMX (ONNX) のメタデータ領域はネストなしの string 型から string 型への key-value でなければならないため、すべてのメタデータを文字列にシリアライズして格納する仕様となっている。
> 画像や音声などのバイナリデータについては、Base64 エンコードを施した上で文字列として格納する。
### サポートされるモデルアーキテクチャ

- `Style-Bert-VITS2`
Expand All @@ -290,7 +309,7 @@ JSON フォーマットの都合上、画像や音声データは Base64 エン
> [!IMPORTANT]
> **AIVM マニフェスト内のフィールドは、今後 AIVM 仕様が更新された際に追加・拡張・削除される可能性がある。**
> 今後のバージョン更新や追加のモデルアーキテクチャのサポートにより、AIVM マニフェストや AIVM ファイルフォーマット自体に新しいメタデータが追加されることも十分考えられる。
> 現在有効な AIVM マニフェストバージョンは 1.0 のみ。
> 現在有効な AIVM マニフェストバージョンは `1.0` のみ。
```python
class ModelArchitecture(StrEnum):
Expand Down Expand Up @@ -345,7 +364,7 @@ class AivmManifestSpeaker(BaseModel):
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-zA-Z]{4})?(-([a-zA-Z]{2}|[0-9]{3}))?(-([a-zA-Z0-9]{5,8}|[0-9][a-zA-Z0-9]{3}))*(-[a-zA-Z](-[a-zA-Z0-9]{2,8})+)*(-x(-[a-zA-Z0-9]{1,8})+)?$')]]
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 とは異なる)
Expand Down
2 changes: 1 addition & 1 deletion aivmlib/schemas/aivm_manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class AivmManifestSpeaker(BaseModel):
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-zA-Z]{4})?(-([a-zA-Z]{2}|[0-9]{3}))?(-([a-zA-Z0-9]{5,8}|[0-9][a-zA-Z0-9]{3}))*(-[a-zA-Z](-[a-zA-Z0-9]{2,8})+)*(-x(-[a-zA-Z0-9]{1,8})+)?$')]]
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 とは異なる)
Expand Down

0 comments on commit 3d0a499

Please sign in to comment.