mace
mace copied to clipboard
mobilenet-ssd在运行时,cpu可以运行但是gpu运行报错。
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:
我自己写了一个工程来读取图像,进行预处理后进行识别,利用提供的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");
}
}
}
该bug已经修复,请使用最新master试一下?
你好,目前还是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
是否可以提供一下模型文件和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文件?可以参考这个:
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
如果模型一致的话,使用我提供的yml,只修改abi参数正常吗?你的yml中 mbox_priorbox 的output shape有问题。
如果模型一致的话,使用我提供的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 可以安装一个OpenCL-Z的app,查看一下IMAGE2D_MAX_WIDTH的参数,这里报CL_INVALID_IMAGE_SIZE
,看着像是opencl的image width or height超出设备限制了
我自己写了一个工程来读取图像,进行预处理后进行识别,利用提供的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 可以参考https://github.com/XiaoMi/mace/blob/master/mace/utils/detection_output.cc
@leeburt 可以安装一个OpenCL-Z的app,查看一下IMAGE2D_MAX_WIDTH的参数,这里报
CL_INVALID_IMAGE_SIZE
,看着像是opencl的image width or height超出设备限制了
你好,我是arm-linux不能装app咋办。
@leeburt 我这边后续加一下这块的边界检查吧。但是这个报错应该就是这个参数超出限制了,可以参照https://mace.readthedocs.io/en/latest/development/memory_layout.html 查看可能的越界变量
我自己写了一个工程来读取图像,进行预处理后进行识别,利用提供的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?