convertor.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import os
  2. from six import text_type as _text_type
  3. import argparse
  4. import sys
  5. from utils import logging
  6. import paddlex as pdx
  7. def arg_parser():
  8. parser = argparse.ArgumentParser()
  9. parser.add_argument(
  10. "--model_dir",
  11. "-m",
  12. type=_text_type,
  13. default=None,
  14. help="define model directory path")
  15. parser.add_argument(
  16. "--save_dir",
  17. "-s",
  18. type=_text_type,
  19. default=None,
  20. help="path to save inference model")
  21. parser.add_argument(
  22. "--fixed_input_shape",
  23. "-fs",
  24. default=None,
  25. help="export openvino model with input shape:[w,h]")
  26. parser.add_argument(
  27. "--data_type",
  28. "-dp",
  29. default="FP32",
  30. help="FP32 or FP16, the data_type of openvino IR")
  31. return parser
  32. def export_openvino_model(model, args):
  33. if model.model_type == "detector" or model.__class__.__name__ == "FastSCNN":
  34. logging.error(
  35. "Only image classifier models and semantic segmentation models(except FastSCNN) are supported to export to openvino")
  36. try:
  37. import x2paddle
  38. if x2paddle.__version__ < '0.7.4':
  39. logging.error("You need to upgrade x2paddle >= 0.7.4")
  40. except:
  41. logging.error(
  42. "You need to install x2paddle first, pip install x2paddle>=0.7.4")
  43. import x2paddle.convert as x2pc
  44. x2pc.paddle2onnx(args.model_dir, args.save_dir)
  45. import mo.main as mo
  46. from mo.utils.cli_parser import get_onnx_cli_parser
  47. onnx_parser = get_onnx_cli_parser()
  48. onnx_parser.add_argument("--model_dir",type=_text_type)
  49. onnx_parser.add_argument("--save_dir",type=_text_type)
  50. onnx_parser.add_argument("--fixed_input_shape")
  51. onnx_input = os.path.join(args.save_dir, 'x2paddle_model.onnx')
  52. onnx_parser.set_defaults(input_model=onnx_input)
  53. onnx_parser.set_defaults(output_dir=args.save_dir)
  54. shape = '[1,3,'
  55. shape = shape + args.fixed_input_shape[1:]
  56. onnx_parser.set_defaults(input_shape = shape)
  57. mo.main(onnx_parser,'onnx')
  58. def main():
  59. parser = arg_parser()
  60. args = parser.parse_args()
  61. assert args.model_dir is not None, "--model_dir should be defined while exporting openvino model"
  62. assert args.save_dir is not None, "--save_dir should be defined to create openvino model"
  63. model = pdx.load_model(args.model_dir)
  64. if model.status == "Normal" or model.status == "Prune":
  65. logging.error(
  66. "Only support inference model, try to export model first as below,",
  67. exit=False)
  68. export_openvino_model(model, args)
  69. if __name__ == "__main__":
  70. main()