From c17df9d6bee04863b6c70b04f19c978d79b11e66 Mon Sep 17 00:00:00 2001 From: NAUD Maxence <maxence.naud@cea.fr> Date: Thu, 17 Oct 2024 14:35:59 +0000 Subject: [PATCH] [Add] aidge export for 'Pad' and 'ConvDepthWise' Operators --- .../operator_export/conv_depth_wise.py | 17 +++++++++++++ .../aidge_export_aidge/operator_export/pad.py | 17 +++++++++++++ .../attributes/conv_depth_wise.jinja | 16 ++++++++++++ .../templates/attributes/pad.jinja | 12 +++++++++ .../graph_ctor/conv_depth_wise.jinja | 25 +++++++++++++++++++ .../templates/graph_ctor/pad.jinja | 17 +++++++++++++ 6 files changed, 104 insertions(+) create mode 100644 aidge_core/aidge_export_aidge/operator_export/conv_depth_wise.py create mode 100644 aidge_core/aidge_export_aidge/operator_export/pad.py create mode 100644 aidge_core/aidge_export_aidge/templates/attributes/conv_depth_wise.jinja create mode 100644 aidge_core/aidge_export_aidge/templates/attributes/pad.jinja create mode 100644 aidge_core/aidge_export_aidge/templates/graph_ctor/conv_depth_wise.jinja create mode 100644 aidge_core/aidge_export_aidge/templates/graph_ctor/pad.jinja diff --git a/aidge_core/aidge_export_aidge/operator_export/conv_depth_wise.py b/aidge_core/aidge_export_aidge/operator_export/conv_depth_wise.py new file mode 100644 index 000000000..3e04f8aac --- /dev/null +++ b/aidge_core/aidge_export_aidge/operator_export/conv_depth_wise.py @@ -0,0 +1,17 @@ +from aidge_core.aidge_export_aidge.registry import ExportSerialize +from aidge_core.aidge_export_aidge import ROOT_EXPORT +from aidge_core.export_utils import ExportNodeCpp +from aidge_core import ImplSpec, IOSpec, dtype + +@ExportSerialize.register(["ConvDepthWise1D", "ConvDepthWise2D"], ImplSpec(IOSpec(dtype.any))) +class ConvDepthWise(ExportNodeCpp): + def __init__(self, node, mem_info): + super().__init__(node, mem_info) + self.config_template = str( + ROOT_EXPORT / "templates/attributes/conv_depth_wise.jinja") + self.forward_template = str( + ROOT_EXPORT /"templates/graph_ctor/conv_depth_wise.jinja") + self.include_list = ["aidge/operator/ConvDepthWise.hpp"] + self.kernels_to_copy = [] + self.config_path = "include/attributes" + self.config_extension = "hpp" diff --git a/aidge_core/aidge_export_aidge/operator_export/pad.py b/aidge_core/aidge_export_aidge/operator_export/pad.py new file mode 100644 index 000000000..5d6869de0 --- /dev/null +++ b/aidge_core/aidge_export_aidge/operator_export/pad.py @@ -0,0 +1,17 @@ +from aidge_core.aidge_export_aidge.registry import ExportSerialize +from aidge_core.aidge_export_aidge import ROOT_EXPORT +from aidge_core.export_utils import ExportNodeCpp +from aidge_core import ImplSpec, IOSpec, dtype + +@ExportSerialize.register(["Pad1D", "Pad2D"], ImplSpec(IOSpec(dtype.any))) +class Pad(ExportNodeCpp): + def __init__(self, node, mem_info): + super().__init__(node, mem_info) + self.config_template = str( + ROOT_EXPORT / "templates/attributes/pad.jinja") + self.forward_template = str( + ROOT_EXPORT /"templates/graph_ctor/pad.jinja") + self.include_list = ["aidge/operator/Pad.hpp"] + self.kernels_to_copy = [] + self.config_path = "include/attributes" + self.config_extension = "hpp" diff --git a/aidge_core/aidge_export_aidge/templates/attributes/conv_depth_wise.jinja b/aidge_core/aidge_export_aidge/templates/attributes/conv_depth_wise.jinja new file mode 100644 index 000000000..7c2ffff44 --- /dev/null +++ b/aidge_core/aidge_export_aidge/templates/attributes/conv_depth_wise.jinja @@ -0,0 +1,16 @@ +#ifndef EXPORT_ATTRIBUTES_{{name|upper}}_H +#define EXPORT_ATTRIBUTES_{{name|upper}}_H + +#define _{{name|upper}}_CHANNELS {{out_chan[0]}} + +{% for i in range(kernel_dims|length) %} +#define _{{name|upper}}_KERNEL_{{i}} {{kernel_dims[i]}} +{%- endfor %} +{% for i in range(stride_dims|length) %} +#define _{{name|upper}}_STRIDE_{{i}} {{stride_dims[i]}} +{%- endfor %} +{% for i in range(dilation_dims|length) %} +#define _{{name|upper}}_DILATION_{{i}} {{dilation_dims[i]}} +{%- endfor %} + +#endif /* EXPORT_ATTRIBUTES_{{name|upper}}_H */ diff --git a/aidge_core/aidge_export_aidge/templates/attributes/pad.jinja b/aidge_core/aidge_export_aidge/templates/attributes/pad.jinja new file mode 100644 index 000000000..8fb76a6b2 --- /dev/null +++ b/aidge_core/aidge_export_aidge/templates/attributes/pad.jinja @@ -0,0 +1,12 @@ +#ifndef EXPORT_ATTRIBUTES_{{name|upper}}_H +#define EXPORT_ATTRIBUTES_{{name|upper}}_H + +{%- set half_length = (begin_end_borders|length / 2)|int -%} +{% for i in range(half_length) %} +#define _{{name|upper}}_BEGIN_BORDERS_{{i}} {{begin_end_borders[2*i]}} +#define _{{name|upper}}_END_BORDERS_{{i}} {{begin_end_borders[2*i+1]}} +{%- endfor %} +#define _{{name|upper}}_BORDER_TYPE {{border_type|int}} +#define _{{name|upper}}_BORDER_VALUE {{border_value}} + +#endif /* EXPORT_ATTRIBUTES_{{name|upper}}_H */ diff --git a/aidge_core/aidge_export_aidge/templates/graph_ctor/conv_depth_wise.jinja b/aidge_core/aidge_export_aidge/templates/graph_ctor/conv_depth_wise.jinja new file mode 100644 index 000000000..f7e1a85bb --- /dev/null +++ b/aidge_core/aidge_export_aidge/templates/graph_ctor/conv_depth_wise.jinja @@ -0,0 +1,25 @@ +{% filter indent(width=4, first=False) %} +/*** {{name|upper}} ***/ +std::shared_ptr<Aidge::Node> {{name}} = + Aidge::ConvDepthWise( + _{{name|upper}}_CHANNELS, + { + {%- for i in range(kernel_dims|length) -%} + _{{name|upper}}_KERNEL_{{i}}{%- if not loop.last %}, {% endif -%} + {%- endfor -%} + }, + "{{name}}", + { + {%- for i in range(stride_dims|length) -%} + _{{name|upper}}_STRIDE_{{i}} {%- if not loop.last %}, {% endif -%} + {%- endfor -%} + }, + { + {%- for i in range(dilation_dims|length) -%} + _{{name|upper}}_DILATION_{{i}} {%- if not loop.last %}, {% endif -%} + {%- endfor -%} + } + ); +{% include "./_set_input.jinja" %} +graph->add({{name}}); +{% endfilter %} diff --git a/aidge_core/aidge_export_aidge/templates/graph_ctor/pad.jinja b/aidge_core/aidge_export_aidge/templates/graph_ctor/pad.jinja new file mode 100644 index 000000000..a7bd86620 --- /dev/null +++ b/aidge_core/aidge_export_aidge/templates/graph_ctor/pad.jinja @@ -0,0 +1,17 @@ +{% filter indent(width=4, first=False) %} +/*** {{name|upper}} ***/ +{%- set half_length = (begin_end_borders|length / 2)|int -%} +std::shared_ptr<Aidge::Node> {{name}} = + Aidge::Pad<{{half_length}}>( + { + {%- for i in range(half_length) -%} + _{{name|upper}}_BEGIN_BORDERS_{{i}}, _{{name|upper}}_END_BORDERS_{{i}} {%- if not loop.last %}, {% endif -%} + {%- endfor -%} + }, + "{{name}}", + static_cast<Aidge::PadBorderType>(_{{name|upper}}_BORDER_TYPE), + _{{name|upper}}_BORDER_VALUE + ); +{% include "./_set_input.jinja" %} +graph->add({{name}}); +{% endfilter %} -- GitLab