๋น ๋ฅธ ์ธ๊ทธ๋จผํธ ๋ฌด์์ด๋ ๋ชจ๋ธ (FastSAM)
๊ณ ์ ์ธ๊ทธ๋จผํธ ๋ชจ๋ธ(FastSAM)์ ๋ฌด์์ด๋ ์ธ๊ทธ๋จผํธ ์์ ์ ์ํ ์๋ก์ด ์ค์๊ฐ CNN ๊ธฐ๋ฐ ์๋ฃจ์ ์ ๋๋ค. ์ด ์์ ์ ๋ค์ํ ์ฌ์ฉ์ ์ํธ์์ฉ ํ๋กฌํํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง ๋ด์ ๋ชจ๋ ๋ฌผ์ฒด๋ฅผ ๋ถํ ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. FastSAM ) ๊ฒฝ์๋ ฅ ์๋ ์ฑ๋ฅ์ ์ ์งํ๋ฉด์ ๊ณ์ฐ ์์๋ฅผ ํฌ๊ฒ ์ค์ฌ ๋ค์ํ ๋น์ ์์ ์ ์ค์ฉ์ ์ธ ์ ํ์ด ๋ ์ ์์ต๋๋ค.
๊ฐ์
FastSAM ์ ์๋นํ ๊ณ์ฐ ๋ฆฌ์์ค๋ฅผ ํ์๋ก ํ๋ ๋ฌด๊ฑฐ์ด Transformer ๋ชจ๋ธ์ธ ์ธ๊ทธ๋จผํธ ์ ๋๋ต ๋ชจ๋ธ(SAM)์ ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. FastSAM ์ ์ธ๊ทธ๋จผํธ ๋ฌด์์ด๋ ์์ ์ ๋ ๊ฐ์ ์์ฐจ์ ๋จ๊ณ, ์ฆ ์ ์ฒด ์ธ์คํด์ค ์ธ๊ทธ๋ฉํ ์ด์ ๊ณผ ํ๋กฌํํธ ์๋ด ์ ํ์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์๋ YOLOv8-seg๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์ ๋ชจ๋ ์ธ์คํด์ค์ ๋ํ ์ธ๊ทธ๋จผํธ ๋ง์คํฌ๋ฅผ ์์ฑํฉ๋๋ค. ๋ ๋ฒ์งธ ๋จ๊ณ์์๋ ํ๋กฌํํธ์ ํด๋นํ๋ ๊ด์ฌ ์์ญ์ ์ถ๋ ฅํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ
-
์ค์๊ฐ ์๋ฃจ์ : FastSAM ์ CNN์ ๊ณ์ฐ ํจ์จ์ฑ์ ํ์ฉํ์ฌ ์ธ๊ทธ๋จผํธ ์ ๋์จ์ด ์์ ์ ์ํ ์ค์๊ฐ ์๋ฃจ์ ์ ์ ๊ณตํ๋ฏ๋ก ๋น ๋ฅธ ๊ฒฐ๊ณผ๊ฐ ํ์ํ ์ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํฉ๋๋ค.
-
ํจ์จ์ฑ ๋ฐ ์ฑ๋ฅ: FastSAM ์ฑ๋ฅ ํ์ง์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ์ปดํจํ ๋ฐ ๋ฆฌ์์ค ์๊ตฌ๋์ ํฌ๊ฒ ์ค์์ต๋๋ค. SAM ์ ๋น์ทํ ์ฑ๋ฅ์ ์ ๊ณตํ์ง๋ง ์ปดํจํ ๋ฆฌ์์ค๋ฅผ ๋ํญ ์ค์ฌ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ ์ ์์ต๋๋ค.
-
ํ๋กฌํํธ ์๋ด ์ธ๊ทธ๋จผํธ: FastSAM ๋ ๋ค์ํ ์ฌ์ฉ์ ์ํธ์์ฉ ํ๋กฌํํธ์ ๋ฐ๋ผ ์ด๋ฏธ์ง ๋ด์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ธ๊ทธ๋จผํธํํ์ฌ ๋ค์ํ ์๋๋ฆฌ์ค์์ ์ ์ฐ์ฑ๊ณผ ์ ์์ฑ์ ์ ๊ณตํฉ๋๋ค.
-
YOLOv8 -seg ๊ธฐ๋ฐ: FastSAM ์ ์ธ์คํด์ค ๋ถํ ๋ถ๊ธฐ๊ฐ ์ฅ์ฐฉ๋ ๊ฐ์ฒด ๊ฒ์ถ๊ธฐ์ธ YOLOv8-seg๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ฏธ์ง์ ๋ชจ๋ ์ธ์คํด์ค์ ๋ํ ๋ถํ ๋ง์คํฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.
-
๋ฒค์น๋งํฌ์์์ ๊ฒฝ์๋ ฅ ์๋ ๊ฒฐ๊ณผ: MS COCO์ ๊ฐ์ฒด ์ ์ ์์ ์์ FastSAM ๋ ๋จ์ผ NVIDIA RTX 3090๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ์๋๋ก ๋์ ์ ์๋ฅผ ํ๋ํ์ต๋๋ค. SAM ๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ์๋๋ก ๋์ ์ ์๋ฅผ ํ๋ํ์ฌ ๊ทธ ํจ์จ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์ฆํ์ต๋๋ค.
-
์ค์ฉ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ : ์ ์๋ ์ ๊ทผ ๋ฐฉ์์ ํ์ฌ ๋ฐฉ๋ฒ๋ณด๋ค ์์ญ, ์๋ฐฑ ๋ฐฐ ๋น ๋ฅธ ์๋๋ก ์๋ง์ ๋น์ ์์ ์ ์ํ ์๋กญ๊ณ ์ค์ฉ์ ์ธ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
-
๋ชจ๋ธ ์์ถ ๊ฐ๋ฅ์ฑ: FastSAM ์ ๊ตฌ์กฐ์ ์ธ๊ณต์ ์ธ ์ ํ ์์๋ฅผ ๋์ ํ์ฌ ๊ณ์ฐ ๋ ธ๋ ฅ์ ํฌ๊ฒ ์ค์ผ ์ ์๋ ๊ฒฝ๋ก์ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฌ์ค์ผ๋ก์จ ์ผ๋ฐ์ ์ธ ๋น์ ์์ ์ ์ํ ๋๊ท๋ชจ ๋ชจ๋ธ ์ํคํ ์ฒ์ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ, ์ง์๋๋ ์์ ๋ฐ ์๋ ๋ชจ๋
์ด ํ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ๊ณผ ํจ๊ป ํน์ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น, ์ง์๋๋ ์์ , ์ถ๋ก , ๊ฒ์ฆ, ํ์ต ๋ฐ ๋ด๋ณด๋ด๊ธฐ์ ๊ฐ์ ๋ค์ํ ์๋ ๋ชจ๋์์ ํธํ์ฑ์ด ํ์๋์ด ์์ผ๋ฉฐ, ์ง์๋๋ ๋ชจ๋์ ๊ฒฝ์ฐ โ ์ด๋ชจํฐ์ฝ, ์ง์๋์ง ์๋ ๋ชจ๋์ ๊ฒฝ์ฐ โ ์ด๋ชจํฐ์ฝ์ผ๋ก ํ์๋์ด ์์ต๋๋ค.
๋ชจ๋ธ ์ ํ | ์ฌ์ ํ์ต๋ ๊ฐ์ค์น | ์ง์๋๋ ์์ | ์ถ๋ก | ์ ํจ์ฑ ๊ฒ์ฌ | ๊ต์ก | ๋ด๋ณด๋ด๊ธฐ |
---|---|---|---|---|---|---|
FastSAM-s | FastSAM-s.pt | ์ธ์คํด์ค ์ธ๋ถํ | โ | โ | โ | โ |
FastSAM-x | FastSAM-x.pt | ์ธ์คํด์ค ์ธ๋ถํ | โ | โ | โ | โ |
์ฌ์ฉ ์
FastSAM ๋ชจ๋ธ์ Python ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๋ค. Ultralytics ์ฌ์ฉ์ ์นํ์ ์ธ Python API์ CLI ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์ ๊ฐ์ํํฉ๋๋ค.
์ฌ์ฉ๋ ์์ธก
์ด๋ฏธ์ง์์ ๊ฐ์ฒด ๊ฐ์ง๋ฅผ ์ํํ๋ ค๋ฉด predict
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค:
์
from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt
# Define an inference source
source = 'path/to/bus.jpg'
# Create a FastSAM model
model = FastSAM('FastSAM-s.pt') # or FastSAM-x.pt
# Run inference on an image
everything_results = model(source, device='cpu', retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device='cpu')
# Everything prompt
ann = prompt_process.everything_prompt()
# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
ann = prompt_process.box_prompt(bbox=[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=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output='./')
์ด ์ค๋ํซ์ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ๋ก๋ํ๊ณ ์ด๋ฏธ์ง์ ๋ํด ์์ธก์ ์คํํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
Val ์ฌ์ฉ๋ฒ
๋ฐ์ดํฐ ์ธํธ์ ๋ํ ๋ชจ๋ธ ์ ํจ์ฑ ๊ฒ์ฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ํํ ์ ์์ต๋๋ค:
์
FastSAM ์ ๋จ์ผ ํด๋์ค ์ค๋ธ์ ํธ์ ๊ฐ์ง ๋ฐ ์ธ๋ถํ๋ง ์ง์ํ๋ค๋ ์ ์ ์ ์ํ์ธ์. ์ฆ, ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋์ผํ ํด๋์ค๋ก ์ธ์ํ๊ณ ์ธ๋ถํํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ค๋นํ ๋ ๋ชจ๋ ๊ฐ์ฒด ์นดํ ๊ณ ๋ฆฌ ID๋ฅผ 0์ผ๋ก ๋ณํํด์ผ ํฉ๋๋ค.
์ฌ์ฉ๋ ์ถ์
์ด๋ฏธ์ง์์ ๊ฐ์ฒด ์ถ์ ์ ์ํํ๋ ค๋ฉด track
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค:
์
FastSAM ๊ณต์ ์ฌ์ฉ๋ฒ
FastSAM https://github.com/CASIA-IVA-Lab/ FastSAM ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ง์ ๋ค์ด๋ก๋ํ ์๋ ์์ต๋๋ค. ๋ค์์ FastSAM ์ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ๋จ๊ณ์ ๋ํ ๊ฐ๋ตํ ๊ฐ์์ ๋๋ค:
์ค์น
- FastSAM ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํฉ๋๋ค:
- Python 3.9๋ฅผ ์ฌ์ฉํ์ฌ Conda ํ๊ฒฝ์ ๋ง๋ค๊ณ ํ์ฑํํฉ๋๋ค:
- ๋ณต์ ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค:
- CLIP ๋ชจ๋ธ์ ์ค์นํฉ๋๋ค:
์ฌ์ฉ ์
-
๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ค์ด๋ก๋ํ์ธ์.
-
์ถ๋ก ์๋ FastSAM ์ ์ฌ์ฉํฉ๋๋ค. ๋ช ๋ น ์์:
- ์ด๋ฏธ์ง์ ๋ชจ๋ ํญ๋ชฉ์ ์ธ๋ถํํ์ธ์:
- ํ ์คํธ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๊ฐ์ฒด๋ฅผ ์ธ๊ทธ๋จผํธํํฉ๋๋ค:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
- ๊ฒฝ๊ณ ์์ ๋ด์์ ๊ฐ์ฒด๋ฅผ ๋ถํ ํฉ๋๋ค(์์ ์ขํ๋ฅผ xywh ํ์์ผ๋ก ์ ๊ณต):
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
- ํน์ ์ง์ ๊ทผ์ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ธ๊ทธ๋จผํธํํฉ๋๋ค:
๋ํ Colab ๋ฐ๋ชจ ๋๋ HuggingFace ์น ๋ฐ๋ชจ๋ฅผ ํตํด FastSAM ์์ ์๊ฐ์ ๊ฒฝํ์ ํด๋ณผ ์ ์์ต๋๋ค.
์ธ์ฉ ๋ฐ ๊ฐ์ฌ
์ค์๊ฐ ์ธ์คํด์ค ์ธ๋ถํ ๋ถ์ผ์์ ํฌ๊ฒ ๊ธฐ์ฌํ FastSAM ์์ฑ์์๊ฒ ๊ฐ์ฌ์ ๋ง์์ ์ ํฉ๋๋ค:
์๋ณธ FastSAM ๋ ผ๋ฌธ์ arXiv์์ ํ์ธํ ์ ์์ต๋๋ค. ์ ์๋ค์ ์์ ์ ์์ ์ ๊ณต๊ฐํ์ผ๋ฉฐ, ์ฝ๋๋ฒ ์ด์ค๋ GitHub์์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด ๋ถ์ผ๋ฅผ ๋ฐ์ ์ํค๊ณ ๋ ๋ง์ ์ปค๋ฎค๋ํฐ๊ฐ ์์ ์ ์ฐ๊ตฌ์ ์ ๊ทผํ ์ ์๋๋ก ํ ์ ์๋ค์ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์์ฑ 2023-11-12, ์ ๋ฐ์ดํธ 2024-05-01
์์ฑ์: ๋ฆฌ์ฆ์ ๋ฌด๋์๋ฅด (1), ๊ธ๋ ์กฐ์ฒ (8), ์๋ํ (1), ๋ฒ ๋ฆฌ๋ฉ (1)