mirror of
https://github.com/w-okada/voice-changer.git
synced 2025-01-23 21:45:00 +03:00
externalize content vec model
This commit is contained in:
parent
c089e6bc51
commit
03d481ab67
@ -40,7 +40,7 @@ def setupArgParser():
|
|||||||
parser.add_argument("--modelType", type=str,
|
parser.add_argument("--modelType", type=str,
|
||||||
default="MMVCv15", help="model type: MMVCv13, MMVCv15, so-vits-svc-40v2")
|
default="MMVCv15", help="model type: MMVCv13, MMVCv15, so-vits-svc-40v2")
|
||||||
parser.add_argument("--cluster", type=str, help="path to cluster model")
|
parser.add_argument("--cluster", type=str, help="path to cluster model")
|
||||||
parser.add_argument("--hubert", type=str, help="path to hubert model, 現バージョンではhubertTorchModelは固定値で上書きされるため、設定しても効果ない。")
|
parser.add_argument("--hubert", type=str, help="path to hubert model")
|
||||||
parser.add_argument("--internal", type=strtobool, default=False, help="各種パスをmac appの中身に変換")
|
parser.add_argument("--internal", type=strtobool, default=False, help="各種パスをmac appの中身に変換")
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
@ -84,7 +84,7 @@ PORT = args.p
|
|||||||
CONFIG = args.c if args.c != None else None
|
CONFIG = args.c if args.c != None else None
|
||||||
MODEL = args.m if args.m != None else None
|
MODEL = args.m if args.m != None else None
|
||||||
ONNX_MODEL = args.o if args.o != None else None
|
ONNX_MODEL = args.o if args.o != None else None
|
||||||
HUBERT_MODEL = args.hubert if args.hubert != None else None
|
HUBERT_MODEL = args.hubert if args.hubert != None else None # hubertはユーザがダウンロードして解凍フォルダに格納する運用。
|
||||||
CLUSTER_MODEL = args.cluster if args.cluster != None else None
|
CLUSTER_MODEL = args.cluster if args.cluster != None else None
|
||||||
if args.internal and hasattr(sys, "_MEIPASS"):
|
if args.internal and hasattr(sys, "_MEIPASS"):
|
||||||
print("use internal path")
|
print("use internal path")
|
||||||
@ -122,13 +122,12 @@ if args.colab == True:
|
|||||||
os.environ["colab"] = "True"
|
os.environ["colab"] = "True"
|
||||||
|
|
||||||
if __name__ == 'MMVCServerSIO':
|
if __name__ == 'MMVCServerSIO':
|
||||||
voiceChangerManager = VoiceChangerManager.get_instance()
|
voiceChangerManager = VoiceChangerManager.get_instance({"hubert": HUBERT_MODEL})
|
||||||
if CONFIG and (MODEL or ONNX_MODEL):
|
if CONFIG and (MODEL or ONNX_MODEL):
|
||||||
if MODEL_TYPE == "MMVCv15" or MODEL_TYPE == "MMVCv13":
|
if MODEL_TYPE == "MMVCv15" or MODEL_TYPE == "MMVCv13":
|
||||||
voiceChangerManager.loadModel(CONFIG, MODEL, ONNX_MODEL, None, None)
|
voiceChangerManager.loadModel(CONFIG, MODEL, ONNX_MODEL, None)
|
||||||
else:
|
else:
|
||||||
# !! 注意 !! hubertTorchModelは固定値で上書きされるため、設定しても効果ない。
|
voiceChangerManager.loadModel(CONFIG, MODEL, ONNX_MODEL, CLUSTER_MODEL)
|
||||||
voiceChangerManager.loadModel(CONFIG, MODEL, ONNX_MODEL, CLUSTER_MODEL, HUBERT_MODEL)
|
|
||||||
|
|
||||||
app_fastapi = MMVC_Rest.get_instance(voiceChangerManager)
|
app_fastapi = MMVC_Rest.get_instance(voiceChangerManager)
|
||||||
app_socketio = MMVC_SocketIOApp.get_instance(app_fastapi, voiceChangerManager)
|
app_socketio = MMVC_SocketIOApp.get_instance(app_fastapi, voiceChangerManager)
|
||||||
|
@ -64,9 +64,8 @@ class MMVC_Rest_Fileuploader:
|
|||||||
clusterTorchModelFilePath = os.path.join(UPLOAD_DIR, clusterTorchModelFilename) if clusterTorchModelFilename != "-" else None
|
clusterTorchModelFilePath = os.path.join(UPLOAD_DIR, clusterTorchModelFilename) if clusterTorchModelFilename != "-" else None
|
||||||
hubertTorchModelFilePath = os.path.join(UPLOAD_DIR, hubertTorchModelFilename) if hubertTorchModelFilename != "-" else None
|
hubertTorchModelFilePath = os.path.join(UPLOAD_DIR, hubertTorchModelFilename) if hubertTorchModelFilename != "-" else None
|
||||||
|
|
||||||
# !! 注意 !! hubertTorchModelは固定値で上書きされるため、設定しても効果ない。
|
|
||||||
info = self.voiceChangerManager.loadModel(configFilePath, pyTorchModelFilePath, onnxModelFilePath,
|
info = self.voiceChangerManager.loadModel(configFilePath, pyTorchModelFilePath, onnxModelFilePath,
|
||||||
clusterTorchModelFilePath, hubertTorchModelFilePath)
|
clusterTorchModelFilePath)
|
||||||
json_compatible_item_data = jsonable_encoder(info)
|
json_compatible_item_data = jsonable_encoder(info)
|
||||||
return JSONResponse(content=json_compatible_item_data)
|
return JSONResponse(content=json_compatible_item_data)
|
||||||
# return {"load": f"{configFilePath}, {pyTorchModelFilePath}, {onnxModelFilePath}"}
|
# return {"load": f"{configFilePath}, {pyTorchModelFilePath}, {onnxModelFilePath}"}
|
||||||
|
@ -55,7 +55,7 @@ class SoVitsSvc40v2Settings():
|
|||||||
|
|
||||||
|
|
||||||
class SoVitsSvc40v2:
|
class SoVitsSvc40v2:
|
||||||
def __init__(self):
|
def __init__(self, params):
|
||||||
self.settings = SoVitsSvc40v2Settings()
|
self.settings = SoVitsSvc40v2Settings()
|
||||||
self.net_g = None
|
self.net_g = None
|
||||||
self.onnx_session = None
|
self.onnx_session = None
|
||||||
@ -63,9 +63,10 @@ class SoVitsSvc40v2:
|
|||||||
self.raw_path = io.BytesIO()
|
self.raw_path = io.BytesIO()
|
||||||
self.gpu_num = torch.cuda.device_count()
|
self.gpu_num = torch.cuda.device_count()
|
||||||
self.prevVol = 0
|
self.prevVol = 0
|
||||||
|
self.params = params
|
||||||
|
print("so-vits-initialization:", params)
|
||||||
|
|
||||||
def loadModel(self, config: str, pyTorch_model_file: str = None, onnx_model_file: str = None, clusterTorchModel: str = None, hubertTorchModel: str = None):
|
def loadModel(self, config: str, pyTorch_model_file: str = None, onnx_model_file: str = None, clusterTorchModel: str = None):
|
||||||
# !! 注意 !! hubertTorchModelは固定値で上書きされるため、設定しても効果ない。
|
|
||||||
|
|
||||||
self.settings.configFile = config
|
self.settings.configFile = config
|
||||||
self.hps = utils.get_hparams_from_file(config)
|
self.hps = utils.get_hparams_from_file(config)
|
||||||
@ -73,10 +74,11 @@ class SoVitsSvc40v2:
|
|||||||
|
|
||||||
# hubert model
|
# hubert model
|
||||||
try:
|
try:
|
||||||
if sys.platform.startswith('darwin'):
|
# if sys.platform.startswith('darwin'):
|
||||||
vec_path = os.path.join(sys._MEIPASS, "hubert/checkpoint_best_legacy_500.pt")
|
# vec_path = os.path.join(sys._MEIPASS, "hubert/checkpoint_best_legacy_500.pt")
|
||||||
else:
|
# else:
|
||||||
vec_path = "hubert/checkpoint_best_legacy_500.pt"
|
# vec_path = "hubert/checkpoint_best_legacy_500.pt"
|
||||||
|
vec_path = self.params["hubert"]
|
||||||
|
|
||||||
models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task(
|
models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task(
|
||||||
[vec_path],
|
[vec_path],
|
||||||
|
@ -39,7 +39,7 @@ class VocieChangerSettings():
|
|||||||
|
|
||||||
class VoiceChanger():
|
class VoiceChanger():
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, params):
|
||||||
# 初期化
|
# 初期化
|
||||||
self.settings = VocieChangerSettings()
|
self.settings = VocieChangerSettings()
|
||||||
self.onnx_session = None
|
self.onnx_session = None
|
||||||
@ -58,7 +58,7 @@ class VoiceChanger():
|
|||||||
self.voiceChanger = MMVCv13()
|
self.voiceChanger = MMVCv13()
|
||||||
elif self.modelType == "so-vits-svc-40v2" or self.modelType == "so-vits-svc-40v2_tsukuyomi":
|
elif self.modelType == "so-vits-svc-40v2" or self.modelType == "so-vits-svc-40v2_tsukuyomi":
|
||||||
from voice_changer.SoVitsSvc40v2.SoVitsSvc40v2 import SoVitsSvc40v2
|
from voice_changer.SoVitsSvc40v2.SoVitsSvc40v2 import SoVitsSvc40v2
|
||||||
self.voiceChanger = SoVitsSvc40v2()
|
self.voiceChanger = SoVitsSvc40v2(params)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
from voice_changer.MMVCv13.MMVCv13 import MMVCv13
|
from voice_changer.MMVCv13.MMVCv13 import MMVCv13
|
||||||
@ -70,12 +70,11 @@ class VoiceChanger():
|
|||||||
|
|
||||||
print(f"VoiceChanger Initialized (GPU_NUM:{self.gpu_num}, mps_enabled:{self.mps_enabled})")
|
print(f"VoiceChanger Initialized (GPU_NUM:{self.gpu_num}, mps_enabled:{self.mps_enabled})")
|
||||||
|
|
||||||
def loadModel(self, config: str, pyTorch_model_file: str = None, onnx_model_file: str = None, clusterTorchModel: str = None, hubertTorchModel: str = None):
|
def loadModel(self, config: str, pyTorch_model_file: str = None, onnx_model_file: str = None, clusterTorchModel: str = None):
|
||||||
if self.modelType == "MMVCv15" or self.modelType == "MMVCv13":
|
if self.modelType == "MMVCv15" or self.modelType == "MMVCv13":
|
||||||
return self.voiceChanger.loadModel(config, pyTorch_model_file, onnx_model_file)
|
return self.voiceChanger.loadModel(config, pyTorch_model_file, onnx_model_file)
|
||||||
else: # so-vits-svc-40v2
|
else: # so-vits-svc-40v2
|
||||||
# !! 注意 !! hubertTorchModelは固定値で上書きされるため、設定しても効果ない。
|
return self.voiceChanger.loadModel(config, pyTorch_model_file, onnx_model_file, clusterTorchModel)
|
||||||
return self.voiceChanger.loadModel(config, pyTorch_model_file, onnx_model_file, clusterTorchModel, hubertTorchModel)
|
|
||||||
|
|
||||||
def get_info(self):
|
def get_info(self):
|
||||||
data = asdict(self.settings)
|
data = asdict(self.settings)
|
||||||
|
@ -4,15 +4,14 @@ from voice_changer.VoiceChanger import VoiceChanger
|
|||||||
|
|
||||||
class VoiceChangerManager():
|
class VoiceChangerManager():
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_instance(cls):
|
def get_instance(cls, params):
|
||||||
if not hasattr(cls, "_instance"):
|
if not hasattr(cls, "_instance"):
|
||||||
cls._instance = cls()
|
cls._instance = cls()
|
||||||
cls._instance.voiceChanger = VoiceChanger()
|
cls._instance.voiceChanger = VoiceChanger(params)
|
||||||
return cls._instance
|
return cls._instance
|
||||||
|
|
||||||
def loadModel(self, config, model, onnx_model, clusterTorchModel, hubertTorchModel):
|
def loadModel(self, config, model, onnx_model, clusterTorchModel):
|
||||||
# !! 注意 !! hubertTorchModelは固定値で上書きされるため、設定しても効果ない。
|
info = self.voiceChanger.loadModel(config, model, onnx_model, clusterTorchModel)
|
||||||
info = self.voiceChanger.loadModel(config, model, onnx_model, clusterTorchModel, hubertTorchModel)
|
|
||||||
info["status"] = "OK"
|
info["status"] = "OK"
|
||||||
return info
|
return info
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user