Skip to content

Instantly share code, notes, and snippets.

@hetima
Created April 15, 2023 12:08
Show Gist options
  • Save hetima/63a9cf0f2172ef7d263c303cdd3eb5f2 to your computer and use it in GitHub Desktop.
Save hetima/63a9cf0f2172ef7d263c303cdd3eb5f2 to your computer and use it in GitHub Desktop.
RVC CreateFeatureFiles

RVCの特徴量ファイル(total_fea.npyとadded~.index)を指定したフォルダにモデル名で書き出すスクリプト。

  • CreateFeatureFiles.bat の VENV_DIR
  • CreateFeatureFiles.py の model_path output_path

を設定する。
batとpyを同じフォルダに置いて、batを実行すると設定したvenvでpyを実行する。モデル名を訊いてくるので入力。
output_path に 「モデル名.npy」「モデル名.index」が書き出される。

@echo off
set PYTHON=
set GIT=
@REM venvのパスを指定
set VENV_DIR=G:\venv\RVC\.venv
set COMMANDLINE_ARGS=
if not defined PYTHON (set PYTHON=python)
set ERROR_REPORTING=FALSE
:start_venv
if ["%VENV_DIR%"] == ["-"] goto :launch
:activate_venv
set PYTHON="%VENV_DIR%\Scripts\Python.exe"
echo venv %PYTHON%
:launch
%PYTHON% CreateFeatureFiles.py %*
pause
exit /b
:show_stdout_stderr
echo.
echo exit code: %errorlevel%
pause
import os
import faiss
import numpy as np
#トレーニングフォルダ
model_path = r"G:\venv\RVC\rvc-webui\models\training\models"
#書き出すフォルダ
output_path = r"G:\venv\RVC\subdata"
def make(training_dir, output_path, model_name):
feature_dir = os.path.join(training_dir, "3_feature256")
npys = []
listdir_res = list(os.listdir(feature_dir))
for name in sorted(listdir_res):
phone = np.load(os.path.join(feature_dir, name))
npys.append(phone)
big_npy = np.concatenate(npys, 0)
# np.save(os.path.join(training_dir, "total_fea.npy"), big_npy)
np.save(os.path.join(output_path, model_name + ".npy"), big_npy)
n_ivf = big_npy.shape[0] // 39
index = faiss.index_factory(256, f"IVF{n_ivf},Flat")
index_ivf = faiss.extract_index_ivf(index)
index_ivf.nprobe = int(np.power(n_ivf, 0.3))
index.train(big_npy)
index.add(big_npy)
faiss.write_index(
index,
# os.path.join(training_dir, f"added_IVF{n_ivf}_Flat_nprobe_{index_ivf.nprobe}.index"),
os.path.join(output_path, model_name + ".index"),
)
print("CreateFeatureFiles.py")
model_name = input("target model name:")
print(model_name)
training_dir = os.path.join(model_path, model_name)
if os.path.exists(training_dir):
make(training_dir, output_path, model_name)
print("done")
else:
print("error: model dir not found")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment