diff --git "a/notebooks/test-model.ipynb" "b/notebooks/test-model.ipynb" --- "a/notebooks/test-model.ipynb" +++ "b/notebooks/test-model.ipynb" @@ -39,27 +39,16 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 14, "id": "c2fc0e7a", "metadata": {}, "outputs": [], "source": [ "import random\n", - "from PIL import Image\n", - "from src.mel import Mel\n", - "from IPython.display import Audio\n", "from datasets import load_dataset\n", - "from diffusers import DDPMPipeline" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "a3d45c36", - "metadata": {}, - "outputs": [], - "source": [ - "mel = Mel(x_res=256, y_res=256)" + "from IPython.display import Audio\n", + "from audiodiffusion.mel import Mel\n", + "from audiodiffusion import AudioDiffusion" ] }, { @@ -67,75 +56,55 @@ "id": "011fb5a1", "metadata": {}, "source": [ - "### Run model inference to generate mel spectrogram" + "### Run model inference to generate mel spectrogram and audios" ] }, { "cell_type": "code", - "execution_count": null, - "id": "e0f6e8fd", + "execution_count": 4, + "id": "a3d45c36", "metadata": {}, "outputs": [], "source": [ - "model_id = \"teticio/audio-diffusion-256\"\n", - "ddpm = DDPMPipeline.from_pretrained(model_id) # you can replace DDPMPipeline with DDIMPipeline or PNDMPipeline for faster inference\n", - "ddpm.to(\"cuda\")" + "audio_diffusion = AudioDiffusion(model_id=\"teticio/audio-diffusion-256\")" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "id": "b809fed5", "metadata": {}, - "outputs": [], - "source": [ - "images = ddpm(output_type=\"numpy\")[\"sample\"]\n", - "images = (images * 255).round().astype(\"uint8\").transpose(0, 3, 1, 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "75db4b7c", - "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "application/vnd.jupyter.widget-view+json": { + "model_id": "71abbf1ea35d4180bf97bdc94dd66ef1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1000 [00:00" ] }, - "execution_count": 15, "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "image = Image.fromarray(images[0][0])\n", - "image" - ] - }, - { - "cell_type": "markdown", - "id": "7230c280", - "metadata": {}, - "source": [ - "### Transform mel spectrogram to audio" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "5f8a149d", - "metadata": {}, - "outputs": [ + "output_type": "display_data" + }, { "data": { "text/html": [ "\n", " \n", " " @@ -144,50 +113,69 @@ "" ] }, - "execution_count": 16, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ad5c8b3eaad240a6869ee788740d75e9", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1000 [00:00\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m----> 2\u001b[0m image, (sample_rate, audio) \u001b[38;5;241m=\u001b[39m \u001b[43maudio_diffusion\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate_spectrogram_and_audio\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3\u001b[0m display(image)\n\u001b[1;32m 4\u001b[0m display(Audio(audio, rate\u001b[38;5;241m=\u001b[39msample_rate))\n", + "File \u001b[0;32m~/ML/huggingface/audio-diffusion/audiodiffusion/__init__.py:36\u001b[0m, in \u001b[0;36mAudioDiffusion.generate_spectrogram_and_audio\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgenerate_spectrogram_and_audio\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 30\u001b[0m \u001b[38;5;124;03m\"\"\"Generate random mel spectrogram and convert to audio.\u001b[39;00m\n\u001b[1;32m 31\u001b[0m \n\u001b[1;32m 32\u001b[0m \u001b[38;5;124;03m Returns:\u001b[39;00m\n\u001b[1;32m 33\u001b[0m \u001b[38;5;124;03m PIL Image: mel spectrogram\u001b[39;00m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;124;03m (Float, Array): sample rate and raw audio\u001b[39;00m\n\u001b[1;32m 35\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 36\u001b[0m images \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mddpm\u001b[49m\u001b[43m(\u001b[49m\u001b[43moutput_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mnumpy\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msample\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 37\u001b[0m images \u001b[38;5;241m=\u001b[39m (images \u001b[38;5;241m*\u001b[39m \u001b[38;5;241m255\u001b[39m)\u001b[38;5;241m.\u001b[39mround()\u001b[38;5;241m.\u001b[39mastype(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muint8\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mtranspose(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m3\u001b[39m, \u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 38\u001b[0m image \u001b[38;5;241m=\u001b[39m Image\u001b[38;5;241m.\u001b[39mfromarray(images[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;241m0\u001b[39m])\n", + "File \u001b[0;32m~/.local/share/virtualenvs/huggingface-OfWfm_Zx/lib/python3.10/site-packages/torch/autograd/grad_mode.py:27\u001b[0m, in \u001b[0;36m_DecoratorContextManager.__call__..decorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecorate_context\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclone():\n\u001b[0;32m---> 27\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.local/share/virtualenvs/huggingface-OfWfm_Zx/lib/python3.10/site-packages/diffusers/pipelines/ddpm/pipeline_ddpm.py:58\u001b[0m, in \u001b[0;36mDDPMPipeline.__call__\u001b[0;34m(self, batch_size, generator, output_type, **kwargs)\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscheduler\u001b[38;5;241m.\u001b[39mset_timesteps(\u001b[38;5;241m1000\u001b[39m)\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m t \u001b[38;5;129;01min\u001b[39;00m tqdm(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscheduler\u001b[38;5;241m.\u001b[39mtimesteps):\n\u001b[1;32m 57\u001b[0m \u001b[38;5;66;03m# 1. predict noise model_output\u001b[39;00m\n\u001b[0;32m---> 58\u001b[0m model_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43munet\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mt\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msample\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 60\u001b[0m \u001b[38;5;66;03m# 2. compute previous image: x_t -> t_t-1\u001b[39;00m\n\u001b[1;32m 61\u001b[0m image \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscheduler\u001b[38;5;241m.\u001b[39mstep(model_output, t, image)[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mprev_sample\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n", + "File \u001b[0;32m~/.local/share/virtualenvs/huggingface-OfWfm_Zx/lib/python3.10/site-packages/torch/nn/modules/module.py:1130\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1127\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1130\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;66;03m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1132\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[38;5;241m=\u001b[39m [], []\n", + "File \u001b[0;32m~/.local/share/virtualenvs/huggingface-OfWfm_Zx/lib/python3.10/site-packages/diffusers/models/unet_2d.py:147\u001b[0m, in \u001b[0;36mUNet2DModel.forward\u001b[0;34m(self, sample, timestep)\u001b[0m\n\u001b[1;32m 145\u001b[0m \u001b[38;5;66;03m# 3. down\u001b[39;00m\n\u001b[1;32m 146\u001b[0m down_block_res_samples \u001b[38;5;241m=\u001b[39m (sample,)\n\u001b[0;32m--> 147\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m downsample_block \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdown_blocks:\n\u001b[1;32m 148\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(downsample_block, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mskip_conv\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 149\u001b[0m sample, res_samples, skip_sample \u001b[38;5;241m=\u001b[39m downsample_block(\n\u001b[1;32m 150\u001b[0m hidden_states\u001b[38;5;241m=\u001b[39msample, temb\u001b[38;5;241m=\u001b[39memb, skip_sample\u001b[38;5;241m=\u001b[39mskip_sample\n\u001b[1;32m 151\u001b[0m )\n", + "File \u001b[0;32m~/.local/share/virtualenvs/huggingface-OfWfm_Zx/lib/python3.10/site-packages/torch/nn/modules/container.py:219\u001b[0m, in \u001b[0;36mModuleList.__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;129m@_copy_to_script_wrapper\u001b[39m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__iter__\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Module]:\n\u001b[0;32m--> 219\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43miter\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_modules\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalues\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] } ], "source": [ - "audio = mel.image_to_audio(image)\n", - "Audio(data=audio, rate=mel.get_sample_rate())" + "while True:\n", + " image, (sample_rate, audio) = audio_diffusion.generate_spectrogram_and_audio()\n", + " display(image)\n", + " display(Audio(audio, rate=sample_rate))" ] }, { "cell_type": "markdown", - "id": "ba4ccac5", + "id": "ef54cef3", "metadata": {}, "source": [ - "### Generate audios" + "### Compare results with random sample from training set" ] }, { "cell_type": "code", - "execution_count": null, - "id": "300a6a8d", + "execution_count": 12, + "id": "f028a3c8", "metadata": {}, "outputs": [], "source": [ - "while True:\n", - " images = ddpm(output_type=\"numpy\")[\"sample\"]\n", - " images = (images * 255).round().astype(\"uint8\").transpose(0, 3, 1, 2)\n", - " image = Image.fromarray(images[0][0])\n", - " audio = mel.image_to_audio(image)\n", - " display(Audio(data=audio, rate=mel.get_sample_rate()))" - ] - }, - { - "cell_type": "markdown", - "id": "ef54cef3", - "metadata": {}, - "source": [ - "### Compare results with random sample from training set" + "mel = Mel(x_res=256, y_res=256)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 15, "id": "269ee816", "metadata": {}, "outputs": [ @@ -195,14 +183,97 @@ "name": "stderr", "output_type": "stream", "text": [ - "Using custom data configuration teticio--audio-difussion-data-256-67e42008226ba2a6\n", - "Reusing dataset parquet (/home/teticio/.cache/huggingface/datasets/teticio___parquet/teticio--audio-difussion-data-256-67e42008226ba2a6/0.0.0/2a3b91fbd88a2c90d1dbbb32b460cf621d31bd5b05b934492fdef7d8d6f236ec)\n" + "Using custom data configuration teticio--audio-diffusion-256-90642b08dc2c6e33\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading and preparing dataset None/None (download: 910.09 MiB, generated: 911.42 MiB, post-processed: Unknown size, total: 1.78 GiB) to /home/teticio/.cache/huggingface/datasets/teticio___parquet/teticio--audio-diffusion-256-90642b08dc2c6e33/0.0.0/2a3b91fbd88a2c90d1dbbb32b460cf621d31bd5b05b934492fdef7d8d6f236ec...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9f9e310b378f4b7680736fea1de56773", + "model_id": "c91ed8a7a45f45ffbc1452a7219311fc", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Downloading data files: 0%| | 0/1 [00:00" ] }, - "execution_count": 9, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -243,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 17, "id": "492e2334", "metadata": {}, "outputs": [ @@ -252,7 +323,7 @@ "text/html": [ "\n", " \n", " " @@ -261,7 +332,7 @@ "" ] }, - "execution_count": 10, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" }