将 Segment Anything 扩展到医学图像领域
文章目录
- 前言
- 技术交流
- SAM 拆解分析
- 从医学角度理解 SAM 的效用
- MedSAM
- 实验
- 总结
前言
SAM 是一种在自然图像分割方面取得成功的模型,但在医学图像分割方面表现不佳。MedSAM 首次尝试将 SAM 的成功扩展到医学图像,并成为用于分割各种医学图像的通用工具。为了开发 MedSAM,首先需要一个大型医学图像数据集,其中包括来自 11 种不同模态的超过 20 万个 Mask。该数据集用于训练和微调 MedSAM 模型。最重要的是,提供了一种简单的微调方法,使 SAM 适应一般的医学图像分割。
通过对 21 项三维分割任务和 9 项二维分割任务进行综合实验,对 MedSAM 的性能进行了评估。结果显示,在三维和二维分段任务中,MedSAM 的表现优于默认的 SAM 模型。为了方便理解 MedSAM,下面先来看下 SAM 的流程。
技术交流
技术要学会分享、交流,不建议闭门造车。一个人走的很快、一堆人可以走的更远。
文章中的完整源码、资料、数据、技术交流提升, 均可加知识星球交流群获取,群友已超过2000人,添加时切记的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。
方式①、添加微信号:mlc2060,备注:加群
方式②、微信搜索公众号:机器学习社区,后台回复:加群
SAM 拆解分析
基础模型有很强的泛化能力,这种能力通过提示工程(prompt engineering)实现,想要实现提示分割任务,需要解决三个问题:任务目标、模型结构和数据。
分割提示指的是完成图像分割需要的 prompt 或者提示语,最常见的 prompt 包括点、bbox(框)、掩模图和文本描述。任务要求收到任意提示符时均需要输出至少一个有效 mask,即使提示符存在歧义。比如衣服上的点可能是想分割衣服,也可能是想区分人体。这两者至少需要输出一个。
如下图所示,SAM 结构简单,包括一个图像编码器,一个 prompt 编码器和一个轻量级的解码器。
此外,一个大规模的数据集是必不可少的,现有的数据集无法胜任这个任务。故设计了一个数据引擎去制造大量的高质量数据来解决这个问题,通过数据引擎可以得到数据集 SA-1B,总共包含了 1100 万张高分辨率图片和 11 亿个 mask。
关于 Image encoder,输入图像输入前被预处理为 1024*1024,Image encoder 采用MAE VIT-H/16,是经典的视觉 Transformer 结构,最后输出(256,64,64)的图像 embedding。
关于 Prompt encoder,根据不同的 prompt 会有不同的编码方式,点和框的 embedding 通过位置编码获得,Mask 的 embedding 通过卷积操作获得,文本的 embedding 则是通过 Clip 的 encoder 获得。
关于 Mask decoder,首先做 prompt 的 self-attention, prompt 到图像 embedding 的 Cross-attention。Cross-attention 是指在有两个相同维度序列的情况下,而其中一个序列用作查询 Q 输入,而另一个序列用作键 K 和值 V 输入。将两个相同维度的嵌入序列不对称地组合在一起。然后,右侧 MLP 均为三层,输出维度与图像 embedding channel 相同的向量,左侧 MLP 为 2048 个神经元,主要作用为聚合全局特征。使用 MLP 更新 token,再做图像 embedding 到 prompt 的 Cross-attention。经过两轮 decode layer 之后,token 再次与图像 embedding 进行 Cross-attention,output token 作为可训练参数在 decoder 前加入到 prompt 中,分别通过两个 MLP,得到 mask 和 mask 的 IOU。
从医学角度理解 SAM 的效用
SAM 支持三种主要的分割模式:全自动分割模式、边界框模式和点模式,下图是腹部 CT 在不同 Prompt 下 SAM 的分割结果:
全自动分割模式根据图像强度将整个图像划分为六个区域。然而,由于两个主要原因,这种分割结果的实用性有限。一方面,分割结果没有语义标签。另一方面,在临床情景中,医生主要关注有意义的感兴趣区域,如肝脏、肾脏、脾脏和病变。基于边界框的分割模式仅需给出右肾的左上和右下点,就可以生成较好的结果。对于基于点的分割模式,我们首先在右肾中心给出一个前景点,但分割结果包括整个腹部组织。然后,我们在过度分割区域添加一个背景点。分割掩码收缩到肝脏和右肾。在肝脏上添加另一个背景点后,我们最终获得了预期的肾脏分割。
总之,当将 SAM 应用于医学图像分割时,全自动分割模式容易产生无用的区域划分,基于点的模式模糊不清且需要多次预测-校正迭代。相比之下,基于边界框的模式可以明确指定感兴趣区域,无需多次尝试和错误即可获得合理的分割结果。此外,常用的标注方法之一是在放射学中标注最长直径,如固态肿瘤的反应评估标准(RECIST)。基于 RECIST 标注,可以轻松获得目标的边界框提示。因此,我们认为在使用 SAM 进行医学图像分割时,基于边界框的分割模式比全自动分割和基于点的模式具有更广泛的实用价值。
MedSAM
MedSAM 的目标是创建一种用于细分各种医疗图像的通用工具。为了使 SAM 适应医学图像分割,需要选择适当的用户 Prompt 和网络组件进行微调。SAM 的网络架构包含三个主要组件:图像编码器、提示编码器和掩码解码器。
MedSAM 选择微调掩码解码器组件。图像编码器基于 VIT,它在 SAM 中具有最大的计算开销。为了最大限度地降低计算成本,冻结了图像编码器。提示编码器对边界框的位置信息进行编码,可以从 SAM 中预先训练的边界框编码器中重复使用,因此也会冻结该组件。其余需要微调的部分是掩码解码器。
此外,预先计算了所有训练图像的图像嵌入,以避免重复计算每个提示的图像嵌入,这显著提高了训练效率。掩码解码器只需要生成一个掩码而不是三个掩码,因为在大多数情况下,边界框提示符可以清楚地指定预期的分割目标。
实验
整理了一个包含 33 个分割任务的大型多样化数据集,包括各种分割目标,例如脑心室、脑瘤、小脑、胆囊、心脏左心室、肝脏、胰腺、前列腺、腹部肿瘤、COVID-19 感染、头颈部肿瘤、胸腔积液、胃、乳腺肿瘤、血管、心脏和肺部、息肉、视网膜图像中的血管和图像中的结肠腺分割。
医学图像的强度值范围很广,这会使训练变得不稳定。为了解决这个问题,将所有图像标准化到相同的强度范围。对于 CT 图像,他们将强度值限制在 [-500,1000] 的范围,因为该范围涵盖了大多数组织。对于其他图像,他们将强度值削减到 0.95 到 99. 5百分位之间。然后,他们将所有强度值标准化到 [0,255] 范围,并将图像大小调整为 256 × 256 × 3 的统一大小。总而言之,整理了一个庞大而多样的数据集并对图像进行了预处理,以确保MedSAM 模型的稳定训练。
下表是在 3D 的不同模态数据上,MedSAM 和 SAM 的对比结果:
下表是在 2D 的不同模态数据上,MedSAM 和 SAM 的对比结果:
下图分别在 3D 和 2D 数据上做 MedSAM 和 SAM 的分割结果可视化,在同一个 Prompt 下,MedSAM 效果要好很多。
总结
MedSAM 支持用户在自定义数据集上微调 SAM,提供带有小型数据集(包括 2D 和 3D)的分步教程,链接在:https://drive.google.com/file/d/1EvVBTSa9L7pDTmUOp-MHXxGD1lrU9Txk/view?usp=share_link
参考
-
https://arxiv.org/pdf/2304.12306.pdf
-
https://github.com/bowang-lab/MedSAM
相关文章:
将 Segment Anything 扩展到医学图像领域
文章目录 前言技术交流SAM 拆解分析从医学角度理解 SAM 的效用MedSAM实验总结 前言 SAM 是一种在自然图像分割方面取得成功的模型,但在医学图像分割方面表现不佳。MedSAM 首次尝试将 SAM 的成功扩展到医学图像,并成为用于分割各种医学图像的通用工具。为…...
毕业5年,技术越来越好,混的却越来越差...
别人都是越来越好,而我是越来越差! 17年,从一个普通的本科毕业,那个时候的我,很迷茫,简历上的求职岗位都不知道写什么,因为家里是农村的,朴实的父母也帮不上什么忙,关于…...
C#实现把txt文本数据快速读取到excel中
主要介绍了C#实现把txt文本数据快速读取到excel中,本文直接给出示例代码,需要的朋友可以参考下 今天预实现一功能,将txt中的数据转到excel表中,做为matlab的数据源。搜集一些c#操作excel的程序。步骤如下: 下载一个Microsoft.Office.Interop.Excel.dll 在项目中引用。 编…...
Office转换需要用到的SDK(建议)
PDF相关SDK1. PDFBox:一个基于Java的开源库,可以读取、创建和操作PDF文件。2. iText:一个用于Java和.NET的开源库,可以创建、编辑和操作PDF文件。3. MuPDF:一个轻量级的开源PDF阅读器和渲染器,可用于创建和…...
python语法入门到面向过程编程(二)
类型总结 一:整形基本使用(int) 1 int用途:年龄 号码 等级… 2 定义方式 age10 ageint(10) xint(‘1111’) int只能将纯数字的字符串转成十进制的整型 print(type(x)) 3 整形常用操作内置的方法 算数运算(、—、*、/࿰…...
Java常用类
基本数据类型包装类 Java是一种纯面向对象语言,但是java中有8种基本数据类型,破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象,java又给每种基本数据类型分别匹配了一个类,这个类我们称之为包装类/封装类。每个基本数据…...
4.30下周美联储携非农来袭黄金多空该如何布局?
近期有哪些消息面影响黄金走势?下周黄金多空该如何研判? 黄金消息面解析:周五(4月28日)当周金价维持震荡交投,金价基本持稳于2000美元下方。支撑和打压金价的因素参半。经济衰退的担忧,以及避险情绪支持金价&#x…...
利用python查找指定目录下大于300M的文件
直接上代码,欢迎小伙伴们交流 import os def getBigFile(path, filesize): # 遍历指定目录及其子目录 for dirpath, dirnames, filenames in os.walk(path): for filename in filenames: target_file os.path.join(dirpath, filename…...
浅尝ChatGPT使用之Python字典嵌套排序
一、背景 所负责的项目从v1.0升级到v2.0之后,发送到kafka的Json数据字段顺序和内容有所改变, v1.0版本推送数据样例: {"name": "小王子","author": "安托万德圣-埃克苏佩里(1900-1944&#…...
最大网络流算法之dinic算法详解
1、题目描述 On the Internet, machines (nodes) are richly interconnected, and many paths may exist between a given pair of nodes. The total message-carrying capacity (bandwidth) between two given nodes is the maximal amount of data per unit time that can b…...
051、面试必刷TOP101--链表(230503)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言链表1、BM1 反转链表2、BM2 链表内指定区间反转3、BM3 链表中的节点每k个一组翻转4、BM4 合并两个排序的链表5、BM5 合并k个已排序的链表6、BM6 判断链表中是否…...
开源中国面试准备
dockerFile常见命令 1、FROM 设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上下载 2、MAINTAINER 镜像作者的信息,比如名字或邮箱地址 语法:MAINTAINER n…...
基于J2EE的B2C电子商务系统开发与实现
摘要 当今社会,科学技术突飞猛进,知识经济初见端倪。电子商务作为一种新型的贸易方式,极大地促进了全球经济贸易的发展,同时也正在改变人们的生活方式和思想观念。电子商务是指整个贸易活动实现电子化,交易各方以电子交易方式而进行的商业交易。世界贸易组织电子商务专题报告定…...
三分钟教你看懂 spring 官方文档
新手如何学会查看官方文档API 首先进入官网:这里以 spring boot 为例 ,进入spring 官方地址 我们进入 spring boot 这里我们要看文档当然是要 learn 了,所以点进去。 我需要的东西在 IO 模块里面,点 IO 进入 发送邮件是不是有了…...
基于simulink使用射频模块集天线块对天线阵列的射频系统进行建模
一、前言 本 例 说明 如何 对 包括 天线 阵列 的 MIMO 接收 和 发射 RF 系统 进行 建模。该设计从单个RF链的预算分析开始,然后扩展到多个天线。RF Blockset 天线模块对天线阵列进行全波分析,支持对效应和缺陷进行高保真建模,并结合射频系统的…...
从小学习编程的路线与编程进阶
对于从小学习编程的学生,通常会从基础的编程概念和语法开始学习。以下是一个可能的路线: 1. 学习计算机基础知识,包括计算机硬件、操作系统和网络等基本概念。 2. 掌握基本的编程概念和语法,例如变量、数据类型、条件语句和循环语…...
[实训] 实验1-SPI数据传输基础实验(上)
目 录 一、实验目的 二、实验仪器及器件 三、实验内容及原理 四、实验步骤 五、实验测试数据表格记录 六、实验数据分析及处理 七、实验结论与感悟 一、实验目的 使用FPGA/ARM实现SPI数据传输实验;实现数据传输程序的编写、下载…...
微软骚操作恶心Win10用户,上网得先看广告
IE 浏览器在几个月前被彻底禁用,预装了快30年的老古董也确实到了退役的时候。 而微软也早有准备,2015年随着 Win10 发布推出了 Microsoft Edge 浏览器。 2020年迁移到 Chromium 内核让其成为了主流浏览器之一。 和 Chromium 系其他浏览器一样支持扩展插…...
为了做低代码平台,这些年我们对.NET的DataGridView做的那些扩展
我们的低代码开发平台从一开始决定做的时候,就追求未来能够支持多种类型的客户端,目前支持Winform,Web,H5,FlutterAPP,当然了,未来也有可能会随着实际的需要淘汰掉一些客户端的。 为了系统更易…...
洛谷 子集积 题解
题目 P1 背包 子集积 > m >m >m 个数并不好求,考虑子集积 ≤ m \le m ≤m 的个数 x x x,答案即为 ( 2 n − x ) (2^n - x) (2n−x)。 对于子集积 ≤ m \le m ≤m 的个数,可以化为 0-1 背包问题做, f i , j f_{i,…...
Boost笔记 1:下载、编译、安装、测试
1. 下载 当前版本是1.82,下载链接: https://boostorg.jfrog.io/artifactory/main/release/1.82.0/source/ 2. 安装编译依赖库 本地环境是Ubuntu 22.04,需要安装以下依赖库,部分影响boost相关功能的开启,部分影响编译…...
tiechui_lesson01_入口函数和卸载函数
主要讲解入口函数和卸载函数。 #include <ntifs.h>VOID nothing(HANDLE ppid, HANDLE mypid, BOOLEAN bcreate) {UNREFERENCED_PARAMETER(ppid);UNREFERENCED_PARAMETER(mypid);UNREFERENCED_PARAMETER(bcreate);DbgPrint("processNotify\n"); }VOID DriverU…...
密码学【java】初探究加密方式之非对称加密
文章目录 非对称加密1 常见算法2 生成公钥和私钥3 私钥加密4 私钥加密 公钥解密5 公钥和私钥的保存和读取5.1 **保存公钥和私钥**5.2 读取公钥和私钥 非对称加密 非对称加密算法又称现代加密算法。非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。与对…...
网络安全和黑客技能:15本必读书籍推荐
前言 网络安全和黑客技能紧密相连。想要有效地防范黑客攻击,了解黑客的技能和思维方式非常重要。而要想成为一名合格的白帽黑客,也需要深入理解网络安全的基本原理和最佳实践。本文将介绍15本网络安全和黑客书籍,既包括了防范黑客攻击的指南…...
电话号码的字母组合
题目:17. 电话号码的字母组合 - 力扣(Leetcode) 思路: 给定一个电话号码字符串 digits,须输出它所能表示的所有字母组合。我们可以先定义一个数字字符到字母表的映射表 numToStr,然后再用 Combine 函数递归…...
PAT A1032 Sharing
1032 Sharing 分数 25 作者 CHEN, Yue 单位 浙江大学 To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, l…...
Git常见问题汇总
问题:Your branch is ahead of ‘origin/master’ by 1 commit 原因:你的本地分支高于远程仓库一次提交, 同步更新下,执行命令: git push origin master问题:warning: LF will be replaced by CRLF in main.lua The …...
设计模式之代理模式(静态代理动态代理)
目录 1、什么是代理模式 2、代理模式的结构 3、代理模式的实现 3.1 静态代理和动态代理概念 3.2 静态代理 3.3 动态搭理 3.3.1 代码实现 3.3.2 Proxy类讲解 4、动态代理VS静态代理 5、代理模式优缺点 1、什么是代理模式 由于某些原因需要给某对象提供一个代理以控制对…...
Java并发编程基础知识概述
前言 在现代计算机系统和服务器中,多线程并行执行已经成为常态,而且并发编程能够充分利用系统资源,提高程序处理效率和质量。因此,Java并发编程是Java程序员必须掌握的重要技能之一。 线程和进程 在操作系统中,进程是…...
Redis超详细入门手册教程!还不快来看看?
地址: RedisRedis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures …https://redis.io/ 1:NoSQL简介 1.1:数据库应用的演变历程 单…...
龙江做网站/网站都有哪些
作者:张楷露、张琪 封面:自己想吧一、基本思想的异同共同点从二者表达的含义上看,主成分分析法和因子分析法都寻求少数的几个变量(或因子)来综合反映全部变量(或因子)的大部分信息,变量虽然较原始变量少,但所包含的信…...
html 修改 wordpress/十大成功营销策划案例
转自:http://hi.baidu.com/yufeng0103/blog/item/b5dc3225f8c43c6d35a80f41.htmlasp.net2.0新添加了对web.config直接操作的功能。开发的时候有可能用到在web.config里设置配置文件,其实是可以通过程序来设置这些配置节的。asp.net2.0需要添加引用&#…...
西安网站建设xs029/网络营销策划内容
一、TextView TextView (文本框),用于显示文本的一个控件。 ①、文本的字体尺寸单位为sp: ②、sp: scaled pixels(放大像素). 主要用于字体显示。文本常用属性: (一)文本设置边框 1. 实现原理: 编写一个ShapeDra…...
elegant wordpress/网站的推广方式有哪些
“转正”、“转型”、“转强” 这是属于中国经济的关键词! 在今年的困境之下,中国经济展现出了强大的韧性,从复产复工,到全面转正,再到世界经济的引擎,一张漂亮的成绩单赢得全球关注。国际货币基金组织&…...
修改wordpress后台文字/泰州seo网络公司
urllib 模块提供的 urlretrieve() 函数。urlretrieve() 方法直接将远程数据下载到本地。 >>> help(urllib.urlretrieve) Help on function urlretrieve in module urllib: urlretrieve(url, filenameNone, reporthookNone, dataNone) 参数 finename 指定了保存本地路径…...
芜湖市建设工程质量监督站官方网站/公关公司排名
Redis分布式锁锁的特点为了保证数据的最终一致性,使用Redis分布式锁 当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。 锁的特点 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件&…...