diff --git a/arm_compute/graph/GraphBuilder.h b/arm_compute/graph/GraphBuilder.h
index d750260..21a96a3 100644
--- a/arm_compute/graph/GraphBuilder.h
+++ b/arm_compute/graph/GraphBuilder.h
@@ -239,6 +239,18 @@
      * @return Node ID of the created node, EmptyNodeID in case of error
      */
     static NodeID add_normalization_node(Graph &g, NodeParams params, NodeIdxPair input, NormalizationLayerInfo norm_info);
+    /** Adds a normalize planar YUV 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 normalize planar YUV layer node as a NodeID-Index pair
+     * @param[in] mean_accessor Const Node ID that contains the mean values
+     * @param[in] std_accessor  Const Node ID that contains the variance values
+     *
+     * @return Node ID of the created node, EmptyNodeID in case of error
+     */
+    static NodeID add_normalize_planar_yuv_node(Graph &g, NodeParams params, NodeIdxPair input,
+                                                ITensorAccessorUPtr mean_accessor = nullptr, ITensorAccessorUPtr std_accessor = nullptr);
     /** Adds a permute 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 9117864..4628d92 100644
--- a/arm_compute/graph/TypePrinter.h
+++ b/arm_compute/graph/TypePrinter.h
@@ -95,12 +95,18 @@
         case NodeType::NormalizationLayer:
             os << "NormalizationLayer";
             break;
+        case NodeType::NormalizePlanarYUVLayer:
+            os << "NormalizePlanarYUVLayer";
+            break;
         case NodeType::PermuteLayer:
             os << "PermuteLayer";
             break;
         case NodeType::PoolingLayer:
             os << "PoolingLayer";
             break;
+        case NodeType::ReorgLayer:
+            os << "ReorgLayer";
+            break;
         case NodeType::ReshapeLayer:
             os << "ReshapeLayer";
             break;
diff --git a/arm_compute/graph/Types.h b/arm_compute/graph/Types.h
index 0b9a953..190258b 100644
--- a/arm_compute/graph/Types.h
+++ b/arm_compute/graph/Types.h
@@ -141,6 +141,7 @@
     FlattenLayer,
     FullyConnectedLayer,
     NormalizationLayer,
+    NormalizePlanarYUVLayer,
     PermuteLayer,
     PoolingLayer,
     ReorgLayer,
diff --git a/arm_compute/graph/backends/FunctionHelpers.h b/arm_compute/graph/backends/FunctionHelpers.h
index b1446ea..88d6ce1 100644
--- a/arm_compute/graph/backends/FunctionHelpers.h
+++ b/arm_compute/graph/backends/FunctionHelpers.h
@@ -621,6 +621,44 @@
     return std::move(func);
 }
 
+/** Create a backend normalize planar YUV layer function
+ *
+ * @tparam NormalizePlanarYUVLayerFunction Backend normalize planar YUV function
+ * @tparam TargetInfo                      Target-specific information
+ *
+ * @param[in] node Node to create the backend function for
+ *
+ * @return Backend normalize plnar YUV layer function
+ */
+template <typename NormalizePlanarYUVLayerFunction, typename TargetInfo>
+std::unique_ptr<IFunction> create_normalize_planar_yuv_layer(NormalizePlanarYUVLayerNode &node)
+{
+    validate_node<TargetInfo>(node, 3 /* expected inputs */, 1 /* expected outputs */);
+
+    // Extract IO and info
+    typename TargetInfo::TensorType *input  = get_backing_tensor<TargetInfo>(node.input(0));
+    typename TargetInfo::TensorType *mean   = get_backing_tensor<TargetInfo>(node.input(1));
+    typename TargetInfo::TensorType *std    = get_backing_tensor<TargetInfo>(node.input(2));
+    typename TargetInfo::TensorType *output = get_backing_tensor<TargetInfo>(node.output(0));
+    ARM_COMPUTE_ERROR_ON(input == nullptr);
+    ARM_COMPUTE_ERROR_ON(mean == nullptr);
+    ARM_COMPUTE_ERROR_ON(std == nullptr);
+    ARM_COMPUTE_ERROR_ON(output == nullptr);
+
+    // Create and configure function
+    auto func = support::cpp14::make_unique<NormalizePlanarYUVLayerFunction>();
+    func->configure(input, output, mean, std);
+
+    // Log info
+    ARM_COMPUTE_LOG_GRAPH_INFO("Instantiated " << node.type()
+                               << " Target " << TargetInfo::TargetType
+                               << " Data Type: " << input->info()->data_type()
+                               << " Shape: " << input->info()->tensor_shape()
+                               << std::endl);
+
+    return std::move(func);
+}
+
 /** Create a backend permute layer function
  *
  * @tparam PermuteLayerFunction Backend permute function
diff --git a/arm_compute/graph/backends/ValidateHelpers.h b/arm_compute/graph/backends/ValidateHelpers.h
index e8b8af1..1de3aa9 100644
--- a/arm_compute/graph/backends/ValidateHelpers.h
+++ b/arm_compute/graph/backends/ValidateHelpers.h
@@ -179,6 +179,30 @@
     return status;
 }
 
+/** Validates a NormalizePlanarYUV layer node
+ *
+ * @tparam NormalizePlanarYUVLayer layer type
+ *
+ * @param[in] node Node to validate
+ *
+ * @return Status
+ */
+template <typename NormalizePlanarYUVLayer>
+Status validate_normalize_planar_yuv_layer(NormalizePlanarYUVLayerNode &node)
+{
+    ARM_COMPUTE_LOG_GRAPH_VERBOSE("Validating NormalizePlanarYUVLayer node with ID : " << node.id() << " and Name: " << node.name() << std::endl);
+    ARM_COMPUTE_RETURN_ERROR_ON(node.num_inputs() != 3);
+    ARM_COMPUTE_RETURN_ERROR_ON(node.num_outputs() != 1);
+
+    // Extract IO and info
+    arm_compute::ITensorInfo *input  = detail::get_backing_tensor_info(node.input(0));
+    arm_compute::ITensorInfo *mean   = detail::get_backing_tensor_info(node.input(1));
+    arm_compute::ITensorInfo *std    = detail::get_backing_tensor_info(node.input(2));
+    arm_compute::ITensorInfo *output = get_backing_tensor_info(node.output(0));
+
+    // Validate function
+    return NormalizePlanarYUVLayer::validate(input, output, mean, std);
+}
 /** Validates a permute layer node
  *
  * @tparam PermuteLayer Permute layer type
diff --git a/arm_compute/graph/frontend/Layers.h b/arm_compute/graph/frontend/Layers.h
index 9a268d3..9afb178 100644
--- a/arm_compute/graph/frontend/Layers.h
+++ b/arm_compute/graph/frontend/Layers.h
@@ -538,6 +538,37 @@
     NormalizationLayerInfo _norm_info;
 };
 
+/** Normalize planar YUV Layer */
+class NormalizePlanarYUVLayer final : public ILayer
+{
+public:
+    /** Construct a normalize planar YUV layer.
+     *
+     * @param[in] mean Accessor to get mean tensor data from.
+     * @param[in] std  Accessor to get std tensor data from.
+     */
+    NormalizePlanarYUVLayer(ITensorAccessorUPtr mean,
+                            ITensorAccessorUPtr std)
+        : _mean(std::move(mean)), _std(std::move(std))
+    {
+    }
+
+    NodeID create_layer(IStream &s) override
+    {
+        ARM_COMPUTE_ERROR_ON(_mean == nullptr);
+        ARM_COMPUTE_ERROR_ON(_std == nullptr);
+
+        NodeParams  common_params = { name(), s.hints().target_hint };
+        NodeIdxPair input         = { s.tail_node(), 0 };
+        return GraphBuilder::add_normalize_planar_yuv_node(s.graph(), common_params, input,
+                                                           std::move(_mean), std::move(_std));
+    }
+
+private:
+    ITensorAccessorUPtr _mean;
+    ITensorAccessorUPtr _std;
+};
+
 /** Permute Layer */
 class PermuteLayer final : public ILayer
 {
diff --git a/arm_compute/graph/nodes/Nodes.h b/arm_compute/graph/nodes/Nodes.h
index 438054c..59ac131 100644
--- a/arm_compute/graph/nodes/Nodes.h
+++ b/arm_compute/graph/nodes/Nodes.h
@@ -38,6 +38,7 @@
 #include "arm_compute/graph/nodes/FullyConnectedLayerNode.h"
 #include "arm_compute/graph/nodes/InputNode.h"
 #include "arm_compute/graph/nodes/NormalizationLayerNode.h"
+#include "arm_compute/graph/nodes/NormalizePlanarYUVLayerNode.h"
 #include "arm_compute/graph/nodes/OutputNode.h"
 #include "arm_compute/graph/nodes/PermuteLayerNode.h"
 #include "arm_compute/graph/nodes/PoolingLayerNode.h"
diff --git a/arm_compute/graph/nodes/NodesFwd.h b/arm_compute/graph/nodes/NodesFwd.h
index a6393e7..92dc1f0 100644
--- a/arm_compute/graph/nodes/NodesFwd.h
+++ b/arm_compute/graph/nodes/NodesFwd.h
@@ -44,9 +44,11 @@
 class FullyConnectedLayerNode;
 class InputNode;
 class NormalizationLayerNode;
+class NormalizePlanarYUVLayerNode;
 class OutputNode;
 class PermuteLayerNode;
 class PoolingLayerNode;
+class ReorgLayerNode;
 class ReshapeLayerNode;
 class ResizeLayerNode;
 class SoftmaxLayerNode;
diff --git a/arm_compute/graph/nodes/NormalizePlanarYUVLayerNode.h b/arm_compute/graph/nodes/NormalizePlanarYUVLayerNode.h
new file mode 100644
index 0000000..8704b9d
--- /dev/null
+++ b/arm_compute/graph/nodes/NormalizePlanarYUVLayerNode.h
@@ -0,0 +1,48 @@
+/*
+ * 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_GRAPH_NORMALIZE_PLANAR_YUV_LAYER_NODE_H__
+#define __ARM_COMPUTE_GRAPH_NORMALIZE_PLANAR_YUV_LAYER_NODE_H__
+
+#include "arm_compute/graph/INode.h"
+
+namespace arm_compute
+{
+namespace graph
+{
+/** Batch Normalization Layer node */
+class NormalizePlanarYUVLayerNode final : public INode
+{
+public:
+    /** Constructor */
+    NormalizePlanarYUVLayerNode();
+
+    // Inherited overridden methods:
+    NodeType         type() const override;
+    bool             forward_descriptors() override;
+    TensorDescriptor configure_output(size_t idx) const override;
+    void accept(INodeVisitor &v) override;
+};
+} // namespace graph
+} // namespace arm_compute
+#endif /* __ARM_COMPUTE_GRAPH_NORMALIZE_PLANAR_YUV_LAYER_NODE_H__ */
