{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "411c59b3-f177-4a10-8925-d931ce572eaa", "metadata": {}, "outputs": [], "source": [ "from types import MethodType\n", "\n", "import torch\n", "from diffusers import StableDiffusionControlNetPipeline, DDIMScheduler, AutoencoderKL, ControlNetModel\n", "from PIL import Image\n", "\n", "from ip_adapter import IPAdapter\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "6b6dc69c-192d-4d74-8b1e-f0d9ccfbdb49", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/modelzoo/IP-Adapter\n" ] } ], "source": [ "import os\n", "\n", "current_dir = os.getcwd()\n", "print(current_dir)\n", "\n", "base_model_path = f\"{current_dir}/pretrained_models/sd1.5/Realistic_Vision_v4.0_noVAE\"\n", "vae_model_path = f\"{current_dir}/pretrained_models/sd1.5/sd-vae-ft-mse\"\n", "image_encoder_path = f\"{current_dir}/pretrained_models/models/image_encoder/\"\n", "ip_ckpt = f\"{current_dir}/pretrained_models/models/ip-adapter_sd15.safetensors\"\n", "device = \"cuda\"" ] }, { "cell_type": "code", "execution_count": 17, "id": "63ec542f-8474-4f38-9457-073425578073", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "An error occurred while trying to fetch /home/modelzoo/IP-Adapter/pretrained_models/sd1.5/sd-vae-ft-mse: Error no file named diffusion_pytorch_model.safetensors found in directory /home/modelzoo/IP-Adapter/pretrained_models/sd1.5/sd-vae-ft-mse.\n", "Defaulting to unsafe serialization. Pass `allow_pickle=False` to raise an error instead.\n" ] } ], "source": [ "def image_grid(imgs, rows, cols):\n", " assert len(imgs) == rows*cols\n", "\n", " w, h = imgs[0].size\n", " grid = Image.new('RGB', size=(cols*w, rows*h))\n", " grid_w, grid_h = grid.size\n", " \n", " for i, img in enumerate(imgs):\n", " grid.paste(img, box=(i%cols*w, i//cols*h))\n", " return grid\n", "\n", "noise_scheduler = DDIMScheduler(\n", " num_train_timesteps=1000,\n", " beta_start=0.00085,\n", " beta_end=0.012,\n", " beta_schedule=\"scaled_linear\",\n", " clip_sample=False,\n", " set_alpha_to_one=False,\n", " steps_offset=1,\n", ")\n", "vae = AutoencoderKL.from_pretrained(vae_model_path).to(dtype=torch.float16)" ] }, { "cell_type": "markdown", "id": "fed4baf0-eb72-47c6-8b5b-4046c7c7c72e", "metadata": {}, "source": [ "## ControlNet Depth" ] }, { "cell_type": "code", "execution_count": 18, "id": "3849f9d0-5f68-4a49-9190-69dd50720cae", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "82bc276a642b4c4286171ddcdf40ab05", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Loading pipeline components...: 0%| | 0/5 [00:00" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# read image prompt\n", "image = Image.open(\"assets/images/statue.png\")\n", "depth_map = Image.open(\"assets/structure_controls/depth.png\")\n", "image_grid([image.resize((256, 256)), depth_map.resize((256, 256))], 1, 2)" ] }, { "cell_type": "code", "execution_count": 20, "id": "81b1ab06-d3ed-4a7e-a356-9ddf1a2eecd6", "metadata": {}, "outputs": [], "source": [ "# load ip-adapter\n", "ip_model = IPAdapter(pipe, image_encoder_path, ip_ckpt, device)" ] }, { "cell_type": "code", "execution_count": 21, "id": "42cd9556-988c-4a16-9408-17c8919d839c", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "77fed9b113d0469cb6a8914337541e85", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/50 [00:00" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# generate image variations\n", "images = ip_model.generate(pil_image=image, image=depth_map, num_samples=4, num_inference_steps=50, seed=42)\n", "grid = image_grid(images, 1, 4)\n", "grid" ] }, { "cell_type": "markdown", "id": "cf199405-7cb5-4f78-9973-5fe51c632a41", "metadata": {}, "source": [ "## ControlNet OpenPose" ] }, { "cell_type": "code", "execution_count": 22, "id": "6f089ad0-4683-46d7-ab58-9e5fe8f34c67", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "75b526a428084db587a11ab2d3773b47", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Loading pipeline components...: 0%| | 0/5 [00:00" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# read image prompt\n", "image = Image.open(\"assets/images/girl.png\")\n", "image.resize((256, 256))" ] }, { "cell_type": "code", "execution_count": 24, "id": "346d1e25-5b50-4d2e-851d-4ba620a55ce3", "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGAAQADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooAKKKKACiiigAooooAKKs3EKRQwkAhnXdz3FWNRtfstrYkhd08AmG3sCSMH34Nds8H7PnU5q8Unpre9tPXUhzSaT6mdRRRXEWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAEtvCZ51jGefQZNNdFWYoGyucbquWCmO3uboHHlKFznB+bIwP1qvZx+Zcrn7qkMfpXpUsOqkKVKCTnN+d0trPpbroOS5UpO6v8Adb/h7kt+d08aD+BFTA9qs+IIri1v1sLo/vbSMQ7QQQg67ePqaZpUka69Bc3MZkiimEskanBYBskA1W1G7kv9SurybHmzytI2OmSSTWmLnLkqVFBKFSWndcvRdVurnO3KVZX2S383/wAC/wB6LUVoI/D0moOR89x5CIV6/LknPt8v51mVra3aNpwtLNnDObdJ3UDHls6g7ceuMZrJrgrVeeMYxqc8UtHa2+tu7s+rHRbacr7/AJBRRRWBsFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUoxuGenemld2AvzR/Z9GtmJy1wzkDHRQQM/nn8qrxfuraWXu3yL/M/596n1VpPPihk48mJUVfQdR/PP40l7A0csNmqnzBj5BzywBx9a9mqpxnOU5p+ySiter009NWFdw5+WKt6+SV/xNPTQLDwlqmoMB5t262MJ9vvyH8go/4FWNZWsl3crHHG8mAWYIpJ2jk1oazNPFa2WjyxeV9h3goQQxdmySw9cYH4VpRXdv4e8IultMj6vqwaOYqebe3B+79XP6CvKxEKmFqJShz2aTs9NddZLbS/5bnHRvaU+s3p6bL8Ff5mNruoNqmt3V4VCCR/lRTkIoGAB9AAKzqKKzagnamrLouy7fI6oRUIqK6BRRRSKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKUdRSU+JDJMiA4LMBmmld2Gld2Nm7gFx4rkjb/Vo+W9kUZP6Cr2iuLX7d4ru1BMLlbONxkSTtnH4KOfypEs57/VdQS2T/SLq4+xw56DJ+Y/QAc/Wt6S20pEivNTV/wDhGdJ3QWcCnDalcA/OR/sk8s3QDAHJrXNq0aN4/wA0m7Ld62S9d/k7nHmEvb4udGOzbv8A4b6/+BbfJ9jH0zTbaw0tvFXiHE5mdvsNi7ENdyZ5dsciMHr6niuUmmeeQu+BnoB0FXdb1m617VJb66IBb5Y4l4SFB91FHZQOAKoRxvLIscaM7sQqqoyST2FcmHdaEJe0k/es2r6K2yt5d+vpZLqUV0FiiknmSGFGkkdgqooyWJ6ACui8Q6Va+GY4dL+0fadW2lr4IwMUBPSMHuw7npzjtRfWS+FI7Yfa3Gu58ySOE4FsMfKCw539+Olc2zM7FmJLE5JJySa3pVZQdPEYarupXVvlu9GmtdC5w5bxmtRKKKKkkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqazBa9gABJMi4A+tQ1PZyiC8ilJxsYMDjuOla0IqdWMW7Xa1exUWoyTZ6xY6Na6XoGoa5qNyYLctImUx5jB2yyx5/jYALnsMmvOfEXiK68R3ySyIkFrAvl2tpEMR28fZVH8z3q3q/ij+14raK6heWO2TbHEJNkYPdsDkk9zmskam0bh7eCOBlwVMecgjoeepqJUoVsfUq15WV2ovdJLRWs+tld/086eGVOMq0ppzm7tK91d7bJaLz3uSQaHdPEs9wY7O3PIluG25HsOp/AVPb6jDod4txpM7yXCKQs7wgYJBGVBzjjv1rKnnmuZTLPK8sh6s7Ek/iajqaM5wbcrO6as0mrPTr1N5zha1NW876/5f1uOkkeWRpJHZ3YlmZjkknuabRRQZBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXU+CvDOm+I5tQGp6r/Z8Nrb+aHwMHnGSTxgenU1y1dd4btwPB3iS5OMmJIx6jnJ/p+VcmOlKNF8krNtK/q0gtfQ5JgFcgNuAOAR3pKKK6wCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK7vT1a2+E+oSoxBmm5yO25F/pXCV6Ldj7L8IoE+95u3npjMhb+lefmD/hR7zRcOp51RRRXoEBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFeleLd9p8O9MtyqgnyVbHbCE8fiK82UbnAAzk4wK9M+JOYdC06BOI/Nxt+i4H8zXmY3XEUI+bf3Fx2Z5lRRRXpkBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAXNJiabWLKJSAzzooz/vCu3+KUoMmmxBjnEjFfY7QD+hrkvC8Qn8UaahJA+0K2R7HP9K6H4mzFtbtIsDCW+7P1Y/4V5df3sfSXZNlr4WcRRRRXqEBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdB4JjWTxfp4bOAzMPqFJFWPiBKsni2dQD+7jRTn125/rTvh6iv4tiLKCVikK+xx/wDXrO8Wzi48V6k4YsBMVB+nGP0rzrc2YX7Q/Uv7BjUUUV6JAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHYfDeMN4neQkjy7d2x68gf1rl7+f7VqNzcE582VnyRjOSTXTeBo7qH+2tSit5ngttPk3yop2qxxgEjoeP0rka4qSviqkvJL82U/hQUUUV2khRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRXbxeBbTQ/ElpYeNtUXTbS6sftcc9r++652qcA46Ht2981Xs/C2k63YaHaaHq7XHiG/uHimtJ08uOJRna273AHc5z7UAchRVvVNOuNH1W70262faLWVoZNjBl3KcHBHWqlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHVeFfG1/4esrzSQ6/2XqGUuV2/MoI2llPY4rK1rRZNKlV0bzrOYboZh0YdcH3rKrpvDusQPAdG1QB7OXhGY/6s/Xtz+RriqUvYSdalHf4l38/VG0LTXJL5HM0Vq67ok2jXhQhmt2OYpSOo9D71lV1QnGpFSi9GZSi4uzCiiirEFFFFABRRRQAUUUUAFWrDT59Suhb24Bcgn5jgAVVqSGeW3lEsMjRyDoynBpxtf3tjSk4KadRXj1tudn4PbVfDmoX721haXkstrJBJHNAZvLU4y4x0xj6YrD/sm0j5lnPrywFauit4w8KaDJ4u01mgsNQL2L3JKOXzyRtOSOVPOOorj+tdkcRQjtSv6s19rRT92H3s7Xws3hWLxFAuu2z6jbSjyFj+0FQrHAUluMAfXjr2r2KxsmXwxeeCdDXw7Fe6enkXN7eShlZZssDGVGS4zzuHBAr5oqzZXHky4Y/I3X296UalOtU5ZJRT6rp/X9bGcqim9kjvNEstT1JNT+G0cugpsupLh9SnbktHwQsncHHpnGayrW48OSaVpEI8M3lzd6dcNNq9xDMWWeAN0GPujGBnjp15zWl8PNFa/wDGQA8ORa5C1vIWt5pRGinH3snjPt711fhjx54d8BaEdOk8NRS3MytFdSibDXCljwwIPABI5Pb3qamEqQlKP8pccLUknJLRen6mDpnhPwx4xudYjsxdaDf3J+06PBetttzAANxLEEnPPQ8cdcGvMnXY7KSCVOMg5Br2P4pJput6VYaxF4mtrh4RFFZ6HHDt8lG6puBycYAyQOn0ri/ibZNYeLfJbw3F4f8A9Gjb7HFMJVPH3sjjnp+Fc8o8rsZVIOnJxfQ46iiipICiiigAooooAKKKKACiiigAooooA7fw9qsWtWMmjaowdiuI2Y8sPr/eFc3rWi3GjXflyfNE3McoHDD/AB9qzVZkcOjFWU5BBwQa9A0u/tfFelNYX4AuUAOQeT6Ovv615tRSwk/aQ+B7rt5o6otVo8j+JbHn1FXtV0q50i7MFwvXlHHRh6iqNehGSmlKLujmaadmFFFFUIKKKKACiiigAooooAuN/aP9kx7/ALV/ZvmnZnd5PmY5x/Dux+NU66+5/wCEu/4Vbaedn/hFftzeT9zPnYP/AALH3vbOa5CgArrfBfgG78bC8Ntqmm2QtSgYXkxQtuJ+6AD6fyq/4H8S+HtOsRpWo+CLfXNQuLnEMzzbGO4BVTkHHP8AP2r0Hw74P0XWPHnivTNX0PS9Ene3iitNPecSPCzLnzIsYDf3uOhwOOacVd2A4zRdQ8XfD3W3Sw0cX5thJAJhbSSRSA5+ZWXGRwSD6V5xNK80zyyHLsSTX0nLY/EzRtMOl2Hie3fUIGMWnacbaENPaRjb5u89DyOD6DnmvmybzPOk83Pmbjvz1znmqqKKnLk2v/TNKlapVt7R3skvktjt/DegyeOIhp8N5a2s6xs5lupNqgqPX3/x9K4y8uLm6uWe7uZLiUfKZJJC5IHA5Paui8P+KdP0Tw7qVjJoUV1qFy6mG9aQgwqOq4xz/wDXrmJHMkjOQAWJOAOBROfPZs6MTWjWhGbfvbNW7bO/mNoooqDjCiiigAooooAKKKKACiiigAooooAKkgnltp0nhcpIh3Kw7Go6KGr6MD0OCW18ZaI0Mu2O8iAyQv3G9R7H/PauFvrG4027e2uU2yL+RHqPaksryewuo7m3crIhz7H2PtXdzR2njLRBNGBHeRAgDP3G9D/smvM1wU/+nb/B/wCX9evXpXj/AHl+J55RUk8EtrO8E6FJUOGVuoqOvSTTV0cgUUUUwCiiigAooooA0dMg1DWbqy0K2nYi4uFSGGSXbGJGOM4PA+tGu6Ld+Hdbu9IvvL+1Wr7JPLfcucZ4P41nAkEEHBFb2kajoMGia1Dq2lz3mp3KKLG5WYqIGyckjPPb16YoAwlYqwZSQwOQR1Fdz4L8ef8ACMTX1/faPa6zdXDIwuL1i0kezPRiCef6CuX1Tw/q2iw2U2pWM1tHexCa2aQf6xPUfmPzqvN+7gVPwr0MDSi41Ks1pFfi9iJPZI9O1D45Xk1pJ/Znh7T9M1FkEcd/Cd0ka7skDI6H06da5TUL7U/ij43tljtLC1v7sLAiQjyoyQDySc89f0FYei6FqniK/wDsOkWUt3c7DJ5cfXaOp5q/f+Ho9N8L6ZraazaSXV1K6PYxtia3Kk8sO3T26jrXnlljxrqHmXVpo0mi6fp11o0Zsp3s+ftDqcF2PfkH8zXL0EkkknJNFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVc0zU7jSrxbm2bBHDKejD0NU6KUoqS5ZbDTad0d1qtlb+KtNTUdPZftcSfPFnkj+6fcc49a4UggkEYI6g1e0nVJ9IvluYOezoejD0rd12wttWsjrul8j/l5i7qfXH8/zrip3w0lTl8D2fbyf6G8rVVzLfr/mcpRRRXcc4UUUUAFFFFABRRRQBqx6zfXd5pz6hPJfw2G0QwXLl0CKc7Mdl7YrZvvF9rN4/j8RDw/p628bq500L+5bC454x79OvauathhWc1XZtzFj3NelUiqWCj/NNt/Jf0iFrI1pPEN5D4hu9Y0ljpMs8kjKlk5jESseUXHasgkkkk5JoorzSwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAq/pOrXGkXYmhIZTxJG33XX0NUKKmUVNOMloNNxd0dd4k8HvY6fZaxZyxyW+oKJFt1OWiyM49xzjIrlJIZYjiSNl+ooWaRCpWRht6YPSr0OsTKNsyrKv5GsKUa1OFpPm/A7IrC1Pibg/vX+ZnUVsiXTLv76CNvU/L+opsmjI67oJuO27kfmKv2yWklY1eWVJLmoyU15PX7jIoq1Np1zDkmMsPVeaqkEHBGDWqkpbHDUpVKbtNNBRRTkXc4HqauMXJqK6mZYY+XagdzVWp7lsuF7CoK7cymnW9nHaCS+4iC0uFFFFcBYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABT45pYTmORlPsaZRQ1ccZOLunY0ItYuEwJAsg9+DVn7fY3Q/0iLa2OpGf1HNY1FZOjB6rQ7oZliIrlk+ZdnqajadbT82tyuf7rGiHRNREcl0LSR4IvvOoyKy60bTXtTsLKSztrpo4HbcVwDz7HtVQlWozjOnZtNb/8AmVXC1fjg4/4X+j/AMyjIrq53qyk84IxTK3oPE0hUJe20c6/3sYP+FW0Xw9qIACrBIe2dhz/ACrKeInF3qRfqtRRw1Op/DmvR6HLUV0s/hQMu61ugQegcf1FZdzoeoW33rdnX+9H8wpwxNKezIqYStT3iZ1FBBBwRg0VucwUUUUAFFFFABRRRQAUVua9o1vplvavA8jFwQ+/HXjkYrDqpx5XY6MVhqmGqulVWq/XUKKKKk5wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCe3vLm1P7ieSP2VuPyrVt/FF7GQJkjmH02n9Kw6KznRpz+JG1PEVafwSsdO2taTqAC3toyn+9jOPxHNVZtK0u4XdZajGh/uSnH/16wqKyWH5Pgk1+RrLF8/8AEin+D/A3vEXhK/8ADMFlLeSQOt2hZfKfO0jGQfzHI4rBrpPFKbbHQTvds2Cj5mJx34/Oubp4Wc50k5u718upw0+bl953YUUUV0FhRRRQBq6vqBvYbVTEE8teSDnJ4rKqzdD5V+tVq68dhoYau6UNlb8vM0q4mpiZ+1qu8n+mnQKKKK5DMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDsvG8McVhoexcYtyg57ALj+Zrja7Xx3/x4aJ/1xP8kriq4svd8PG/n+bJh8IUUUV2lBRRRQBauvur9aq1v+IfDeoaFbWMt6iBblCV2nODxwfzFYFdWNxVLFVnWou8XbVen+YoxcVZhRRRXKMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAClH3h9aSlX7w+tAHoHxDiRdN04qoBVyq+w2jj9K8+r0P4i/8gyw/66n/ANBFeeV52V/7svn+ZFP4Qooor0SwooooA9P8R2V3r3hO0Ms7TXdjCrIP742jdx3PHX2968wr1ia+TTfEGmxE7YrqN4MZ4BGCv6kj8a4XxdpH9k63J5a4t5/3kfoM9R+B/pXImqGKlh0rJ6xt+K+/U8/LJ82Hi+9/zZg0UUV1noBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUq/eH1pKVfvD60AehfEX/kGWH/XU/wDoIrzyvQ/iL/yDLD/rqf8A0EV55XnZV/uq+f5kU/hCiiivRLCiiigDtPHs7JdaeE4ZAzhvfI/wrW1VF8U+CkvkXNzEpkwOu4cOPx6/lWJ4/wD+P2y/65N/OneAdX+z376bK37u4+aPPZx2/EfyFcub05X9tD4oO/y6nmZcrYODXn+bOOorX8TaZ/ZWu3ECjETnzIsf3T2/DkfhWRW9OaqQU47M9JO6uFFFFWMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKVfvD60lKv3h9aAPQviL/AMgyw/66n/0EV55XofxF/wCQZYf9dT/6CK88rzsq/wB1Xz/Min8IUUUV6JYUUUUAdZ49kB1O1jxysOc/Un/CuWileCZJomKyIwZWHYjpXZ+KtIv9V8QIlrbOVSBQZGG1epPU/Wm2vgNVTffXoXHJEQ4H4n/Cs8Xi6NObU5HmYGtTp4WCb6EnieSPXvC9nrcSgSRN5cyj+HPUfnj864evQrPUPC3hwT2khmvop1xLGpEi5HQnoM/SuBnaN7iRoUKRFiUUnJUZ4Ga48A2lKCi1FbN9n0+R1UarnJx5Wkur6kdFFFegdIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUA4OaKKAO78f3DyadpIIH7xTIceu1f8a4Su18d/wDHhon/AFxP8kriq4ctSWGjbz/NkQ+EKKKK7iwooooA7rxh4x1b+1TYwyJBFbqACiDc2VBySen4Vx1zqN7e/wDHzdTSjOcM5I/KrXiBvM167kDK2993ynIHHSsyieHhSqyXKk02ceBw9OjQhGEbaIKKKKDsCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA6vxhcSTWGhb8c2Yc4HcgZ/lXKV1njGzFtYaGRqENz/ogTbHjjHOfpzj8K5OuTA29guXz/ADZjh6sKtNTht/wQooorrNgooooA/9k=", "image/png": "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", "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "openpose_image = Image.open(\"assets/structure_controls/openpose.png\")\n", "openpose_image.resize((256, 384))" ] }, { "cell_type": "code", "execution_count": 25, "id": "a501f284-f295-4673-96ab-e34378da62ab", "metadata": {}, "outputs": [], "source": [ "# load ip-adapter\n", "ip_model = IPAdapter(pipe, image_encoder_path, ip_ckpt, device)" ] }, { "cell_type": "code", "execution_count": 26, "id": "f58fff74-9ff2-46e6-bc8a-2ad4ae1fbe0f", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ec492d35de794b6788b6093570b76328", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/50 [00:00" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# generate\n", "images = ip_model.generate(pil_image=image, image=openpose_image, width=512, height=768, num_samples=4, num_inference_steps=50, seed=42)\n", "grid = image_grid(images, 1, 4)\n", "grid" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 5 }