Skip to content

The repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.

License

Notifications You must be signed in to change notification settings

EanYang7/segment-anything

 
 

Repository files navigation

Segment Anything

Meta AI Research, FAIR

Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alex Berg, Wan-Yen Lo, Piotr Dollar, Ross Girshick

[Paper] [Project] [Demo] [Dataset] [Blog] [BibTeX]

SAM design

Segment Anything Model (SAM) 从诸如点或框之类的输入提示生成高质量的对象掩码,可用于为图像中的所有对象生成掩码。它已经在包含1100万张图像和11亿个掩码的数据集上进行了训练,并在各种分割任务上具有强大的零样本zero-shot性能。

安装

代码要求python>=3.8,以及pytorch>=1.7torchvision>=0.8。请按照这里的说明安装PyTorch和TorchVision的依赖项。强烈建议安装支持CUDA的PyTorch和TorchVision。


克隆存储库并在本地安装:

git clone https://github.com/facebookresearch/segment-anything.git
cd segment-anything
pip install -e .

建议先fork到自己仓库后再克隆


以下是必要的可选依赖项,用于掩码后处理、以COCO格式保存掩码、示例jupyter笔记本以及将模型导出为ONNX格式。运行示例jupyter笔记本还需要jupyter

pip install opencv-python pycocotools matplotlib onnxruntime onnx

入门

首先下载一个模型检查点。然后,可以使用以下几行代码从给定提示中获取掩码:

from segment_anything import SamPredictor, sam_model_registry
sam = sam_model_registry["<model_type>"](checkpoint="<path/to/checkpoint>")
predictor = SamPredictor(sam)
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)

或者为整个图像生成掩码:

from segment_anything import SamAutomaticMaskGenerator, sam_model_registry
sam = sam_model_registry["<model_type>"](checkpoint="<path/to/checkpoint>")
mask_generator = SamAutomaticMaskGenerator(sam)
masks = mask_generator.generate(<your_image>)

此外,可以使用命令行为图像生成掩码:

python scripts/amg.py --checkpoint <path/to/checkpoint> --model-type <model_type> --input <image_or_folder> --output <path/to/output>

有关更多详细信息,请参阅使用提示生成掩码自动生成对象掩码的示例笔记本。

ONNX导出

SAM的轻量级掩码解码器可以导出为ONNX格式,以便在支持ONNX运行时的任何环境中运行,例如在演示中展示的浏览器中。使用以下命令导出模型:

python scripts/export_onnx_model.py --checkpoint <path/to/checkpoint> --model-type <model_type> --output <path/to/output>

请参阅示例笔记本以了解如何通过SAM的骨干进行图像预处理,然后使用ONNX模型进行掩码预测的详细信息。建议使用PyTorch的最新稳定版本进行ONNX导出。

Web演示

demo/文件夹中有一个简单的单页React应用程序,展示了如何在支持多线程的Web浏览器中使用导出的ONNX模型运行掩码预测。请查看demo/README.md以获取更多详细信息。

模型检查点

提供了三个模型版本,具有不同的骨干大小。可以通过运行以下代码实例化这些模型:

from segment_anything import sam_model_registry
sam = sam_model_registry["<model_type>"](checkpoint="<path/to/checkpoint>")

单击下面的链接下载相应模型类型的检查点。

b:base基础模型

l:large较大模型

h:huge最大的模型

数据集

请参阅此处以获取有关数据集的概述。可以在此处下载数据集。通过下载数据集,您同意已阅读并接受了SA-1B数据集研究许可条款。

每个图像的掩码保存为json文件。它可以在以下格式的Python字典中加载。

{
    "image"                 : image_info,
    "annotations"           : [annotation],
}

image_info {
    "image_id"              : int,              # 图像id
    "width"                 : int,              # 图像宽度
    "height"                : int,              # 图像高度
    "file_name"             : str,              # 图像文件名
}

annotation {
    "id"                    : int,              # 注释id
    "segmentation"          : dict,             # 以COCO RLE格式保存的掩码。
    "bbox"                  : [x, y, w, h],     # 掩码周围的框,以XYWH格式表示
    "area"                  : int,              # 掩码的像素面积
    "predicted_iou"         : float,            # 模型对掩码质量的自身预测
    "stability_score"       : float,            # 掩码质量的度量
    "crop_box"              : [x, y, w, h],     # 用于生成掩码的图像的裁剪,以XYWH格式表示
    "point_coords"          : [[x, y]],         # 输入模型生成掩码的点坐标
}

图像ID可以在sa_images_ids.txt中找到,可以使用上述链接下载。

要将COCO RLE格式的掩码解码为二进制:

from pycocotools import mask as mask_utils
mask = mask_utils.decode(annotation["segmentation"])

请参阅此处以获取有关如何操作以RLE格式存储的掩码的更多说明。

引用Segment Anything

如果您在研究中使用SAM或SA-1B,请使用以下BibTeX条目。

@article{kirillov2023segany,
  title={Segment Anything},
  author={Kirillov, Alexander and Mintun, Eric and Ravi, Nikhila and Mao, Hanzi and Rolland, Chloe and Gustafson, Laura and Xiao, Tete and Whitehead, Spencer and Berg, Alexander C. and Lo, Wan-Yen and Doll{\'a}r, Piotr and Girshick, Ross},
  journal={arXiv:2304.02643},
  year={2023}
}

About

The repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.5%
  • Shell 0.5%