{"id":36481,"date":"2024-11-01T09:48:50","date_gmt":"2024-11-01T09:48:50","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36481"},"modified":"2024-11-01T11:53:00","modified_gmt":"2024-11-01T11:53:00","slug":"deep-learning-pytorch-course-cyclegan","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36481\/","title":{"rendered":"Deep Learning PyTorch Course, CycleGAN"},"content":{"rendered":"<p><body><\/p>\n<p>\n        The advancement of deep learning has opened up possibilities for image transformation and generation models in various fields. Generative Adversarial Networks (GANs) lie at the core of these advancements, and among them, CycleGAN is particularly recognized as a useful model for style transfer.<br \/>\n        In this article, I will explain the principles, applications, and implementation process of CycleGAN using Python&#8217;s PyTorch library in detail.\n    <\/p>\n<h2>1. Overview of CycleGAN<\/h2>\n<p>\n        CycleGAN is a model used to learn image transformation between two image domains. This model consists of two generators that convert images from one domain to another and two discriminators that differentiate between the generated images and the real images in their respective domains.<br \/>\n        CycleGAN is particularly advantageous when there is no direct correspondence required between the two domains. For example, it can be used for tasks such as converting photos to paintings or transforming summer images into winter images.\n    <\/p>\n<h2>2. Structure of CycleGAN<\/h2>\n<p>\n        The basic structure of CycleGAN consists of four main components.\n    <\/p>\n<ul>\n<li><strong>Generator G:<\/strong> Converts images from domain X to images in domain Y.<\/li>\n<li><strong>Generator F:<\/strong> Converts images from domain Y to images in domain X.<\/li>\n<li><strong>Discriminator D_X:<\/strong> Differentiates between real images from domain X and transformed images generated by G.<\/li>\n<li><strong>Discriminator D_Y:<\/strong> Differentiates between real images from domain Y and transformed images generated by F.<\/li>\n<\/ul>\n<h3>2.1. Loss Function<\/h3>\n<p>\n        CycleGAN is trained using several loss functions. The main loss functions include:\n    <\/p>\n<ul>\n<li><strong>Adversarial Loss:<\/strong> Evaluates the performance of the generator based on the discriminator&#8217;s ability to distinguish between generated and real images.<\/li>\n<li><strong>Cycle Consistency Loss:<\/strong> Applies the principle that the original image should be reconstructed after transforming from X to Y and then back to X. In other words, it should follow <em>F(G(X)) \u2248 X<\/em>.<\/li>\n<\/ul>\n<h2>3. Implementing CycleGAN<\/h2>\n<p>\n        Now, let&#8217;s implement CycleGAN using PyTorch. This process includes data preparation, model definition, setting loss functions and optimization, the training loop, and results visualization.\n    <\/p>\n<h3>3.1. Data Preparation<\/h3>\n<p>\n        To train CycleGAN, two image domains are needed. We will use &#8216;summer&#8217; and &#8216;winter&#8217; image datasets as examples. Popular public datasets such as <strong>Apple2Orange<\/strong> and <strong>Horse2Zebra<\/strong> can be utilized. The code below shows how to load the datasets.\n    <\/p>\n<pre><code>\nimport torchvision.transforms as transforms\nfrom torchvision.datasets import ImageFolder\nfrom torch.utils.data import DataLoader\n\n# Define data transformations\ntransform = transforms.Compose([\n    transforms.Resize(256),\n    transforms.CenterCrop(256),\n    transforms.ToTensor(),\n])\n\n# Load data\nsummer_dataset = ImageFolder(root='data\/summer', transform=transform)\nwinter_dataset = ImageFolder(root='data\/winter', transform=transform)\n\nsummer_loader = DataLoader(summer_dataset, batch_size=1, shuffle=True)\nwinter_loader = DataLoader(winter_dataset, batch_size=1, shuffle=True)\n    <\/code><\/pre>\n<h3>3.2. Model Definition<\/h3>\n<p>\n        In CycleGAN, we define generators that follow a structure like U-Net to learn high-dimensional features. The following code defines a simple generator model.\n    <\/p>\n<pre><code>\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Generator(nn.Module):\n    def __init__(self):\n        super(Generator, self).__init__()\n        self.hidden_layers = nn.Sequential(\n            nn.Conv2d(3, 64, kernel_size=7, stride=1, padding=3),\n            nn.ReLU(),\n            nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1),\n            nn.ReLU(),\n            # Intermediate layers\n            nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1),\n            nn.ReLU(),\n            # Decoder\n            nn.ConvTranspose2d(256, 128, kernel_size=3, stride=2, padding=1),\n            nn.ReLU(),\n            nn.ConvTranspose2d(128, 64, kernel_size=3, stride=2, padding=1),\n            nn.ReLU(),\n            nn.Conv2d(64, 3, kernel_size=7, stride=1, padding=3),\n        )\n\n    def forward(self, x):\n        return self.hidden_layers(x)\n    <\/code><\/pre>\n<h3>3.3. Loss Function and Optimization Setup<\/h3>\n<p>\n        Now we will set the loss functions and optimization algorithms. We will use the binary cross-entropy loss function for real-fake discrimination and Cycle Consistency Loss.\n    <\/p>\n<pre><code>\ncriterion_gan = nn.BCELoss()\ncriterion_cycle = nn.L1Loss()\n\n# Adam optimizer\noptimizer_G = torch.optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))\n    <\/code><\/pre>\n<h3>3.4. Training Loop<\/h3>\n<p>\n        In the training loop, we train the model and record loss values. The basic structure of a training loop can be written as follows.\n    <\/p>\n<pre><code>\nnum_epochs = 200\nfor epoch in range(num_epochs):\n    for (summer_images, winter_images) in zip(summer_loader, winter_loader):\n        real_A = summer_images[0].to(device)\n        real_B = winter_images[0].to(device)\n\n        # Calculate generative loss\n        fake_B = generator_G(real_A)\n        cycled_A = generator_F(fake_B)\n\n        loss_cycle = criterion_cycle(cycled_A, real_A) \n\n        # Calculate Adversarial Loss\n        loss_G = criterion_gan(discriminator_D_Y(fake_B), real_labels) + loss_cycle\n\n        # Backpropagation and optimization\n        optimizer_G.zero_grad()\n        loss_G.backward()\n        optimizer_G.step()\n\n        # Record results\n        print(f'Epoch [{epoch}\/{num_epochs}], Loss: {loss_G.item()}')\n    <\/code><\/pre>\n<h3>3.5. Results Visualization<\/h3>\n<p>\n        After training is complete, we generate some images to visualize the results of CycleGAN and show them to the user. The following code shows how to save and visualize the resulting images.\n    <\/p>\n<pre><code>\nimport matplotlib.pyplot as plt\n\n# Function to generate and save images\ndef save_image(tensor, filename):\n    image = tensor.detach().cpu().numpy()\n    image = image.transpose((1, 2, 0))\n    plt.imsave(filename, (image * 255).astype('uint8'))\n\n# Generate images using the trained generator\nwith torch.no_grad():\n    for i, summer_images in enumerate(summer_loader):\n        fake_images = generator_G(summer_images[0].to(device))\n        save_image(fake_images, f'output\/image_{i}.png')\n    break\n    <\/code><\/pre>\n<h2>4. Applications of CycleGAN<\/h2>\n<p>\n        Besides image transformation and style transfer, CycleGAN can be utilized in various fields. For example, it can be used in medical imaging, video transformation, and fashion design.\n    <\/p>\n<h3>4.1. Medical Image Processing<\/h3>\n<p>\n        CycleGAN is greatly helpful in identifying pathological changes in medical images. By converting a patient&#8217;s CT scan to an MRI image, it can make it easier for doctors to compare and analyze.\n    <\/p>\n<h3>4.2. Video Transformation<\/h3>\n<p>\n        CycleGAN can be used to transform the style of a video from one to another. For example, it can be used to convert summer landscapes in a real-time video stream to winter settings.\n    <\/p>\n<h3>4.3. Fashion Design<\/h3>\n<p>\n        CycleGAN can bring innovation to the fashion design field. It can assist designers in simulating and designing clothing in various styles.\n    <\/p>\n<h2>5. Conclusion<\/h2>\n<p>\n        CycleGAN is a very useful tool in the field of image transformation. This model is suitable for various applications such as video and fashion and plays a crucial role in overcoming limitations in the vision field.<br \/>\n        In this article, we explored the basic principles of CycleGAN, its implementation, and the process of result visualization in detail. Future research and advancements are anticipated, and understanding CycleGAN will hopefully greatly aid in future developments.\n    <\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The advancement of deep learning has opened up possibilities for image transformation and generation models in various fields. Generative Adversarial Networks (GANs) lie at the core of these advancements, and among them, CycleGAN is particularly recognized as a useful model for style transfer. In this article, I will explain the principles, applications, and implementation process &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36481\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep Learning PyTorch Course, CycleGAN&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[149],"tags":[],"class_list":["post-36481","post","type-post","status-publish","format-standard","hentry","category-pytorch-study"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Deep Learning PyTorch Course, CycleGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/36481\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deep Learning PyTorch Course, CycleGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"The advancement of deep learning has opened up possibilities for image transformation and generation models in various fields. Generative Adversarial Networks (GANs) lie at the core of these advancements, and among them, CycleGAN is particularly recognized as a useful model for style transfer. In this article, I will explain the principles, applications, and implementation process &hellip; \ub354 \ubcf4\uae30 &quot;Deep Learning PyTorch Course, CycleGAN&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36481\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:48:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:53:00+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/36481\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36481\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Deep Learning PyTorch Course, CycleGAN\",\"datePublished\":\"2024-11-01T09:48:50+00:00\",\"dateModified\":\"2024-11-01T11:53:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36481\/\"},\"wordCount\":671,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"PyTorch Study\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36481\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36481\/\",\"name\":\"Deep Learning PyTorch Course, CycleGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:48:50+00:00\",\"dateModified\":\"2024-11-01T11:53:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36481\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36481\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36481\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deep Learning PyTorch Course, CycleGAN\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Deep Learning PyTorch Course, CycleGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/36481\/","og_locale":"ko_KR","og_type":"article","og_title":"Deep Learning PyTorch Course, CycleGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"The advancement of deep learning has opened up possibilities for image transformation and generation models in various fields. Generative Adversarial Networks (GANs) lie at the core of these advancements, and among them, CycleGAN is particularly recognized as a useful model for style transfer. In this article, I will explain the principles, applications, and implementation process &hellip; \ub354 \ubcf4\uae30 \"Deep Learning PyTorch Course, CycleGAN\"","og_url":"https:\/\/atmokpo.com\/w\/36481\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:48:50+00:00","article_modified_time":"2024-11-01T11:53:00+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/36481\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36481\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Deep Learning PyTorch Course, CycleGAN","datePublished":"2024-11-01T09:48:50+00:00","dateModified":"2024-11-01T11:53:00+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36481\/"},"wordCount":671,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["PyTorch Study"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36481\/","url":"https:\/\/atmokpo.com\/w\/36481\/","name":"Deep Learning PyTorch Course, CycleGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:48:50+00:00","dateModified":"2024-11-01T11:53:00+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36481\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36481\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36481\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Deep Learning PyTorch Course, CycleGAN"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=36481"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36481\/revisions"}],"predecessor-version":[{"id":36482,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36481\/revisions\/36482"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}