MSA【1】:Segment Anything Model for Medical Image Analysis: an Experimental Study

文章目录

  • 前言
  • 1. Abstraction & Introduction
    • 1.1. Abstraction
    • 1.2. Introduction
      • 1.2.1. What is SAM?
      • 1.2.2. How to segment medical images with SAM?
  • 2. Methodology
    • 2.1. SAM is used in the process of segmentation of medical images
      • 2.1.1. Semi-automated annotation
      • 2.1.2. SAM assisting other segmentation models
      • 2.1.3. New medical image foundation segmentation models
    • 2.2. Experiments
      • 2.2.1. Settings
      • 2.2.2. Prompt Point Generation Scheme
  • 总结


前言

本文主要介绍了 Segment Anything Model 在自然图像分割领域取得显著成就后,较早的将 SAM 在医学图像领域做评测的工作。

原论文链接:Segment Anything Model for Medical Image Analysis: an Experimental Study


1. Abstraction & Introduction

1.1. Abstraction

Segment Anything Model (SAM) 是一个在超过 10 亿个注释(主要是自然图像)上训练的基础模型,旨在以交互方式分割用户定义的感兴趣对象。尽管该模型在自然图像上的表现令人印象深刻,但目前尚不清楚该模型在转向医学图像领域时会受到怎样的影响。

本文对 SAM 分割医学图像的能力进行了广泛的评估,评估对象包括来自不同模式和解剖学的 11 个医学影像数据集。研究表明,SAM 的性能因任务和数据集而异,某些数据集的性能令人印象深刻,但其他数据集的性能则差至中等。

1.2. Introduction

为新的医学成像数据和任务开发和训练分割模型实际上具有挑战性,这是因为收集和整理医学图像既昂贵又耗时,而且还需要经验丰富的医生为图像提供仔细的掩膜注释。基础模型和零点学习可以通过使用在大量数据上训练的神经网络来显著减少这些困难,而无需使用传统的监督训练标签。

1.2.1. What is SAM?

Segment Anything Model 是一种分割模型,其目的是在给出提示时分割用户定义的感兴趣对象。提示的形式可以是一个点、一组点(包括整个掩膜)、一个边界框或文本。即使在提示不明确的情况下,也要求模型返回有效的分割掩膜。

有关 Segment Anything Model 的介绍可以参考我的另一篇 blog:SAM【1】:Segment Anything

1.2.2. How to segment medical images with SAM?

从技术上讲,SAM 可以在没有提示的情况下运行,但预计它在医学成像中不会有用。这是因为医学图像通常具有图像中许多感兴趣的特定物体,并且需要对模型进行训练才能识别这些物体。


2. Methodology

2.1. SAM is used in the process of segmentation of medical images

2.1.1. Semi-automated annotation

人工标注医学图像是该领域开发分割模型的主要挑战之一,因为这通常需要医生花费宝贵的时间。在这种情况下,SAM 可作为一种工具用于加快标注速度。

在最简单的情况下,人类用户为 SAM 提供提示,SAM 会生成一个掩膜供用户批准或修改;另一种方法是,SAM 在整个图像中以网格形式给出提示,并为多个对象生成遮罩,然后由用户命名、选择或修改。

2.1.2. SAM assisting other segmentation models

SAM 与另一种算法一起自动分割图像,以弥补 SAM 无法理解分割物体的语义信息的不足。例如,SAM 根据分布在图像上的点提示,可以生成多个对象掩码,然后由一个单独的分类模型将其归类为特定对象。同样,独立的检测模型可以生成图像的对象边界框,作为 SAM 生成精确分割掩码的提示。

此外,在训练语义分割模型的过程中,可以将 SAM 与语义分割模型循环使用。例如,在训练过程中,分割模型在未标记图像上生成的掩码可用作 SAM 的提示,以便为这些图像生成更精确的掩码,这些掩码可用作正在训练的模型的迭代改进监督训练示例。

2.1.3. New medical image foundation segmentation models

新的医学图像基础分割模型的开发过程可以由 SAM 的开发过程来指导;或者,在各种医学影像领域的医学图像和掩膜上对 SAM 进行微调,而不是从头开始训练,因为这可能需要更少的图像。

2.2. Experiments

2.2.1. Settings

评估是通过为每个对象创建一个或多个提示并评估 SAM 生成的掩码相对于给定数据集和任务的真实掩码注释的准确性来完成的。同时,本文始终使用SAM为给定提示生成的置信度最高的掩码。

选择 mIoU 作为评估指标。然而,经验研究表明,SAM 的性能在同一图像的不同类别中会有很大差异。因此,本文将 N 个类别的多类预测问题转换为 N 个二元分类问题,因此使用 IoU 作为最终评价指标就足够了。

在这里插入图片描述

2.2.2. Prompt Point Generation Scheme

本文使用了一种通用的、直观的策略来模拟现实点提示的生成,该策略反映了用户如何以交互方式生成提示,实现的细节如下图所示:

在这里插入图片描述

生成逻辑:

  • 主要模拟了人在选点时候的思维:在选点的时候,用户通常会从明显最错误或者明显最正确的地方的中心选点,理论上这样可以尽可能地涵盖用户需要的部分
  • 将第一个提示点 p 1 p1 p1 初始化为掩膜前景中距背景最远的点
    • 即第一个提示点 p 1 p1 p1 是一个 positive prompt
    • 需要注意的是,SAM 需要一个 positive prompt 以确定分割的对象,所以传入 SAM 的第一个 point prompt 必须为 positive prompt
  • 由公式 P = a r g m a x ( i , j ) ( d [ ( i , j ) , ( k , l ) ] ) \mathcal{P} = argmax_{(i, j)} (d[(i, j), (k, l)]) P=argmax(i,j)(d[(i,j),(k,l)]) 得到一组符合上述条件的点
  • 从上述符合条件的点集中选择随机选择一个符合条件的点,作为第一个输入
  • 将 point prompt 的坐标输入 SAM 得到预测分数最高的一个 mask Y 1 Y_1 Y1
  • 获得预测错误的区域: E 1 = Y 1 ∪ M − Y 1 ∩ M E_1 = Y_1 \cup M - Y_1 \cap M E1=Y1MY1M
    • Y 1 ∪ M Y_1 \cup M Y1M:预测的 mask 在原掩膜中覆盖的面积与前景点集的并集
    • Y 1 ∩ M Y_1 \cap M Y1M:预测的 mask 在原掩膜中覆盖的面积与前景点集的交集
    • E 1 E_1 E1:预测的 mask 和前景点集中没有被正确预测的部分,即预测错误区域
  • 随后的 point prompt 是距离迭代更新误差区域 E n E_n En 边界最远的点
    • SAM 一次性只能接受一个 point prompt,并返回一个预测 mask,即多个 point prompt 是在每次 SAM 输出的预测 mask 的基础上迭代输入的过程
    • 每次迭代得到一个误差区域 E n E_n En 边界最远的点集
    • 从点集中随机选取一个点作为输入
    • 获得 SAM 的预测输出
    • 更新预测误差区域
  • 得到最后的预测结果

总结

本文主要是在 SAM 提出的基础上,对 SAM 能否在医学图像分割中应用做了一次评测,具体的数据集和结果可以参考原论文中的结果图。

这篇笔记侧重对 SAM 之后在医学图像分割中的应用以及微调的学习与理解,同时分析了本文提出的具有较高效率、比较模拟用户选点习惯的 point prompt 生成算法做了讨论与记录。

但同时,本文并没有研究 3D 的数据集,但 3D 数据在医学图像领域中十分常见,这也将会是之后研究的一个重点方向。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.Cesium中实体Entity创建(超详细)

前言 在学习 Cesium 的过程中,我发现官方文档冗长且阅读困难,为此我结合官方文档与自己的学习笔记,对其进行归类总结;本文中,我将介绍 Cesium 中创建实体的方法,并对其进行分类,帮助读者快速理解…

集成VCO-Cadence ADE相位噪声分析

集成VCO-Cadence ADE相位噪声分析 简介环境软件工艺 参考振荡器原理图相位噪声说明pss设置1234 pnoise设置12345 结果 简介 本文主要是使用Cadence ADE仿真1GHz交叉耦合振荡器,得到相位噪声曲线,主要记录仿真设置过程,仅供参考,如…

数据结构01-线性结构-链表栈队列-队列篇

文章目录 参考:总结大纲要求线性结构-队列QQ号码解密 参考: 总结 本系列为C数据结构系列,会介绍 线性结构,简单树,特殊树,简单图等。本文为线性结构部分。 大纲要求 线性结构 【 3 】链表:单…

【socket编程】TCP服务器、UDP服务器、本地套接字【C语言代码实现】

目录 0. 准备知识 0.1 大小端概念 0.2 网络字节序和主机字节序的转换 0.3 点分十进制串转换(IP地址转换函数) 0.4 IPV4结构体:(man 7 ip) 0.5 IPV6套接字结构体:(man 7 ipv6) …

安卓和苹果页面和逻辑是否有必要追求百分之百统一

安卓和苹果存在操作系统系统差异,所以有些不一样。如:安卓的启动页面是根页面,并且可以设置显示时间;而苹果的启动页面是一个类似图片的容器(Launch Screen.storyboard),不像其它页面可以控制页…

手搓一台简单的网络损伤仪——弱网测试

1、介绍 支持对链路带宽、传输时延、丢包率和无码率的手动设置; 1.1、网络损伤仪在使用时,网络拓扑连接 1.2、网络损伤仪管理页面展示 2、使用的设备及相关技术栈 一台Intel 赛扬 J1900的迷你主机【拥有4个千兆网口】;ubuntu-18.04.5-live…

Stable Diffusion - 高清局部重绘 (Inpaint) 调整脸部和手部细节

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131775232 在 Stable Diffusion 中,局部重绘(Inpaint)功能是一种可以让你在图像上删除不想要的区域,并用周围的像素自动填…

springCloud通过两种方式配置热更新

该热更新实际就是通过改动nacos官网里面的配置管理的妹纸内容实现 定义一个config包,在该包下面复制该代码 package cn.itcast.user.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.spring…

【LLM】Langchain使用[三](基于文档的问答)

文章目录 一、基于文档的问答1. 创建向量存储2. 不同类型的chain链 二、本地知识库问答1.1 整体框架2. 文本切分3. 图解流程 Reference 一、基于文档的问答 1. 创建向量存储 CSVLoader加载csv数据,loader结合模型使用使用Dock Array内存搜索向量存储,作…

PostgreSQL MVCC的弊端优化方案

我们之前的博客文章“我们最讨厌的 PostgreSQL 部分”讨论了大家最喜欢的 DBMS 多版本并发控制 (MVCC) 实现所带来的问题。其中包括版本复制、表膨胀、索引维护和真空管理。本文将探讨针对每个问题优化 PostgreSQL 的方法。 尽管 PostgreSQL 的 MVCC 实现是 Oracle 和 MySQL 等…

Jenkins动态化阶段步骤

Jenkins中如何去根据入参动态化阶段步骤呢? Groovy语言基础 定义一个列表变量 def list []定义一个map的kv结构变量 def map [:]如何可以动态化阶段步骤 动态化步骤:其实就是,在jenkins pipeline中根据入参或者其他变量列表,动…

微服务 云原生:gRPC 客户端、服务端的通信原理

gRPC Hello World protoc 是 Protobuf 的核心工具,用于编写 .proto 文件并生成 protobuf 代码。在这里,以 Go 语言代码为例,进行 gRPC 相关代码编写。 下载 protoc 工具:https://github.com/protocolbuffers/protobuf/releases&a…