当前,许多强大的开源基础模型的发布,加上微调技术的不断进步,已经带来了机器学习和人工智能的新范式。整体来看,这场革命的核心在于转换器模型(https://arxiv.org/pdf/1706.03762)。
虽然除了资金充足的公司之外,所有公司都曾经无法获得高精度的特定领域模型;但是如今,基础模型范式甚至能够允许学生或独立研究人员获得适度的资源,以实现与最先进的专有模型相抗衡的结果。
微调技术可以极大地提高模型任务的性能
本文旨在探讨Meta公司的分割一切模型(SAM:Segment Anything Model)在河流像素分割遥感任务中的应用。如果您想直接跳到有关项目代码,那么这个项目的源文件可以在GitHub(https://github.com/geo-smart/water-surf/blob/main/book/chapters/masking_distributed.ipynb)上获得,数据也可以在HuggingFace(https://huggingface.co/datasets/stodoran/elwha-segmentation-v1)上找到。当然,我还是建议您先阅读一下本文。
项目需求
第一个任务是找到或创建一个合适的数据集。根据现有文献,一个良好的SAM微调数据集将至少包含200–800张图像。过去十年深度学习进步的一个关键教训是,数据越多越好,这样一来,更大规模的微调数据集就不会出错。然而,基础模型研究的一个重要目标是,允许即使是相对较小的数据集也足以实现强大的性能。
此外,我们还需要有一个HuggingFace帐户,这可以在链接https://huggingface.co/join处创建。使用HuggingFace,我们可以随时从任何设备轻松存储和获取数据集,这使得协作和再现性更加容易。
最后一个需求是,具备一台带有GPU的设备,我们可以在其上运行训练工作流程。通过Google Colab(https://colab.research.google.com/)免费提供的Nvidia T4 GPU足够强大,可以在12小时内对1000张图像进行50个时期的最大SAM模型检查点(sam-vit-huge)训练。
为了避免在托管运行时因使用限制而影响进度,您可以安装Google Drive并将每个模型检查点保存在那里。或者,部署并连接到GCP虚拟机(https://console.cloud.google.com/marketplace/product/colab-marketplace-image-public/colab)以完全绕过限制。如果您以前从未使用过GCP,那么您就有资格获得300美元的免费信贷,这足以支持对模型进行至少十几次的训练了。
理解SAM架构
在开始训练之前,我们需要先来了解一下SAM模型的架构。该模型包含三个组件:一个是从稍经修改的掩码自动编码器(https://arxiv.org/pdf/2111.06377)得到的图像编码器,一个能够处理各种提示类型的相当灵活的提示编码器,还有一个快速轻量级的掩码解码器。这种设计架构背后的一个重要动机是允许在边缘设备上(例如在浏览器中)进行快速、实时的分割,因为图像嵌入只需要计算一次,并且掩码解码器可以在CPU上运行约50ms。
SAM的模型架构向我们展示了模型接受哪些输入以及需要训练模型的哪些部分(图片来源于SAM GitHub:https://github.com/facebookresearch/segment-anything)。
理论上,图像编码器已经学会了嵌入图像的最佳方式,包括识别形状、边缘和其他一般视觉特征等。类似地,在理论上,提示编码器已经能够以最优方式对提示进行编码。掩码解码器是模型架构的一部分,它采用这些图像和提示嵌入,并通过对图像和提示嵌入式进行操作来实际创建掩码。
因此,一种方法是在训练期间冻结与图像和提示编码器相关联的模型参数,并且仅更新掩码解码器权重。这种方法的优点是允许有监督和无监督的下游任务,因为控制点和边界框提示都是自动的,并且可供人工使用。