๋ชจ๋ฐ์ผ ์ธ๊ทธ๋จผํธ ์ ๋์ฝ (MobileSAM)
MobileSAM ๋ ผ๋ฌธ์ ํ์ฌ arXiv์์ ํ์ธํ ์ ์์ต๋๋ค.
CPU ์์ ์คํ๋๋ MobileSAM ๋ฐ๋ชจ๋ ์ด ๋ฐ๋ชจ ๋งํฌ์์ ํ์ธํ ์ ์์ต๋๋ค. Mac i5 CPU ์์์ ์ฑ๋ฅ์ ์ฝ 3์ด๊ฐ ์์๋ฉ๋๋ค. Hugging Face ๋ฐ๋ชจ์์๋ ์ธํฐํ์ด์ค์ ์ ์ฑ๋ฅ CPU๋ก ์ธํด ์๋ต ์๋๊ฐ ๋๋ ค์ง์ง๋ง ์ฌ์ ํ ํจ๊ณผ์ ์ผ๋ก ์๋ํฉ๋๋ค.
Watch: Ultralytics | ๋จ๊ณ๋ณ ๊ฐ์ด๋ ๐๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ก ์ ์คํํ๋ ๋ฐฉ๋ฒ MobileSAM
MobileSAM ์ ์ง( SAM ) , ์ ๋๋ผ๋ฒจ๋ง, 3D ์ธ๊ทธ๋จผํธ ์ ๋์ฝ ๋ฑ ๋ค์ํ ํ๋ก์ ํธ์์ ๊ตฌํ๋๊ณ ์์ต๋๋ค.
MobileSAM ๋ 100,000๊ฐ์ ๋ฐ์ดํฐ ์ธํธ(์๋ณธ ์ด๋ฏธ์ง์ 1%)๋ก ๊ตฌ์ฑ๋ ๋จ์ผ GPU ์ ๋ํด ํ๋ฃจ๋ ์ฑ ๊ฑธ๋ฆฌ์ง ์๊ณ ํ์ต๋์์ต๋๋ค. ์ด ํ๋ จ์ ๋ํ ์ฝ๋๋ ํฅํ ๊ณต๊ฐ๋ ์์ ์ ๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ, ์ง์๋๋ ์์ ๋ฐ ์๋ ๋ชจ๋
์ด ํ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ๊ณผ ํจ๊ป ํน์ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น, ์ง์๋๋ ์์ , ์ถ๋ก , ๊ฒ์ฆ, ํ์ต ๋ฐ ๋ด๋ณด๋ด๊ธฐ์ ๊ฐ์ ๋ค์ํ ์๋ ๋ชจ๋์์ ํธํ์ฑ์ด ํ์๋์ด ์์ผ๋ฉฐ, ์ง์๋๋ ๋ชจ๋์ ๊ฒฝ์ฐ โ ์ด๋ชจํฐ์ฝ, ์ง์๋์ง ์๋ ๋ชจ๋์ ๊ฒฝ์ฐ โ ์ด๋ชจํฐ์ฝ์ผ๋ก ํ์๋์ด ์์ต๋๋ค.
๋ชจ๋ธ ์ ํ | ์ฌ์ ํ์ต๋ ๊ฐ์ค์น | ์ง์๋๋ ์์ | ์ถ๋ก | ์ ํจ์ฑ ๊ฒ์ฌ | ๊ต์ก | ๋ด๋ณด๋ด๊ธฐ |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | ์ธ์คํด์ค ์ธ๋ถํ | โ | โ | โ | โ |
SAM ์์ MobileSAM
MobileSAM ์ ์๋ณธ SAM ๊ณผ ๋์ผํ ํ์ดํ๋ผ์ธ์ ์ ์งํ๋ฏ๋ก ์๋ณธ์ ์ ์ฒ๋ฆฌ, ํ์ฒ๋ฆฌ ๋ฐ ๊ธฐํ ๋ชจ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํฉํ์ต๋๋ค. ๋ฐ๋ผ์ ํ์ฌ ์๋ณธ SAM ์ ์ฌ์ฉ ์ค์ธ ์ฌ์ฉ์๋ ์ต์ํ์ ๋ ธ๋ ฅ์ผ๋ก MobileSAM ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค.
MobileSAM ๋ ์ด๋ฏธ์ง ์ธ์ฝ๋์ ๋ณ๊ฒฝ์ ์ ์ธํ๊ณ ๋ ๋์ผํ ํ์ดํ๋ผ์ธ์ ์ ์งํ๋ฉด์ ๊ธฐ์กด SAM ๊ณผ ๋น์ทํ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค. ํนํ, ๊ธฐ์กด์ ๋ฌด๊ฑฐ์ด ViT-H ์ธ์ฝ๋(632M)๋ฅผ ๋ ์์ Tiny-ViT(5M)๋ก ๊ต์ฒดํ์ต๋๋ค. ๋จ์ผ GPU, MobileSAM ์์ ์ด๋ฏธ์ง๋น ์ฝ 12ms๋ก ์๋ํฉ๋๋ค: ์ด๋ฏธ์ง ์ธ์ฝ๋์์ 8ms, ๋ง์คํฌ ๋์ฝ๋์์ 4ms์ ๋๋ค.
๋ค์ ํ๋ ViT ๊ธฐ๋ฐ ์ด๋ฏธ์ง ์ธ์ฝ๋๋ฅผ ๋น๊ตํ ๊ฒ์ ๋๋ค:
์ด๋ฏธ์ง ์ธ์ฝ๋ | ์๋ณธ SAM | MobileSAM |
---|---|---|
๋งค๊ฐ๋ณ์ | 611M | 5M |
์๋ | 452ms | 8ms |
์๋ณธ SAM ๋ฐ MobileSAM ๋ชจ๋ ๋์ผํ ํ๋กฌํํธ ์๋ด ๋ง์คํฌ ๋์ฝ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค:
๋ง์คํฌ ๋์ฝ๋ | ์๋ณธ SAM | MobileSAM |
---|---|---|
๋งค๊ฐ๋ณ์ | 3.876M | 3.876M |
์๋ | 4ms | 4ms |
๋ค์์ ์ ์ฒด ํ์ดํ๋ผ์ธ์ ๋น๊ตํ ๊ฒ์ ๋๋ค:
์ ์ฒด ํ์ดํ๋ผ์ธ(Enc+Dec) | ์๋ณธ SAM | MobileSAM |
---|---|---|
๋งค๊ฐ๋ณ์ | 615M | 9.66M |
์๋ | 456ms | 12ms |
MobileSAM ๋ฐ ์๋ณธ SAM ์ ์ฑ๋ฅ์ ์ ๊ณผ ์์๋ฅผ ๋ชจ๋ ํ๋กฌํํธ๋ก ์ฌ์ฉํ์ฌ ์์ฐํฉ๋๋ค.
์ฐ์ํ ์ฑ๋ฅ์ ๊ฐ์ถ MobileSAM ์ ํ์ฌ FastSAM ๋ณด๋ค ์ฝ 5๋ฐฐ ์๊ณ 7๋ฐฐ ๋น ๋ฆ ๋๋ค. ์์ธํ ๋ด์ฉ์ MobileSAM ํ๋ก์ ํธ ํ์ด์ง์์ ํ์ธํ ์ ์์ต๋๋ค.
ํ ์คํธ MobileSAM Ultralytics
๊ธฐ์กด SAM ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Ultralytics ์์ ํฌ์ธํธ ๋ฐ ๋ฐ์ค ํ๋กฌํํธ ๋ชจ๋๋ฅผ ํฌํจํ ๊ฐ๋จํ ํ ์คํธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
๋ชจ๋ธ ๋ค์ด๋ก๋
์ฌ๊ธฐ์์ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
ํฌ์ธํธ ํ๋กฌํํธ
์
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# Predict multiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
์์ ํ๋กฌํํธ
์
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# Predict mutiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
์ฐ๋ฆฌ๋ ๊ตฌํํ์ต๋๋ค MobileSAM
๊ทธ๋ฆฌ๊ณ SAM
๋์ผํ API๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ธํ ์ฌ์ฉ ์ ๋ณด๋ SAM ํ์ด์ง.
์ธ์ฉ ๋ฐ ๊ฐ์ฌ
์ฐ๊ตฌ ๋๋ ๊ฐ๋ฐ ์์ ์ MobileSAM ์ด ์ ์ฉํ๋ค๊ณ ์๊ฐ๋๋ฉด ์ ํฌ ๋ ผ๋ฌธ์ ์ธ์ฉํด ์ฃผ์ธ์:
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
MobileSAM ์ด๋ ๋ฌด์์ด๋ฉฐ ๊ธฐ์กด SAM ๋ชจ๋ธ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ์?
MobileSAM ๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ฉ์ผ๋ก ์ค๊ณ๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅธ ์ด๋ฏธ์ง ๋ถํ ๋ชจ๋ธ์ ๋๋ค. ์ด ๋ชจ๋ธ์ ๊ธฐ์กด SAM ๊ณผ ๋์ผํ ํ์ดํ๋ผ์ธ์ ์ ์งํ์ง๋ง ๋ฌด๊ฑฐ์ด ViT-H ์ธ์ฝ๋(632M ๋งค๊ฐ๋ณ์)๋ฅผ ๋ ์์ Tiny-ViT ์ธ์ฝ๋(5M ๋งค๊ฐ๋ณ์)๋ก ๋์ฒดํฉ๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ์ผ๋ก ์ธํด MobileSAM ์ ๊ธฐ์กด SAM ๋ณด๋ค ์ฝ 5๋ฐฐ ์๊ณ 7๋ฐฐ ๋นจ๋ผ์ก์ต๋๋ค. ์๋ฅผ ๋ค์ด, MobileSAM ์ ์ด๋ฏธ์ง๋น ์ฝ 12ms๋ก ์๋ํ๋ ๋ฐ๋ฉด, ๊ธฐ์กด SAM ์ 456ms๋ก ์๋ํฉ๋๋ค. ๋ค์ํ ํ๋ก์ ํธ์์ MobileSAM ๊ตฌํ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
Ultralytics ์ ์ฌ์ฉํ์ฌ MobileSAM ํ ์คํธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
Ultralytics ์์ MobileSAM ํ ์คํธ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ํฌ์ธํธ ๋ฐ ๋ฐ์ค ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๊ทธ๋จผํธ๋ฅผ ์์ธกํ ์ ์์ต๋๋ค. ๋ค์์ ํฌ์ธํธ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ๋๋ค:
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
์์ธํ ๋ด์ฉ์ ํ ์คํธ MobileSAM ์น์ ์ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ MobileSAM ์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
MobileSAM ๋ ๊ฐ๋ฒผ์ด ์ํคํ ์ฒ์ ๋น ๋ฅธ ์ถ๋ก ์๋๋ก ์ธํด ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์์ ์ ๋๋ค. ๊ธฐ์กด SAM ๊ณผ ๋น๊ตํ๋ฉด MobileSAM ์ ์ฝ 5๋ฐฐ ์๊ณ 7๋ฐฐ ๋น ๋ฅด๋ฏ๋ก ์ปดํจํ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๊ฒฝ์ ์ ํฉํฉ๋๋ค. ์ด๋ฌํ ํจ์จ์ฑ ๋๋ถ์ ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค์์ ์๋นํ ์ง์ฐ ์๊ฐ ์์ด ์ค์๊ฐ ์ด๋ฏธ์ง ๋ถํ ์ ์ํํ ์ ์์ต๋๋ค. ๋ํ MobileSAM ์ ์ถ๋ก ๊ณผ ๊ฐ์ ๋ชจ๋ธ์ ๋ชจ๋ฐ์ผ ์ฑ๋ฅ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
MobileSAM ๊ต์ก์ ์ด๋ป๊ฒ ์งํ๋์์ผ๋ฉฐ, ๊ต์ก ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์๋์?
MobileSAM ๋ ์๋ณธ ์ด๋ฏธ์ง์ 1%์ ํด๋นํ๋ 10๋ง ๊ฐ์ ๋ฐ์ดํฐ์ ์ผ๋ก ํ๋ฃจ๋ ์ ๋๋ ์๊ฐ ๋ด์ ๋จ์ผ GPU ๋ก ํ์ต๋์์ต๋๋ค. ํธ๋ ์ด๋ ์ฝ๋๋ ํฅํ ์ ๊ณต๋ ์์ ์ด์ง๋ง, ํ์ฌ๋ MobileSAM GitHub ๋ฆฌํฌ์งํ ๋ฆฌ์์ MobileSAM ์ ๋ค๋ฅธ ์ธก๋ฉด์ ์ดํด๋ณผ ์ ์์ต๋๋ค. ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์๋ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น์ ๊ตฌํ ์ธ๋ถ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
MobileSAM ์ ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก๋ ๋ฌด์์ธ๊ฐ์?
MobileSAM ๋ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์ด๋ฏธ์ง ๋ถํ ์ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ค์๊ฐ ๊ฐ์ฒด ๊ฐ์ง ๋ฐ ์ธ๋ถํ.
- ์ปดํจํ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ๊ธฐ๊ธฐ์์ ์ง์ฐ ์๊ฐ์ด ์งง์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ.
- ์ฆ๊ฐ ํ์ค(AR) ๋ฐ ์ค์๊ฐ ๋ถ์๊ณผ ๊ฐ์ ์์ ์ ์ํด AI ๊ธฐ๋ฐ ๋ชจ๋ฐ์ผ ์ฑ์ ํตํฉํฉ๋๋ค.
์์ธํ ์ฌ์ฉ ์ฌ๋ก์ ์ฑ๋ฅ ๋น๊ต๋ SAM ์์ MobileSAM ์ผ๋ก์ ์ ์ ์น์ ์ ์ฐธ์กฐํ์ธ์.