From e2220551b7a64b929650ba9a60529c31e70c13c5 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Fri, 20 Jul 2018 13:23:44 +0100 Subject: COMPMID-1367: Enable NHWC in graph examples Change-Id: Iabc54a3a1bdcd46a9a921cda39c7c85fef672b72 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/141449 Reviewed-by: Giorgio Arena Reviewed-by: Anthony Barbier Tested-by: Jenkins --- examples/graph_squeezenet_v1_1.cpp | 58 +++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 26 deletions(-) (limited to 'examples/graph_squeezenet_v1_1.cpp') diff --git a/examples/graph_squeezenet_v1_1.cpp b/examples/graph_squeezenet_v1_1.cpp index ba7ee774a7..c0b5ff212d 100644 --- a/examples/graph_squeezenet_v1_1.cpp +++ b/examples/graph_squeezenet_v1_1.cpp @@ -60,7 +60,6 @@ public: // Checks ARM_COMPUTE_EXIT_ON_MSG(arm_compute::is_data_type_quantized_asymmetric(common_params.data_type), "Unsupported data type!"); - ARM_COMPUTE_EXIT_ON_MSG(common_params.data_layout == DataLayout::NHWC, "Unsupported data layout!"); // Print parameter values std::cout << common_params << std::endl; @@ -72,80 +71,86 @@ public: const std::array mean_rgb{ { 122.68f, 116.67f, 104.01f } }; std::unique_ptr preprocessor = arm_compute::support::cpp14::make_unique(mean_rgb); + // Create input descriptor + const TensorShape tensor_shape = permute_shape(TensorShape(224U, 224U, 3U, 1U), DataLayout::NCHW, common_params.data_layout); + TensorDescriptor input_descriptor = TensorDescriptor(tensor_shape, common_params.data_type).set_layout(common_params.data_layout); + + // Set weights trained layout + const DataLayout weights_layout = DataLayout::NCHW; + graph << common_params.target << common_params.fast_math_hint - << InputLayer(TensorDescriptor(TensorShape(227U, 227U, 3U, 1U), common_params.data_type), - get_input_accessor(common_params, std::move(preprocessor))) - << ConvolutionMethod::DIRECT + << InputLayer(input_descriptor, get_input_accessor(common_params, std::move(preprocessor))) + << ConvolutionMethod::Direct << ConvolutionLayer( 3U, 3U, 64U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/conv1_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/conv1_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/conv1_b.npy"), PadStrideInfo(2, 2, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)) << PoolingLayer(PoolingLayerInfo(PoolingType::MAX, 3, PadStrideInfo(2, 2, 0, 0, DimensionRoundingType::CEIL))) - << ConvolutionMethod::DEFAULT + << ConvolutionMethod::Default << ConvolutionLayer( 1U, 1U, 16U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire2_squeeze1x1_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire2_squeeze1x1_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire2_squeeze1x1_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); - graph << get_expand_fire_node(data_path, "fire2", 64U, 64U); + graph << get_expand_fire_node(data_path, "fire2", weights_layout, 64U, 64U); graph << ConvolutionLayer( 1U, 1U, 16U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire3_squeeze1x1_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire3_squeeze1x1_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire3_squeeze1x1_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); - graph << get_expand_fire_node(data_path, "fire3", 64U, 64U); + graph << get_expand_fire_node(data_path, "fire3", weights_layout, 64U, 64U); graph << PoolingLayer(PoolingLayerInfo(PoolingType::MAX, 3, PadStrideInfo(2, 2, 0, 0, DimensionRoundingType::CEIL))) << ConvolutionLayer( 1U, 1U, 32U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire4_squeeze1x1_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire4_squeeze1x1_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire4_squeeze1x1_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); - graph << get_expand_fire_node(data_path, "fire4", 128U, 128U); + graph << get_expand_fire_node(data_path, "fire4", weights_layout, 128U, 128U); graph << ConvolutionLayer( 1U, 1U, 32U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire5_squeeze1x1_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire5_squeeze1x1_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire5_squeeze1x1_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); - graph << get_expand_fire_node(data_path, "fire5", 128U, 128U); + graph << get_expand_fire_node(data_path, "fire5", weights_layout, 128U, 128U); graph << PoolingLayer(PoolingLayerInfo(PoolingType::MAX, 3, PadStrideInfo(2, 2, 0, 0, DimensionRoundingType::CEIL))) << ConvolutionLayer( 1U, 1U, 48U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire6_squeeze1x1_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire6_squeeze1x1_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire6_squeeze1x1_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); - graph << get_expand_fire_node(data_path, "fire6", 192U, 192U); + graph << get_expand_fire_node(data_path, "fire6", weights_layout, 192U, 192U); graph << ConvolutionLayer( 1U, 1U, 48U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire7_squeeze1x1_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire7_squeeze1x1_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire7_squeeze1x1_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); - graph << get_expand_fire_node(data_path, "fire7", 192U, 192U); + graph << get_expand_fire_node(data_path, "fire7", weights_layout, 192U, 192U); graph << ConvolutionLayer( 1U, 1U, 64U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire8_squeeze1x1_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire8_squeeze1x1_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire8_squeeze1x1_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); - graph << get_expand_fire_node(data_path, "fire8", 256U, 256U); + graph << get_expand_fire_node(data_path, "fire8", weights_layout, 256U, 256U); graph << ConvolutionLayer( 1U, 1U, 64U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire9_squeeze1x1_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire9_squeeze1x1_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/fire9_squeeze1x1_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); - graph << get_expand_fire_node(data_path, "fire9", 256U, 256U); + graph << get_expand_fire_node(data_path, "fire9", weights_layout, 256U, 256U); graph << ConvolutionLayer( 1U, 1U, 1000U, - get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/conv10_w.npy"), + get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/conv10_w.npy", weights_layout), get_weights_accessor(data_path, "/cnn_data/squeezenet_v1_1_model/conv10_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)) @@ -176,13 +181,14 @@ private: CommonGraphParams common_params; Stream graph; - BranchLayer get_expand_fire_node(const std::string &data_path, std::string &¶m_path, unsigned int expand1_filt, unsigned int expand3_filt) + BranchLayer get_expand_fire_node(const std::string &data_path, std::string &¶m_path, DataLayout weights_layout, + unsigned int expand1_filt, unsigned int expand3_filt) { std::string total_path = "/cnn_data/squeezenet_v1_1_model/" + param_path + "_"; SubStream i_a(graph); i_a << ConvolutionLayer( 1U, 1U, expand1_filt, - get_weights_accessor(data_path, total_path + "expand1x1_w.npy"), + get_weights_accessor(data_path, total_path + "expand1x1_w.npy", weights_layout), get_weights_accessor(data_path, total_path + "expand1x1_b.npy"), PadStrideInfo(1, 1, 0, 0)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); @@ -190,7 +196,7 @@ private: SubStream i_b(graph); i_b << ConvolutionLayer( 3U, 3U, expand3_filt, - get_weights_accessor(data_path, total_path + "expand3x3_w.npy"), + get_weights_accessor(data_path, total_path + "expand3x3_w.npy", weights_layout), get_weights_accessor(data_path, total_path + "expand3x3_b.npy"), PadStrideInfo(1, 1, 1, 1)) << ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)); -- cgit v1.2.1