0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

英特尔物联网 来源:英特尔物联网 2023-10-27 11:04 次阅读

作者:冯浩辽宁科技大学研究生

指导教师:张海刚 英特尔边缘计算创新大使深圳职业技术大学 副教授

当今,深度学习技术在计算机视觉领域取得了巨大的突破,使得各种图像处理任务变得更加智能化。其中,Semantic Segmentation(语义分割)是一项重要的任务,它有助于计算机理解图像中不同对象的位置和边界。本文将介绍如何使用 OpenVINO Python API 部署 FastSAM 模型,以实现快速高效的语义分割。

什么是 FastSAM 模型?

FastSAM 模型是一种轻量级语义分割模型,旨在快速而准确地分割图像中的对象。它经过了精心设计,以在较低的计算成本下提供卓越的性能。这使得 FastSAM 模型成为许多计算机视觉应用的理想选择,包括自动驾驶、医学图像分析和工业自动化等领域。

步骤一:安装 OpenVINO

要开始使用 OpenVINO 进行推理 FastSAM 模型,首先需要安装 OpenVINO Toolkit。OpenVINO 是英特尔发布的开源工具,专为深度学习模型部署而设计。

你可以按照以下步骤安装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.compiled_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.zeros((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 exported
    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 模型成为许多计算机视觉应用的理想选择,包括自动驾驶、医学图像分析和工业自动化等领域。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7491

    浏览量

    87896
  • 模型
    +关注

    关注

    1

    文章

    3236

    浏览量

    48822
  • python
    +关注

    关注

    56

    文章

    4795

    浏览量

    84656
  • OpenVINO
    +关注

    关注

    0

    文章

    92

    浏览量

    198

原文标题:用 OpenVINO™ Python API 部署 FastSam 模型 | 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和边界。本文将介绍如何使用 OpenVINO C++ API 部署 FastSAM 模型,以实现快速高效的语义分割。在前文中我们发表
    的头像 发表于 11-17 09:53 919次阅读
    如何使用<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b><b class='flag-5'>部署</b><b class='flag-5'>FastSAM</b><b class='flag-5'>模型</b>

    通过Cortex来非常方便的部署PyTorch模型

    ,依赖于 实时推理 。在实时推理中,一个模型通常被部署为一个微服务(通常是一个 JSON API),通过它,一个软件可以查询模型并接收预测。让我们以 Facebook 人工智能的 Ro
    发表于 11-01 15:25

    如何使用Python包装器正确构建OpenVINO工具套件

    : $ export PYTHONPATH=$PYTHONPATH:/~/openvino/bin/intel64/Release/python_api/python3.8/ $ export
    发表于 08-15 07:13

    使用OpenVINO部署PaddleSeg模型库中的DeepLabV3+模型

          01 概述     本文是OpenVINO 工具套件与百度飞桨PaddlePaddle模型转换/部署系列的第二部。这篇文章专注于展示如何将百度飞桨PaddelSeg项目
    的头像 发表于 11-22 14:58 9886次阅读
    使用<b class='flag-5'>OpenVINO</b>™ <b class='flag-5'>部署</b>PaddleSeg<b class='flag-5'>模型</b>库中的DeepLabV3+<b class='flag-5'>模型</b>

    在C++中使用OpenVINO工具包部署YOLOv5模型

    下载并转换YOLOv5预训练模型的详细步骤,请参考:《基于OpenVINO™2022.2和蝰蛇峡谷优化并部署YOLOv5模型》,本文所使用的Open
    的头像 发表于 02-15 16:53 4652次阅读

    自训练Pytorch模型使用OpenVINO™优化并部署在AI爱克斯开发板

    本文章将依次介绍如何将 Pytorch 自训练模型经过一系列变换变成 OpenVINO IR 模型形式,而后使用 OpenVINO Python
    的头像 发表于 05-26 10:23 930次阅读
    自训练Pytorch<b class='flag-5'>模型</b>使用<b class='flag-5'>OpenVINO</b>™优化并<b class='flag-5'>部署</b>在AI爱克斯开发板

    如何将Pytorch自训练模型变成OpenVINO IR模型形式

    本文章将依次介绍如何将Pytorch自训练模型经过一系列变换变成OpenVINO IR模型形式,而后使用OpenVINO Python
    的头像 发表于 06-07 09:31 1990次阅读
    如何将Pytorch自训练<b class='flag-5'>模型</b>变成<b class='flag-5'>OpenVINO</b> IR<b class='flag-5'>模型</b>形式

    OpenVINO™ C++ API编写YOLOv8-Seg实例分割模型推理程序

    本文章将介绍使用 OpenVINO 2023.0 C++ API 开发YOLOv8-Seg 实例分割(Instance Segmentation)模型的 AI 推理程序。本文 C++ 范例程序的开发环境是 Windows + V
    的头像 发表于 06-25 16:09 1587次阅读
    用<b class='flag-5'>OpenVINO</b>™ C++ <b class='flag-5'>API</b>编写YOLOv8-Seg实例分割<b class='flag-5'>模型</b>推理程序

    OpenVINO™ C# API详解与演示

    OpenVINO C# API 支持 NuGet 程序包安装方式,这与 OpenVINO C++ 库的安装过程相比,更加简单。如果使用 Visual Studio 开发 AI 项目,则可以通过 NuGet 程序包管理功能直接安装
    的头像 发表于 10-13 16:39 755次阅读
    <b class='flag-5'>OpenVINO</b>™  C# <b class='flag-5'>API</b>详解与演示

    基于OpenVINO Python API部署RT-DETR模型

    平台实现 OpenVINO 部署 RT-DETR 模型实现深度学习推理加速, 在本文中,我们将首先介绍基于 OpenVINO Python
    的头像 发表于 10-20 11:15 970次阅读
    基于<b class='flag-5'>OpenVINO</b> <b class='flag-5'>Python</b> <b class='flag-5'>API</b><b class='flag-5'>部署</b>RT-DETR<b class='flag-5'>模型</b>

    基于OpenVINO C++ API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 开发者实战》,在该文章中,我们基于 OpenVINO
    的头像 发表于 11-03 14:30 842次阅读
    基于<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b><b class='flag-5'>部署</b>RT-DETR<b class='flag-5'>模型</b>

    基于OpenVINO C# API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 开发者实战》和《基于 OpenVINO C++
    的头像 发表于 11-10 16:59 755次阅读
    基于<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b><b class='flag-5'>部署</b>RT-DETR<b class='flag-5'>模型</b>

    NNCF压缩与量化YOLOv8模型OpenVINO部署测试

    OpenVINO2023版本衍生出了一个新支持工具包NNCF(Neural Network Compression Framework – 神经网络压缩框架),通过对OpenVINO IR格式模型的压缩与量化更好的提升
    的头像 发表于 11-20 10:46 1606次阅读
    NNCF压缩与量化YOLOv8<b class='flag-5'>模型</b>与<b class='flag-5'>OpenVINO</b><b class='flag-5'>部署</b>测试

    OpenVINO C# API在intel平台部署YOLOv10目标检测模型

    模型设计策略,从效率和精度两个角度对YOLOs的各个组成部分进行了全面优化,大大降低了计算开销,增强了性能。在本文中,我们将结合OpenVINO C# API使用最新发布的OpenVINO
    的头像 发表于 06-21 09:23 1024次阅读
    用<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b>在intel平台<b class='flag-5'>部署</b>YOLOv10目标检测<b class='flag-5'>模型</b>

    使用OpenVINO Model Server在哪吒开发板上部署模型

    OpenVINO Model Server(OVMS)是一个高性能的模型部署系统,使用C++实现,并在Intel架构上的部署进行了优化,使用Open
    的头像 发表于 11-01 14:19 276次阅读
    使用<b class='flag-5'>OpenVINO</b> Model Server在哪吒开发板上<b class='flag-5'>部署</b><b class='flag-5'>模型</b>