[ Paper
] [ ?HuggingFace Demo
] [ Colab demo
] [ Replicate demo & API
] [ ] [ OpenXLab Demo
Model Zoo
] [ BibTeX
] [ Video Demo
]
Fast Segment Anything Model (FastSAM) คือ CNN Segment Anything Model ที่ได้รับการฝึกอบรมโดยใช้เพียง 2% ของชุดข้อมูล SA-1B ที่เผยแพร่โดยผู้เขียน SAM FastSAM บรรลุประสิทธิภาพที่เทียบเคียงได้กับวิธี SAM ที่ ความเร็วรันไทม์สูงกว่า 50 เท่า
- อัพเดท
2024/6/25
ปัญหา Edge jaggies ได้รับการปรับปรุงเล็กน้อย #231 และกลยุทธ์ยังได้รับการประสานกับโครงการ ultralytics#13939,#13912 การสาธิตการสวมกอดได้รับการอัพเดตแล้ว2023/11/28
คำแนะนำ: Semantic FastSAM ซึ่งเพิ่มป้ายกำกับคลาสความหมายให้กับ FastSAM ขอขอบคุณ KBH00 สำหรับการสนับสนุนอันมีค่านี้2023/09/11
การฝึกอบรมการเปิดตัวและรหัสการตรวจสอบ2023/08/17
ปล่อยการสาธิต OpenXLab ขอขอบคุณทีมงาน OpenXLab สำหรับความช่วยเหลือ2023/07/06
เพิ่มไปยังศูนย์กลางโมเดล Ultralytics (YOLOv8) แล้ว ขอบคุณ Ultralytics สำหรับความช่วยเหลือ?.2023/06/29
รองรับโหมดข้อความใน HuggingFace Space ขอบคุณมากที่ gaoxinge สำหรับความช่วยเหลือ?.2023/06/29
เปิดตัว FastSAM_Awesome_TensorRT ขอขอบคุณ ChuRuaNh0 มากที่มอบโมเดล TensorRT ของ FastSAM ?2023/06/26
เปิดตัวการสาธิตการจำลองแบบออนไลน์ FastSAM ขอบคุณมากที่ Chenxi สำหรับการสาธิตที่ดีนี้?2023/06/26
โหมดคะแนนสนับสนุนใน HuggingFace Space ปฏิสัมพันธ์ที่ดีขึ้นและเร็วขึ้นจะมาเร็ว ๆ นี้!2023/06/24
ขอบคุณมากสำหรับ Grounding-SAM สำหรับการรวม Grounding-DINO เข้ากับ FastSAM ใน Grounded-FastSAM โคลนที่เก็บในเครื่อง:
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
สร้างสภาพแวดล้อม conda รหัสต้องใช้ python>=3.7
เช่นเดียวกับ pytorch>=1.7
และ torchvision>=0.8
โปรดปฏิบัติตามคำแนะนำที่นี่เพื่อติดตั้งทั้งการพึ่งพา PyTorch และ TorchVision ขอแนะนำอย่างยิ่งให้ติดตั้งทั้ง PyTorch และ TorchVision พร้อมการรองรับ CUDA
conda create -n FastSAM python=3.9
conda activate FastSAM
ติดตั้งแพ็คเกจ:
cd FastSAM
pip install -r requirements.txt
ติดตั้ง CLIP (จำเป็นหากกำลังทดสอบข้อความแจ้ง):
pip install git+https://github.com/openai/CLIP.git
ขั้นแรกให้ดาวน์โหลดจุดตรวจสอบโมเดล
จากนั้น คุณสามารถเรียกใช้สคริปต์เพื่อลองใช้โหมดทุกอย่างและโหมดพร้อมท์สามโหมดได้
# Everything mode
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
# Text prompt
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt " the yellow dog "
# Box prompt (xywh)
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt " [[570,200,230,400]] "
# Points prompt
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt " [[520,360],[620,300]] " --point_label " [1,0] "
คุณสามารถใช้โค้ดต่อไปนี้เพื่อสร้างมาสก์ทั้งหมดและแสดงผลลัพธ์เป็นภาพ
from fastsam import FastSAM, FastSAMPrompt
model = FastSAM( ' ./weights/FastSAM.pt ' )
IMAGE_PATH = ' ./images/dogs.jpg '
DEVICE = ' cpu '
everything_results = model(IMAGE_PATH, device=DEVICE, retina_masks=True, imgsz=1024, conf=0.4, iou=0.9,)
prompt_process = FastSAMPrompt(IMAGE_PATH, everything_results, device=DEVICE)
# everything prompt
ann = prompt_process.everything_prompt ()
prompt_process.plot(annotations=ann,output_path= ' ./output/dog.jpg ' ,)
สำหรับพร้อมท์โหมดจุด/กล่อง/ข้อความ ให้ใช้:
# bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
ann = prompt_process.box_prompt(bboxes=[[200, 200, 300, 300]])
# text prompt
ann = prompt_process.text_prompt(text='a photo of a dog')
# point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
ann = prompt_process.point_prompt(points=[[620, 360]], pointlabel=[1])
prompt_process.plot(annotations=ann,output_path='./output/dog.jpg',)
คุณยังยินดีที่จะลองใช้การสาธิต Colab ของเรา: FastSAM_example.ipynb
เรามีตัวเลือกมากมายสำหรับวัตถุประสงค์ที่แตกต่างกัน รายละเอียดอยู่ใน MORE_USAGES.md
การฝึกอบรมตั้งแต่เริ่มต้นหรือการตรวจสอบความถูกต้อง: การฝึกอบรมและรหัสการตรวจสอบ
# Download the pre-trained model in "./weights/FastSAM.pt"
python app_gradio.py
มีให้เลือก 2 รุ่นด้วยกัน โดยมีขนาดต่างกัน คลิกลิงก์ด้านล่างเพื่อดาวน์โหลดจุดตรวจสอบสำหรับประเภทรุ่นที่เกี่ยวข้อง
default
หรือ FastSAM
: เซ็กเมนต์ที่ใช้ YOLOv8x อะไรก็ได้ โมเดล | ไป่ตู้คลาวด์ (pwd: 0000)FastSAM-s
: โมเดลอะไรก็ได้ตามเซ็กเมนต์ของ YOLOv8 ผลลัพธ์ทั้งหมดได้รับการทดสอบบน NVIDIA GeForce RTX 3090 ตัวเดียว
ความเร็วในการทำงานภายใต้หมายเลขพรอมต์จุดต่างๆ (มิลลิวินาที)
วิธี | พารามิเตอร์ | 1 | 10 | 100 | อี(16x16) | จ(32x32*) | อี(64x64) |
---|---|---|---|---|---|---|---|
แซม-เอช | 0.6G | 446 | 464 | 627 | 852 | 2099 | 6972 |
แซม-บี | 136ม | 110 | 125 | 230 | 432 | 1383 | 5417 |
ฟาสต์แซม | 68ม | 40 | 40 | 40 | 40 | 40 | 40 |
ชุดข้อมูล | วิธี | หน่วยความจำ GPU (MB) |
---|---|---|
โคโค่ 2017 | ฟาสต์แซม | 2608 |
โคโค่ 2017 | แซม-เอช | 7060 |
โคโค่ 2017 | แซม-บี | 4670 |
ทดสอบชุดข้อมูล BSDB500
วิธี | ปี | โอดีเอส | โอไอเอส | เอพี | R50 |
---|---|---|---|---|---|
เฮ็ด | 2558 | .788 | .808 | .840 | .923 |
แซม | 2023 | .768 | .786 | .794 | .928 |
ฟาสต์แซม | 2023 | .750 | .790 | .793 | .903 |
วิธี | AR10 | AR100 | AR1000 | สคส |
---|---|---|---|---|
แซม-เอช E64 | 15.5 | 45.6 | 67.7 | 32.1 |
แซม-เอช E32 | 18.5 | 49.5 | 62.5 | 33.7 |
แซม-บี E32 | 11.4 | 39.6 | 59.1 | 27.3 |
ฟาสต์แซม | 15.7 | 47.3 | 63.7 | 32.2 |
บีบ็อกซ์ AR@1000
วิธี | ทั้งหมด | เล็ก | ยา | ใหญ่ |
---|---|---|---|---|
ViTDet-H | 65.0 | 53.2 | 83.3 | 91.2 |
วิธีการถ่ายโอนแบบซีโร่ช็อต | ||||
แซม-เอช E64 | 52.1 | 36.6 | 75.1 | 88.2 |
แซม-เอช E32 | 50.3 | 33.1 | 76.2 | 89.8 |
แซม-บี E32 | 45.0 | 29.3 | 68.7 | 80.6 |
ฟาสต์แซม | 57.1 | 44.3 | 77.1 | 85.3 |
วิธี | เอพี | เอพีเอส | เอพีเอ็ม | เอพีแอล |
---|---|---|---|---|
ViTDet-H | .510 | .320 | .543 | .689 |
แซม | .465 | .308 | .510 | .617 |
ฟาสต์แซม | .379 | .239 | .434 | .500 |
ผลลัพธ์การแบ่งส่วนหลายรายการ:
ผลลัพธ์ของงานปลายน้ำหลายงานเพื่อแสดงประสิทธิผล
โมเดลนี้ได้รับอนุญาตภายใต้ลิขสิทธิ์ Apache 2.0
โครงการของเราจะเป็นไปไม่ได้เลยหากปราศจากการมีส่วนร่วมของคนที่น่าทึ่งเหล่านี้! ขอบคุณทุกท่านที่ทำให้โครงการนี้ดีขึ้น
หากคุณพบว่าโครงการนี้มีประโยชน์สำหรับการวิจัยของคุณ โปรดพิจารณาอ้างอิงรายการ BibTeX ต่อไปนี้
@misc{zhao2023fast,
title={Fast Segment Anything},
author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
year={2023},
eprint={2306.12156},
archivePrefix={arXiv},
primaryClass={cs.CV}
}