29 #include "utils/Utils.h"
36 class ShuffleNetExample :
public Example
39 ShuffleNetExample() : cmd_parser(), common_opts(cmd_parser), common_params(), graph(0,
"ShuffleNet")
42 bool do_setup(
int argc,
char **argv)
override
45 cmd_parser.parse(argc, argv);
46 cmd_parser.validate();
52 if (common_params.help)
54 cmd_parser.print_help(argv[0]);
59 if (!common_opts.data_layout->is_set())
66 "QASYMM8 not supported for this graph");
69 std::cout << common_params << std::endl;
70 std::cout <<
"Model: Shufflenet_1_g4" << std::endl;
73 std::string model_path =
"/cnn_data/shufflenet_model/";
76 std::string data_path = common_params.data_path;
79 if (!data_path.empty())
81 data_path += model_path;
85 const auto operation_layout = common_params.data_layout;
86 const TensorShape tensor_shape =
95 std::unique_ptr<IPreprocessor> preprocessor = std::make_unique<TFPreproccessor>(0);
97 graph << common_params.target << common_params.fast_math_hint
102 PadStrideInfo(2, 2, 1, 1))
109 <<
ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU))
146 config.
use_tuner = common_params.enable_tuner;
149 config.
mlgo_file = common_params.mlgo_file;
151 graph.finalize(common_params.target, config);
156 void do_run()
override
168 void add_residual_block(
const std::string &data_path,
174 PadStrideInfo dwc_info = PadStrideInfo(1, 1, 1, 1);
175 const unsigned int gconv_id = unit * 2;
180 const std::string unit_name =
"unit" + unit_id_name;
189 .
set_name(unit_name +
"/pool_1/AveragePool");
190 dwc_info = PadStrideInfo(2, 2, 1, 1);
196 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
198 .
set_name(unit_name +
"/gconv1_" + gconv_id_name +
"/convolution")
204 .
set_name(unit_name +
"/gconv1_" + gconv_id_name +
"/BatchNorm")
205 <<
ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU))
206 .
set_name(unit_name +
"/gconv1_" + gconv_id_name +
"/Relu")
210 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr), dwc_info)
211 .
set_name(unit_name +
"/gconv3_" + unit_id_name +
"/depthwise")
216 .
set_name(unit_name +
"/gconv3_" + unit_id_name +
"/BatchNorm")
220 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr), PadStrideInfo(1, 1, 0, 0),
num_groups)
221 .
set_name(unit_name +
"/gconv1_" + gconv_id_1_name +
"/convolution")
227 .
set_name(unit_name +
"/gconv1_" + gconv_id_1_name +
"/BatchNorm");
231 graph <<
ConcatLayer(std::move(left_ss), std::move(right_ss)).
set_name(unit_name +
"/Concat");
235 graph <<
EltwiseLayer(std::move(left_ss), std::move(right_ss), EltwiseOperation::Add)
238 graph <<
ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU))
257 int main(
int argc,
char **argv)
259 return arm_compute::utils::run_example<ShuffleNetExample>(argc, argv);