|
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") |