encodec - モノラル24kHzオーディオとステレオ48kHzオーディオの両方をサポートする最先端のディープラーニングベースのオーディオコーデック。

(State-of-the-art deep learning based audio codec supporting both mono 24 kHz audio and stereo 48 kHz audio.)

Created at: 2022-10-20 20:35:53
Language: Python
License: NOASSERTION

Encodec:ハイファイニューラルオーディオ圧縮

リンターバッジ テストバッジ

これは、ハイファイニューラルオーディオ圧縮[abs]で提示されたEnCodecニューラルコーデックのコードです。 紙。次の 2 つのマルチ帯域幅モデルを提供しています。

  • さまざまなオーディオデータでトレーニングされたモノラルオーディオで24kHzで動作する因果モデル。
  • 音楽のみのデータでトレーニングされたステレオオーディオで48kHzで動作する非因果モデル。

24 kHzモデルは1.5、3、6、12、または24 kbpsに圧縮できますが、48 kHzモデルは 3、6、12、および 24 kbps をサポートします。また、それぞれに事前トレーニング済みの言語モデルも提供します モデルのうち、表現をさらに最大40%圧縮できます。 それ以上の品質の低下。

参考までに、新しいMS-STFT識別器バランサーのコードも提供しています。

エンコーデックの構造を表すスキーマ、
 畳み込み+ LSTMエンコーダ、中央の残差ベクトル量子化、
 その後に畳み込み+ LSTMデコーダーが続きます。マルチスケールの複素スペクトログラム識別器が、客観的な再構成損失とともに出力に適用されます。
 小型のトランスモデルは、RVQ出力を予測するように訓練されます。

サンプル

ベースラインを含むサンプルは、サンプルページで提供されています。 また、EnCodecを使用して48kHzの音楽で達成したことの簡単なデモを行うこともできます。 サムネイルをクリックしてエントロピーコーディングします(ルシールクルーボヤジャーIが提供するオリジナルトラック)。

サンプル ビデオのサムネイル。
 ここでは、最初にグラウンドトゥルース、次に~3kbps、次に12kbpsの2曲について説明します。

最近どうですか。

リリースの詳細については、変更ログを参照してください。

取り付け

Encodec には Python 3.8 と、かなり新しいバージョンの PyTorch (理想的には 1.11.0) が必要です。 Encodecをインストールするには、次のリポジトリから実行できます。

pip install -U encodec  # stable release
pip install -U git+https://git@github.com/facebookresearch/encodec#egg=encodec  # bleeding edge
# of if you cloned the repo locally
pip install .

使い

その後、次のように [エンコード] コマンドを使用できます。

python3 -m encodec [...]
# or
encodec [...]

圧縮APIを直接使用する場合は、チェックアウトと。離散を抽出する方法については、以下を参照してください。 表現。

encodec.compress
encodec.model

モデルのストレージ

モデルは、トーチハブを使用して最初の使用時に自動的にダウンロードされます。 これらのモデルの保存場所、またはカスタマイズ方法の詳細については、 保管場所、チェックアウトドキュメント。

圧縮

encodec [-b TARGET_BANDWIDTH] [-f] [--hq] [--lm] INPUT_FILE [OUTPUT_FILE]

お使いのプラットフォーム上のtorchaudioでサポートされているオーディオファイルを指定すると、圧縮 ターゲット帯域幅へのEncodecを使用します(デフォルトは6 kbpsで、1.5、3、6、12、または24のいずれかになります)。 OUTPUT_FILEで終わらなければなりません。指定しない場合は、 拡張子をに置き換えます。 ステレオオーディオで48kHzで動作するモデルを使用するには、フラグ。 フラグは、既存の出力ファイルを強制的に上書きするために使用されます。 エントロピーコーディングで事前トレーニング済み言語モデルを使用するにはフラグを使用します( はるかに遅くなります)。

.ecdc
INPUT_FILE
.ecdc
--hq
-f
--lm

入力のサンプルレートまたはチャンネル数がモデルのサンプルレートまたはチャンネル数と一致しない場合、 このコマンドは、必要に応じてチャンネルを自動的にリサンプリング/削減します。

減圧

encodec [-f] [-r] ENCODEC_FILE [OUTPUT_WAV_FILE]

与えられたファイル以前に生成された、これは指定された出力wavファイルにデコードします。 指定しない場合、出力はデフォルトで入力になります拡張機能。 ファイルを使用して、出力ファイルを強制的に上書きします(圧縮してから解凍する場合は注意してください。 元のファイルを上書きしないでください!使用するクリッピングが発生した場合のフラグ、これは それを避けるために出力ファイルを再スケーリングします。

.ecdc
.wav
-f
-r

圧縮+解凍

encodec [-r] [-b TARGET_BANDWIDTH] [-f] [--hq] [--lm] INPUT_FILE OUTPUT_WAV_FILE

いつ持っている拡張機能(とは対照的に)、コマンドは代わりに圧縮し、中間ファイルを保存せずにすぐに解凍します。

OUTPUT_WAV_FILE
.wav
.ecdc
encodec
.ecdc

離散表現の抽出

EnCodecモデルを使用して、オーディオ波形から離散表現を抽出することもできます。

from encodec import EncodecModel
from encodec.utils import convert_audio

import torchaudio
import torch

# Instantiate a pretrained EnCodec model
model = EncodecModel.encodec_model_24khz()
model.set_target_bandwidth(6.0)

# Load and pre-process the audio waveform
wav, sr = torchaudio.load("<PATH_TO_AUDIO_FILE>")
wav = wav.unsqueeze(0)
wav = convert_audio(wav, sr, model.sample_rate, model.channels)

# Extract discrete codes from EnCodec
encoded_frames = model.encode(wav)
codes = torch.cat([encoded[0] for encoded in encoded_frames], dim=-1)  # [B, n_q, T]

48 kHz モデルでは、オーディオを 1 秒のチャンクで処理し、オーバーラップは 1% であることに注意してください。 オーディオを単位スケールに再正規化します。このモデルでは、の出力はタプルのリスト(1秒の各フレーム)スカラーテンソルになります。

model.encode(wav)
(codes, scale)
scale

開発用のインストール

これにより、依存関係がインストールされ、開発者モード(ファイルへの変更 直接反映されます)、単体テストを実行するための依存関係とともに。

encodec

pip install -e '.[dev]'

試験

単体テストは次のように実行できます。

make tests

引用

このコードまたは結果を論文で使用する場合は、私たちの研究を次のように引用してください。

@article{defossez2022highfi,
  title={High Fidelity Neural Audio Compression},
  author={Défossez, Alexandre and Copet, Jade and Synnaeve, Gabriel and Adi, Yossi},
  journal={arXiv preprint arXiv:2210.13438},
  year={2022}
}

ライセンス

このリポジトリは CC-BY-NC 4.0 でリリースされています。ライセンスファイルにあります。