【视觉分割新SOTA】一种最先进的图像分割模型!Segment Anything Model (SAM)如何使用?附代码和解释。

news2024/10/11 21:20:52

【视觉分割新SOTA】一种最先进的图像分割模型!Segment Anything Model (SAM)如何使用?附代码和解释。

【视觉分割新SOTA】一种最先进的图像分割模型!Segment Anything Model (SAM)如何使用?附代码和解释。


文章目录

  • 【视觉分割新SOTA】一种最先进的图像分割模型!Segment Anything Model (SAM)如何使用?附代码和解释。
  • 前言
  • 1. SAM 模型分割的通用框架
  • 2. 应用场景 1: AI 辅助打标
  • 3. 应用场景 2: 医疗图像分割
  • 4. 应用场景 3: 自动驾驶
  • 5. 应用场景 4: 卫星遥感
  • 6. 解释各参数和模块
  • 总结


欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览2024年即将召开的学术会议列表。会议入口:https://ais.cn/u/mmmiUz

参考链接:https://ai.meta.com/research/publications/segment-anything/

前言

为了在 Python 中实现 Segment Anything Model (SAM) 的应用,我们可以使用一个深度学习框架(如 PyTorch)结合 SAM 的提示分割功能。下面,我将提供一个示例代码框架,展示如何使用 SAM 模型进行四个应用场景的分割任务:AI 辅助打标、医疗图像分割、自动驾驶以及卫星遥感

由于 SAM 模型在现实应用中涉及大量计算和资源消耗,并且需要大规模的预训练模型,我们假设 SAM 已经被加载并使用了适当的库,如 Meta 的 FAIR 实验室提供的预训练权重。

首先,我们需要以下库:

  • torch(PyTorch,深度学习框架)
  • segment-anything(假设 SAM 提供了相应的库)
  • opencv(用于图像处理)
  • matplotlib(用于可视化分割结果)
  • numpy(用于处理数据)
pip install torch opencv-python matplotlib numpy

1. SAM 模型分割的通用框架

我们将定义一个通用的 sam_segmentation 函数,它接受图像和提示信息,返回分割后的掩码。然后,针对四个具体的场景应用该函数。

import torch
import cv2
import numpy as np
import matplotlib.pyplot as plt
from segment_anything import SamModel

# 加载预训练的 SAM 模型(假设已经下载好)
model = SamModel()

def display_mask(image, mask):
    """辅助函数:显示分割掩码"""
    plt.figure(figsize=(10, 10))
    plt.imshow(image)
    plt.imshow(mask, alpha=0.5, cmap="jet")
    plt.axis("off")
    plt.show()

def sam_segmentation(image, prompt_type, prompt_data):
    """
    SAM 通用分割函数
    :param image: 输入图像
    :param prompt_type: 提示类型,例如 'point', 'box'
    :param prompt_data: 提示数据,例如点的位置或框的坐标
    :return: 分割掩码
    """
    # 将图像转化为 PyTorch tensor 并归一化
    input_image = torch.from_numpy(image).permute(2, 0, 1).float() / 255.0
    input_image = input_image.unsqueeze(0)  # 增加 batch 维度

    # 根据提示类型生成相应的提示数据
    if prompt_type == 'point':
        prompt = {'points': torch.tensor(prompt_data)}
    elif prompt_type == 'box':
        prompt = {'boxes': torch.tensor(prompt_data)}
    else:
        raise ValueError("未知提示类型")

    # 使用 SAM 模型进行分割
    with torch.no_grad():
        mask = model.forward(input_image, prompt)
    
    return mask

# 读取图像
image = cv2.imread("sample_image.jpg")
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

2. 应用场景 1: AI 辅助打标

# 场景 1: AI 辅助打标
# 用户提供点提示,模型完成分割
points_prompt = [[150, 200]]  # 例如: 在图像中的某个点提示
mask = sam_segmentation(image_rgb, 'point', points_prompt)

# 显示分割结果
display_mask(image_rgb, mask)

参数解释

  • points_prompt: 用户在图像中选择的提示点位置,模型通过这些点来完成分割。

3. 应用场景 2: 医疗图像分割

# 场景 2: 医疗图像分割
# 例如医生在肿瘤的边界上选中一个框来提示模型进行分割
box_prompt = [[100, 100, 200, 200]]  # 框住肿瘤区域的坐标 (x1, y1, x2, y2)
mask = sam_segmentation(image_rgb, 'box', box_prompt)

# 显示分割结果
display_mask(image_rgb, mask)

参数解释

  • box_prompt: 医生提供的框,框住肿瘤区域的坐标,通过该框模型可以检测并分割出病变区域。

4. 应用场景 3: 自动驾驶

# 场景 3: 自动驾驶
# 在自动驾驶场景中,用户选择框住车辆的区域提示
box_prompt = [[300, 400, 500, 600]]  # 框住车辆的区域
mask = sam_segmentation(image_rgb, 'box', box_prompt)

# 显示分割结果
display_mask(image_rgb, mask)

参数解释

  • box_prompt: 自动驾驶场景中车辆所在区域的坐标,用于提示模型进行分割。

5. 应用场景 4: 卫星遥感

# 场景 4: 卫星遥感
# 用户通过点击提示分割建筑物、河流等对象
points_prompt = [[350, 450], [200, 300]]  # 选中建筑物或河流的多个点位置
mask = sam_segmentation(image_rgb, 'point', points_prompt)

# 显示分割结果
display_mask(image_rgb, mask)

参数解释

  • points_prompt: 遥感图像中用户提供的地表对象提示点,如建筑物、河流等,通过这些点进行分割

6. 解释各参数和模块

  • sam_segmentation 函数:
  1. image: 输入图像,要求为 RGB 格式。
  2. prompt_type: 提示的类型,如点提示或框提示。
  3. prompt_data: 提示信息的具体数据,如点的坐标或框的边界。
    4)返回值: 分割掩码,用于显示分割后的区域。
  • display_mask 函数:
  1. 用于显示原始图像和叠加的分割掩码,使用 matplotlib 可视化。
  • prompt_typeprompt_data
  1. prompt_type 决定了提示的类型,目前支持点提示和框提示。
  2. prompt_data 是具体提示的数值,例如点的位置 [x, y] 或框的边界 [x1, y1, x2, y2]

总结

上述代码框架展示了如何使用 SAM 模型在不同场景下进行图像分割。通过输入不同的提示,SAM 可以快速完成复杂图像中的精确分割。

欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览2024年即将召开的学术会议列表。会议入口:https://ais.cn/u/mmmiUz

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vueJS中wowjs、animate、swiper的使用

原文关注公众号 本文演示利用swiper纵向全屏滚动 npm 安装 wow.js,安装 wow.js后animate.css会自动安装; npm install wowjs --save-dev npm 安装 animate.css animate.css文档:http://5kzx.cn/doc.html npm install animate.css --save …

Python和MATLAB及C++和Fortran胶体粒子数学材料学显微镜学微观流变学及光学计算

🎯要点 二维成像拥挤胶体粒子检测算法粒子的局部结构和动力学分析椭圆粒子成链动态过程定量分析算法小颗粒的光散射和吸收活跃物质模拟群体行为提取粒子轨迹粘弹性,计算剪切模量计算悬浮液球形粒子多体流体动力学概率规划全息图跟踪和表征粒子位置、大小…

创建docker虚拟镜像,创建启动服务脚本

进入系统命令服务目录 编辑服务 [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/…

Gradle 插件获取所有依赖项,类似 androidDependencies?

诉求 在打包过程中我想知道某个模块的信息,比如: 模块androidx.work:work-runtime是否被依赖?模块androidx.work:work-runtime的版本号是多少? 我们利用 Android studio 已有的任务androidDependencies,双击执行很容…

PyQt5写好的py文件生成可执行的exe文件【Nuitka】

文章目录 1.Nuitka引入2.Nuitka与Pyinstaller对比Nuitka安装 3.Nuitka指令4.参数以及作用5.多文件格式封装完成后可删除文件6.运行问题问题1问题2 1.Nuitka引入 看过我上一篇PyQt5写好的py文件生成可执行的exe文件【Pyinstaller】的应该了解到用PyQt5写的界面程序可以通过Pyins…

安卓冻屏bug案例作业分享-千里马学员wms+input实战作业

背景: 近期有学员反馈在aosp14高版本上有了一个新窗口TaskBar,这个但是有需求就是对这个TaskBar进行隐藏,所以有一个需要对这个TaskBar进行进行隐藏需求 隐藏TaskBar需求做了之后发现有如下bug: 问题复现步骤: 因…

新款示波器RTE1104罗德与施瓦茨RS RTE1102原装二手

罗德与施瓦茨R&S RTE1104触摸屏RTE1102新款示波器 R&S-RTE1000 示波器系列: RTE1022标配:200MHz带宽,2通道,5GSa/s采样率,200M存储深度,16个数字通道(选配) RTE1032标配&a…

HCIP--以太网交换安全(二)端口安全

端口安全 一、端口安全概述 1.1、端口安全概述:端口安全是一种网络设备防护措施,通过将接口学习的MAC地址设为安全地址防止非法用户通信。 1.2、端口安全原理: 类型 定义 特点 安全动态MAC地址 使能端口而未是能Stichy MAC功能是转换的…

解决PyCharm 2023 Python Packages列表为空

原因是因为没有设置镜像源 展开 > 之后,这里 点击齿轮 添加一个阿里云的源 最后还需要点击刷新 可以选择下面的任意一个国内镜像源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/…

asp.net core Partial 分部视图、视图组件(core mvc 才支持)、视图、Razor组件 、razor pages

分部视图 》》》传参 》》两个东西换个名称,PartialView()>渲染视图>不带Layout 部分视图与普通视图没太大区别,它可以将重复使用的HTML内容结合起来,可以单独使用。 一般命名是在名称前面加下划线,放在/Views/Shared 目…

【cocos creator】输入框滑动条联动小组建

滑动条滑动输入框内容会改变 输入框输入,滑动条位置改变 const { ccclass, property } cc._decorator;ccclass() export default class SliderEnter extends cc.Component {property({ type: cc.Float, displayName: "最大值", tooltip: "" }…

基于Web的停车场管理系统(论文+源码)_kaic

摘要 我国经济的发展愈发迅速,车辆也随之增加的难以想象,因此车位的治理也越来越繁杂,为了方便停车位相关信息的管理,设计开发一个合理的停车位管理系统尤为重要。因而,具有信息方便读取和操作简便的停车位管理系统的设…

Java基础-知识点

文章目录 数据类型包装类型缓存池 String概述不可变的含义不可变的好处String、StringBuffer、StringBuilderString.intern() 运算参数传递float与double隐式类型转换switch 继承访问权限抽象类与接口super重写与重载**1. 重写(Override)****2. 重载(Overload)** Object类的通用…

H3C GRE over IPsec VPN 实验

H3C GRE over IPsec VPN 实验 实验拓扑 ​​ 实验需求 某企业北京总部、上海分支、武汉分支分别通过 R1,R3,R4 接入互联网,配置默认路由连通公网按照图示配置 IP 地址,R1,R3,R4 分别配置 Loopback0 口匹配感兴趣流,Loopback1 口模拟业务网段北京总部拥有固定公网地址…

VMware Fusion 13.6.1 发布下载,修复 4 个已知问题

VMware Fusion 13.6.1 发布下载,修复 4 个已知问题 VMware Fusion 13.6.1 for Mac - 领先的免费桌面虚拟化软件 适用于基于 Intel 处理器和搭载 Apple 芯片的 Mac 的桌面虚拟化软件 请访问原文链接:https://sysin.org/blog/vmware-fusion-13/ 查看最新…

找不到xinput1_3.dll怎么解决,快来试试这个几个方法

在计算机系统运行过程中,当我们遭遇“找不到xinput1_3.dll”这一错误提示时,实际上正面临一个软件兼容性、系统组件缺失以及游戏或应用程序无法正常启动的关键问题。深入探究这一现象,我们会发现它可能引发一系列连带问题,例如某些…

【课程设计/毕业设计】Java家政预约管理系统源码+开发文档

项目介绍 一直想做一款家政管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套管理系统。学习过程中遇到问题可以咨询留言。 在线体验 http://jiazheng.gitapp.cn/ 源码地址 https://github.com/geeeeeeeek/java_jiazh…

JVM和GC案例详解

接上文JVM环境配置说明:上文博客 一、JVM远程连接设置 1. JMX方式连接(这种方式没有GC监控),设置如下 2. 连接成功后可以查看基础配置参数(和服务器配置一致) 2. jstatd方式连接(这种方式没有CPU监控) 添加jstatd方式连接 双击Tomcat&#xff0…

python可变数据类型和不可变数据类型

先看一段代码。 value1 10 value2 value1 print(value1) print(value2) value1 30 print(value1) print(value2)再看另一段代码。 list1 [1,2,3,4] list2 list1 print(list1) print(list2) list1.append(5) print(list1) print(list2)第一段代码中,value2的值…

深入解析:如何使用LangChain进行RAG处理半结构化数据

深入解析:如何使用LangChain进行RAG处理半结构化数据 引言 在处理半结构化数据如PDF文件时,如何有效提取信息是一个挑战。本文将介绍如何使用LangChain的RAG处理模板处理这样的数据。我们将探讨安装、使用和在项目中集成的完整过程。 主要内容 环境设…