AI ที่ Meta, FAIR
นิคิลา ราวี, วาเลนติน กาเบอร์, หยวน-ติง หู, หรงฮัง หู, ไชธันยา ไรอาลี, เถิงหยู หม่า, ไฮทัม เคเดอร์, โรมัน เรเดิล, โคลอี โรลแลนด์, ลอร่า กุสตาฟสัน, เอริค มินตุน, จุนติง แพน, คาลยัน วาซูเดฟ อัลวาลา, นิโคลัส คาเรียน, เฉา-หยวน วู, รอสส์ เกอร์ชิค, พิโอเตอร์ ดอลลาร์, คริสตอฟ ไฟชเทนโฮเฟอร์
[ Paper
] [ Project
] [ Demo
] [ Dataset
] [ Blog
] [ BibTeX
]
Segment Anything Model 2 (SAM 2) เป็นรูปแบบพื้นฐานในการแก้ปัญหาการแบ่งส่วนภาพที่รวดเร็วในรูปภาพและวิดีโอ เราขยาย SAM ไปยังวิดีโอโดยพิจารณารูปภาพเป็นวิดีโอที่มีเฟรมเดียว การออกแบบโมเดลเป็นสถาปัตยกรรมหม้อแปลงแบบธรรมดาพร้อมหน่วยความจำแบบสตรีมสำหรับการประมวลผลวิดีโอแบบเรียลไทม์ เราสร้างกลไกข้อมูล model-in-the-loop ซึ่งปรับปรุงโมเดลและข้อมูลผ่านการโต้ตอบของผู้ใช้ เพื่อรวบรวม ชุดข้อมูล SA-V ซึ่งเป็นชุดข้อมูลการแบ่งส่วนวิดีโอที่ใหญ่ที่สุดในปัจจุบัน SAM 2 ที่ได้รับการฝึกอบรมเกี่ยวกับข้อมูลของเราให้ประสิทธิภาพที่ยอดเยี่ยมในงานและโดเมนภาพที่หลากหลาย
30/09/2024 -- เปิดตัว SAM 2.1 Developer Suite (จุดตรวจสอบใหม่ รหัสการฝึกอบรม การสาธิตเว็บ)
pip uninstall SAM-2
จากนั้นดึงโค้ดล่าสุดจาก repo นี้ (ด้วย git pull
) จากนั้นติดตั้ง repo ใหม่ตามการติดตั้งด้านล่างtraining/README.md
เกี่ยวกับวิธีการเริ่มต้นใช้งานdemo/README.md
สำหรับรายละเอียด ต้องติดตั้ง SAM 2 ก่อนใช้งาน รหัสต้องใช้ python>=3.10
เช่นเดียวกับ torch>=2.3.1
และ torchvision>=0.18.1
โปรดปฏิบัติตามคำแนะนำที่นี่เพื่อติดตั้งทั้งการพึ่งพา PyTorch และ TorchVision คุณสามารถติดตั้ง SAM 2 บนเครื่อง GPU ได้โดยใช้:
git clone https://github.com/facebookresearch/sam2.git && cd sam2
pip install -e .
หากคุณกำลังติดตั้งบน Windows ขอแนะนำอย่างยิ่งให้ใช้ระบบย่อย Windows สำหรับ Linux (WSL) กับ Ubuntu
หากต้องการใช้ตัวทำนาย SAM 2 และเรียกใช้สมุดบันทึกตัวอย่าง จำเป็นต้องมี jupyter
และ matplotlib
และสามารถติดตั้งได้โดย:
pip install -e " .[notebooks] "
บันทึก:
pip
ตาม https://pytorch.org/ หากคุณมี PyTorch เวอร์ชันต่ำกว่า 2.3.1 ในสภาพแวดล้อมปัจจุบันของคุณ คำสั่งการติดตั้งด้านบนจะพยายามอัปเกรดเป็น PyTorch เวอร์ชันล่าสุดโดยใช้ pip
nvcc
หากยังไม่มีให้บริการบนเครื่องของคุณ โปรดติดตั้งชุดเครื่องมือ CUDA ด้วยเวอร์ชันที่ตรงกับเวอร์ชัน PyTorch CUDA ของคุณFailed to build the SAM 2 CUDA extension
ระหว่างการติดตั้ง คุณสามารถเพิกเฉยได้และยังคงใช้ SAM 2 ได้ (ฟังก์ชันหลังการประมวลผลบางอย่างอาจถูกจำกัด แต่จะไม่ส่งผลต่อผลลัพธ์ในกรณีส่วนใหญ่) โปรดดู INSTALL.md
สำหรับคำถามที่พบบ่อยเกี่ยวกับปัญหาและแนวทางแก้ไขที่อาจเกิดขึ้น
ก่อนอื่นเราต้องดาวน์โหลดจุดตรวจสอบโมเดล สามารถดาวน์โหลดจุดตรวจสอบโมเดลทั้งหมดได้โดยการเรียกใช้:
cd checkpoints &&
./download_ckpts.sh &&
cd ..
หรือเป็นรายบุคคลจาก:
(โปรดทราบว่าจุดตรวจสอบเหล่านี้คือจุดตรวจสอบที่ได้รับการปรับปรุงซึ่งแสดงเป็น SAM 2.1 โปรดดูรายละเอียดในคำอธิบายโมเดล)
จากนั้น SAM 2 สามารถนำมาใช้ในไม่กี่บรรทัดดังต่อไปนี้สำหรับการคาดเดาภาพและวิดีโอ
SAM 2 มีความสามารถทั้งหมดของ SAM บนภาพนิ่ง และเรามี API การทำนายรูปภาพที่คล้ายกับ SAM อย่างใกล้ชิดสำหรับกรณีการใช้งานรูปภาพ คลาส SAM2ImagePredictor
มีอินเทอร์เฟซที่ใช้งานง่ายสำหรับการแสดงภาพ
import torch from sam2 . build_sam import build_sam2 from sam2 . sam2_image_predictor import SAM2ImagePredictor checkpoint = "./checkpoints/sam2.1_hiera_large.pt" model_cfg = "configs/sam2.1/sam2.1_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 > )
โปรดดูตัวอย่างใน image_predictor_example.ipynb (รวมถึง Colab ที่นี่ด้วย) สำหรับกรณีการใช้รูปภาพนิ่ง
SAM 2 ยังรองรับการสร้างมาสก์อัตโนมัติบนรูปภาพเช่นเดียวกับ SAM โปรดดู automatic_mask_generator_example.ipynb (รวมถึงใน Colab ที่นี่ด้วย) สำหรับการสร้างมาสก์อัตโนมัติในรูปภาพ
สำหรับการแบ่งส่วนและการติดตามที่รวดเร็วในวิดีโอ เรามี API ให้กับตัวทำนายวิดีโอ เช่น เพื่อเพิ่มข้อความแจ้งและเผยแพร่มาสก์เล็ตทั่วทั้งวิดีโอ SAM 2 รองรับการอนุมานวิดีโอบนออบเจ็กต์หลายรายการ และใช้สถานะการอนุมานเพื่อติดตามการโต้ตอบในแต่ละวิดีโอ
import torch from sam2 . build_sam import build_sam2_video_predictor checkpoint = "./checkpoints/sam2.1_hiera_large.pt" model_cfg = "configs/sam2.1/sam2.1_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 ): ...
โปรดดูตัวอย่างใน video_predictor_example.ipynb (รวมถึงใน Colab ที่นี่ด้วย) เพื่อดูรายละเอียดเกี่ยวกับวิธีเพิ่มข้อความเตือนแบบคลิกหรือช่อง ปรับแต่ง และติดตามออบเจ็กต์หลายรายการในวิดีโอ
หรือคุณสามารถโหลดโมเดลได้จาก Hugging Face (ต้องใช้ pip install huggingface_hub
)
สำหรับการทำนายภาพ:
import torch from sam2 . sam2_image_predictor import SAM2ImagePredictor predictor = SAM2ImagePredictor . from_pretrained ( "facebook/sam2-hiera-large" ) with torch . inference_mode (), torch . autocast ( "cuda" , dtype = torch . bfloat16 ): predictor . set_image ( < your_image > ) masks , _ , _ = predictor . predict ( < input_prompts > )
สำหรับการทำนายวิดีโอ:
import torch from sam2 . sam2_video_predictor import SAM2VideoPredictor predictor = SAM2VideoPredictor . from_pretrained ( "facebook/sam2-hiera-large" ) 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 ): ...
ตารางด้านล่างแสดงจุดตรวจสอบ SAM 2.1 ที่ปรับปรุงแล้วซึ่งเผยแพร่เมื่อวันที่ 29 กันยายน 2024
แบบอย่าง | ขนาด (ม) | ความเร็ว (เฟรมต่อวินาที) | การทดสอบ SA-V (J&F) | โมเซ่ วาล (J&F) | LVOS v2 (เจแอนด์เอฟ) |
---|---|---|---|---|---|
sam2.1_hiera_tiny (กำหนดค่า, จุดตรวจ) | 38.9 | 47.2 | 76.5 | 71.8 | 77.3 |
sam2.1_hiera_small (กำหนดค่า, จุดตรวจ) | 46 | 43.3 (คอมไพล์ 53.0*) | 76.6 | 73.5 | 78.3 |
sam2.1_hiera_base_plus (กำหนดค่า, จุดตรวจ) | 80.8 | 34.8 (คอมไพล์ 43.8*) | 78.2 | 73.7 | 78.2 |
sam2.1_hiera_large (กำหนดค่า, จุดตรวจ) | 224.4 | 24.2 (รวบรวม 30.2*) | 79.5 | 74.6 | 80.6 |
จุดตรวจ SAM 2 ก่อนหน้านี้ที่เปิดตัวเมื่อวันที่ 29 กรกฎาคม 2567 สามารถพบได้ดังนี้:
แบบอย่าง | ขนาด (ม) | ความเร็ว (เฟรมต่อวินาที) | การทดสอบ SA-V (J&F) | โมเซ่ วาล (J&F) | LVOS v2 (เจแอนด์เอฟ) |
---|---|---|---|---|---|
sam2_hiera_tiny (กำหนดค่า, จุดตรวจ) | 38.9 | 47.2 | 75.0 | 70.9 | 75.3 |
sam2_hiera_small (กำหนดค่า, จุดตรวจ) | 46 | 43.3 (คอมไพล์ 53.0*) | 74.9 | 71.5 | 76.4 |
sam2_hiera_base_plus (กำหนดค่า, จุดตรวจ) | 80.8 | 34.8 (คอมไพล์ 43.8*) | 74.7 | 72.8 | 75.8 |
sam2_hiera_large (กำหนดค่า, จุดตรวจ) | 224.4 | 24.2 (รวบรวม 30.2*) | 76.0 | 74.6 | 79.8 |
* คอมไพล์โมเดลโดยการตั้งค่า compile_image_encoder: True
ใน config.
ดู sav_dataset/README.md สำหรับรายละเอียด
คุณสามารถฝึกฝนหรือปรับแต่ง SAM 2 บนชุดข้อมูลที่กำหนดเองของรูปภาพ วิดีโอ หรือทั้งสองอย่างได้ โปรดตรวจสอบการฝึกอบรม README เกี่ยวกับวิธีการเริ่มต้นใช้งาน
เราได้เผยแพร่โค้ดส่วนหน้าและส่วนหลังสำหรับการสาธิตเว็บ SAM 2 แล้ว (เวอร์ชันที่ปรับใช้ภายในเครื่องได้ ซึ่งคล้ายกับ https://sam2.metademolab.com/demo) โปรดดูรายละเอียดในการสาธิตเว็บ README
จุดตรวจสอบโมเดล SAM 2, รหัสสาธิต SAM 2 (ส่วนหน้าและส่วนหลัง) และรหัสการฝึกอบรม SAM 2 ได้รับอนุญาตภายใต้ Apache 2.0 อย่างไรก็ตาม Inter Font และ Noto Color Emoji ที่ใช้ในรหัสสาธิต SAM 2 มีให้ใช้งานภายใต้ SIL Open Font License เวอร์ชัน 1.1
ดูการบริจาคและจรรยาบรรณ
โครงการ SAM 2 เกิดขึ้นได้ด้วยความช่วยเหลือจากผู้ร่วมให้ข้อมูลจำนวนมาก (เรียงตามตัวอักษร):
คาเรน เบอร์แกน, แดเนียล โบลยา, อเล็กซ์ โบเซนเบิร์ก, ไค บราวน์, วิสปี แคสซอด, คริสโตเฟอร์ เชโด, ไอดา เฉิง, ลุค ดาห์ลิน, โชบิค เดบนาธ, เรเน มาร์ติเนซ โดห์เนอร์, แกรนท์ การ์ดเนอร์, ซาฮีร์ โกเมซ, ริชิ โกดูกู, ไป๋ชาน กัว, คาเลบ โฮ, แอนดรูว์ หวง, สมยา Jain, Bob Kamma, Amanda Kallet, Jake Kinney, Alexander Kirillov, Shiva Koduvayur, Devansh Kukreja, Robert Kuo, Aohan Lin, Parth Malani, Jitendra Malik, Mallika Malhotra, Miguel Martin, Alexander Miller, Sasha Mitts, William Ngan, George Orlin, โจแอล ปิโน, เคท ซาเอนโก, ร็อดดริก เชพเพิร์ด, อาซิต้า โชคปูร์, เดวิด ซูเฟียน, โจนาธาน ตอร์เรส, เจนนี่ เจือง, ซาการ์ วาซ, เหมิง หวาง, คลอเด็ตต์ วอร์ด, เผิงฉวน จาง
รหัสบุคคลที่สาม: เราใช้อัลกอริธึมส่วนประกอบเชื่อมต่อที่ใช้ GPU ซึ่งดัดแปลงมาจาก cc_torch
(พร้อมใบอนุญาตใน LICENSE_cctorch
) เป็นขั้นตอนหลังการประมวลผลที่เป็นทางเลือกสำหรับการคาดการณ์มาสก์
หากคุณใช้ SAM 2 หรือชุดข้อมูล SA-V ในการวิจัยของคุณ โปรดใช้รายการ BibTeX ต่อไปนี้
@article { ravi2024sam2 ,
title = { SAM 2: Segment Anything in Images and Videos } ,
author = { Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{'a}r, Piotr and Feichtenhofer, Christoph } ,
journal = { arXiv preprint arXiv:2408.00714 } ,
url = { https://arxiv.org/abs/2408.00714 } ,
year = { 2024 }
}