首页 > 科技周边 > 人工智能 > 自定义数据集上的微调SAM 2:教程

自定义数据集上的微调SAM 2:教程

Jennifer Aniston
发布: 2025-03-04 09:26:13
原创
882 人浏览过

meta的细分市场模型2(SAM 2)是分割技术的最新创新。这是Meta的第一个统一模型,可以实时分段图像和视频中的对象。

>但是为什么要微调SAM 2如果已经可以分割任何东西?

> SAM 2是强大的开箱即用,但其在稀有或特定领域的任务上的性能可能并不总是满足期望。微调使您可以根据自己的特定需求调整SAM2,从而提高其特定用例的准确性和效率。

在本文中,我将通过SAM 2的微调过程逐步指导您。 SAM2是由Meta开发的基础模型,用于在图像和视频中迅速进行视觉分割。与主要专注于静态图像的前身SAM不同,SAM2也旨在处理视频分割的复杂性。

SAM2-任务,模型和数据(来源:Ravi等,2024)

>它采用了带有流内存的变压器体系结构,从而实现了实时视频处理。 SAM 2的培训涉及一个庞大而多样的数据集,其中包含新型SA-V数据集,其中包括60万个Masklet注释,涉及51,000个视频。

其数据引擎允许进行交互式数据收集和模型改进,使该模型能够分割任何可能的东西。该引擎使SAM 2能够连续学习和适应,从而使其在处理新的和具有挑战性的数据方面更有效。但是,对于特定于领域的任务或稀有物体,微调对于实现最佳性能至关重要。

为什么要微调SAM2?自定义数据集上的微调SAM 2:教程 在SAM 2的上下文中,微调是在特定数据集上进一步培训预训练的SAM 2模型以增强其针对特定任务或域的性能的过程。虽然SAM 2是一种在广泛而多样的数据集中训练的强大工具,但其通用性质可能并不总是为专业或稀有任务带来最佳结果。

>

例如,如果您正在从事一个需要识别特定肿瘤类型的医学成像项目,则该模型的性能可能会由于其广义培训而下降。

微调过程

通过允许您将模型调整到特定数据集中,

微调SAM 2可以解决此限制。此过程提高了模型的准确性,并使其对您独特的用例更有效。

>

这是微调SAM 2的关键好处:

>
  1. 提高精度:通过对特定数据集上的模型进行微调,您可以显着提高其准确性,从而确保目标应用程序的更好性能。
  2. >专业细分:微调使该模型能够熟练地分割与项目相关的特定对象类型,视觉样式或环境,从而提供了量身定制的结果,该结果是通用模型可能无法实现的。
  3. >效率:微调通常比从头开始训练模型更有效。它通常需要更少的数据和时间,这是将模型快速调整为新任务或利基任务的实用解决方案。
  4. 开始使用微调SAM 2:先决条件
要开始进行微调SAM 2,您需要拥有以下先决条件:

>访问SAM 2模型和代码库:可以访问SAM 2模型及其代码库。您可以从Meta的GitHub存储库中下载预先训练的SAM 2模型。

>
    >合适的数据集:您需要一个数据集,其中包括基础真相分割掩码。对于本教程,我们将使用胸部CT分段数据集,您可以下载并为培训做准备。
  1. 计算资源:微调SAM 2需要具有足够的计算能力的硬件。强烈建议使用GPU来确保该过程有效且易于管理,尤其是在使用大型数据集或复杂模型时。在此示例中,使用了Google Colab上的A100 GPU。
  2. >
  3. 软件和其他要求:
python 3.11或更高

> pytorch

    openCV:使用!pip安装opencv-python
  • >为微调SAM 2
  • 准备数据集
  • 数据集的质量对于微调SAM 2模型至关重要。具有准确的分割口罩的高质量注释图像或视频对于实现最佳性能至关重要。精确的注释使模型能够学习正确的功能,从而在现实世界应用程序中提高了更好的细分精度和鲁棒性。
1。数据采集​​

>第一步涉及获取数据集,该数据集构成了培训过程的骨干。我们从Kaggle采购了我们的数据,Kaggle是一个可靠的平台,可提供各种数据集。使用Kaggle API,我们以所需的格式下载了数据,以确保图像和相应的分割掩码很容易用于进一步处理。

>

2。数据提取和清洁

下载数据集后,我们执行了以下步骤:>
  • >解压缩和清洁:从下载的zip文件中提取数据,并删除不必要的文件以节省磁盘空间。
  • ID提取:提取图像和口罩的唯一标识符(ID),以确保在训练期间正确映射。
  • >
  • >删除不必要的文件:删除任何嘈杂或无关的文件,例如具有已知问题的某些图像,以维护数据集的完整性。

3。转换为可用格式

由于SAM2模型需要以特定格式的输入,因此我们将数据转换为以下内容:>

    > diCom到numpy:读取DICOM图像并将其存储为Numpy阵列,然后将其调整为512x512像素的标准尺寸。 nrrd to numpy for masks:类似地,处理了包含肺,心脏和气管掩模的NRRD文件,并作为Numpy数组保存并保存。然后对这些掩码进行重塑以匹配相应的图像。
  • >转换为JPG/PNG:为了更好地可视化和兼容性,将Numpy阵列转换为JPG/PNG格式。此步骤包括标准化图像强度值并确保正确定向掩模。
  • 4。保存和组织数据
  • 然后将处理后的图像和掩码组织到各自的文件夹中,以便在微调过程中访问。此外,这些图像和口罩的路径被写入CSV文件(Train.CSV),以促进培​​训期间的数据加载。
5。可视化和验证

>最后一步涉及验证数据集以确保其准确性:>

可视化:我们通过覆盖图像上的掩码来可视化图像面罩对。这有助于我们检查口罩的一致性和准确性。

>

检查:通过检查一些样本,我们可以确认数据集已正确准备并准备好进行微调。

    这是一本快速笔记本,可以带您浏览数据集创建的代码。您可以浏览此数据创建路径,也可以直接使用与先决条件中提到的格式相同格式的任何数据集。
  • >
  • 微调SAM2
  • 段的任何模型2都包含几个组件,但是在这里进行微调的捕获是仅训练轻质组件,例如蒙版解码器和提示编码器,而不是整个模型。微调该模型的步骤如下:

步骤1:安装SAM-2

>要启动微调过程,我们需要安装SAM-2库,这对于任何模型(SAM2)至关重要。该模型旨在有效地处理各种细分任务。该安装涉及从GitHub克隆SAM-2存储库并安装必要的依赖项。

此代码段确保已正确安装SAM2库并准备在我们的微调工作流程中使用。>

>步骤2:下载数据集

>安装了SAM-2库后,下一步是获取我们将用于微调的数据集。我们使用Kaggle上可用的数据集,特别是胸部CT分割数据集,其中包含肺,心脏和气管的掩模。

数据集包含:

    images.zip:rgb格式的图像
  • > masks.zip:RGB格式的分割蒙版
  • > train.csv:带有图像名称的CSV文件

自定义数据集上的微调SAM 2:教程 来自CT扫描数据集的图像

在此博客中,我们将仅使用肺部的图像和蒙版进行细分。 Kaggle API允许我们将数据集直接下载到我们的环境中。我们首先将kaggle.json文件从kaggle上传到可轻松访问任何数据集。

>

要获取kaggle.json,请转到用户配置文件下的“设置”选项卡,然后选择“创建新令牌”。这将触发Kaggle下载。 json,一个包含您API凭据的文件。

>

解压缩数据:

!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
登录后复制
登录后复制
登录后复制

>准备好数据集后,让我们开始微调过程。正如我之前提到的,这里的关键是仅对SAM2的轻量级组件进行微调,例如蒙版解码器和提示编码器,而不是整个模型。这种方法效率更高,需要更少的资源。

# get dataset from Kaggle
from google.colab import files
files.upload()  # This will prompt you to upload the kaggle.json file

!mkdir -p ~/.kaggle
!mv kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
!kaggle datasets download -d polomarco/chest-ct-segmentation
登录后复制
登录后复制
登录后复制
>步骤3:下载SAM-2检查点

>在微调过程中,我们需要从预先训练的SAM2模型权重开始。这些称为“检查点”的权重是进行进一步训练的起点。检查点已经在各种图像上进行了培训,并且通过在我们的特定数据集中进行微调,我们可以在目标任务上实现更好的性能。

在此步骤中,我们下载了与不同型号大小相对应的各种SAM-2检查点(例如Tiny,Small,Base_plus,大)。可以根据可用的计算资源和手头的特定任务来调整检查点的选择。

步骤4:数据准备
!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
登录后复制
登录后复制
登录后复制

>下载数据集后,下一步是为培训做准备。这涉及将数据集分配到培训和测试集中,并创建可以在微调过程中馈入SAM 2模型的数据结构。

>

>我们将数据集分为训练集(80%)和测试集(20%),以确保我们可以在培训后评估模型的性能。培训数据将用于微调SAM 2模型,而测试数据将用于推理和评估。

将数据集拆分为培训和测试集后,下一步涉及创建二进制掩码,选择这些掩码中的要点,并可视化这些元素以确保正确处理数据。 

1。读取和调整图像:该过程首先从数据集中随机选择图像及其相应的掩码。图像从BGR转换为RGB格式,这是大多数深度学习模型的标准颜色格式。相应的注释(掩码)以灰度模式读取。然后,将图像和注释掩码调整为1024像素的最大尺寸,保持纵横比以确保数据拟合在模型的输入要求中并减少计算负载。

!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
登录后复制
登录后复制
登录后复制
2。分割掩码的二进化:多类注释掩码(可能具有带有不同像素值的多个对象类)被转换为二进制掩码。此掩盖突出显示了图像中所有感兴趣的区域,将分割任务简化为二进制分类问题:对象与背景。然后使用5x5内核侵蚀二进制蒙版。

侵蚀会稍微降低面具的大小,这有助于避免选择点时的边界效应。这样可以确保选定的点很好地在对象的内部内而不是其边缘旁边,这可能是嘈杂的或模棱两可的。

>

关键点是从侵蚀的掩码中选择的。这些观点在微调过程中充当提示,指导模型将注意力集中在哪里。这些点是从对象内部随机选择的,以确保它们具有代表性,并且不受嘈杂边界的影响。

3。可视化:此步骤对于验证数据预处理步骤是否正确执行至关重要。通过视觉检查二进制面膜上的要点,您可以确保模型在培训期间会收到适当的输入。最后,对二进制掩码进行了重塑并正确格式化(具有适合模型输入的尺寸),并且该点也被重塑以在训练过程中进一步使用。该函数返回已处理的图像,二进制掩码,选定点以及找到的掩码数量。

# get dataset from Kaggle
from google.colab import files
files.upload()  # This will prompt you to upload the kaggle.json file

!mkdir -p ~/.kaggle
!mv kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
!kaggle datasets download -d polomarco/chest-ct-segmentation
登录后复制
登录后复制
登录后复制
>上面的代码返回以下图,其中包含来自数据集的原始图像及其二进制掩码和带有点的二进制掩码。 

!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
登录后复制
登录后复制
登录后复制

原始图像,二进制掩码和带有数据集的点的二进制掩码。

自定义数据集上的微调SAM 2:教程步骤5:对SAM2模型进行微调

SAM2模型进行微调涉及多个步骤,包括加载模型,设置优化器和调度程序,并根据培训数据迭代更新模型权重。

>加载模型检查点:

我们首先使用预训练的检查点构建SAM2模型。然后将模型包裹在预测器类中,该类简化了设置图像,编码提示和解码蒙版的过程。

配置超参数

>我们配置了几个超参数,以确保模型有效地学习,例如学习率,权重衰减和梯度积累步骤。这些超参数控制学习过程,包括模型更新其权重的速度以及如何避免过度拟合。随时可以玩这些。

!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
登录后复制
登录后复制
登录后复制

>优化器负责更新模型权重,而调度程序则调整训练期间的学习率以改善收敛性。通过微调这些参数,我们可以实现更好的分割精度。

开始训练

实际的微调过程是迭代的,在每个步骤中,仅通过模型传递了一批肺部图像和掩模,并且计算损失并用于更新模型权重。

在每次迭代期间,模型会处理一批图像,计算分割掩码,并将它们与地面真相进行比较以计算损失。然后使用此损失来调整模型权重,从而逐渐提高模型的性能。训练约3000个时期后,我们获得了约72%的准确性(IOU - 交叉点)。

>步骤6:使用微型模型
# get dataset from Kaggle
from google.colab import files
files.upload()  # This will prompt you to upload the kaggle.json file

!mkdir -p ~/.kaggle
!mv kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
!kaggle datasets download -d polomarco/chest-ct-segmentation
登录后复制
登录后复制
登录后复制
推断 然后,该模型可以用于推理,在该推理中可以预测新的,看不见的图像上的分割掩码。从read_images和get_points助手函数开始,以获取推理图像及其掩码以及关键点。

然后,加载您要推断的样本图像,以及新调整的权重,并执行推理设置torch.no_grad()。

在此步骤中,我们使用微型模型来生成用于测试图像的分割掩码。然后,将预测的面膜与原始图像和地面真相面具一起进行可视化,以评估模型的性能。

!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
登录后复制
登录后复制
登录后复制

测试数据上的最终分割图像

!wget -O sam2_hiera_tiny.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt"
!wget -O sam2_hiera_small.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt"
!wget -O sam2_hiera_base_plus.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt"
!wget -O sam2_hiera_large.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt"
登录后复制
结论

>微调SAM2提供了一种实用方法来增强其特定任务的功能。无论您是从事医学成像,自动驾驶汽车还是视频编辑,微调都可以让您使用SAM2来满足您的独特需求。通过遵循本指南,您可以调整SAM2的项目并获得最新的细分结果。

对于更高级的用例,请考虑对SAM2的其他组件进行微调,例如图像编码器。尽管这需要更多的资源,但它提供了更大的灵活性和改进的性能。自定义数据集上的微调SAM 2:教程>

赚取顶级AI认证

证明您可以有效,负责任地使用AI.获得认证,获得录用

以上是自定义数据集上的微调SAM 2:教程的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板