Segment Anything Model 2 (SAM 2) Сегмент выпущен как компания Meta Модернизированная версия Anything Model (SAM), продемонстрировавшая значительную производительность в области сегментации изображений.
Ссылка на документ: https://arxiv.org/pdf/2408.00714.
Demo: https://sam2.metademolab.com Code: https://github.com/facebookresearch/segment-anything-2 Website: https://ai.meta.com/sam2
SAM 2 продемонстрировал значительные преимущества и широкие перспективы применения в области сегментации изображений и видео благодаря своей высокой точности, высокой скорости, обширным возможностям поддержки и мощным возможностям генерализации с нулевым кадром.
Существует два способа реализации вывода SAM: напрямую использовать официальную модель SAM2, а другой — использовать Ultralytics.
Ссылка на гитхаб:
https://github.com/facebookresearch/segment-anything-2
Необходимо установить перед использованием SAM 2。потребности кодаpython>=3.10,а такжеtorch>=2.3.1и。Пожалуйста, следуйте здесьtorchvision>=0.18.1Инструкции по установке PyTorch и TorchVision Зависимости. Вы можете использовать следующее, чтобы GPU Установить на машину SAM 2:
git clone https://github.com/facebookresearch/segment-anything-2.git
cd segment-anything-2; pip install -e .
Затем загрузите модель: sam2_hiera_tiny.pt:
https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt
sam2_hiera_small.pt:
https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt
sam2_hiera_base_plus.pt:
https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt
sam2_hiera_large.pt:
https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt
import torch
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor
checkpoint = "./checkpoints/sam2_hiera_large.pt"
model_cfg = "sam2_hiera_l.yaml"
predictor = SAM2ImagePredictor(build_sam2(model_cfg, checkpoint))
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)
import torch
from sam2.build_sam import build_sam2_video_predictor
checkpoint = "./checkpoints/sam2_hiera_large.pt"
model_cfg = "sam2_hiera_l.yaml"
predictor = build_sam2_video_predictor(model_cfg, checkpoint)
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
state = predictor.init_state(<your_video>)
# add new prompts and instantly get the output on the same frame
frame_idx, object_ids, masks = predictor.add_new_points_or_box(state, <your_prompts>):
# propagate the prompts to get masklets throughout the video
for frame_idx, object_ids, masks in predictor.propagate_in_video(state):
...
Установите необходимые пакеты。Установитьultralyticsи убедитесь, что его версия>=8.2.70,torchверсия тоже нужна>=2.0или Используйте последнюю версию напрямую
pip install -U ultralytics
Загрузите модель сегментации. Ссылка следующая:
СЭМ 2 маленькая ссылка:
https://github.com/ultralytics/assets/releases/download/v8.2.0/sam2_t.pt
SAM 2 small:
https://github.com/ultralytics/assets/releases/download/v8.2.0/sam2_s.pt
SAM 2 base
https://github.com/ultralytics/assets/releases/download/v8.2.0/sam2_b.pt
SAM 2 large
https://github.com/ultralytics/assets/releases/download/v8.2.0/sam2_l.pt
from ultralytics import ASSETS, SAM
# Load a model
model = SAM("sam2_s.pt")
# Display model information (optional)
model.info()
# Segment image or video
results = model('car.jpg') # картинка рассуждения
# Display results
for result in results:
result.show()
from ultralytics import SAM
# Load a model
model = SAM("sam2_b.pt")
# Display model information (optional)
model.info()
# Segment with bounding box prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])
# Segment with point prompt
results = model("path/to/image.jpg", points=[150, 150], labels=[1])
for result in results:
result.show()
from ultralytics import SAM
# Load a model
model = SAM("sam2_b.pt")
# Display model information (optional)
model.info()
# Run inference
model("path/to/video.mp4")
Здесь мы сравниваем минимальную модель SAM 2 Meta SAM2-t с минимальной моделью сегментации YOLOv8n-seg от Ultralytics:
Это сравнение показывает Модельразмери Разница в скорости на порядок。Хотя SAM имеет уникальную возможность автоматически сегментировать, но это не YOLOv8 Прямой конкурент моделей сегментации, поскольку YOLOv8 Модели меньше, быстрее и эффективнее.
Автоматическое аннотирование — это мощная функция SAM 2, которая позволяет пользователям использовать предварительно обученные модели для быстрого и точного создания сегментированных наборов данных. Эта функция особенно полезна при создании больших наборов данных высокого качества без обширной ручной работы.
Используйте SAM 2 для автоматической маркировки вашего набора данных. Код выглядит следующим образом:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam2_b.pt")
параметр | тип | описывать | значение по умолчанию |
---|---|---|---|
data | str | Путь к папке, содержащей изображения для аннотирования. | |
det_model | str, optional | Предварительно обученная модель обнаружения YOLO. По умолчанию — «yolov8x.pt». | 'yolov8x.pt' |
sam_model | str, optional | Предварительно обученная 2-сегментационная модель SAM. По умолчанию — «sam2_b.pt». | 'sam2_b.pt' |
device | str, optional | Устройство, на котором работает модель. По умолчанию пустая строка (ЦП или ГП, если доступен). | |
output_dir | str, None, optional | Каталог для сохранения результатов аннотаций. По умолчанию это папка «метки» в том же каталоге, что и «данные». | None |