meta的细分市场模型2(SAM 2)是分割技术的最新创新。这是Meta的第一个统一模型,可以实时分段图像和视频中的对象。
>但是为什么要微调SAM 2如果已经可以分割任何东西?> SAM 2是强大的开箱即用,但其在稀有或特定领域的任务上的性能可能并不总是满足期望。微调使您可以根据自己的特定需求调整SAM2,从而提高其特定用例的准确性和效率。
在本文中,我将通过SAM 2的微调过程逐步指导您。 SAM2是由Meta开发的基础模型,用于在图像和视频中迅速进行视觉分割。与主要专注于静态图像的前身SAM不同,SAM2也旨在处理视频分割的复杂性。SAM2-任务,模型和数据(来源:Ravi等,2024)
其数据引擎允许进行交互式数据收集和模型改进,使该模型能够分割任何可能的东西。该引擎使SAM 2能够连续学习和适应,从而使其在处理新的和具有挑战性的数据方面更有效。但是,对于特定于领域的任务或稀有物体,微调对于实现最佳性能至关重要。
为什么要微调SAM2?
在SAM 2的上下文中,微调是在特定数据集上进一步培训预训练的SAM 2模型以增强其针对特定任务或域的性能的过程。虽然SAM 2是一种在广泛而多样的数据集中训练的强大工具,但其通用性质可能并不总是为专业或稀有任务带来最佳结果。
例如,如果您正在从事一个需要识别特定肿瘤类型的医学成像项目,则该模型的性能可能会由于其广义培训而下降。
微调过程
通过允许您将模型调整到特定数据集中,这是微调SAM 2的关键好处:
>>访问SAM 2模型和代码库:可以访问SAM 2模型及其代码库。您可以从Meta的GitHub存储库中下载预先训练的SAM 2模型。
>> pytorch
>
2。数据提取和清洁由于SAM2模型需要以特定格式的输入,因此我们将数据转换为以下内容:
可视化:我们通过覆盖图像上的掩码来可视化图像面罩对。这有助于我们检查口罩的一致性和准确性。
步骤1:安装SAM-2
此代码段确保已正确安装SAM2库并准备在我们的微调工作流程中使用。 >安装了SAM-2库后,下一步是获取我们将用于微调的数据集。我们使用Kaggle上可用的数据集,特别是胸部CT分割数据集,其中包含肺,心脏和气管的掩模。
>
>
解压缩数据: >准备好数据集后,让我们开始微调过程。正如我之前提到的,这里的关键是仅对SAM2的轻量级组件进行微调,例如蒙版解码器和提示编码器,而不是整个模型。这种方法效率更高,需要更少的资源。
在此步骤中,我们下载了与不同型号大小相对应的各种SAM-2检查点(例如Tiny,Small,Base_plus,大)。可以根据可用的计算资源和手头的特定任务来调整检查点的选择。
>下载数据集后,下一步是为培训做准备。这涉及将数据集分配到培训和测试集中,并创建可以在微调过程中馈入SAM 2模型的数据结构。 将数据集拆分为培训和测试集后,下一步涉及创建二进制掩码,选择这些掩码中的要点,并可视化这些元素以确保正确处理数据。 1。读取和调整图像:该过程首先从数据集中随机选择图像及其相应的掩码。图像从BGR转换为RGB格式,这是大多数深度学习模型的标准颜色格式。相应的注释(掩码)以灰度模式读取。然后,将图像和注释掩码调整为1024像素的最大尺寸,保持纵横比以确保数据拟合在模型的输入要求中并减少计算负载。
侵蚀会稍微降低面具的大小,这有助于避免选择点时的边界效应。这样可以确保选定的点很好地在对象的内部内而不是其边缘旁边,这可能是嘈杂的或模棱两可的。 关键点是从侵蚀的掩码中选择的。这些观点在微调过程中充当提示,指导模型将注意力集中在哪里。这些点是从对象内部随机选择的,以确保它们具有代表性,并且不受嘈杂边界的影响。
3。可视化:此步骤对于验证数据预处理步骤是否正确执行至关重要。通过视觉检查二进制面膜上的要点,您可以确保模型在培训期间会收到适当的输入。最后,对二进制掩码进行了重塑并正确格式化(具有适合模型输入的尺寸),并且该点也被重塑以在训练过程中进一步使用。该函数返回已处理的图像,二进制掩码,选定点以及找到的掩码数量。
>加载模型检查点: >我们配置了几个超参数,以确保模型有效地学习,例如学习率,权重衰减和梯度积累步骤。这些超参数控制学习过程,包括模型更新其权重的速度以及如何避免过度拟合。随时可以玩这些。 >优化器负责更新模型权重,而调度程序则调整训练期间的学习率以改善收敛性。通过微调这些参数,我们可以实现更好的分割精度。
在每次迭代期间,模型会处理一批图像,计算分割掩码,并将它们与地面真相进行比较以计算损失。然后使用此损失来调整模型权重,从而逐渐提高模型的性能。训练约3000个时期后,我们获得了约72%的准确性(IOU - 交叉点)。
测试数据上的最终分割图像
对于更高级的用例,请考虑对SAM2的其他组件进行微调,例如图像编码器。尽管这需要更多的资源,但它提供了更大的灵活性和改进的性能。 证明您可以有效,负责任地使用AI.获得认证,获得录用>步骤2:下载数据集
images.zip:rgb格式的图像
来自CT扫描数据集的图像
!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
# 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检查点
!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
>我们将数据集分为训练集(80%)和测试集(20%),以确保我们可以在培训后评估模型的性能。培训数据将用于微调SAM 2模型,而测试数据将用于推理和评估。
!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
2。分割掩码的二进化:多类注释掩码(可能具有带有不同像素值的多个对象类)被转换为二进制掩码。此掩盖突出显示了图像中所有感兴趣的区域,将分割任务简化为二进制分类问题:对象与背景。然后使用5x5内核侵蚀二进制蒙版。# 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
步骤5:对SAM2模型进行微调
我们首先使用预训练的检查点构建SAM2模型。然后将模型包裹在预测器类中,该类简化了设置图像,编码提示和解码蒙版的过程。
配置超参数
!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
实际的微调过程是迭代的,在每个步骤中,仅通过模型传递了一批肺部图像和掩模,并且计算损失并用于更新模型权重。
# 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助手函数开始,以获取推理图像及其掩码以及关键点。
在此步骤中,我们使用微型模型来生成用于测试图像的分割掩码。然后,将预测的面膜与原始图像和地面真相面具一起进行可视化,以评估模型的性能。
!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"
结论>
以上是自定义数据集上的微调SAM 2:教程的详细内容。更多信息请关注PHP中文网其他相关文章!