c++ input_size要设置为640,即onnx导出模型输入是320,
如果onnx输入改为640,Android执行会死机。
原版是394,375,output,3.0输出是:
394,374,output,这3个是看对应onnx或者sim.onnx的输出层,
{"394",32,{{116,90},{156,198},{373,326}}},
{"374",16,{{30,61},{62,45},{59,119}}},
{"output",8,{{10,13},{16,30},{33,23}}},
举个栗子:onnx或者sim.onnx都有:
yolov5 ncnn
精简版,只有yolov5,ok
GitHub - sunnyden/YOLOV5_NCNN_Android: YOLOv5 C++ Implementation on Android using NCNN framework
有Android 4.0 ios,还有别的网络,比如yolov4
步骤:
1.torch转onnx
./onnx2ncnn crnn_lite_lstm_v2-sim.onnx crnn_lite_lstm_v2.param crnn_lite_lstm_v2.bin
如果报层不支持,安装:
pip install onnxsim
pip install onnx-simplifier pip install onnxruntime
2、onnx再精简模型python -m onnxsim c:/resnet50.onnx c:/resnet50-sim.onnx
这个如果报错:
第二步:
python -m onnxsim _0.9628_1471.onnx crnn_lstm_ex.onnx
E:\project\hjam\ncnn\build-vs2017\tools\onnx\onnx2ncnn.exe crnn_lstm_ex.onnx yolov5s_out.param yolov5s_out.bin
(base37) C:\WINDOWS\system32>python -m onnxsim I:\OCR\chineseocr_lite-onnx\models\crnn_lstm.onnx I:\OCR\chineseocr_lite-onnx\models\crnn_lstm_ex.onnx
Simplifying...
Traceback (most recent call last):
File "E:\ProgramData\Anaconda3\envs\base37\lib\runpy.py", line 193, in run_module_as_main
"main", mod_spec)
File "E:\ProgramData\Anaconda3\envs\base37\lib\runpy.py", line 85, in run_code
exec(code, run_globals)
File "E:\ProgramData\Anaconda3\envs\base37\lib\site-packages\onnxsim_main.py", line 52, in
main()
File "E:\ProgramData\Anaconda3\envs\base37\lib\site-packages\onnxsim_main.py", line 40, in main
args.input_model, check_n=args.check_n, perform_optimization=not args.skip_optimization, skip_fuse_bn=not args.enable_fuse_bn, input_shapes=input_shapes, skipped_optimizers=args.skip_optimizer, skip_shape_inference=args.skip_shape_inference)
File "E:\ProgramData\Anaconda3\envs\base37\lib\site-packages\onnxsim\onnx_simplifier.py", line 331, in simplify
model, const_nodes, input_shapes=input_shapes)
File "E:\ProgramData\Anaconda3\envs\base37\lib\site-packages\onnxsim\onnx_simplifier.py", line 172, in forward_for_node_outputs
res = forward(model, input_shapes=input_shapes)
File "E:\ProgramData\Anaconda3\envs\base37\lib\site-packages\onnxsim\onnx_simplifier.py", line 157, in forward
inputs = generate_rand_input(model, input_shapes=input_shapes)
File "E:\ProgramData\Anaconda3\envs\base37\lib\site-packages\onnxsim\onnx_simplifier.py", line 108, in generate_rand_input
'please determine the input size manually by --input-shape xxx'.format(key))
RuntimeError: The shape of input "input" has dynamic size, please determine the input size manually by --input-shape xxx
使用onnx_simplify时,--input-shape 参数应该怎么写,上面使用时,没写--input-shape参数
输入尺寸没写,才会这样,写了输入尺寸就可以转换了。
可以用python代码调用:
roialigned_feature,proposals就是onnx的输出参数
import onnxsim
model = onnx.load(new_onnx_filepath)
# convert model
model_simp, check = onnxsim.simplify(model, check_n=0,input_shapes={'roialigned_feature':[-1,256, 7, 7],'proposals':[-1,4]},
dynamic_input_shape=True)
onnx.save(model_simp, new_onnx_filepath)