{"id":970,"date":"2022-06-27T13:12:50","date_gmt":"2022-06-27T12:12:50","guid":{"rendered":"https:\/\/www.es.mdh.se\/hero\/?page_id=970"},"modified":"2023-03-03T15:36:29","modified_gmt":"2023-03-03T14:36:29","slug":"deephls","status":"publish","type":"page","link":"https:\/\/www.es.mdu.se\/deephero\/deephls\/","title":{"rendered":"DeepHLS"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"970\" class=\"elementor elementor-970\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f256720 elementor-section-height-min-height elementor-section-boxed elementor-section-height-default elementor-section-items-middle\" data-id=\"f256720\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;shape_divider_bottom&quot;:&quot;arrow&quot;,&quot;shape_divider_bottom_negative&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t<div class=\"elementor-shape elementor-shape-bottom\" aria-hidden=\"true\" data-negative=\"true\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 700 10\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" d=\"M360 0L350 9.9 340 0 0 0 0 10 700 10 700 0\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-31ce6db\" data-id=\"31ce6db\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-144537cf elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"144537cf\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-44bb25dc\" data-id=\"44bb25dc\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2d268c7d elementor-widget elementor-widget-heading\" data-id=\"2d268c7d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">DeepHLS V1.0: A complete toolchain for automatic synthesis of deep neural networks to FPGA:<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-361c2461 elementor-widget elementor-widget-text-editor\" data-id=\"361c2461\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tDeep Neural Networks (DNN) have received much attention in various \napplications such as visual recognition, self-driving cars, health care,\n etc. Hardware implementation is considered an efficient method, \nspecifically using FPGA and ASIC, due to their high performance and low \npower consumption. However, implementation on these platforms is \ndifficult for neural network designers since they usually have limited \nknowledge of hardware. High-Level Synthesis (HLS) tools can act as a \nbridge between high-level DNN designs and hardware implementation. \nNevertheless, these tools usually need implementation at the C level, \nwhereas the design of neural networks is usually performed at a higher \nlevel (such as Keras or TensorFlow).<br>DeepHLS is a fully automated \ntoolchain for creating a C-level implementation that is synthesizable \nwith HLS Tools. It includes various stages, including Keras to C, \nValidation, Quantization analysis, and Quantization application. Thanks \nto its various scalability features, it supports very large deep neural \nnetworks such as VGG.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-53215fd elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"53215fd\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7c28663\" data-id=\"7c28663\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-37b59f9 elementor-widget elementor-widget-image\" data-id=\"37b59f9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.es.mdu.se\/deephero\/wp-content\/uploads\/elementor\/thumbs\/flow-q2z40gp050cxydzb3288vq16cblglm5k1nmmomtzvc.jpg\" title=\"flow\" alt=\"flow\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6d2c35b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6d2c35b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-04bed51\" data-id=\"04bed51\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b843fb0 elementor-widget elementor-widget-text-editor\" data-id=\"b843fb0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: justify;\"><b>Preprocessing:<\/b> Before creating the C implementation begins, it is needed to extract the required data for the DNN under process. Preprocessing receives a trained DNN, which contains layers\u2019 specifications, weights, and biases.<\/p><p style=\"text-align: justify;\"><b>Keras to C:<\/b> This stage is the main part of creating the C implementation. In this stage, Keras [2, 3] implementation is processed to extract all the required information. <br \/>In creating C implementation, several measures are taken to enhance the usability and performance of the circuit which is being generated based on it:<\/p><ul><li>The code is created such that it can be adequately synthesized and with high performance on an FPGA.<\/li><li>The generated C code is able to use various data types for each of the data elements such as inputs, outputs, weights, biases, and layer data. They may all have the same data type, either FlP or FxP, with arbitrary precision. It is also possible to have different FxP configurations (binary point position) for each data element.<\/li><li>The code created for inference does not only perform the main math operations but also embodies features that, when the testbench executes it, it can monitor and save all the data elements.<\/li><li>For layer data, both internal FPGA storage (such as BRAM) or external memory (such as DDR) can be used to be able to implement even very large networks with many layers or large layers dimensions.<\/li><li>Input data sets, especially when many of them are to be applied, can be very large. Therefore, to ensure scalability, File-to- Memory mechanisms are included in the testbench.<\/li><li>The inference code to be synthesized is fully flat (without using functions) and in a single file. This is very important because firstly, calls to the functions add extra states and latency when synthesized, and secondly, a flat implementation allows the HLS tool to make inter-layer optimizations.<\/li><li>All for loops have labels. This will lead to more readable HLS reports. Additionally, it allows the designers or tool developers to use external HLS directive files, e.g., directives.tcl file for Xilinx Vivado HLS.<\/li><\/ul><p style=\"text-align: justify;\"><b>Running testbench in floating point mode:<\/b> In this stage, testbench is executed using the FlP mode for all network data elements. There are two main objectives for this execution.<\/p><ul><li>When a Keras description of a DNNs is executed on a CPU or a GPU, FlP is used. Therefore, if the inference in C is executed using the same input data and the same type of data, it should have the same accuracy as the one obtained in the preprocessing stage as the base accuracy.<\/li><li>Running the inference code in FlP mode provides us with the information we later need to assess the effects of FxP mode on accuary.<\/li><\/ul><p style=\"text-align: justify;\"><b>Data Analysis:<\/b> At this stage, various data that were extracted and stored in the stage of running testbench in FlP mode are analyzed to select appropriate data types. <br \/>One of the three modes for the implementation and execution of the inference can be selected.<\/p><ul><li>Floating-point mode: In this mode, for all data elements in the DNN, the FlP data type is chosen.<\/li><li>Single Fixed-point mode: An FxP data type configuration is determined by three main characteristics: number of bits in its integer portion (I), number of bits in its fractional portion (F), and being signed or unsigned (S). In this mode, all data types have the same FxP configuration.<\/li><li>Multiple Fixed-point mode: In this mode, FxP data type is used for all data elements, with the difference that each of the FxP types can have different I and S. Note that W is equal for all types.<\/li><\/ul><p><b>Running testbench for various data widths:<\/b> To obtain the whole width (and, as a result, the width for the fractional part of each of them), it is necessary to examine different widths to evaluate their impact on the network accuracy. <\/p><p>\u00a0<\/p><p><br \/><b>References: <\/b><\/p><ul style=\"text-align: justify;\"><li>[1] Riazati, Mohammad, Masoud Daneshtalab, Mikael Sj\u00f6din, and Bj\u00f6rn Lisper. &#8220;DeepHLS: A complete toolchain for automatic synthesis of deep neural networks to FPGA.&#8221; In 2020 27th IEEE International Conference on Electronics, Circuits and Systems (ICECS), pp. 1-4. IEEE, 2020.<\/li><li>[2] A. Gulli and S. Pal, Deep learning with Keras. Packt Publishing Ltd, 2017.<\/li><li>[3] V. Dumoulin and F. Visin, \u201cA guide to convolution arithmetic for deep learning,\u201d arXiv preprint arXiv:1603.07285, 2016.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c828d61 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c828d61\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8fa8250\" data-id=\"8fa8250\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cf93252 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"cf93252\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-lg\" href=\"http:\/\/www.es.mdh.se\/pdf_publications\/6441.pdf\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-newspaper\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Link to the paper<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1690aa3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1690aa3\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0734eb7\" data-id=\"0734eb7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ddf2548 elementor-align-center elementor-button-info elementor-widget elementor-widget-button\" data-id=\"ddf2548\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-lg\" href=\"https:\/\/github.com\/HERO-MDH\/DeepHLS\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fab fa-github\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Link to the GitHub repository<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-666064e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"666064e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-10aa8fb\" data-id=\"10aa8fb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-100e363 elementor-button-warning elementor-align-center elementor-widget elementor-widget-button\" data-id=\"100e363\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-lg\" href=\"https:\/\/www.es.mdh.se\/hero\/tools\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-backward\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Back to Tools<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-688c8a7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"688c8a7\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-89f670d\" data-id=\"89f670d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d4ac202 elementor-widget elementor-widget-video\" data-id=\"d4ac202\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/www.es.mdh.se\/hero\/wp-content\/uploads\/2022\/06\/AICAS2022_AD3_004_Mohammad-Riazati.mp4\" controls=\"\" preload=\"metadata\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3780388 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3780388\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4ce1f25\" data-id=\"4ce1f25\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-75cf014 elementor-widget elementor-widget-text-editor\" data-id=\"75cf014\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u00a0<\/p><p>\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>DeepHLS V1.0: A complete toolchain for automatic synthesis of deep neural networks to FPGA: Deep Neural Networks (DNN) have received much attention in various applications such as visual recognition, self-driving cars, health care, etc. Hardware implementation is considered an efficient method, specifically using FPGA and ASIC, due to their high performance and low power consumption. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-970","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.es.mdu.se\/deephero\/wp-json\/wp\/v2\/pages\/970","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.es.mdu.se\/deephero\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.es.mdu.se\/deephero\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.es.mdu.se\/deephero\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.es.mdu.se\/deephero\/wp-json\/wp\/v2\/comments?post=970"}],"version-history":[{"count":43,"href":"https:\/\/www.es.mdu.se\/deephero\/wp-json\/wp\/v2\/pages\/970\/revisions"}],"predecessor-version":[{"id":1311,"href":"https:\/\/www.es.mdu.se\/deephero\/wp-json\/wp\/v2\/pages\/970\/revisions\/1311"}],"wp:attachment":[{"href":"https:\/\/www.es.mdu.se\/deephero\/wp-json\/wp\/v2\/media?parent=970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}