diff --git a/arm_compute/graph/GraphBuilder.h b/arm_compute/graph/GraphBuilder.h
index 2170cd1..611e69d 100644
--- a/arm_compute/graph/GraphBuilder.h
+++ b/arm_compute/graph/GraphBuilder.h
@@ -97,6 +97,17 @@
     static NodeID add_batch_normalization_node(Graph &g, NodeParams params, NodeIdxPair input, float epsilon,
                                                ITensorAccessorUPtr mean_accessor = nullptr, ITensorAccessorUPtr var_accessor = nullptr,
                                                ITensorAccessorUPtr beta_accessor = nullptr, ITensorAccessorUPtr gamma_accessor = nullptr);
+    /** Adds a bounding box transform layer node to the graph
+     *
+     * @param[in] g      Graph to add the node to
+     * @param[in] params Common node parameters
+     * @param[in] input  Input to the bounding box transform layer node as a NodeID-Index pair
+     * @param[in] deltas Deltas input to the bounding box transform layer node as a NodeID-Index pair
+     * @param[in] info   Bounding Box Transform information
+     *
+     * @return Node ID of the created node, EmptyNodeID in case of error
+     */
+    static NodeID add_bounding_box_transform_node(Graph &g, NodeParams params, NodeIdxPair input, NodeIdxPair deltas, BoundingBoxTransformInfo info);
     /** Adds an channel shuffle layer node to the graph
      *
      * @param[in] g          Graph to add the node to
diff --git a/arm_compute/graph/TypePrinter.h b/arm_compute/graph/TypePrinter.h
index 9cdd7b7..697ee94 100644
--- a/arm_compute/graph/TypePrinter.h
+++ b/arm_compute/graph/TypePrinter.h
@@ -68,6 +68,9 @@
         case NodeType::BatchNormalizationLayer:
             os << "BatchNormalizationLayer";
             break;
+        case NodeType::BoundingBoxTransformLayer:
+            os << "BoundingBoxTransformLayer";
+            break;
         case NodeType::ChannelShuffleLayer:
             os << "ChannelShuffleLayer";
             break;
diff --git a/arm_compute/graph/Types.h b/arm_compute/graph/Types.h
index a1b077a..005b407 100644
--- a/arm_compute/graph/Types.h
+++ b/arm_compute/graph/Types.h
@@ -132,6 +132,7 @@
 {
     ActivationLayer,
     BatchNormalizationLayer,
+    BoundingBoxTransformLayer,
     ChannelShuffleLayer,
     ConcatenateLayer,
     ConvolutionLayer,
diff --git a/arm_compute/graph/backends/FunctionHelpers.h b/arm_compute/graph/backends/FunctionHelpers.h
index 1968ec3..d235fe9 100644
--- a/arm_compute/graph/backends/FunctionHelpers.h
+++ b/arm_compute/graph/backends/FunctionHelpers.h
@@ -159,6 +159,42 @@
     return std::move(func);
 }
 
+/** Create a backend bounding box transform layer function
+ *
+ * @tparam BoundingBoxTransformLayerFunction    Backend bounding box transform function
+ * @tparam TargetInfo                           Target-specific information
+ *
+ * @param[in] node Node to create the backend function for
+ *
+ * @return Backend bounding box transform layer function
+ */
+template <typename BoundingBoxTransformLayerFunction, typename TargetInfo>
+std::unique_ptr<IFunction> create_bounding_box_transform_layer(BoundingBoxTransformLayerNode &node)
+{
+    validate_node<TargetInfo>(node, 2 /* expected inputs */, 1 /* expected outputs */);
+
+    // Extract IO and info
+    typename TargetInfo::TensorType *input     = get_backing_tensor<TargetInfo>(node.input(0));
+    typename TargetInfo::TensorType *deltas    = get_backing_tensor<TargetInfo>(node.input(1));
+    typename TargetInfo::TensorType *output    = get_backing_tensor<TargetInfo>(node.output(0));
+    const BoundingBoxTransformInfo   bbox_info = node.info();
+
+    // Create and configure function
+    auto func = support::cpp14::make_unique<BoundingBoxTransformLayerFunction>();
+    func->configure(input, output, deltas, bbox_info);
+
+    // Log info
+    ARM_COMPUTE_LOG_GRAPH_INFO("Instantiated " << node.type()
+                               << " Target " << TargetInfo::TargetType
+                               << " Data Type: " << input->info()->data_type()
+                               << " Shape: " << input->info()->tensor_shape()
+                               << " BoundingBox Info img W: " << bbox_info.img_width() << " "
+                               << " BoundingBox Info img H: " << bbox_info.img_height() << " "
+                               << std::endl);
+
+    return std::move(func);
+}
+
 /** Create a backend channel shuffle layer function
  *
  * @tparam ChannelShuffleLayerFunction Backend channel shuffle function
diff --git a/arm_compute/graph/backends/ValidateHelpers.h b/arm_compute/graph/backends/ValidateHelpers.h
index b0395da..999ce19 100644
--- a/arm_compute/graph/backends/ValidateHelpers.h
+++ b/arm_compute/graph/backends/ValidateHelpers.h
@@ -52,6 +52,30 @@
     return ((tensor == nullptr) || (tensor->handle() == nullptr)) ? nullptr : tensor->handle()->tensor().info();
 }
 
+/** Validates a Bounding Box Transform layer node
+ *
+ * @tparam BoundingBoxTransformLayer  Bounding Box Transform layer function type
+ *
+ * @param[in] node Node to validate
+ *
+ * @return Status
+ */
+template <typename BoundingBoxTransformLayer>
+Status validate_bounding_box_transform_layer(BoundingBoxTransformLayerNode &node)
+{
+    ARM_COMPUTE_LOG_GRAPH_VERBOSE("Validating BoundingBoxTransformLayer node with ID : " << node.id() << " and Name: " << node.name() << std::endl);
+    ARM_COMPUTE_RETURN_ERROR_ON(node.num_inputs() != 2);
+    ARM_COMPUTE_RETURN_ERROR_ON(node.num_outputs() != 1);
+
+    // Extract IO and info
+    arm_compute::ITensorInfo      *input     = get_backing_tensor_info(node.input(0));
+    arm_compute::ITensorInfo      *deltas    = get_backing_tensor_info(node.input(1));
+    arm_compute::ITensorInfo      *output    = get_backing_tensor_info(node.output(0));
+    const BoundingBoxTransformInfo bbox_info = node.info();
+
+    return BoundingBoxTransformLayer::validate(input, output, deltas, bbox_info);
+}
+
 /** Validates a Channel Shuffle layer node
  *
  * @tparam ChannelShuffleLayer  Channel Shuffle layer function type
diff --git a/arm_compute/graph/frontend/Layers.h b/arm_compute/graph/frontend/Layers.h
index d72f549..fa0656d 100644
--- a/arm_compute/graph/frontend/Layers.h
+++ b/arm_compute/graph/frontend/Layers.h
@@ -154,6 +154,41 @@
     float               _epsilon;
 };
 
+/** Bounding Box Transform Layer */
+class BoundingBoxTransformLayer final : public ILayer
+{
+public:
+    /** Construct a bounding box transform layer.
+     *
+     * @param[in] sub_stream_input  Graph sub-stream for the input
+     * @param[in] sub_stream_deltas Graph sub-stream for the deltas
+     * @param[in] info              Contains BoundingBox operation information described in @ref BoundingBoxTransformInfo.
+     */
+    BoundingBoxTransformLayer(SubStream &&sub_stream_input, SubStream &&sub_stream_deltas, BoundingBoxTransformInfo info)
+        : _ss_input(sub_stream_input), _ss_deltas(sub_stream_deltas), _bbox_info(info)
+    {
+    }
+
+    /** Create layer and add to the given stream.
+     *
+     * @param[in] s Stream to add layer to.
+     *
+     * @return ID of the created node.
+     */
+    NodeID create_layer(IStream &s) override
+    {
+        NodeParams  common_params = { name(), s.hints().target_hint };
+        NodeIdxPair input         = { _ss_input.tail_node(), 0 };
+        NodeIdxPair deltas        = { _ss_deltas.tail_node(), 0 };
+        return GraphBuilder::add_bounding_box_transform_node(s.graph(), common_params, input, deltas, _bbox_info);
+    }
+
+private:
+    SubStream                _ss_input;
+    SubStream                _ss_deltas;
+    BoundingBoxTransformInfo _bbox_info;
+};
+
 /** Channel Shuffle Layer */
 class ChannelShuffleLayer final : public ILayer
 {
diff --git a/arm_compute/graph/nodes/BoundingBoxTransformLayerNode.h b/arm_compute/graph/nodes/BoundingBoxTransformLayerNode.h
new file mode 100644
index 0000000..8f5c8ea
--- /dev/null
+++ b/arm_compute/graph/nodes/BoundingBoxTransformLayerNode.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2018 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __ARM_COMPUTE_BOUNDING_BOX_TRANSFORM_NODE_H__
+#define __ARM_COMPUTE_BOUNDING_BOX_TRANSFORM_NODE_H__
+
+#include "arm_compute/graph/INode.h"
+
+namespace arm_compute
+{
+namespace graph
+{
+/** Bounding Box Transform Layer node */
+class BoundingBoxTransformLayerNode final : public INode
+{
+public:
+    /** Constructor
+     *
+     * @param[in] info Contains BoundingBox operation information described in @ref BoundingBoxTransformInfo.
+     */
+    BoundingBoxTransformLayerNode(BoundingBoxTransformInfo &info);
+    /** BoundingBoxTransformInfo accessor
+     *
+     * @return BoundingBoxTransformInfo
+     */
+    const BoundingBoxTransformInfo &info() const;
+
+    // Inherited overridden methods:
+    NodeType         type() const override;
+    bool             forward_descriptors() override;
+    TensorDescriptor configure_output(size_t idx) const override;
+    void accept(INodeVisitor &v) override;
+
+private:
+    BoundingBoxTransformInfo _bbox_info;
+};
+} // namespace graph
+} // namespace arm_compute
+#endif /* __ARM_COMPUTE_BOUNDING_BOX_TRANSFORM_NODE_H__ */
diff --git a/arm_compute/graph/nodes/Nodes.h b/arm_compute/graph/nodes/Nodes.h
index 4e2a49d..6acebdc 100644
--- a/arm_compute/graph/nodes/Nodes.h
+++ b/arm_compute/graph/nodes/Nodes.h
@@ -26,6 +26,7 @@
 
 #include "arm_compute/graph/nodes/ActivationLayerNode.h"
 #include "arm_compute/graph/nodes/BatchNormalizationLayerNode.h"
+#include "arm_compute/graph/nodes/BoundingBoxTransformLayerNode.h"
 #include "arm_compute/graph/nodes/ChannelShuffleLayerNode.h"
 #include "arm_compute/graph/nodes/ConcatenateLayerNode.h"
 #include "arm_compute/graph/nodes/ConstNode.h"
diff --git a/arm_compute/graph/nodes/NodesFwd.h b/arm_compute/graph/nodes/NodesFwd.h
index 7aed471..e704557 100644
--- a/arm_compute/graph/nodes/NodesFwd.h
+++ b/arm_compute/graph/nodes/NodesFwd.h
@@ -32,6 +32,7 @@
 class INode;
 class ActivationLayerNode;
 class BatchNormalizationLayerNode;
+class BoundingBoxTransformLayerNode;
 class ChannelShuffleLayerNode;
 class ConcatenateLayerNode;
 class ConstNode;
