Paddle Inference——基于python API在Jetson上部署Paddl

文章目录??环境准备????部署????主程序????预测结果??环境准备??paddlepaddle-gpu??paddlesegpip3 install numpy==1.13.3pip3 install paddleseg –no-dependenciespip3 install filelock pyyaml visualdl>=2.0.0 yapf==0.26.0 tqdm prettytable pre-commit flake8部署import cv2import numpy as npimport yamlimport randomimport osimport codecsfrom paddle.inference import Configfrom paddle.inference import PrecisionTypefrom paddle.inference import create_predictorimport paddleseg.transforms as Tfrom paddleseg.cvlibs import managerfrom paddleseg.utils import get_sys_env, logger, get_image_listfrom paddleseg.utils.visualize import get_pseudo_color_mapclass DeployYmlConfig: def __init__(self, path): yml_path = os.path.join(path, “deploy.yaml”) with codecs.open(yml_path, ‘r’, ‘utf-8’) as file: self.dic = yaml.load(file) self._transforms = self._load_transforms( self.dic[‘Deploy’][‘transforms’]) self._dir = path @property def transforms(self): print(“transforms”) return self._transforms @property def model_file(self): return os.path.join(self._dir, self.dic[‘Deploy’][‘model’]) @property def params_file(self): return os.path.join(self._dir, self.dic[‘Deploy’][‘params’]) def _load_transforms(self, t_list): com = manager.TRANSFORMS transforms = [] for t in t_list: ctype = t.pop(‘type’) transforms.append(com[ctype](**t)) return T.Compose(transforms)class Paddle_Seg: def __init__(self, model_folder_dir, infer_img_size=224, use_gpu=False, gpu_memory=500, use_tensorrt=False, precision_mode=”fp32″): self.model_folder_dir = model_folder_dir self.infer_img_size = infer_img_size # 模型预测的输入图像尺寸 self.use_gpu = use_gpu # 是否使用GPU,默认False self.gpu_memory = gpu_memory # GPU的显存,默认500 self.use_tensorrt = use_tensorrt # 是否使用TensorRT,默认False self.precision = precision_mode # TensorRT的precision_mode为”fp16″、”fp32″、”int8″ def init(self,camera_width=640,camera_height=480): img = np.zeros(shape=(int(camera_height), int(camera_width),3),dtype=”float32″) # 从deploy.yml中读出模型相关信息 self.cfg = DeployYmlConfig(self.model_folder_dir) # 初始化预测模型 self.predictor = self.predict_config() self.color_list = [(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) for i in range(10)] def predict_config(self): # ——————————————模型配置、预测相关函数————————————————— # # 根据预测部署的实际情况,设置Config config = Config() # 读取模型文件 config.set_prog_file(self.cfg.model_file) config.set_params_file(self.cfg.params_file) precision_map = { “int8”: PrecisionType.Int8, “fp16”: PrecisionType.Half, “fp32”: PrecisionType.Float32} if self.use_gpu == True: config.enable_use_gpu(self.gpu_memory, 0) if self.use_tensorrt == True: if self.precision == “int8”: use_calib_mode = True use_static = True if self.precision == “fp16”: use_calib_mode = False use_static = True else: use_calib_mode = False use_static = True config.enable_tensorrt_engine(workspace_size=1 << 30, precision_mode=precision_map[self.precision], max_batch_size=1, min_subgraph_size=50, use_static=use_static, use_calib_mode=use_calib_mode) print(“———————————————-“) print(” RUNNING CONFIG “) print(“———————————————-“) print(“Model input size: {}”.format([self.infer_img_size, self.infer_img_size, 3])) # 0 print(“Use GPU is: {}”.format(config.use_gpu())) # True print(“GPU device id is: {}”.format(config.gpu_device_id())) # 0 print(“Init mem size is: {}”.format(config.memory_pool_init_size_mb())) # 100 print(“Use TensorRT: {}”.format(self.use_tensorrt)) # 0 print(“Precision mode: {}”.format(precision_map[self.precision])) # 0 print(“———————————————-“) # 可以设置开启IR优化、开启内存优化 config.switch_ir_optim() config.enable_memory_optim() predictor = create_predictor(config) return predictor def preprocess(self, img): data = np.array([self.cfg.transforms(img)[0]]) return data def predict(self, predictor, data): input_names = predictor.get_input_names() input_handle = predictor.get_input_handle(input_names[0]) output_names = predictor.get_output_names() output_handle = predictor.get_output_handle(output_names[0]) input_handle.reshape(data.shape) input_handle.copy_from_cpu(data) # 执行Predictor predictor.run() # 获取输出 results = [] results = output_handle.copy_to_cpu() # 获取输出 return results def infer(self, img): data = self.preprocess(img) result = self.predict(self.predictor, data) return result def draw_img(self, res, img): res = res[0].astype(“int8”) mask = cv2.merge([res, res*255, res]) img = cv2.addWeighted(img, 1, mask, 0.5, 0) return img def save_img(self, result, save_name=’res.png’): result_img = get_pseudo_color_map(result[0]) result_img.save(save_name)主程序if __name__ == “__main__”: ################### model_folder_dir=”../../../big_model/deeplab1.4″ infer_img_size=512 use_gpu=True gpu_memory=500 use_tensorrt=True precision_mode=”fp16″ ################### paddle_seg = Paddle_Seg(model_folder_dir=model_folder_dir, infer_img_size=infer_img_size, use_gpu=use_gpu, gpu_memory=gpu_memory, use_tensorrt=use_tensorrt, precision_mode=precision_mode) paddle_seg.init(928, 800) img = cv2.imread(“61.jpg”) from color_dist import * color=”chin_yellow_blind_path” # HSV color_lower = np.array(color_dist[color][“Lower”], np.uint8) color_upper = np.array(color_dist[color][“Upper”], np.uint8) dilate_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10)) # 矩形结构 erode_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构 # 图像处理 hsvFrame = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) color_mask = cv2.inRange(hsvFrame, color_lower, color_upper) print(color_mask.shape) mask = np.zeros((800, 928)) imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret,binary = cv2.threshold(imgray,125,255,cv2.THRESH_BINARY) res = paddle_seg.infer(img) res = paddle_seg.draw_img(res, img) # res = res[0].astype(“int8”)*255 cv2.imwrite(“res.jpg”, res)预测结果

【文章转自阿里云代理商 aliyun.html 欢迎留下您的宝贵建议】融入银河,就安谧地和明月为伴照亮长天;没入草莽,

Paddle Inference——基于python API在Jetson上部署Paddl

相关文章:

你感兴趣的文章:

标签云: