{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "AutoVC training .ipynb", "provenance": [], "collapsed_sections": [], "mount_file_id": "1zL5O_UHp9FMhn4AqNTf5c-_46aCB78g5", "authorship_tag": "ABX9TyN936oOrQasCqhzr517rjM0", "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" }, "accelerator": "GPU" }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "KlD_l2VGnlMq", "outputId": "5fa8ae30-e794-4491-fbb8-49402db93255" }, "source": [ "!git clone https://github.com/gkv856/end2end_auto_voice_conversion.git" ], "execution_count": 1, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Cloning into 'end2end_auto_voice_conversion'...\n", "remote: Enumerating objects: 720, done.\u001b[K\n", "remote: Counting objects: 100% (720/720), done.\u001b[K\n", "remote: Compressing objects: 100% (521/521), done.\u001b[K\n", "remote: Total 720 (delta 257), reused 616 (delta 153), pack-reused 0\u001b[K\n", "Receiving objects: 100% (720/720), 266.45 MiB | 31.29 MiB/s, done.\n", "Resolving deltas: 100% (257/257), done.\n", "Checking out files: 100% (213/213), done.\n" ] } ] }, { "cell_type": "code", "metadata": { "id": "9F-Jn5-brXJP" }, "source": [ "!mv end2end_auto_voice_conversion/ AVC/" ], "execution_count": 2, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "iIVOtzwUqLkp", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "03d25bd9-6ddc-4566-9301-355b416a0b56" }, "source": [ "pip install webrtcvad" ], "execution_count": 3, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting webrtcvad\n", " Downloading webrtcvad-2.0.10.tar.gz (66 kB)\n", "\u001b[?25l\r\u001b[K |█████ | 10 kB 23.1 MB/s eta 0:00:01\r\u001b[K |██████████ | 20 kB 22.2 MB/s eta 0:00:01\r\u001b[K |██████████████▉ | 30 kB 11.2 MB/s eta 0:00:01\r\u001b[K |███████████████████▉ | 40 kB 9.0 MB/s eta 0:00:01\r\u001b[K |████████████████████████▊ | 51 kB 5.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▊ | 61 kB 5.8 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 66 kB 2.8 MB/s \n", "\u001b[?25hBuilding wheels for collected packages: webrtcvad\n", " Building wheel for webrtcvad (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for webrtcvad: filename=webrtcvad-2.0.10-cp37-cp37m-linux_x86_64.whl size=72381 sha256=d85a7b82aeb1d30339feabc54147db687457fadaf29ff9f172277b7d7f152858\n", " Stored in directory: /root/.cache/pip/wheels/11/f9/67/a3158d131f57e1c0a7d8d966a707d4a2fb27567a4fe47723ad\n", "Successfully built webrtcvad\n", "Installing collected packages: webrtcvad\n", "Successfully installed webrtcvad-2.0.10\n" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6IjU5f1KrngW", "outputId": "f86fe1f2-6513-48c5-9a84-1a83d4f93ed7" }, "source": [ "from AVC.strings.constants import hp" ], "execution_count": 4, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Device type available = 'cuda:0'\n" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 402 }, "id": "Ikq17qcOn1W_", "outputId": "2aebfae8-cc44-44e7-8176-741561ac093b" }, "source": [ "import torch\n", "\n", "from AVC.s3_auto_voice_cloner.s1_create_emb_per_speaker import create_embbedings_per_speaker\n", "\n", "from sklearn.manifold import TSNE\n", "import matplotlib.pyplot as plt\n", "\n", "# hp.m_ge2e.best_model_path = \"static/model_chk_pts/ge2e/final_epoch_1000_L_0.0390.pth\"\n", "\n", "utterances = create_embbedings_per_speaker(hp)\n", "\n", "\n", "labels = []\n", "embs = []\n", "for k, v in utterances.items():\n", " embs.append(v)\n", " labels.append(k)\n", "\n", "\n", "embeddings = torch.tensor(embs)\n", "\n", "scatters = TSNE(n_components=2, random_state=0).fit_transform(embeddings.cpu().detach().numpy())\n", "fig = plt.figure(figsize=(5, 5))\n", "\n", "current_Label = labels[0]\n", "current_Index = 0\n", "for index, label in enumerate(labels[1:], 1):\n", " if label != current_Label:\n", " plt.scatter(scatters[current_Index:index, 0], scatters[current_Index:index, 1],\n", " label='{}'.format(current_Label))\n", " current_Label = label\n", " current_Index = index\n", "\n", "plt.scatter(scatters[current_Index:, 0], scatters[current_Index:, 1], label='{}'.format(current_Label))\n", "plt.legend()\n", "plt.tight_layout()\n", "plt.show()\n" ], "execution_count": 5, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Pre-trained model loaded /content/AVC/static/model_chk_pts/ge2e/embedding_model_GE2E_loss_epoch_1000_L_0.0003.pth\n", "File saved!!\n" ] }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "xtIewt8kpdR6" }, "source": [ "from AVC.s3_auto_voice_cloner.s5_auto_vc_train import TrainAutoVCNetwork" ], "execution_count": 6, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "nr0mhvWUq7_e", "outputId": "17235df3-d6d5-434d-e555-ffe19884f8f6" }, "source": [ "\n", "hp.m_avc.tpm.lambda_cd = 1\n", "hp.m_avc.tpm.num_iters = 1000\n", "hp.m_avc.tpm.log_step = 100\n", "hp.m_avc.tpm.dot_print = 10\n", "hp.m_avc.tpm.checkpoint_interval = 200\n", "hp.m_avc.tpm.lr = 0.001\n", "hp.m_avc.tpm.reduce_lr_interval = 100\n", "hp.m_avc.tpm.data_batch_size = 2\n", "\n", "solver = TrainAutoVCNetwork(hp)\n", "solver.optimizer = torch.optim.Adam(solver.auto_vc_net.parameters(), \n", " lr=solver.lr,\n", " betas=(0.9, 0.999),\n", " eps=1e-7,\n", " weight_decay=0)\n", "# start the training\n", "auto_vc_model, lst_loss_tuple = solver.start_training()\n" ], "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Started Batched Training...\n", "Epoch:[100/1000] .." ] } ] }, { "cell_type": "code", "metadata": { "id": "T9d3hSD23gvi" }, "source": [ "hp.m_avc.gen.best_model_path = \"/content/AVC/static/model_chk_pts/autovc/final_1000.pth\"" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "dXgEIKxlB17a" }, "source": [ "!pip install wavenet_vocoder\n", "!pip install webrtcvad" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "Ig_jn3Z2q9is" }, "source": [ "import torch\n", "\n", "from AVC.s3_auto_voice_cloner.s1_create_emb_per_speaker import create_embbedings_per_speaker\n", "\n", "from sklearn.manifold import TSNE\n", "import matplotlib.pyplot as plt\n", "\n", "# hp.m_ge2e.best_model_path = \"static/model_chk_pts/ge2e/final_epoch_1000_L_0.0390.pth\"\n", "\n", "utterances = create_embbedings_per_speaker(hp)\n", "\n", "\n", "labels = []\n", "embs = []\n", "for k, v in utterances.items():\n", " embs.append(v)\n", " labels.append(k)\n", "\n", "\n", "embeddings = torch.tensor(embs)\n", "\n", "scatters = TSNE(n_components=2, random_state=0).fit_transform(embeddings.cpu().detach().numpy())\n", "fig = plt.figure(figsize=(5, 5))\n", "\n", "current_Label = labels[0]\n", "current_Index = 0\n", "for index, label in enumerate(labels[1:], 1):\n", " if label != current_Label:\n", " plt.scatter(scatters[current_Index:index, 0], scatters[current_Index:index, 1],\n", " label='{}'.format(current_Label))\n", " current_Label = label\n", " current_Index = index\n", "\n", "plt.scatter(scatters[current_Index:, 0], scatters[current_Index:, 1], label='{}'.format(current_Label))\n", "plt.legend()\n", "plt.tight_layout()\n", "plt.show()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "6EcBFWkg3Wie" }, "source": [ "import tqdm\n", "\n", "from AVC.s3_auto_voice_cloner.s6_create_cross_speaker_mel_specs import VoiceCloner\n", "import soundfile as sf\n", "import os" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "oee-8QuUB_bD" }, "source": [ "hp.m_avc.gen.best_model_path = \"/content/AVC/static/model_chk_pts/autovc/final_1000.pth\"\n", "hp.m_wave_net.gen.best_model_path = \"/content/drive/MyDrive/AI_ML_DL/model_chk_pts/wavenet_model/wavenet_pretrained_step001000000_ema.pth\"\n", "vcs_obj = VoiceCloner(hp, tqdm, absolute_path=True)\n", "\n", "path_audio = \"static/raw_data/wavs/p225/p225_003.wav\"\n", "path_audio = os.path.join(hp.general.project_root, path_audio)\n", "spkr_p225_mel_spec = vcs_obj.au.get_mel_spects_from_audio(path_audio, partial_slices=False)\n", "\n", "path_audio = \"static/raw_data/wavs/p226/p226_003.wav\"\n", "path_audio = os.path.join(hp.general.project_root, path_audio)\n", "spkr_p226_mel_spec = vcs_obj.au.get_mel_spects_from_audio(path_audio, partial_slices=False)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "B8UzGtndCLeV" }, "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import math\n", "import librosa\n", "import librosa.display" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "W4sgHQ2bCXCs" }, "source": [ "# Plot mel spectrograms\n", "fig, ax = plt.subplots(1,2, figsize = (20,10))\n", "\n", "ax[0].set(title = 'Mel Spectrogram of Guitar')\n", "i = librosa.display.specshow(spkr_p225_mel_spec, ax=ax[0])\n", "\n", "ax[1].set(title = 'Mel Spectrogram of Kick')\n", "librosa.display.specshow(spkr_p226_mel_spec, ax=ax[1])\n", "\n", "plt.colorbar(i)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "XlNXkRO0Cfsz" }, "source": [ "avc_mel_specs = vcs_obj.create_cross_spkr_mel_spects(\"p225\", \"p226\", spkr_p225_mel_spec[:320, :])\n", "avc_mel_specs.shape" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "C63S2fAiEMzQ" }, "source": [ "# Plot mel spectrograms\n", "fig, ax = plt.subplots(1,2, figsize = (20,10))\n", "\n", "ax[0].set(title = 'Mel Spectrogram of P225')\n", "i = librosa.display.specshow(spkr_p225_mel_spec[:320, :], ax=ax[0])\n", "\n", "ax[1].set(title = 'AVC mel spect')\n", "librosa.display.specshow(avc_mel_specs, ax=ax[1])\n", "\n", "plt.colorbar(i)" ], "execution_count": null, "outputs": [] } ] }