{"id":36459,"date":"2024-11-01T09:48:39","date_gmt":"2024-11-01T09:48:39","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36459"},"modified":"2024-11-01T11:53:06","modified_gmt":"2024-11-01T11:53:06","slug":"deep-learning-pytorch-course-pspnet","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36459\/","title":{"rendered":"Deep Learning PyTorch Course, PSPNet"},"content":{"rendered":"<p><body><\/p>\n<p>In this course, we will explore one of the latest techniques in image segmentation using deep learning, known as PSPNet (Pyramid Scene Parsing Network). PSPNet demonstrates particularly excellent performance in semantic segmentation of images and can be applied to various image recognition problems.<\/p>\n<h2>1. Overview of PSPNet<\/h2>\n<p>PSPNet is a network proposed by Zhang et al. in 2017 that captures the global context of an image to predict class probabilities for each pixel. This model operates by integrating information at different scales through the Pyramid Pooling Module (PPM). This structure is advantageous for object recognition, enabling the identification of objects of various sizes.<\/p>\n<h3>1.1. Key Features<\/h3>\n<ul>\n<li><strong>Pyramid Pooling Module:<\/strong> Extracts and integrates features from multiple sizes of the image, providing more comprehensive contextual information.<\/li>\n<li><strong>Global Information Integration:<\/strong> Integrates global information in the final stage of the network to enhance the final prediction.<\/li>\n<li><strong>Excellent Performance:<\/strong> Shows outstanding performance across several benchmark datasets and can be utilized in various application fields.<\/li>\n<\/ul>\n<h2>2. Structure of PSPNet<\/h2>\n<p>The basic structure of PSPNet can be divided as follows:<\/p>\n<ol>\n<li>Backbone Network: Based on CNN models such as ResNet.<\/li>\n<li>Pyramid Pooling Module: Integrates multi-scale feature maps to capture overall context.<\/li>\n<li>Upsampling: Adjusts to an appropriate resolution for final predictions.<\/li>\n<\/ol>\n<h3>2.1. Pyramid Pooling Module<\/h3>\n<p>The PPM generates feature maps at multiple resolutions for the input image. This module conducts pooling operations of different sizes to collect spatial information and integrates it back to the original resolution. The PPM consists of the following steps:<\/p>\n<ul>\n<li>Performs pooling operations of various sizes on the input feature map (e.g., 1&#215;1, 2&#215;2, 3&#215;3, 6&#215;6).<\/li>\n<li>Upsamples the feature maps outputted from each pooling stage back to the original resolution.<\/li>\n<li>Finally, concatenates all upsampled feature maps to create a new feature map.<\/li>\n<\/ul>\n<h2>3. Implementing PSPNet with PyTorch<\/h2>\n<p>Now, let&#8217;s implement PSPNet using PyTorch. The code below defines the structure of PSPNet.<\/p>\n<h3>3.1. Setting Up the Environment<\/h3>\n<pre><code>import torch\nimport torch.nn as nn\nimport torchvision.models as models\n    <\/code><\/pre>\n<h3>3.2. Defining the PSPNet Class<\/h3>\n<p>The PSPNet class integrates the backbone network and the pyramid pooling module. It can be defined as follows:<\/p>\n<pre><code>class PSPModule(nn.Module):\n    def __init__(self, in_channels, out_channels):\n        super(PSPModule, self).__init__()\n        self.pool1 = nn.AvgPool2d(1, stride=1)\n        self.pool2 = nn.AvgPool2d(2, stride=2)\n        self.pool3 = nn.AvgPool2d(3, stride=3)\n        self.pool4 = nn.AvgPool2d(6, stride=6)\n        self.conv1x1 = nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False)\n        self.bn = nn.BatchNorm2d(out_channels)\n\n    def forward(self, x):\n        size = x.size()[2:]\n        p1 = self.conv1x1(self.pool1(x))\n        p2 = self.conv1x1(self.pool2(x))\n        p3 = self.conv1x1(self.pool3(x))\n        p4 = self.conv1x1(self.pool4(x))\n\n        p1 = nn.functional.interpolate(p1, size, mode='bilinear', align_corners=True)\n        p2 = nn.functional.interpolate(p2, size, mode='bilinear', align_corners=True)\n        p3 = nn.functional.interpolate(p3, size, mode='bilinear', align_corners=True)\n        p4 = nn.functional.interpolate(p4, size, mode='bilinear', align_corners=True)\n\n        return torch.cat((x, p1, p2, p3, p4), dim=1)\n\nclass PSPNet(nn.Module):\n    def __init__(self, num_classes):\n        super(PSPNet, self).__init__()\n        self.backbone = models.resnet101(pretrained=True)\n        self.ppm = PSPModule(2048, 512)\n        self.final_convolution = nn.Conv2d(2048 + 512 * 4, num_classes, kernel_size=1)\n\n    def forward(self, x):\n        x = self.backbone(x)\n        x = self.ppm(x)\n        x = self.final_convolution(x)\n        return x<\/code><\/pre>\n<h3>3.3. Training the Model<\/h3>\n<p>To train the model, you need to prepare the dataset, set up the optimizer, and write the training loop. Let&#8217;s take the <code>Cityscapes<\/code> dataset from torchvision as an example.<\/p>\n<pre><code>from torchvision import datasets, transforms\nfrom torch.utils.data import DataLoader\n\n# Preparing the dataset\ntransform = transforms.Compose([\n    transforms.Resize((256, 256)),\n    transforms.ToTensor(),\n])\n\ntrain_dataset = datasets.Cityscapes(root='path\/to\/cityscapes\/', split='train', mode='fine', target_type='semantic', transform=transform)\ntrain_loader = DataLoader(train_dataset, batch_size=4, shuffle=True)\n\n# Setting up the model and optimizer\nmodel = PSPNet(num_classes=19).to(device)\noptimizer = torch.optim.Adam(model.parameters(), lr=1e-4)\ncriterion = nn.CrossEntropyLoss()\n\n# Training loop\nfor epoch in range(num_epochs):\n    model.train()\n    for images, masks in train_loader:\n        images, masks = images.to(device), masks.to(device)\n\n        optimizer.zero_grad()\n        outputs = model(images)\n        loss = criterion(outputs, masks)\n        loss.backward()\n        optimizer.step()\n\n    print(f'Epoch [{epoch + 1}\/{num_epochs}], Loss: {loss.item():.4f}')\n<\/code><\/pre>\n<h2>4. Experiments and Evaluation<\/h2>\n<p>After training is complete, performance should be measured on the validation dataset to evaluate the model. Metrics commonly used for evaluation include <strong>IoU (Intersection over Union)<\/strong> and <strong>Pixel Accuracy<\/strong>. The following code illustrates how to assess the model&#8217;s performance.<\/p>\n<pre><code>def evaluate(model, val_loader):\n    model.eval()\n    total_loss = 0\n    total_correct = 0\n    total_pixels = 0\n\n    with torch.no_grad():\n        for images, masks in val_loader:\n            images, masks = images.to(device), masks.to(device)\n            outputs = model(images)\n            loss = criterion(outputs, masks)\n\n            total_loss += loss.item()\n            preds = outputs.argmax(dim=1)\n            total_correct += (preds == masks).sum().item()\n            total_pixels += masks.numel()\n\n    print(f'Validation Loss: {total_loss \/ len(val_loader):.4f}, Pixel Accuracy: {total_correct \/ total_pixels:.4f}')\n\n# Performing evaluation\nevaluate(model, val_loader)\n<\/code><\/pre>\n<h2>5. Conclusion<\/h2>\n<p>In this lecture, we explored the structure and operational principles of PSPNet. I hope you have understood how to address semantic segmentation problems through the process of implementing and training the model with PyTorch. PSPNet is a network that demonstrates excellent performance and can be utilized in various real-world image processing problems and applications.<\/p>\n<div class=\"note\">\n<strong>References:<\/strong><\/p>\n<ul>\n<li>Zhang, Y., et al. (2017). <em>Pyramid Scene Parsing Network<\/em>. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). <\/li>\n<li>PyTorch. (n.d.). <em>PyTorch Documentation<\/em>. Retrieved from <a href=\"https:\/\/pytorch.org\/docs\/stable\/index.html\">https:\/\/pytorch.org\/docs\/stable\/index.html<\/a><\/li>\n<\/ul>\n<\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this course, we will explore one of the latest techniques in image segmentation using deep learning, known as PSPNet (Pyramid Scene Parsing Network). PSPNet demonstrates particularly excellent performance in semantic segmentation of images and can be applied to various image recognition problems. 1. Overview of PSPNet PSPNet is a network proposed by Zhang et &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36459\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep Learning PyTorch Course, PSPNet&#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-36459","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, PSPNet - \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\/36459\/\" \/>\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, PSPNet - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this course, we will explore one of the latest techniques in image segmentation using deep learning, known as PSPNet (Pyramid Scene Parsing Network). PSPNet demonstrates particularly excellent performance in semantic segmentation of images and can be applied to various image recognition problems. 1. Overview of PSPNet PSPNet is a network proposed by Zhang et &hellip; \ub354 \ubcf4\uae30 &quot;Deep Learning PyTorch Course, PSPNet&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36459\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:48:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:53:06+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\/36459\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36459\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Deep Learning PyTorch Course, PSPNet\",\"datePublished\":\"2024-11-01T09:48:39+00:00\",\"dateModified\":\"2024-11-01T11:53:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36459\/\"},\"wordCount\":499,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"PyTorch Study\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36459\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36459\/\",\"name\":\"Deep Learning PyTorch Course, PSPNet - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:48:39+00:00\",\"dateModified\":\"2024-11-01T11:53:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36459\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36459\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36459\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deep Learning PyTorch Course, PSPNet\"}]},{\"@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, PSPNet - \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\/36459\/","og_locale":"ko_KR","og_type":"article","og_title":"Deep Learning PyTorch Course, PSPNet - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this course, we will explore one of the latest techniques in image segmentation using deep learning, known as PSPNet (Pyramid Scene Parsing Network). PSPNet demonstrates particularly excellent performance in semantic segmentation of images and can be applied to various image recognition problems. 1. Overview of PSPNet PSPNet is a network proposed by Zhang et &hellip; \ub354 \ubcf4\uae30 \"Deep Learning PyTorch Course, PSPNet\"","og_url":"https:\/\/atmokpo.com\/w\/36459\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:48:39+00:00","article_modified_time":"2024-11-01T11:53:06+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\/36459\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36459\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Deep Learning PyTorch Course, PSPNet","datePublished":"2024-11-01T09:48:39+00:00","dateModified":"2024-11-01T11:53:06+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36459\/"},"wordCount":499,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["PyTorch Study"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36459\/","url":"https:\/\/atmokpo.com\/w\/36459\/","name":"Deep Learning PyTorch Course, PSPNet - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:48:39+00:00","dateModified":"2024-11-01T11:53:06+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36459\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36459\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36459\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Deep Learning PyTorch Course, PSPNet"}]},{"@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\/36459","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=36459"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36459\/revisions"}],"predecessor-version":[{"id":36460,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36459\/revisions\/36460"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}