如何使用OpenVINO Python API部署FastSAM模型

网友投稿 231 2024-01-25

作者:冯浩辽宁科技大学研究生指导教师:张海刚 英特尔边缘计算创新大使深圳职业技术大学 副教授 当今,深度学习技术在计算机视觉领域取得了巨大的突破,使得各种图像处理任务变得更加智能化其中,Semanti

c Segmentation(语义分割)是一项重要的任务,它有助于计算机理解图像中不同对象的位置和边界本文将介绍如何使用 OpenVINO Python API 部署 FastSAM 模型,以实现快速高效的语义分割。

什么是 FastSAM 模型? FastSAM 模型是一种轻量级语义分割模型,旨在快速而准确地分割图像中的对象它经过了精心设计,以在较低的计算成本下提供卓越的性能这使得 FastSAM 模型成为许多计算机视觉应用的理想选择,包括。

自动驾驶、医学图像分析和工业自动化等领域步骤一:安装 OpenVINO 要开始使用 OpenVINO 进行推理 FastSAM 模型,首先需要安装 OpenVINO ToolkitOpenVINO 是英特尔发布的开源工具,专为深度学习模型部署而设计。

你可以按照以下步骤安装OpenVINO : 访问OpenVINO官方网站下载OpenVINO工具包 按照官方文档的说明进行安装和配置步骤二:下载 FastSam 官网模型 FastSAM 模型可以在官方 GitHub 中找到。

下载模型并将其解压缩到合适的文件夹根据自身情况下载合适的预训练模型 这里还需要将下载到的模型,由于这个模型是采用的pytorch 类型的格式,所以还需要将这个 pt 模型转换为 OpenVINO 的 IR 模型才能进行调用推理。

转换步骤如下所示:Pytorch →onnx → IR 需要先导出为 onnx 标准格式,然后经过这个压缩优化转化为 IR 模型 OpenVINO 官方提供一个模型转换工具 Model Optimizer,可以利用这个更加便捷的转换我们的模型。

例如: mo --input_model FastSAM-s.onnx 就会在当前目录下生成对应的 FastSAM-s.bin和 FastSAM-s.xml 文件,这就是所谓的 IR 模型了步骤三:使用 OpenVINO Python API。

接下来,我们将使用OpenVINO Python API来部署FastSAM 模型由于官方提供的这个预训练模型也是基于yolov8进行优化的,所以也需要有和yolov8 相似的处理步骤:加载模型→读图 → 预处理 → 推理 → 后处理。

1. 加载模型 加载模型需要创建一个 Core,然后对模型进行读取编译:core = ov.Core() model = core.read_model(model=model_path) self.compi

led_model = core.compile_model(model = model, device_name=self.device) 左滑查看更多2. 读图 我们使用 opencv读取任意一张彩色图像:

Image = cv2.imread(“image_path”)3. 预处理 预处理主要包括 3 部分,其一是将图像重新排列为模型所需要的类型(一般来说是 batch Size, channels, height, width),其二是归一化图像大小为模型输入需求的大小,其三是将 opencv 的图像原始数据放置到 numpy 类型的数据中方便处理。

以下是一个简单的 Python 预处理,展示了如何对输入的图像进行预处理:def Preprocess(self, image: cv2.Mat, targetShape: list): th, tw = targetShape h, w = image.shape[:2] if h>w: scale = min(th / h, tw / w) inp = np.ze

ros((th, tw, 3), dtype = np.uint8) nw = int(w * scale) nh = int(h * scale) a = int((nh-nw)/2) inp[: nh, a:a+nw, :] = cv2.resize(cv2.cvtColor(image, cv2.COLOR_BGR2RGB), (nw, nh)) else: scale = min(th / h, tw / w) inp = np.zeros((th, tw, 3), dtype = np.uint8) nw = int(w * scale) nh = int(h * scale) a = int((nw-nh)/2) inp[a: a+nh, :nw, :] = cv2.resize(cv2.cvtColor(image, cv2.COLOR_BGR2RGB), (nw, nh)) rgb = np.array([inp], dtype = np.float32) / 255.0 return np.transpose(rgb, (0, 3, 1, 2)) # 重新排列为batch_size, channels, height, width

左滑查看更多4. 推理 在模型的推理之前需要先加载预训练好的模型,推理部分只需要调用compiled_model 将预处理好的数据放入即可得到输出结果:result = self.compiled_model([input])

左滑查看更多 但这只是一个同步的推理过程,有感兴趣深入研究的的同学可以参考官网的异步推理5. 后处理 后处理主要有两件事,第一是对输出的结果进行非极大抑制,第二是将抑制后的结果进行遍历处理掩膜以下是一个简短的例子:。

def Postprocess(self, preds, img, orig_imgs, retina_masks, conf, iou, agnostic_nms=False): p = ops.non_max_suppression(preds[0], conf, iou, agnostic_nms, max_det=100, nc=1) results = [] proto = preds[1][-1] if len(preds[1]) == 3 else preds[1] # second output is len 3 if pt, but only 1 if expor

ted for i, pred in enumerate(p): orig_img = orig_imgs[i] if isinstance(orig_imgs, list) else orig_imgs # path = self.batch[0] img_path = "ok" if not len(pred): # save empty boxes results.append(Results(orig_img=orig_img, path=img_path, names="segment", boxes=pred[:, :6])) continue if retina_masks: if not isinstance(orig_imgs, torch.Tensor): pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape) masks = ops.process_mask_native(proto[i], pred[:, 6:], pred[:, :4], orig_img.shape[:2]) # HWC else: masks = ops.process_mask(proto[i], pred[:, 6:], pred[:, :4], img.shape[2:], upsample=True) # HWC if not isinstance(orig_imgs, torch.Tensor): pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape) results.append( Results(orig_img=orig_img, path=img_path, names="1213", boxes=pred[:, :6], masks=masks)) return results

左滑查看更多 这样就可以拿到这个掩码矩阵数据,这样就可以根据这个矩阵绘制掩码即可得到最终图像结语 本文介绍了如何使用 OpenVINO Python API 部署 FastSAM 模型,以实现快速高效的语义分割。

以在较低的计算成本下提供卓越的性能这使得 FastSAM 模型成为许多计算机视觉应用的理想选择,包括自动驾驶、医学图像分析和工业自动化等领域。 审核编辑:汤梓红

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:苹果WWDC 2022大会:实时活动API更便于动态了解
下一篇:华为云 API 对话机器人 CBS 的魅力—要是有 AI,我要做“李白”- 5 分钟开发作诗机器人
相关文章

 发表评论

暂时没有评论,来抢沙发吧~