mace icon indicating copy to clipboard operation
mace copied to clipboard

mobilenet-ssd在运行时,cpu可以运行但是gpu运行报错。

Open leeburt opened this issue 6 years ago • 13 comments

System information

运行的官方的docker。

Model deploy file (*.yml)

# The name of library
library_name: MobileNetSSD
target_abis: [armhf]
model_graph_format: file
model_data_format: file
models:
  MobileNetSSD: # model tag, which will be used in model loading and must be specific.
    platform: caffe
    # support local path, http:// and https://
    model_file_path: /home/work/model/caffe/MobileNetSSD_deploy_new.prototxt
    weight_file_path: /home/work/model/caffe/MobileNetSSD_deploy_new.caffemodel
    # sha256_checksum of your model's graph and data files.
    # get the sha256_checksum: sha256sum path/to/your/file
    model_sha256_checksum: 06bfd4984dbc7a89b8ccd3ef715e215a550b4ef88d52b71e3c2a3a82b6dec215
    weight_sha256_checksum: 761c86fbae3d8361dd454f7c740a964f62975ed32f4324b8b85994edec30f6af
    # define your model's interface
    # if there multiple inputs or outputs, write like blow:
    # subgraphs:
    # - input_tensors:
    #     - input0
    #     - input1
    #   input_shapes:
    #     - 1,224,224,3
    #     - 1,224,224,3
    #    output_tensors:
    #      - output0
    #      - output1
    #    output_shapes:
    #      - 1,1001
    #      - 1,1001
    subgraphs:
      - input_tensors:
          - data
        input_shapes:
          - 1,300,300,3
        output_tensors:
          #- mbox_loc
          - mbox_conf_flatten
          #- mbox_priorbox
        output_shapes:
          #- 1,1,1,6768
          - 1,40257,1
          #- 1,1,1,6768
    runtime: cpu+gpu
    winograd: 0

Describe the problem

运行mobilenet-ssd时,在分辨率为300*300时cpu运行不报错,但是gpu报错。同时把分辨率设置为288*288时,cpu和gpu运行都不报错。同时288*288分辨率下,cpu和gpu耗时相差有点大,但同样跑mobilentv1模型cpu和gpu耗时差不多。

### To Reproduce
Steps to reproduce the problem:
```bash
1. cd /path/to/mace
2. python tools/converter.py run --config=../model/caffe/MobileNetSSD_deploy_new.yml --device_yml=/home/work/model/caffe/devices.yml

Error information / logs

root@lee-virtual-machine:/home/work/mace-0.10.0# python tools/converter.py run --config=../model/caffe/MobileNetSSD_deploy_new.yml --device_yml=/home/work/model/caffe/devices.yml
* Build //mace/tools/validation:mace_run_static with ABI armhf
WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server using the command "bazel shutdown".
INFO: Analysed target //mace/tools/validation:mace_run_static (28 packages loaded).
INFO: Found 1 target...
Target //mace/tools/validation:mace_run_static up-to-date:
  bazel-bin/mace/tools/validation/mace_run_static
INFO: Elapsed time: 8.733s, Critical Path: 0.18s
INFO: 0 processes.
INFO: Build completed successfully, 1 total action
Build done!

*****************************************************************************
          Run model MobileNetSSD on linaro-developer3.4.0-eagle8074          
*****************************************************************************

Generate input file:  builds/MobileNetSSD/_tmp/MobileNetSSD/a27875922bf418df62520e7ebd71a97e/linaro-developer3.4.0-eagle8074_MSM8x74AA/armhf/model_input_data
Generate input file done.
* Run 'MobileNetSSD' with round=1, restart_round=1, tuning=False, out_of_range_check=False, omp_num_threads=(-1,), cpu_affinity_policy=(1,), gpu_perf_hint=(3,), gpu_priority_hint=(3,)
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Push builds/MobileNetSSD/_tmp/MobileNetSSD/a27875922bf418df62520e7ebd71a97e/linaro-developer3.4.0-eagle8074_MSM8x74AA/armhf/model_input_data to /tmp/data/mace_run
Push builds/MobileNetSSD/model/MobileNetSSD.data to /tmp/data/mace_run
Push third_party/nnlib/libhexagon_controller.so to /tmp/data/mace_run
Push builds/MobileNetSSD/model/MobileNetSSD.pb to /tmp/data/mace_run/MobileNetSSD.pb
Push builds/MobileNetSSD/_tmp/armhf/mace_run_static to /tmp/data/mace_run
Push /tmp/cmd_file-MobileNetSSD-1547266381.14 to /tmp/data/mace_run/cmd_file-MobileNetSSD-1547266381.14
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
I mace/tools/validation/mace_run.cc:437] model name: MobileNetSSD
I mace/tools/validation/mace_run.cc:438] mace version: unknown-20190109
I mace/tools/validation/mace_run.cc:439] input node: data
I mace/tools/validation/mace_run.cc:440] input shape: 1,300,300,3
I mace/tools/validation/mace_run.cc:441] output node: mbox_conf_flatten
I mace/tools/validation/mace_run.cc:442] output shape: 1,40257,1
I mace/tools/validation/mace_run.cc:443] input_file: /tmp/data/mace_run/model_input
I mace/tools/validation/mace_run.cc:444] output_file: /tmp/data/mace_run/model_out
I mace/tools/validation/mace_run.cc:445] model_data_file: /tmp/data/mace_run/MobileNetSSD.data
I mace/tools/validation/mace_run.cc:446] model_file: /tmp/data/mace_run/MobileNetSSD.pb
I mace/tools/validation/mace_run.cc:447] device: CPU
I mace/tools/validation/mace_run.cc:448] round: 1
I mace/tools/validation/mace_run.cc:449] restart_round: 1
I mace/tools/validation/mace_run.cc:450] gpu_perf_hint: 3
I mace/tools/validation/mace_run.cc:451] gpu_priority_hint: 3
I mace/tools/validation/mace_run.cc:452] omp_num_threads: -1
I mace/tools/validation/mace_run.cc:453] cpu_affinity_policy: 1
I mace/tools/validation/mace_run.cc:476] restart round 0
I mace/libmace/mace.cc:739] Create MaceEngine from model pb
I mace/libmace/mace.cc:390] Creating MaceEngine, MACE version: unknown-20190109
I mace/libmace/mace.cc:501] Loading Model Data
I mace/libmace/mace.cc:422] Initializing MaceEngine
I mace/tools/validation/mace_run.cc:282] Total init latency: 383.051 ms
I mace/tools/validation/mace_run.cc:322] Warm up run
I mace/tools/validation/mace_run.cc:352] 1st warm up run latency: 346.259 ms
I mace/tools/validation/mace_run.cc:359] Run model
I mace/tools/validation/mace_run.cc:401] Average latency: 260.14 ms
I mace/tools/validation/mace_run.cc:424] Write output file /tmp/data/mace_run/model_out_mbox_conf_flatten with size 40257 done.
I mace/libmace/mace.cc:522] Destroying MaceEngine
========================================
            init      warmup     run_avg
========================================
time     383.051     346.259     260.140
Running finished!

* Run 'MobileNetSSD' with round=1, restart_round=1, tuning=False, out_of_range_check=False, omp_num_threads=(-1,), cpu_affinity_policy=(1,), gpu_perf_hint=(3,), gpu_priority_hint=(3,)
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Push builds/MobileNetSSD/_tmp/MobileNetSSD/a27875922bf418df62520e7ebd71a97e/linaro-developer3.4.0-eagle8074_MSM8x74AA/armhf/model_input_data to /tmp/data/mace_run
Push builds/MobileNetSSD/model/MobileNetSSD.data to /tmp/data/mace_run
Push third_party/nnlib/libhexagon_controller.so to /tmp/data/mace_run
Push builds/MobileNetSSD/model/MobileNetSSD.pb to /tmp/data/mace_run/MobileNetSSD.pb
Push builds/MobileNetSSD/_tmp/armhf/mace_run_static to /tmp/data/mace_run
Push /tmp/cmd_file-MobileNetSSD-1547266387.95 to /tmp/data/mace_run/cmd_file-MobileNetSSD-1547266387.95
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
I mace/tools/validation/mace_run.cc:437] model name: MobileNetSSD
I mace/tools/validation/mace_run.cc:438] mace version: unknown-20190109
I mace/tools/validation/mace_run.cc:439] input node: data
I mace/tools/validation/mace_run.cc:440] input shape: 1,300,300,3
I mace/tools/validation/mace_run.cc:441] output node: mbox_conf_flatten
I mace/tools/validation/mace_run.cc:442] output shape: 1,40257,1
I mace/tools/validation/mace_run.cc:443] input_file: /tmp/data/mace_run/model_input
I mace/tools/validation/mace_run.cc:444] output_file: /tmp/data/mace_run/model_out
I mace/tools/validation/mace_run.cc:445] model_data_file: /tmp/data/mace_run/MobileNetSSD.data
I mace/tools/validation/mace_run.cc:446] model_file: /tmp/data/mace_run/MobileNetSSD.pb
I mace/tools/validation/mace_run.cc:447] device: GPU
I mace/tools/validation/mace_run.cc:448] round: 1
I mace/tools/validation/mace_run.cc:449] restart_round: 1
I mace/tools/validation/mace_run.cc:450] gpu_perf_hint: 3
I mace/tools/validation/mace_run.cc:451] gpu_priority_hint: 3
I mace/tools/validation/mace_run.cc:452] omp_num_threads: -1
I mace/tools/validation/mace_run.cc:453] cpu_affinity_policy: 1
I mace/tools/validation/mace_run.cc:476] restart round 0
W ./mace/utils/tuner.h:142] Read OpenCL tuned parameters file failed.
I mace/libmace/mace.cc:739] Create MaceEngine from model pb
I mace/libmace/mace.cc:390] Creating MaceEngine, MACE version: unknown-20190109
W/Adreno-CB (468): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224654280)

W/Adreno-CB (468): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224654176)

I mace/libmace/mace.cc:501] Loading Model Data
I mace/libmace/mace.cc:422] Initializing MaceEngine
I mace/tools/validation/mace_run.cc:282] Total init latency: 4015.23 ms
I mace/tools/validation/mace_run.cc:322] Warm up run
F mace/ops/concat.cc:92] Check failed: input->dim(j) == input0->dim(j) Dimensions of inputs should equal except axis.
Aborted
Traceback (most recent call last):
  File "tools/converter.py", line 1242, in <module>
    flags.func(flags)
  File "tools/converter.py", line 961, in run_mace
    device.run_specify_abi(flags, configs, target_abi)
  File "/home/work/mace-0.10.0/tools/device.py", line 563, in run_specify_abi
    output_dir=flags.output_dir,
  File "/home/work/mace-0.10.0/tools/device.py", line 332, in tuning_run
    _err_to_out=True)
  File "/home/work/mace-0.10.0/tools/device.py", line 72, in exec_command
    command, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/sh.py", line 1427, in __call__
    return RunningCommand(cmd, call_args, stdin, stdout, stderr)
  File "/usr/local/lib/python2.7/dist-packages/sh.py", line 774, in __init__
    self.wait()
  File "/usr/local/lib/python2.7/dist-packages/sh.py", line 792, in wait
    self.handle_command_exit_code(exit_code)
  File "/usr/local/lib/python2.7/dist-packages/sh.py", line 815, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_134: 

leeburt avatar Jan 12 '19 04:01 leeburt

我自己写了一个工程来读取图像,进行预处理后进行识别,利用提供的detection_output.cc处理最后一层,但是识别不到任何东西?

{
// config runtime
#ifdef USEGPU
	//mace::SetOpenMPThreadPolicy(-1,static_cast<CPUAffinityPolicy >(1));
	mace::DeviceType device_type = mace::GPU;//CPU = 0, GPU = 2, HEXAGON = 3
	mace::MaceEngineConfig myEngConfig(device_type);

	if (device_type == mace::DeviceType::GPU) 
	{
		 myEngConfig.SetGPUHints(
			static_cast<mace::GPUPerfHint>(3),
			static_cast<mace::GPUPriorityHint>(3));
	}
	
	if (device_type == mace::DeviceType::GPU) 
	{
		std::vector<std::string> opencl_binary_paths = {"./opencl_binary"};
		//mace::SetOpenCLBinaryPaths(opencl_binary_paths);
	}
#else
	
	mace::DeviceType device_type = mace::CPU;//CPU = 0, GPU = 2, HEXAGON = 3
	mace::MaceEngineConfig myEngConfig(device_type);\
  myEngConfig.SetCPUThreadPolicy(4,static_cast<mace::CPUAffinityPolicy >(1));
#endif

	//1.read pb file
	std::vector<unsigned char> model_pb_data;
    if (!ReadBinaryFile(&model_pb_data, "MobileNetSSD.pb")) 
    {
		printf("=====>>>>Failed to read pb file!\n");
		return 0;
    }
	//2.create MaceEngine
	std::shared_ptr<mace::MaceEngine> engine;
    mace::MaceStatus create_engine_status;
	std::vector<std::string> input_nodes;
	input_nodes.push_back(std::string("data"));
	std::vector<std::string> output_nodes;
	output_nodes.push_back(std::string("mbox_loc"));
	output_nodes.push_back(std::string("mbox_conf_flatten"));
	output_nodes.push_back(std::string("mbox_priorbox"));
	std::cout << "=====>>>>>start to CreateMaceEngineFromProto" << "\n";
    create_engine_status = CreateMaceEngineFromProto(model_pb_data,std::string("MobileNetSSD.data"),input_nodes
	,output_nodes, myEngConfig,&engine);
	if (create_engine_status != mace::MaceStatus::MACE_SUCCESS) 
	{
    	std::cout << "Create engine error, please check the arguments";
		return 0;
  	}
	std::cout << "=====>>>>>end to CreateMaceEngineFromProto" << "\n";
	//3.load input data
	std::vector<int64_t> input_shapes = {1,288,288,3};
  printf("input_shapes[0][1][2][3] is (%lld,%lld,%lld,%lld)\n",input_shapes[0],input_shapes[1],input_shapes[2],input_shapes[3]);
	int64_t input_size =std::accumulate(input_shapes.begin(), input_shapes.end(), 1,std::multiplies<int64_t>());// 累加求和
  auto buffer_in = std::shared_ptr<float>(new float[input_size],std::default_delete<float[]>());
	std::map<std::string, mace::MaceTensor> inputs;
	inputs["data"] = mace::MaceTensor(input_shapes,buffer_in);

  printf("inputs[].shape()[0][1][2][3] is (%lld,%lld,%lld,%lld)\n",inputs["data"].shape()[0],inputs["data"].shape()[1],inputs["data"].shape()[2],inputs["data"].shape()[3]);
  std::string  imgName ="004545.jpg"; 
  std::vector<float> inputVar={0.007843f};
  std::vector<double> inputMeans={127.5,127.5,127.5};;
  std::vector<dataFormat> dataFormats={NHWC};
  printf("dataFormats is %d,NHWC is %d\n",dataFormats[0],NHWC);
  imagePreProcess(imgName,
                  &inputs,
                  dataFormats,
                  inputVar,
                  inputMeans);
	//4.output buffer
	std::vector<std::vector<int64_t>> output_shapes;
	 //output_shapes.push_back({1,7668,0});
	 //output_shapes.push_back({1,40257,1});
	 //output_shapes.push_back({1,1,1,7668});
	 output_shapes.push_back({1,1,1,6768});
	 output_shapes.push_back({1,35532,1});
	 output_shapes.push_back({1,2,6768});
	int64_t output_size_mbox_loc = std::accumulate(output_shapes[0].begin(), output_shapes[0].end(), 1,std::multiplies<int64_t>());
	int64_t output_size_mbox_conf_flatten = std::accumulate(output_shapes[1].begin(), output_shapes[1].end(), 1,std::multiplies<int64_t>());
	int64_t output_size_mbox_priorbox = std::accumulate(output_shapes[2].begin(), output_shapes[2].end(), 1,std::multiplies<int64_t>());
  auto buffer_out_mbox_loc = std::shared_ptr<float>(new float[output_size_mbox_loc],std::default_delete<float[]>());
	auto buffer_out_mbox_conf_flatten = std::shared_ptr<float>(new float[output_size_mbox_conf_flatten],std::default_delete<float[]>());
	auto buffer_out_mbox_priorbox = std::shared_ptr<float>(new float[output_size_mbox_priorbox],std::default_delete<float[]>());
	std::map<std::string, mace::MaceTensor> outputs;
  outputs["mbox_loc"] = mace::MaceTensor(output_shapes[0], buffer_out_mbox_loc);
	outputs["mbox_conf_flatten"] = mace::MaceTensor(output_shapes[1], buffer_out_mbox_conf_flatten);
	outputs["mbox_priorbox"] = mace::MaceTensor(output_shapes[2], buffer_out_mbox_priorbox);
	//run Model
	struct timeval tm_before,tm_after;
	gettimeofday(&tm_before,NULL);
    engine->Run(inputs, &outputs);
	gettimeofday(&tm_after,NULL);
	printf("=====>>>>>Warm up Run Model spend time:%d ms\n",(tm_after.tv_sec -tm_before.tv_sec)*1000 + (tm_after.tv_usec - tm_before.tv_usec)/1000);
	
	for (int i = 0; i < 100; ++i) 
	{
		gettimeofday(&tm_before,NULL);
		engine->Run(inputs, &outputs);
		gettimeofday(&tm_after,NULL);
		printf("=====>>>>>Normal Run Model spend time:%d ms\n",(tm_after.tv_sec -tm_before.tv_sec)*1000 + (tm_after.tv_usec - tm_before.tv_usec)/1000);

		
		const int num_prior = 1692;
		const int num_classes =21;
		const float nms_threshold =0.45;
		const int top_k =100;
		const int keep_top_k =100;
		const float confidence_threshold =0.25;
		std::vector<mace::BBox> bbox_rects;
		//get detection result
    int detectionNum=0;
    printf("mbox_conf_flatten is %p,num_classes is %d \n",outputs["mbox_conf_flatten"].data().get(),num_classes);
		detectionNum=mace::DetectionOutput(outputs["mbox_loc"].data().get(),
                    outputs["mbox_conf_flatten"].data().get(),
                    outputs["mbox_priorbox"].data().get(),
                    num_prior,
                    num_classes,
                    nms_threshold,
                    top_k,
                    keep_top_k,
                    confidence_threshold,
                    &bbox_rects);
    if(detectionNum<=0)
    {
      printf("------------------>detect nothing!\n");
    }
	}
}

leeburt avatar Jan 17 '19 05:01 leeburt

该bug已经修复,请使用最新master试一下?

lydoc avatar Jan 22 '19 03:01 lydoc

你好,目前还是gpu报错,报错为:

*****************************************************************************
          Run model MobileNetSSD on linaro-developer3.4.0-eagle8074          
*****************************************************************************

Generate input file:  builds/MobileNetSSD/_tmp/MobileNetSSD/a27875922bf418df62520e7ebd71a97e/linaro-developer3.4.0-eagle8074_MSM8x74AA/armhf/model_input_data
Generate input file done.
* Run 'MobileNetSSD' with round=1, restart_round=1, tuning=False, out_of_range_check=False, omp_num_threads=(-1,), cpu_affinity_policy=(1,), gpu_perf_hint=(3,), gpu_priority_hint=(3,)
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Push builds/MobileNetSSD/_tmp/MobileNetSSD/a27875922bf418df62520e7ebd71a97e/linaro-developer3.4.0-eagle8074_MSM8x74AA/armhf/model_input_data to /tmp/data/mace_run
Push builds/MobileNetSSD/model/MobileNetSSD.data to /tmp/data/mace_run
Push third_party/nnlib/libhexagon_controller.so to /tmp/data/mace_run
Push builds/MobileNetSSD/model/MobileNetSSD.pb to /tmp/data/mace_run/MobileNetSSD.pb
Push builds/MobileNetSSD/_tmp/armhf/mace_run_static to /tmp/data/mace_run
Push /tmp/cmd_file-MobileNetSSD-1548148147.05 to /tmp/data/mace_run/cmd_file-MobileNetSSD-1548148147.05
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
I mace/tools/validation/mace_run.cc:450] model name: MobileNetSSD
I mace/tools/validation/mace_run.cc:451] mace version: v0.10.0-30-g858dda5-20190122
I mace/tools/validation/mace_run.cc:452] input node: data
I mace/tools/validation/mace_run.cc:453] input shape: 1,300,300,3
I mace/tools/validation/mace_run.cc:454] output node: mbox_loc,mbox_conf_flatten,mbox_priorbox
I mace/tools/validation/mace_run.cc:455] output shape: 1,1,1,7668:1,40257,1:1,1,1,7668
I mace/tools/validation/mace_run.cc:456] input_file: /tmp/data/mace_run/model_input
I mace/tools/validation/mace_run.cc:457] output_file: /tmp/data/mace_run/model_out
I mace/tools/validation/mace_run.cc:458] model_data_file: /tmp/data/mace_run/MobileNetSSD.data
I mace/tools/validation/mace_run.cc:459] model_file: /tmp/data/mace_run/MobileNetSSD.pb
I mace/tools/validation/mace_run.cc:460] device: CPU
I mace/tools/validation/mace_run.cc:461] round: 1
I mace/tools/validation/mace_run.cc:462] restart_round: 1
I mace/tools/validation/mace_run.cc:463] gpu_perf_hint: 3
I mace/tools/validation/mace_run.cc:464] gpu_priority_hint: 3
I mace/tools/validation/mace_run.cc:465] omp_num_threads: -1
I mace/tools/validation/mace_run.cc:466] cpu_affinity_policy: 1
I mace/tools/validation/mace_run.cc:489] restart round 0
I mace/libmace/mace.cc:785] Create MaceEngine from model graph proto and weights data
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
I mace/libmace/mace.cc:464] Initializing MaceEngine
I mace/tools/validation/mace_run.cc:291] Total init latency: 197.688 ms
I mace/tools/validation/mace_run.cc:331] Warm up run
F mace/libmace/mace.cc:640] Check failed: shape == output->second.shape() Output shape mismatch: [1, 7668, 141733920768] != [1, 1, 1, 7668]
Aborted
Traceback (most recent call last):
  File "tools/converter.py", line 1268, in <module>
    flags.func(flags)
  File "tools/converter.py", line 977, in run_mace
    device.run_specify_abi(flags, configs, target_abi)
  File "/home/work/mace/tools/device.py", line 614, in run_specify_abi
    YAMLKeyword.model_file_path]
  File "/home/work/mace/tools/device.py", line 334, in tuning_run
    _err_to_out=True)
  File "/home/work/mace/tools/device.py", line 72, in exec_command
    command, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/sh.py", line 1427, in __call__
    return RunningCommand(cmd, call_args, stdin, stdout, stderr)
  File "/usr/local/lib/python2.7/dist-packages/sh.py", line 774, in __init__
    self.wait()
  File "/usr/local/lib/python2.7/dist-packages/sh.py", line 792, in wait
    self.handle_command_exit_code(exit_code)
  File "/usr/local/lib/python2.7/dist-packages/sh.py", line 815, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_134: 

同时,我用自己的工程也跑了一下,cpu没有问题,gpu报错如下:

=====>>>>>start to CreateMaceEngineFromProto
I mace/libmace/mace.cc:809] Create MaceEngine from model pb
W mace/libmace/mace.cc:810] Function deprecated, please change to the new API
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
W/Adreno-CB (7569): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (3364968)

W/Adreno-CB (7569): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (3370448)

I mace/libmace/mace.cc:543] Loading Model Data
I mace/libmace/mace.cc:464] Initializing MaceEngine
W mace/core/runtime/opencl/opencl_allocator.cc:92] Allocate OpenCL image with shape: [4332, 1] failed because of CL_INVALID_IMAGE_SIZE
I mace/core/workspace.cc:251] Mace runtime failure: mace/core/workspace.cc:251. Out of resources: 
I mace/libmace/mace.cc:526] Mace runtime failure: mace/libmace/mace.cc:526. Out of resources: Out of resources: 
I mace/libmace/mace.cc:553] Mace runtime failure: mace/libmace/mace.cc:553. Out of resources: Out of resources: Out of resources: 
I mace/libmace/mace.cc:564] Destroying MaceEngine

leeburt avatar Jan 22 '19 09:01 leeburt

是否可以提供一下模型文件和yml文件?可以参考这个:

library_name: ssd-mobilenet-v1
target_abis: [armeabi-v7a, arm64-v8a]
model_graph_format: file
model_data_format: file
models:
  ssd_mobilenet_v1:
    platform: caffe
    model_file_path: https://cnbj1.fds.api.xiaomi.com/mace/miai-models/ssd-mobilenet-v1/MobileNetSSD_deploy_new.prototxt
    weight_file_path: http://cnbj1.fds.api.xiaomi.com/mace/miai-models/ssd-mobilenet-v1/MobileNetSSD_deploy_new.caffemodel
    model_sha256_checksum: ed517e22400248542814f258c125b0921483170cd7b482a63f1cdae5e36fa636
    weight_sha256_checksum: 761c86fbae3d8361dd454f7c740a964f62975ed32f4324b8b85994edec30f6af
    subgraphs:
      - input_tensors:
          - data
        input_shapes:
          - 1,300,300,3
        output_tensors:
          - mbox_loc
          - mbox_conf_flatten
          - mbox_priorbox
        output_shapes:
          - 1,1,1,7668
          - 1,40257,1
          - 1,2,7668
        validation_inputs_data:
          - https://cnbj1.fds.api.xiaomi.com/mace/inputs/cat300.npy
    runtime: cpu+gpu
    limit_opencl_kernel_time: 0
    nnlib_graph_mode: 0
    obfuscate: 0
    winograd: 0
    dockerfile_path: https://cnbj1.fds.api.xiaomi.com/mace/miai-models/ssd-mobilenet-v1/Dockerfile
    dockerfile_sha256_checksum: 3cdd6c526937cf92f3aad0e6b66cbbe62f3a71f7883af1020b1f3f9267c80f9e

lydoc avatar Jan 22 '19 09:01 lydoc

是否可以提供一下模型文件和yml文件?可以参考这个:

library_name: ssd-mobilenet-v1
target_abis: [armeabi-v7a, arm64-v8a]
model_graph_format: file
model_data_format: file
models:
  ssd_mobilenet_v1:
    platform: caffe
    model_file_path: https://cnbj1.fds.api.xiaomi.com/mace/miai-models/ssd-mobilenet-v1/MobileNetSSD_deploy_new.prototxt
    weight_file_path: http://cnbj1.fds.api.xiaomi.com/mace/miai-models/ssd-mobilenet-v1/MobileNetSSD_deploy_new.caffemodel
    model_sha256_checksum: ed517e22400248542814f258c125b0921483170cd7b482a63f1cdae5e36fa636
    weight_sha256_checksum: 761c86fbae3d8361dd454f7c740a964f62975ed32f4324b8b85994edec30f6af
    subgraphs:
      - input_tensors:
          - data
        input_shapes:
          - 1,300,300,3
        output_tensors:
          - mbox_loc
          - mbox_conf_flatten
          - mbox_priorbox
        output_shapes:
          - 1,1,1,7668
          - 1,40257,1
          - 1,2,7668
        validation_inputs_data:
          - https://cnbj1.fds.api.xiaomi.com/mace/inputs/cat300.npy
    runtime: cpu+gpu
    limit_opencl_kernel_time: 0
    nnlib_graph_mode: 0
    obfuscate: 0
    winograd: 0
    dockerfile_path: https://cnbj1.fds.api.xiaomi.com/mace/miai-models/ssd-mobilenet-v1/Dockerfile
    dockerfile_sha256_checksum: 3cdd6c526937cf92f3aad0e6b66cbbe62f3a71f7883af1020b1f3f9267c80f9e

模型文件就是你用,以下是yml:

# The name of library
library_name: MobileNetSSD
target_abis: [armhf]
model_graph_format: file
model_data_format: file
models:
  MobileNetSSD: # model tag, which will be used in model loading and must be specific.
    platform: caffe
    # support local path, http:// and https://
    model_file_path: /home/work/model/caffe/MobileNetSSD_deploy_new.prototxt
    weight_file_path: /home/work/model/caffe/MobileNetSSD_deploy_new.caffemodel
    # sha256_checksum of your model's graph and data files.
    # get the sha256_checksum: sha256sum path/to/your/file
    model_sha256_checksum: 06bfd4984dbc7a89b8ccd3ef715e215a550b4ef88d52b71e3c2a3a82b6dec215
    weight_sha256_checksum: 761c86fbae3d8361dd454f7c740a964f62975ed32f4324b8b85994edec30f6af
    # define your model's interface
    # if there multiple inputs or outputs, write like blow:
    # subgraphs:
    # - input_tensors:
    #     - input0
    #     - input1
    #   input_shapes:
    #     - 1,224,224,3
    #     - 1,224,224,3
    #    output_tensors:
    #      - output0
    #      - output1
    #    output_shapes:
    #      - 1,1001
    #      - 1,1001
    subgraphs:
      - input_tensors:
          - data
        input_shapes:
          - 1,300,300,3
        output_tensors:
          - mbox_loc
          - mbox_conf_flatten
          - mbox_priorbox
        output_shapes:
          - 1,1,1,7668
          - 1,40257,1
          - 1,1,1,7668
    runtime: cpu+gpu
    winograd: 0

devices.yml为:

devices:  
  linaro-developer:
    target_abis: [armhf]
    target_socs: MSM8x74AA
    models: linaro-developer 3.4.0-eagle8074
    address: 192.168.1.1
    username: root

leeburt avatar Jan 22 '19 11:01 leeburt

如果模型一致的话,使用我提供的yml,只修改abi参数正常吗?你的yml中 mbox_priorbox 的output shape有问题。

lydoc avatar Jan 22 '19 11:01 lydoc

如果模型一致的话,使用我提供的yml,只修改abi参数正常吗?你的yml中 mbox_priorbox 的output shape有问题。

我将我的改过来了,同时跑你的yml和我的yml文件,结果一样。cpu正常,gpu一直在循环打印找不到/usr/lib/libq3dtools.so。我将新生成的模型文件放到我自己的工程中依旧是Out of resources: Out of resources。同时288*288没有问题。

root@lee-virtual-machine:/home/work/mace# python tools/converter.py run --config=../model/caffe/ssd_mobilenet_v1.yml --device_yml=/home/work/model/caffe/devices.yml
* Build //mace/tools/validation:mace_run_static with ABI armhf
WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server using the command "bazel shutdown".
INFO: Analysed target //mace/tools/validation:mace_run_static (28 packages loaded).
INFO: Found 1 target...
Target //mace/tools/validation:mace_run_static up-to-date:
  bazel-bin/mace/tools/validation/mace_run_static
INFO: Elapsed time: 84.588s, Critical Path: 1.87s
INFO: 0 processes.
INFO: Build completed successfully, 1 total action
Build done!

*********************************************************************************
          Run model ssd_mobilenet_v1 on linaro-developer3.4.0-eagle8074          
*********************************************************************************

Generate input file:  builds/ssd-mobilenet-v1/_tmp/ssd_mobilenet_v1/f54c48d7f3efd2557cf6357f96c7916c/linaro-developer3.4.0-eagle8074_MSM8x74AA/armhf/model_input_data
Generate input file done.
* Run 'ssd_mobilenet_v1' with round=1, restart_round=1, tuning=False, out_of_range_check=False, omp_num_threads=(-1,), cpu_affinity_policy=(1,), gpu_perf_hint=(3,), gpu_priority_hint=(3,)
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Push builds/ssd-mobilenet-v1/_tmp/ssd_mobilenet_v1/f54c48d7f3efd2557cf6357f96c7916c/linaro-developer3.4.0-eagle8074_MSM8x74AA/armhf/model_input_data to /tmp/data/mace_run
Push builds/ssd-mobilenet-v1/model/ssd_mobilenet_v1.data to /tmp/data/mace_run
Push third_party/nnlib/libhexagon_controller.so to /tmp/data/mace_run
Push builds/ssd-mobilenet-v1/model/ssd_mobilenet_v1.pb to /tmp/data/mace_run/ssd_mobilenet_v1.pb
Push builds/ssd-mobilenet-v1/_tmp/armhf/mace_run_static to /tmp/data/mace_run
Push /tmp/cmd_file-ssd_mobilenet_v1-1548206235.02 to /tmp/data/mace_run/cmd_file-ssd_mobilenet_v1-1548206235.02
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
I mace/tools/validation/mace_run.cc:450] model name: ssd_mobilenet_v1
I mace/tools/validation/mace_run.cc:451] mace version: v0.10.0-30-g858dda5-20190122
I mace/tools/validation/mace_run.cc:452] input node: data
I mace/tools/validation/mace_run.cc:453] input shape: 1,300,300,3
I mace/tools/validation/mace_run.cc:454] output node: mbox_loc,mbox_conf_flatten,mbox_priorbox
I mace/tools/validation/mace_run.cc:455] output shape: 1,1,1,7668:1,40257,1:1,2,7668
I mace/tools/validation/mace_run.cc:456] input_file: /tmp/data/mace_run/model_input
I mace/tools/validation/mace_run.cc:457] output_file: /tmp/data/mace_run/model_out
I mace/tools/validation/mace_run.cc:458] model_data_file: /tmp/data/mace_run/ssd_mobilenet_v1.data
I mace/tools/validation/mace_run.cc:459] model_file: /tmp/data/mace_run/ssd_mobilenet_v1.pb
I mace/tools/validation/mace_run.cc:460] device: CPU
I mace/tools/validation/mace_run.cc:461] round: 1
I mace/tools/validation/mace_run.cc:462] restart_round: 1
I mace/tools/validation/mace_run.cc:463] gpu_perf_hint: 3
I mace/tools/validation/mace_run.cc:464] gpu_priority_hint: 3
I mace/tools/validation/mace_run.cc:465] omp_num_threads: -1
I mace/tools/validation/mace_run.cc:466] cpu_affinity_policy: 1
I mace/tools/validation/mace_run.cc:489] restart round 0
I mace/libmace/mace.cc:785] Create MaceEngine from model graph proto and weights data
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
I mace/libmace/mace.cc:464] Initializing MaceEngine
I mace/tools/validation/mace_run.cc:291] Total init latency: 228.358 ms
I mace/tools/validation/mace_run.cc:331] Warm up run
I mace/tools/validation/mace_run.cc:363] 1st warm up run latency: 360.096 ms
I mace/tools/validation/mace_run.cc:370] Run model
I mace/tools/validation/mace_run.cc:414] Average latency: 323.679 ms
I mace/tools/validation/mace_run.cc:437] Write output file /tmp/data/mace_run/model_out_mbox_loc with size 7668 done.
I mace/tools/validation/mace_run.cc:437] Write output file /tmp/data/mace_run/model_out_mbox_conf_flatten with size 40257 done.
I mace/tools/validation/mace_run.cc:437] Write output file /tmp/data/mace_run/model_out_mbox_priorbox with size 15336 done.
I mace/libmace/mace.cc:564] Destroying MaceEngine
========================================
            init      warmup     run_avg
========================================
time     228.358     360.096     323.679
Running finished!

* Run 'ssd_mobilenet_v1' with round=1, restart_round=1, tuning=False, out_of_range_check=False, omp_num_threads=(-1,), cpu_affinity_policy=(1,), gpu_perf_hint=(3,), gpu_priority_hint=(3,)
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Push builds/ssd-mobilenet-v1/_tmp/ssd_mobilenet_v1/f54c48d7f3efd2557cf6357f96c7916c/linaro-developer3.4.0-eagle8074_MSM8x74AA/armhf/model_input_data to /tmp/data/mace_run
Push builds/ssd-mobilenet-v1/model/ssd_mobilenet_v1.data to /tmp/data/mace_run
Push third_party/nnlib/libhexagon_controller.so to /tmp/data/mace_run
Push builds/ssd-mobilenet-v1/model/ssd_mobilenet_v1.pb to /tmp/data/mace_run/ssd_mobilenet_v1.pb
Push builds/ssd-mobilenet-v1/_tmp/armhf/mace_run_static to /tmp/data/mace_run
Push /tmp/cmd_file-ssd_mobilenet_v1-1548206242.89 to /tmp/data/mace_run/cmd_file-ssd_mobilenet_v1-1548206242.89
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
I mace/tools/validation/mace_run.cc:450] model name: ssd_mobilenet_v1
I mace/tools/validation/mace_run.cc:451] mace version: v0.10.0-30-g858dda5-20190122
I mace/tools/validation/mace_run.cc:452] input node: data
I mace/tools/validation/mace_run.cc:453] input shape: 1,300,300,3
I mace/tools/validation/mace_run.cc:454] output node: mbox_loc,mbox_conf_flatten,mbox_priorbox
I mace/tools/validation/mace_run.cc:455] output shape: 1,1,1,7668:1,40257,1:1,2,7668
I mace/tools/validation/mace_run.cc:456] input_file: /tmp/data/mace_run/model_input
I mace/tools/validation/mace_run.cc:457] output_file: /tmp/data/mace_run/model_out
I mace/tools/validation/mace_run.cc:458] model_data_file: /tmp/data/mace_run/ssd_mobilenet_v1.data
I mace/tools/validation/mace_run.cc:459] model_file: /tmp/data/mace_run/ssd_mobilenet_v1.pb
I mace/tools/validation/mace_run.cc:460] device: GPU
I mace/tools/validation/mace_run.cc:461] round: 1
I mace/tools/validation/mace_run.cc:462] restart_round: 1
I mace/tools/validation/mace_run.cc:463] gpu_perf_hint: 3
I mace/tools/validation/mace_run.cc:464] gpu_priority_hint: 3
I mace/tools/validation/mace_run.cc:465] omp_num_threads: -1
I mace/tools/validation/mace_run.cc:466] cpu_affinity_policy: 1
I mace/tools/validation/mace_run.cc:489] restart round 0
I mace/libmace/mace.cc:785] Create MaceEngine from model graph proto and weights data
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224526968)

W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224526864)

I mace/libmace/mace.cc:464] Initializing MaceEngine
W mace/core/runtime/opencl/opencl_allocator.cc:92] Allocate OpenCL image with shape: [4332, 1] failed because of CL_INVALID_IMAGE_SIZE
I mace/core/workspace.cc:251] Mace runtime failure: mace/core/workspace.cc:251. Out of resources:
I mace/libmace/mace.cc:526] Mace runtime failure: mace/libmace/mace.cc:526. Out of resources: Out of resources:
E mace/tools/validation/mace_run.cc:287] Create engine runtime error, retry ... errcode: Out of resources: Out of resources: Out of resources: Out of resources: Out of resources:
I mace/libmace/mace.cc:785] Create MaceEngine from model graph proto and weights data
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1217227768)

W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1217227664)

I mace/libmace/mace.cc:564] Destroying MaceEngine
I mace/libmace/mace.cc:464] Initializing MaceEngine
W mace/core/runtime/opencl/opencl_allocator.cc:92] Allocate OpenCL image with shape: [4332, 1] failed because of CL_INVALID_IMAGE_SIZE
I mace/core/workspace.cc:251] Mace runtime failure: mace/core/workspace.cc:251. Out of resources:
I mace/libmace/mace.cc:526] Mace runtime failure: mace/libmace/mace.cc:526. Out of resources: Out of resources:
E mace/tools/validation/mace_run.cc:287] Create engine runtime error, retry ... errcode: Out of resources: Out of resources: Out of resources: Out of resources: Out of resources:
I mace/libmace/mace.cc:785] Create MaceEngine from model graph proto and weights data
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1223588968)

W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1223588864)

I mace/libmace/mace.cc:564] Destroying MaceEngine
I mace/libmace/mace.cc:464] Initializing MaceEngine
W mace/core/runtime/opencl/opencl_allocator.cc:92] Allocate OpenCL image with shape: [4332, 1] failed because of CL_INVALID_IMAGE_SIZE
I mace/core/workspace.cc:251] Mace runtime failure: mace/core/workspace.cc:251. Out of resources:
I mace/libmace/mace.cc:526] Mace runtime failure: mace/libmace/mace.cc:526. Out of resources: Out of resources:
E mace/tools/validation/mace_run.cc:287] Create engine runtime error, retry ... errcode: Out of resources: Out of resources: Out of resources: Out of resources: Out of resources:
I mace/libmace/mace.cc:785] Create MaceEngine from model graph proto and weights data
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224614584)

W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224614480)

I mace/libmace/mace.cc:564] Destroying MaceEngine
I mace/libmace/mace.cc:464] Initializing MaceEngine
W mace/core/runtime/opencl/opencl_allocator.cc:92] Allocate OpenCL image with shape: [4332, 1] failed because of CL_INVALID_IMAGE_SIZE
I mace/core/workspace.cc:251] Mace runtime failure: mace/core/workspace.cc:251. Out of resources:
I mace/libmace/mace.cc:526] Mace runtime failure: mace/libmace/mace.cc:526. Out of resources: Out of resources:
E mace/tools/validation/mace_run.cc:287] Create engine runtime error, retry ... errcode: Out of resources: Out of resources: Out of resources: Out of resources: Out of resources:
I mace/libmace/mace.cc:785] Create MaceEngine from model graph proto and weights data
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224279736)

W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224279632)

I mace/libmace/mace.cc:564] Destroying MaceEngine
I mace/libmace/mace.cc:464] Initializing MaceEngine
W mace/core/runtime/opencl/opencl_allocator.cc:92] Allocate OpenCL image with shape: [4332, 1] failed because of CL_INVALID_IMAGE_SIZE
I mace/core/workspace.cc:251] Mace runtime failure: mace/core/workspace.cc:251. Out of resources:
I mace/libmace/mace.cc:526] Mace runtime failure: mace/libmace/mace.cc:526. Out of resources: Out of resources:
E mace/tools/validation/mace_run.cc:287] Create engine runtime error, retry ... errcode: Out of resources: Out of resources: Out of resources: Out of resources: Out of resources:
I mace/libmace/mace.cc:785] Create MaceEngine from model graph proto and weights data
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224731184)

W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1224731080)

I mace/libmace/mace.cc:564] Destroying MaceEngine
I mace/libmace/mace.cc:464] Initializing MaceEngine
W mace/core/runtime/opencl/opencl_allocator.cc:92] Allocate OpenCL image with shape: [4332, 1] failed because of CL_INVALID_IMAGE_SIZE
I mace/core/workspace.cc:251] Mace runtime failure: mace/core/workspace.cc:251. Out of resources:
I mace/libmace/mace.cc:526] Mace runtime failure: mace/libmace/mace.cc:526. Out of resources: Out of resources:
E mace/tools/validation/mace_run.cc:287] Create engine runtime error, retry ... errcode: Out of resources: Out of resources: Out of resources: Out of resources: Out of resources:
I mace/libmace/mace.cc:785] Create MaceEngine from model graph proto and weights data
I mace/libmace/mace.cc:432] Creating MaceEngine, MACE version: v0.10.0-30-g858dda5-20190122
W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1217457840)

W/Adreno-CB (934): <isCLProfilingEnabled:2130>: PROFILER: (cl) Unable to load q3dtools library /usr/lib/libq3dtools.so (-1217457736)

leeburt avatar Jan 23 '19 01:01 leeburt

@leeburt 可以安装一个OpenCL-Z的app,查看一下IMAGE2D_MAX_WIDTH的参数,这里报CL_INVALID_IMAGE_SIZE,看着像是opencl的image width or height超出设备限制了

yejw5 avatar Jan 23 '19 07:01 yejw5

我自己写了一个工程来读取图像,进行预处理后进行识别,利用提供的detection_output.cc处理最后一层,但是识别不到任何东西?

{
// config runtime
#ifdef USEGPU
	//mace::SetOpenMPThreadPolicy(-1,static_cast<CPUAffinityPolicy >(1));
	mace::DeviceType device_type = mace::GPU;//CPU = 0, GPU = 2, HEXAGON = 3
	mace::MaceEngineConfig myEngConfig(device_type);

	if (device_type == mace::DeviceType::GPU) 
	{
		 myEngConfig.SetGPUHints(
			static_cast<mace::GPUPerfHint>(3),
			static_cast<mace::GPUPriorityHint>(3));
	}
	
	if (device_type == mace::DeviceType::GPU) 
	{
		std::vector<std::string> opencl_binary_paths = {"./opencl_binary"};
		//mace::SetOpenCLBinaryPaths(opencl_binary_paths);
	}
#else
	
	mace::DeviceType device_type = mace::CPU;//CPU = 0, GPU = 2, HEXAGON = 3
	mace::MaceEngineConfig myEngConfig(device_type);\
  myEngConfig.SetCPUThreadPolicy(4,static_cast<mace::CPUAffinityPolicy >(1));
#endif

	//1.read pb file
	std::vector<unsigned char> model_pb_data;
    if (!ReadBinaryFile(&model_pb_data, "MobileNetSSD.pb")) 
    {
		printf("=====>>>>Failed to read pb file!\n");
		return 0;
    }
	//2.create MaceEngine
	std::shared_ptr<mace::MaceEngine> engine;
    mace::MaceStatus create_engine_status;
	std::vector<std::string> input_nodes;
	input_nodes.push_back(std::string("data"));
	std::vector<std::string> output_nodes;
	output_nodes.push_back(std::string("mbox_loc"));
	output_nodes.push_back(std::string("mbox_conf_flatten"));
	output_nodes.push_back(std::string("mbox_priorbox"));
	std::cout << "=====>>>>>start to CreateMaceEngineFromProto" << "\n";
    create_engine_status = CreateMaceEngineFromProto(model_pb_data,std::string("MobileNetSSD.data"),input_nodes
	,output_nodes, myEngConfig,&engine);
	if (create_engine_status != mace::MaceStatus::MACE_SUCCESS) 
	{
    	std::cout << "Create engine error, please check the arguments";
		return 0;
  	}
	std::cout << "=====>>>>>end to CreateMaceEngineFromProto" << "\n";
	//3.load input data
	std::vector<int64_t> input_shapes = {1,288,288,3};
  printf("input_shapes[0][1][2][3] is (%lld,%lld,%lld,%lld)\n",input_shapes[0],input_shapes[1],input_shapes[2],input_shapes[3]);
	int64_t input_size =std::accumulate(input_shapes.begin(), input_shapes.end(), 1,std::multiplies<int64_t>());// 累加求和
  auto buffer_in = std::shared_ptr<float>(new float[input_size],std::default_delete<float[]>());
	std::map<std::string, mace::MaceTensor> inputs;
	inputs["data"] = mace::MaceTensor(input_shapes,buffer_in);

  printf("inputs[].shape()[0][1][2][3] is (%lld,%lld,%lld,%lld)\n",inputs["data"].shape()[0],inputs["data"].shape()[1],inputs["data"].shape()[2],inputs["data"].shape()[3]);
  std::string  imgName ="004545.jpg"; 
  std::vector<float> inputVar={0.007843f};
  std::vector<double> inputMeans={127.5,127.5,127.5};;
  std::vector<dataFormat> dataFormats={NHWC};
  printf("dataFormats is %d,NHWC is %d\n",dataFormats[0],NHWC);
  imagePreProcess(imgName,
                  &inputs,
                  dataFormats,
                  inputVar,
                  inputMeans);
	//4.output buffer
	std::vector<std::vector<int64_t>> output_shapes;
	 //output_shapes.push_back({1,7668,0});
	 //output_shapes.push_back({1,40257,1});
	 //output_shapes.push_back({1,1,1,7668});
	 output_shapes.push_back({1,1,1,6768});
	 output_shapes.push_back({1,35532,1});
	 output_shapes.push_back({1,2,6768});
	int64_t output_size_mbox_loc = std::accumulate(output_shapes[0].begin(), output_shapes[0].end(), 1,std::multiplies<int64_t>());
	int64_t output_size_mbox_conf_flatten = std::accumulate(output_shapes[1].begin(), output_shapes[1].end(), 1,std::multiplies<int64_t>());
	int64_t output_size_mbox_priorbox = std::accumulate(output_shapes[2].begin(), output_shapes[2].end(), 1,std::multiplies<int64_t>());
  auto buffer_out_mbox_loc = std::shared_ptr<float>(new float[output_size_mbox_loc],std::default_delete<float[]>());
	auto buffer_out_mbox_conf_flatten = std::shared_ptr<float>(new float[output_size_mbox_conf_flatten],std::default_delete<float[]>());
	auto buffer_out_mbox_priorbox = std::shared_ptr<float>(new float[output_size_mbox_priorbox],std::default_delete<float[]>());
	std::map<std::string, mace::MaceTensor> outputs;
  outputs["mbox_loc"] = mace::MaceTensor(output_shapes[0], buffer_out_mbox_loc);
	outputs["mbox_conf_flatten"] = mace::MaceTensor(output_shapes[1], buffer_out_mbox_conf_flatten);
	outputs["mbox_priorbox"] = mace::MaceTensor(output_shapes[2], buffer_out_mbox_priorbox);
	//run Model
	struct timeval tm_before,tm_after;
	gettimeofday(&tm_before,NULL);
    engine->Run(inputs, &outputs);
	gettimeofday(&tm_after,NULL);
	printf("=====>>>>>Warm up Run Model spend time:%d ms\n",(tm_after.tv_sec -tm_before.tv_sec)*1000 + (tm_after.tv_usec - tm_before.tv_usec)/1000);
	
	for (int i = 0; i < 100; ++i) 
	{
		gettimeofday(&tm_before,NULL);
		engine->Run(inputs, &outputs);
		gettimeofday(&tm_after,NULL);
		printf("=====>>>>>Normal Run Model spend time:%d ms\n",(tm_after.tv_sec -tm_before.tv_sec)*1000 + (tm_after.tv_usec - tm_before.tv_usec)/1000);

		
		const int num_prior = 1692;
		const int num_classes =21;
		const float nms_threshold =0.45;
		const int top_k =100;
		const int keep_top_k =100;
		const float confidence_threshold =0.25;
		std::vector<mace::BBox> bbox_rects;
		//get detection result
    int detectionNum=0;
    printf("mbox_conf_flatten is %p,num_classes is %d \n",outputs["mbox_conf_flatten"].data().get(),num_classes);
		detectionNum=mace::DetectionOutput(outputs["mbox_loc"].data().get(),
                    outputs["mbox_conf_flatten"].data().get(),
                    outputs["mbox_priorbox"].data().get(),
                    num_prior,
                    num_classes,
                    nms_threshold,
                    top_k,
                    keep_top_k,
                    confidence_threshold,
                    &bbox_rects);
    if(detectionNum<=0)
    {
      printf("------------------>detect nothing!\n");
    }
	}
}

detection_output.cc已经提供了吗?在mace/ops没有找到

WeixiangXu avatar Jan 23 '19 08:01 WeixiangXu

@WeixiangXu 可以参考https://github.com/XiaoMi/mace/blob/master/mace/utils/detection_output.cc

lydoc avatar Jan 23 '19 09:01 lydoc

@leeburt 可以安装一个OpenCL-Z的app,查看一下IMAGE2D_MAX_WIDTH的参数,这里报CL_INVALID_IMAGE_SIZE,看着像是opencl的image width or height超出设备限制了

你好,我是arm-linux不能装app咋办。

leeburt avatar Jan 24 '19 09:01 leeburt

@leeburt 我这边后续加一下这块的边界检查吧。但是这个报错应该就是这个参数超出限制了,可以参照https://mace.readthedocs.io/en/latest/development/memory_layout.html 查看可能的越界变量

yejw5 avatar Jan 24 '19 09:01 yejw5

我自己写了一个工程来读取图像,进行预处理后进行识别,利用提供的detection_output.cc处理最后一层,但是识别不到任何东西?

{
// config runtime
#ifdef USEGPU
	//mace::SetOpenMPThreadPolicy(-1,static_cast<CPUAffinityPolicy >(1));
	mace::DeviceType device_type = mace::GPU;//CPU = 0, GPU = 2, HEXAGON = 3
	mace::MaceEngineConfig myEngConfig(device_type);

	if (device_type == mace::DeviceType::GPU) 
	{
		 myEngConfig.SetGPUHints(
			static_cast<mace::GPUPerfHint>(3),
			static_cast<mace::GPUPriorityHint>(3));
	}
	
	if (device_type == mace::DeviceType::GPU) 
	{
		std::vector<std::string> opencl_binary_paths = {"./opencl_binary"};
		//mace::SetOpenCLBinaryPaths(opencl_binary_paths);
	}
#else
	
	mace::DeviceType device_type = mace::CPU;//CPU = 0, GPU = 2, HEXAGON = 3
	mace::MaceEngineConfig myEngConfig(device_type);\
  myEngConfig.SetCPUThreadPolicy(4,static_cast<mace::CPUAffinityPolicy >(1));
#endif

	//1.read pb file
	std::vector<unsigned char> model_pb_data;
    if (!ReadBinaryFile(&model_pb_data, "MobileNetSSD.pb")) 
    {
		printf("=====>>>>Failed to read pb file!\n");
		return 0;
    }
	//2.create MaceEngine
	std::shared_ptr<mace::MaceEngine> engine;
    mace::MaceStatus create_engine_status;
	std::vector<std::string> input_nodes;
	input_nodes.push_back(std::string("data"));
	std::vector<std::string> output_nodes;
	output_nodes.push_back(std::string("mbox_loc"));
	output_nodes.push_back(std::string("mbox_conf_flatten"));
	output_nodes.push_back(std::string("mbox_priorbox"));
	std::cout << "=====>>>>>start to CreateMaceEngineFromProto" << "\n";
    create_engine_status = CreateMaceEngineFromProto(model_pb_data,std::string("MobileNetSSD.data"),input_nodes
	,output_nodes, myEngConfig,&engine);
	if (create_engine_status != mace::MaceStatus::MACE_SUCCESS) 
	{
    	std::cout << "Create engine error, please check the arguments";
		return 0;
  	}
	std::cout << "=====>>>>>end to CreateMaceEngineFromProto" << "\n";
	//3.load input data
	std::vector<int64_t> input_shapes = {1,288,288,3};
  printf("input_shapes[0][1][2][3] is (%lld,%lld,%lld,%lld)\n",input_shapes[0],input_shapes[1],input_shapes[2],input_shapes[3]);
	int64_t input_size =std::accumulate(input_shapes.begin(), input_shapes.end(), 1,std::multiplies<int64_t>());// 累加求和
  auto buffer_in = std::shared_ptr<float>(new float[input_size],std::default_delete<float[]>());
	std::map<std::string, mace::MaceTensor> inputs;
	inputs["data"] = mace::MaceTensor(input_shapes,buffer_in);

  printf("inputs[].shape()[0][1][2][3] is (%lld,%lld,%lld,%lld)\n",inputs["data"].shape()[0],inputs["data"].shape()[1],inputs["data"].shape()[2],inputs["data"].shape()[3]);
  std::string  imgName ="004545.jpg"; 
  std::vector<float> inputVar={0.007843f};
  std::vector<double> inputMeans={127.5,127.5,127.5};;
  std::vector<dataFormat> dataFormats={NHWC};
  printf("dataFormats is %d,NHWC is %d\n",dataFormats[0],NHWC);
  imagePreProcess(imgName,
                  &inputs,
                  dataFormats,
                  inputVar,
                  inputMeans);
	//4.output buffer
	std::vector<std::vector<int64_t>> output_shapes;
	 //output_shapes.push_back({1,7668,0});
	 //output_shapes.push_back({1,40257,1});
	 //output_shapes.push_back({1,1,1,7668});
	 output_shapes.push_back({1,1,1,6768});
	 output_shapes.push_back({1,35532,1});
	 output_shapes.push_back({1,2,6768});
	int64_t output_size_mbox_loc = std::accumulate(output_shapes[0].begin(), output_shapes[0].end(), 1,std::multiplies<int64_t>());
	int64_t output_size_mbox_conf_flatten = std::accumulate(output_shapes[1].begin(), output_shapes[1].end(), 1,std::multiplies<int64_t>());
	int64_t output_size_mbox_priorbox = std::accumulate(output_shapes[2].begin(), output_shapes[2].end(), 1,std::multiplies<int64_t>());
  auto buffer_out_mbox_loc = std::shared_ptr<float>(new float[output_size_mbox_loc],std::default_delete<float[]>());
	auto buffer_out_mbox_conf_flatten = std::shared_ptr<float>(new float[output_size_mbox_conf_flatten],std::default_delete<float[]>());
	auto buffer_out_mbox_priorbox = std::shared_ptr<float>(new float[output_size_mbox_priorbox],std::default_delete<float[]>());
	std::map<std::string, mace::MaceTensor> outputs;
  outputs["mbox_loc"] = mace::MaceTensor(output_shapes[0], buffer_out_mbox_loc);
	outputs["mbox_conf_flatten"] = mace::MaceTensor(output_shapes[1], buffer_out_mbox_conf_flatten);
	outputs["mbox_priorbox"] = mace::MaceTensor(output_shapes[2], buffer_out_mbox_priorbox);
	//run Model
	struct timeval tm_before,tm_after;
	gettimeofday(&tm_before,NULL);
    engine->Run(inputs, &outputs);
	gettimeofday(&tm_after,NULL);
	printf("=====>>>>>Warm up Run Model spend time:%d ms\n",(tm_after.tv_sec -tm_before.tv_sec)*1000 + (tm_after.tv_usec - tm_before.tv_usec)/1000);
	
	for (int i = 0; i < 100; ++i) 
	{
		gettimeofday(&tm_before,NULL);
		engine->Run(inputs, &outputs);
		gettimeofday(&tm_after,NULL);
		printf("=====>>>>>Normal Run Model spend time:%d ms\n",(tm_after.tv_sec -tm_before.tv_sec)*1000 + (tm_after.tv_usec - tm_before.tv_usec)/1000);

		
		const int num_prior = 1692;
		const int num_classes =21;
		const float nms_threshold =0.45;
		const int top_k =100;
		const int keep_top_k =100;
		const float confidence_threshold =0.25;
		std::vector<mace::BBox> bbox_rects;
		//get detection result
    int detectionNum=0;
    printf("mbox_conf_flatten is %p,num_classes is %d \n",outputs["mbox_conf_flatten"].data().get(),num_classes);
		detectionNum=mace::DetectionOutput(outputs["mbox_loc"].data().get(),
                    outputs["mbox_conf_flatten"].data().get(),
                    outputs["mbox_priorbox"].data().get(),
                    num_prior,
                    num_classes,
                    nms_threshold,
                    top_k,
                    keep_top_k,
                    confidence_threshold,
                    &bbox_rects);
    if(detectionNum<=0)
    {
      printf("------------------>detect nothing!\n");
    }
	}
}

Hello,have you made the detection_output.cc successful? where do you use it?

suyali avatar Aug 29 '19 06:08 suyali