mirror of
				https://github.com/PaddlePaddle/FastDeploy.git
				synced 2025-10-31 03:46:40 +08:00 
			
		
		
		
	 c91e99b5f5
			
		
	
	c91e99b5f5
	
	
	
		
			
			* Adjust folders structures in paddleclas * remove useless files * Update sophgo * improve readme
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import fastdeploy as fd
 | |
| import cv2
 | |
| import os
 | |
| from subprocess import run
 | |
| 
 | |
| 
 | |
| def parse_arguments():
 | |
|     import argparse
 | |
|     import ast
 | |
|     parser = argparse.ArgumentParser()
 | |
|     parser.add_argument(
 | |
|         "--auto",
 | |
|         required=True,
 | |
|         help="Auto download, convert, compile and infer if True")
 | |
|     parser.add_argument("--model", required=True, help="Path of bmodel")
 | |
|     parser.add_argument(
 | |
|         "--config_file", required=True, help="Path of config file")
 | |
|     parser.add_argument(
 | |
|         "--image", type=str, required=True, help="Path of test image file.")
 | |
|     parser.add_argument(
 | |
|         "--topk", type=int, default=1, help="Return topk results.")
 | |
| 
 | |
|     return parser.parse_args()
 | |
| 
 | |
| 
 | |
| def download():
 | |
|     cmd_str = 'wget https://bj.bcebos.com/paddlehub/fastdeploy/ResNet50_vd_infer.tgz'
 | |
|     jpg_str = 'wget https://gitee.com/paddlepaddle/PaddleClas/raw/release/2.4/deploy/images/ImageNet/ILSVRC2012_val_00000010.jpeg'
 | |
|     tar_str = 'tar xvf ResNet50_vd_infer.tgz'
 | |
|     if not os.path.exists('ResNet50_vd_infer.tgz'):
 | |
|         run(cmd_str, shell=True)
 | |
|     if not os.path.exists('ILSVRC2012_val_00000010.jpeg'):
 | |
|         run(jpg_str, shell=True)
 | |
|     run(tar_str, shell=True)
 | |
| 
 | |
| 
 | |
| def paddle2onnx():
 | |
|     cmd_str = 'paddle2onnx --model_dir ResNet50_vd_infer \
 | |
|             --model_filename inference.pdmodel \
 | |
|             --params_filename inference.pdiparams \
 | |
|             --save_file ResNet50_vd_infer.onnx \
 | |
|             --enable_dev_version True'
 | |
| 
 | |
|     print(cmd_str)
 | |
|     run(cmd_str, shell=True)
 | |
| 
 | |
| 
 | |
| def mlir_prepare():
 | |
|     mlir_path = os.getenv("MODEL_ZOO_PATH")
 | |
|     mlir_path = mlir_path[:-13]
 | |
|     cmd_list = [
 | |
|         'mkdir ResNet50', 'cp -rf ' + os.path.join(
 | |
|             mlir_path, 'regression/dataset/COCO2017/') + ' ./ResNet50',
 | |
|         'cp -rf ' + os.path.join(mlir_path,
 | |
|                                  'regression/image/') + ' ./ResNet50',
 | |
|         'cp ResNet50_vd_infer.onnx ./ResNet50/', 'mkdir ./ResNet50/workspace'
 | |
|     ]
 | |
|     for str in cmd_list:
 | |
|         print(str)
 | |
|         run(str, shell=True)
 | |
| 
 | |
| 
 | |
| def onnx2mlir():
 | |
|     cmd_str = 'model_transform.py \
 | |
|         --model_name ResNet50_vd_infer \
 | |
|         --model_def ../ResNet50_vd_infer.onnx \
 | |
|         --input_shapes [[1,3,224,224]] \
 | |
|         --mean 0.0,0.0,0.0 \
 | |
|         --scale 0.0039216,0.0039216,0.0039216 \
 | |
|         --keep_aspect_ratio \
 | |
|         --pixel_format rgb \
 | |
|         --output_names save_infer_model/scale_0.tmp_1 \
 | |
|         --test_input ../image/dog.jpg \
 | |
|         --test_result ./ResNet50_vd_infer_top_outputs.npz \
 | |
|         --mlir ./ResNet50_vd_infer.mlir'
 | |
| 
 | |
|     print(cmd_str)
 | |
|     os.chdir('./ResNet50/workspace/')
 | |
|     run(cmd_str, shell=True)
 | |
|     os.chdir('../../')
 | |
| 
 | |
| 
 | |
| def mlir2bmodel():
 | |
|     cmd_str = 'model_deploy.py \
 | |
|         --mlir ./ResNet50_vd_infer.mlir \
 | |
|         --quantize F32 \
 | |
|         --chip bm1684x \
 | |
|         --test_input ./ResNet50_vd_infer_in_f32.npz \
 | |
|         --test_reference ./ResNet50_vd_infer_top_outputs.npz \
 | |
|         --model ./ResNet50_vd_infer_1684x_f32.bmodel'
 | |
| 
 | |
|     print(cmd_str)
 | |
|     os.chdir('./ResNet50/workspace')
 | |
|     run(cmd_str, shell=True)
 | |
|     os.chdir('../../')
 | |
| 
 | |
| 
 | |
| args = parse_arguments()
 | |
| 
 | |
| if (args.auto):
 | |
|     download()
 | |
|     paddle2onnx()
 | |
|     mlir_prepare()
 | |
|     onnx2mlir()
 | |
|     mlir2bmodel()
 | |
| 
 | |
| # config runtime and load the model
 | |
| runtime_option = fd.RuntimeOption()
 | |
| runtime_option.use_sophgo()
 | |
| 
 | |
| model_file = './ResNet50/workspace/ResNet50_vd_infer_1684x_f32.bmodel' if args.auto else args.model
 | |
| params_file = ""
 | |
| config_file = './ResNet50_vd_infer/inference_cls.yaml' if args.auto else args.config_file
 | |
| image_file = './ILSVRC2012_val_00000010.jpeg' if args.auto else args.image
 | |
| model = fd.vision.classification.PaddleClasModel(
 | |
|     model_file,
 | |
|     params_file,
 | |
|     config_file,
 | |
|     runtime_option=runtime_option,
 | |
|     model_format=fd.ModelFormat.SOPHGO)
 | |
| 
 | |
| # predict the results of image classification
 | |
| im = cv2.imread(image_file)
 | |
| result = model.predict(im, args.topk)
 | |
| print(result)
 |