155 lines
4.1 KiB
Plaintext
155 lines
4.1 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os\n",
|
|
"\n",
|
|
"root = \"model_assets/jvnv-F1\"\n",
|
|
"pth_files = [os.path.join(root, f) for f in os.listdir(root) if f.endswith(\".pth\")]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import torch\n",
|
|
"\n",
|
|
"model_name = \"G_0.pth\"\n",
|
|
"model = torch.load(f\"pretrained/{model_name}\", map_location=torch.device(\"cpu\"))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"enc_p.emo_proj.bias\n",
|
|
"enc_p.emo_q_proj.weight\n",
|
|
"enc_p.emo_q_proj.bias\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from safetensors.torch import save_file\n",
|
|
"state_dict = model[\"model\"]\n",
|
|
"new_dict = {}\n",
|
|
"for k in state_dict.keys():\n",
|
|
" if k.startswith(\"enc_p.emo\"):\n",
|
|
" print(k)\n",
|
|
" else:\n",
|
|
" new_dict[k] = state_dict[k]\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"save_file(new_dict, f\"pretrained/{model_name.replace('.pth', '.safetensors')}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from glob import glob\n",
|
|
"root_dir = \"model_assets\"\n",
|
|
"\n",
|
|
"safetensors_files = glob(f\"{root_dir}/**/*.safetensors\", recursive=True)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# 推論に不要なenc_qを消し忘れていたのを削除\n",
|
|
"\n",
|
|
"from safetensors import safe_open\n",
|
|
"from safetensors.torch import save_file\n",
|
|
"\n",
|
|
"for path in safetensors_files:\n",
|
|
" print(path)\n",
|
|
" tensors = {}\n",
|
|
" with safe_open(path, framework=\"pt\", device=\"cpu\") as f:\n",
|
|
" for key in f.keys():\n",
|
|
" if key.startswith(\"enc_q\"):\n",
|
|
" print(key)\n",
|
|
" continue\n",
|
|
" tensors[key] = f.get_tensor(key)\n",
|
|
" save_file(tensors, path.replace(\".safetensors\", \".new.safetensors\"))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"enc_p.xvec_proj.weight enc_p.style_proj.weight\n",
|
|
"enc_p.xvec_proj.bias enc_p.style_proj.bias\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# pthファイルを推論用safetensorsに変換\n",
|
|
"from safetensors.torch import save_file\n",
|
|
"from safetensors import safe_open\n",
|
|
"import torch\n",
|
|
"\n",
|
|
"pth_path = \"model_assets/jvnv-F1/release_7000.pth\"\n",
|
|
"pth_weight = torch.load(pth_path, map_location=torch.device(\"cpu\"))\n",
|
|
"new_dict = {}\n",
|
|
"for key in pth_weight[\"model\"]:\n",
|
|
" if key.startswith(\"enc_p.xvec_proj.\"): # 前のモデルの名残\n",
|
|
" print(key, key.replace(\"enc_p.xvec_proj.\", \"enc_p.style_proj.\"))\n",
|
|
" new_dict[key.replace(\"enc_p.xvec_proj.\", \"enc_p.style_proj.\")] = pth_weight[\"model\"][key].clone().contiguous() # よく分からないおまじないをしないとエラーになる\n",
|
|
" elif not key.startswith(\"enc_q\"):\n",
|
|
" new_dict[key] = pth_weight[\"model\"][key]\n",
|
|
" else:\n",
|
|
" continue\n",
|
|
"new_dict[\"iteration\"] = torch.LongTensor([pth_weight[\"iteration\"]])\n",
|
|
"save_file(new_dict, pth_path.replace(\".pth\", \".pth.safetensors\"))\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "venv",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.10.11"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|