์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๋ฌด์—‡์ด๋“  ์„ธ๊ทธ๋จผํŠธ ๋ชจ๋ธ (SAM)

์ด๋ฏธ์ง€ ์„ธ๊ทธ๋จผํŠธ์˜ ์ƒˆ๋กœ์šด ์ง€ํ‰์„ ์—ฐ Segment Anything ๋ชจ๋ธ( SAM)์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ˜์‹ ์ ์ธ ๋ชจ๋ธ์€ ์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ์„ ๊ฐ–์ถ˜ ์‹ ์†ํ•œ ์ด๋ฏธ์ง€ ์„ธ๊ทธ๋จผํ…Œ์ด์…˜์„ ๋„์ž…ํ•˜์—ฌ ์—…๊ณ„์˜ ํŒ๋„๋ฅผ ๋ฐ”๊พธ๊ณ  ์ƒˆ๋กœ์šด ํ‘œ์ค€์„ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

์†Œ๊ฐœ SAM: ์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ ๋ชจ๋ธ

์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ ๋ชจ๋ธ( SAM)์€ ์ด๋ฏธ์ง€ ๋ถ„์„ ์ž‘์—…์—์„œ ๋น„๊ตํ•  ์ˆ˜ ์—†๋Š” ๋‹ค์žฌ๋‹ค๋Šฅํ•จ์„ ์ œ๊ณตํ•˜๋ฉฐ ์‹ ์†ํ•œ ๋ถ„ํ• ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ตœ์ฒจ๋‹จ ์ด๋ฏธ์ง€ ๋ถ„ํ•  ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. SAM ์€ ์ด๋ฏธ์ง€ ๋ถ„ํ• ์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ชจ๋ธ, ์ž‘์—… ๋ฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋„์ž…ํ•˜๋Š” ํš๊ธฐ์ ์ธ ํ”„๋กœ์ ํŠธ์ธ ์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์˜ ํ•ต์‹ฌ์„ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.

SAM์˜ ๊ณ ๊ธ‰ ์„ค๊ณ„ ๋•๋ถ„์— ์‚ฌ์ „ ์ง€์‹ ์—†์ด๋„ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ๋ถ„ํฌ์™€ ์ž‘์—…์— ์ ์‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ธฐ๋Šฅ์„ ์ œ๋กœ์ƒท ์ „์†ก์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ๋ณ„๋œ 1,100๋งŒ ๊ฐœ์˜ ์ด๋ฏธ์ง€์— 10์–ต ๊ฐœ ์ด์ƒ์˜ ๋งˆ์Šคํฌ๊ฐ€ ํฌํ•จ๋œ ๋ฐฉ๋Œ€ํ•œ SA-1B ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ํ•™์Šตํ•œ SAM ์€ ๋งŽ์€ ๊ฒฝ์šฐ ์ด์ „์˜ ์™„์ „ ๊ฐ๋… ๊ฒฐ๊ณผ๋ฅผ ๋Šฅ๊ฐ€ํ•˜๋Š” ์ธ์ƒ์ ์ธ ์ œ๋กœ ์ƒท ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์„ธํŠธ ์ƒ˜ํ”Œ ์ด๋ฏธ์ง€ SA-1B ์˜ˆ์‹œ ์ด๋ฏธ์ง€. ์ƒˆ๋กœ ๋„์ž…๋œ SA-1B ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ๋งˆ์Šคํฌ๋ฅผ ์˜ค๋ฒ„๋ ˆ์ดํ•œ ๋ฐ์ดํ„ฐ ์„ธํŠธ ์ด๋ฏธ์ง€. SA-1B์—๋Š” 1,100๋งŒ ๊ฐœ์˜ ๋‹ค์–‘ํ•œ ๊ณ ํ•ด์ƒ๋„, ๋ผ์ด์„ ์Šค ๋ฐ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ์ด๋ฏธ์ง€์™€ 11์–ต ๊ฐœ์˜ ๊ณ ํ’ˆ์งˆ ์„ธ๋ถ„ํ™” ๋งˆ์Šคํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋งˆ์Šคํฌ๋Š” SAM ์— ์˜ํ•ด ์™„์ „ ์ž๋™์œผ๋กœ ์ฃผ์„์ด ๋‹ฌ๋ ธ์œผ๋ฉฐ, ์‚ฌ๋žŒ์˜ ํ‰๊ฐ€์™€ ์ˆ˜๋งŽ์€ ์‹คํ—˜์„ ํ†ตํ•ด ํ™•์ธ๋œ ๋ฐ”์™€ ๊ฐ™์ด ๋†’์€ ํ’ˆ์งˆ๊ณผ ๋‹ค์–‘์„ฑ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋Š” ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•ด ์ด๋ฏธ์ง€๋‹น ๋งˆ์Šคํฌ ์ˆ˜์— ๋”ฐ๋ผ ๊ทธ๋ฃนํ™”๋ฉ๋‹ˆ๋‹ค(์ด๋ฏธ์ง€๋‹น ํ‰๊ท  โˆผ100๊ฐœ์˜ ๋งˆ์Šคํฌ๊ฐ€ ์žˆ์Œ).

์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ ๋ชจ๋ธ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ (SAM)

  • ํ”„๋กฌํ”„ํŠธ ๊ฐ€๋Šฅํ•œ ์„ธ๋ถ„ํ™” ์ž‘์—…: SAM ์€ ํ”„๋กฌํ”„ํŠธ ๊ฐ€๋Šฅํ•œ ์„ธ๋ถ„ํ™” ์ž‘์—…์„ ์—ผ๋‘์— ๋‘๊ณ  ์„ค๊ณ„๋˜์–ด ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณต๊ฐ„ ๋˜๋Š” ํ…์ŠคํŠธ ๋‹จ์„œ ๋“ฑ ์ฃผ์–ด์ง„ ํ”„๋กฌํ”„ํŠธ์—์„œ ์œ ํšจํ•œ ์„ธ๋ถ„ํ™” ๋งˆ์Šคํฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณ ๊ธ‰ ์•„ํ‚คํ…์ฒ˜: ์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ ๋ชจ๋ธ์€ ๊ฐ•๋ ฅํ•œ ์ด๋ฏธ์ง€ ์ธ์ฝ”๋”, ํ”„๋กฌํ”„ํŠธ ์ธ์ฝ”๋”, ๊ฒฝ๋Ÿ‰ ๋งˆ์Šคํฌ ๋””์ฝ”๋”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณ ์œ ํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ์„ธ๊ทธ๋จผํŠธ ์ž‘์—…์—์„œ ์œ ์—ฐํ•œ ํ”„๋กฌํ”„ํŠธ, ์‹ค์‹œ๊ฐ„ ๋งˆ์Šคํฌ ๊ณ„์‚ฐ, ๋ชจํ˜ธ์„ฑ ์ธ์‹์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • SA-1B ๋ฐ์ดํ„ฐ ์„ธํŠธ: Segment Anything ํ”„๋กœ์ ํŠธ์—์„œ ๋„์ž…ํ•œ SA-1B ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” 1,100๋งŒ ๊ฐœ์˜ ์ด๋ฏธ์ง€์— 10์–ต ๊ฐœ ์ด์ƒ์˜ ๋งˆ์Šคํฌ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๊นŒ์ง€ ๊ฐ€์žฅ ํฐ ๊ทœ๋ชจ์˜ ์„ธ๋ถ„ํ™” ๋ฐ์ดํ„ฐ ์„ธํŠธ์ธ ์ด ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” SAM ์— ๋‹ค์–‘ํ•˜๊ณ  ๋Œ€๊ทœ๋ชจ์˜ ํ•™์Šต ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ œ๋กœ์ƒท ์„ฑ๋Šฅ: SAM ์€ ๋‹ค์–‘ํ•œ ์„ธ๋ถ„ํ™” ์ž‘์—…์—์„œ ๋›ฐ์–ด๋‚œ ์ œ๋กœ์ƒท ์„ฑ๋Šฅ์„ ๋ณด์—ฌ ์ฃผ๋ฏ€๋กœ ์‹ ์†ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง์ด ํ•„์š” ์—†๋Š” ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์ž…๋‹ˆ๋‹ค.

์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ ๋ชจ๋ธ๊ณผ SA-1B ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ ์—ฐ๊ตฌ ๋…ผ๋ฌธ ' ์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ'์„ ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ, ์ง€์›๋˜๋Š” ์ž‘์—… ๋ฐ ์ž‘๋™ ๋ชจ๋“œ

์ด ํ‘œ์—๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ๊ณผ ํŠน์ • ์‚ฌ์ „ ํ•™์Šต ๊ฐ€์ค‘์น˜, ์ง€์› ์ž‘์—…, ์ถ”๋ก , ๊ฒ€์ฆ, ํ•™์Šต ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ž‘๋™ ๋ชจ๋“œ์™€์˜ ํ˜ธํ™˜์„ฑ์ด ํ‘œ์‹œ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ง€์›๋˜๋Š” ๋ชจ๋“œ์—๋Š” โœ… ์ด๋ชจํ‹ฐ์ฝ˜, ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ชจ๋“œ์—๋Š” โŒ ์ด๋ชจํ‹ฐ์ฝ˜์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ์œ ํ˜• ์‚ฌ์ „ ํ›ˆ๋ จ๋œ ์›จ์ดํŠธ ์ง€์›๋˜๋Š” ์ž‘์—… ์ถ”๋ก  ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ต์œก ๋‚ด๋ณด๋‚ด๊ธฐ
SAM base sam_b.pt ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™” โœ… โŒ โŒ โŒ
SAM large sam_l.pt ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™” โœ… โŒ โŒ โŒ

์‚ฌ์šฉ ๋ฐฉ๋ฒ• SAM: ์ด๋ฏธ์ง€ ์„ธ๋ถ„ํ™”์˜ ๋‹ค์–‘์„ฑ๊ณผ ๊ฐ•๋ ฅํ•จ

์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ ๋ชจ๋ธ์€ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜์–ด์„œ๋Š” ๋‹ค์–‘ํ•œ ๋‹ค์šด์ŠคํŠธ๋ฆผ ์ž‘์—…์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์—์ง€ ๊ฐ์ง€, ๊ฐ์ฒด ์ œ์•ˆ ์ƒ์„ฑ, ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™”, ์˜ˆ๋น„ ํ…์ŠคํŠธ-๋งˆ์Šคํฌ ๊ฐ„ ์˜ˆ์ธก ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์‹ ์†ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง์„ ํ†ตํ•ด SAM ์ƒˆ๋กœ์šด ์ž‘์—…๊ณผ ๋ฐ์ดํ„ฐ ๋ฐฐํฌ์— ์ œ๋กœ ์ƒท ๋ฐฉ์‹์œผ๋กœ ์‹ ์†ํ•˜๊ฒŒ ์ ์‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ์ด๋ฏธ์ง€ ์„ธ๋ถ„ํ™” ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ๋‹ค์žฌ๋‹ค๋Šฅํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ ์ž๋ฆฌ๋งค๊น€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SAM ์˜ˆ์ธก ์˜ˆ์ œ

ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์žˆ๋Š” ์„ธ๊ทธ๋จผํŠธ

์ฃผ์–ด์ง„ ํ”„๋กฌํ”„ํŠธ์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€๋ฅผ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.

from ultralytics import SAM

# Load a model
model = SAM('sam_b.pt')

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
model('ultralytics/assets/zidane.jpg', bboxes=[439, 437, 524, 709])

# Run inference with points prompt
model('ultralytics/assets/zidane.jpg', points=[900, 370], labels=[1])

๋ชจ๋“  ํ•ญ๋ชฉ ์„ธ๋ถ„ํ™”

์ „์ฒด ์ด๋ฏธ์ง€๋ฅผ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.

from ultralytics import SAM

# Load a model
model = SAM('sam_b.pt')

# Display model information (optional)
model.info()

# Run inference
model('path/to/image.jpg')
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • ์—ฌ๊ธฐ์„œ ๋กœ์ง์€ ํ”„๋กฌํ”„ํŠธ(b๋ฐ•์Šค/ํฌ์ธํŠธ/๋งˆ์Šคํฌ)๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ „์ฒด ์ด๋ฏธ์ง€๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

SAMPredictor ์˜ˆ์ œ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด๋ฏธ์ง€ ์ธ์ฝ”๋”๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ ๋„ ์ด๋ฏธ์ง€๋ฅผ ํ•œ ๋ฒˆ ์„ค์ •ํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ ์ถ”๋ก ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task='segment', mode='predict', imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])
results = predictor(points=[900, 370], labels=[1])

# Reset image
predictor.reset_image()

์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์„ธ๋ถ„ํ™”ํ•ฉ๋‹ˆ๋‹ค.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task='segment', mode='predict', imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)
  • ๋‹ค์Œ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ธ์ˆ˜๊ฐ€ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. Segment everything ์ฐธ์กฐ Predictor/generate ์ฐธ์กฐ.

SAM ๋น„๊ต ๋Œ€ YOLOv8

์—ฌ๊ธฐ์„œ๋Š” ๋ฉ”ํƒ€์˜ ๊ฐ€์žฅ ์ž‘์€ SAM ๋ชจ๋ธ์ธ SAM-b์™€ ๊ฐ€์žฅ ์ž‘์€ Ultralytics ์„ธ๋ถ„ํ™” ๋ชจ๋ธ์ธ YOLOv8n-seg๋ฅผ ๋น„๊ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

๋ชจ๋ธ ํฌ๊ธฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ์†๋„(CPU)
๋ฉ”ํƒ€ SAM-b 358 MB 94.7 M 51096 ms/im
MobileSAM 40.7 MB 10.1 M 46122 ms/im
FastSAM-s์™€ YOLOv8 ๋ฐฑ๋ณธ 23.7 MB 11.8 M 115ms/im
Ultralytics YOLOv8n-seg 6.7MB (53.4๋ฐฐ ์ž‘์•„์ง) 3.4m (27.9๋ฐฐ ๊ฐ์†Œ) 59ms/im (866๋ฐฐ ๋นจ๋ผ์ง)

์ด ๋น„๊ต๋Š” ๋ชจ๋ธ ๊ฐ„์˜ ๋ชจ๋ธ ํฌ๊ธฐ์™€ ์†๋„์—์„œ ๋ช‡ ๋ฐฐ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. SAM ์€ ์ž๋™ ์„ธ๋ถ„ํ™”๋ฅผ ์œ„ํ•œ ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋” ์ž‘๊ณ  ๋น ๋ฅด๋ฉฐ ํšจ์œจ์ ์ธ YOLOv8 ์„ธ๋ถ„ํ™” ๋ชจ๋ธ๊ณผ ์ง์ ‘์ ์ธ ๊ฒฝ์Ÿ ์ƒ๋Œ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋Š” 16GB RAM์ด ์žฅ์ฐฉ๋œ 2023๋…„ํ˜• Apple M2 Macbook์—์„œ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ…Œ์ŠคํŠธ๋ฅผ ์žฌํ˜„ํ•ฉ๋‹ˆ๋‹ค:

์˜ˆ์ œ

from ultralytics import FastSAM, SAM, YOLO

# Profile SAM-b
model = SAM('sam_b.pt')
model.info()
model('ultralytics/assets')

# Profile MobileSAM
model = SAM('mobile_sam.pt')
model.info()
model('ultralytics/assets')

# Profile FastSAM-s
model = FastSAM('FastSAM-s.pt')
model.info()
model('ultralytics/assets')

# Profile YOLOv8n-seg
model = YOLO('yolov8n-seg.pt')
model.info()
model('ultralytics/assets')

์ž๋™ ์ฃผ์„: ์„ธ๋ถ„ํ™” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ๋น ๋ฅธ ๊ฒฝ๋กœ

์ž๋™ ์ฃผ์„์€ SAM ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ „ ํ•™์Šต๋œ ๊ฐ์ง€ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ๋ถ„ํ™” ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งŽ์€ ์ˆ˜์˜ ์ด๋ฏธ์ง€์— ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ฃผ์„์„ ๋‹ฌ ์ˆ˜ ์žˆ์–ด ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ˆ˜๋™ ๋ผ๋ฒจ๋ง ์ž‘์—…์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ์ง€ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ๋ถ„ํ™” ๋ฐ์ดํ„ฐ ์„ธํŠธ ์ƒ์„ฑํ•˜๊ธฐ

Ultralytics ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์— ์ž๋™ ์ฃผ์„์„ ๋‹ฌ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜์„ธ์š”. auto_annotate ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค:

์˜ˆ์ œ

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model='sam_b.pt')
์ธ์ˆ˜ ์œ ํ˜• ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
๋ฐ์ดํ„ฐ str ์ฃผ์„์„ ๋‹ฌ ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋œ ํด๋”์˜ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
det_model ๋ฌธ์ž์—ด, ์„ ํƒ ์‚ฌํ•ญ ์‚ฌ์ „ ํ•™์Šต๋œ YOLO ํƒ์ง€ ๋ชจ๋ธ. ๊ธฐ๋ณธ๊ฐ’์€ 'yolov8x.pt'์ž…๋‹ˆ๋‹ค. 'yolov8x.pt'
sam_model ๋ฌธ์ž์—ด, ์„ ํƒ ์‚ฌํ•ญ ์‚ฌ์ „ ํ•™์Šต๋œ SAM ์„ธ๋ถ„ํ™” ๋ชจ๋ธ. ๊ธฐ๋ณธ๊ฐ’์€ 'sam_b.pt'์ž…๋‹ˆ๋‹ค. 'sam_b.pt'
์žฅ์น˜ ๋ฌธ์ž์—ด, ์„ ํƒ ์‚ฌํ•ญ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•  ์žฅ์น˜์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ๋นˆ ๋ฌธ์ž์—ด(์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ CPU ๋˜๋Š” GPU)์ž…๋‹ˆ๋‹ค.
output_dir str, ์—†์Œ, ์„ ํƒ ์‚ฌํ•ญ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ '๋ฐ์ดํ„ฐ'์™€ ๊ฐ™์€ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” '๋ ˆ์ด๋ธ”' ํด๋”์ž…๋‹ˆ๋‹ค. ์—†์Œ

The auto_annotate ํ•จ์ˆ˜๋Š” ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ ์‚ฌ์ „ ํ•™์Šต๋œ ํƒ์ง€ ๋ฐ SAM ์„ธ๋ถ„ํ™” ๋ชจ๋ธ, ๋ชจ๋ธ์„ ์‹คํ–‰ํ•  ๋””๋ฐ”์ด์Šค, ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ์„ ํƒ์  ์ธ์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ ์ž๋™ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ ํ’ˆ์งˆ์˜ ์„ธ๋ถ„ํ™” ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๋Œ€๊ทœ๋ชจ ์ด๋ฏธ์ง€ ์ปฌ๋ ‰์…˜์„ ๋‹ค๋ฃจ๋Š” ์—ฐ๊ตฌ์ž์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™ ์ฃผ์„ ์ž‘์—… ๋Œ€์‹  ๋ชจ๋ธ ๊ฐœ๋ฐœ๊ณผ ํ‰๊ฐ€์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ธ์šฉ ๋ฐ ๊ฐ์‚ฌ

์—ฐ๊ตฌ ๋˜๋Š” ๊ฐœ๋ฐœ ์—…๋ฌด์— SAM ์ด ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ์ €ํฌ ๋…ผ๋ฌธ์„ ์ธ์šฉํ•ด ์ฃผ์„ธ์š”:

@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollรกr and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

์ปดํ“จํ„ฐ ๋น„์ „ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•ด ์ด ๊ท€์ค‘ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•ด ์ฃผ์‹  Meta AI์— ๊ฐ์‚ฌ์˜ ๋ง์”€์„ ์ „ํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค์›Œ๋“œ: ์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ, ์„ธ๊ทธ๋จผํŠธ ์• ๋‹ˆ์”ฝ ๋ชจ๋ธ, SAM, ๋ฉ”ํƒ€ SAM, ์ด๋ฏธ์ง€ ์„ธ๋ถ„ํ™”, ํ”„๋กฌํ”„ํŠธ ๊ฐ€๋Šฅํ•œ ์„ธ๋ถ„ํ™”, ์ œ๋กœ ์ƒท ์„ฑ๋Šฅ, SA-1B ๋ฐ์ดํ„ฐ ์„ธํŠธ, ๊ณ ๊ธ‰ ์•„ํ‚คํ…์ฒ˜, ์ž๋™ ์ฃผ์„, Ultralytics, ์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ, SAM ๋ฒ ์ด์Šค, SAM ๋Œ€ํ˜•, ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™”, ์ปดํ“จํ„ฐ ๋น„์ „, AI, ์ธ๊ณต ์ง€๋Šฅ, ๋จธ์‹  ๋Ÿฌ๋‹, ๋ฐ์ดํ„ฐ ์ฃผ์„, ์„ธ๋ถ„ํ™” ๋งˆ์Šคํฌ, ๊ฐ์ง€ ๋ชจ๋ธ, YOLO ๊ฐ์ง€ ๋ชจ๋ธ, bibtex, Meta AI.



์ƒ์„ฑ๋จ 2023-11-12, ์—…๋ฐ์ดํŠธ๋จ 2024-01-16
์ž‘์„ฑ์ž: glenn-jocher (9), ChaoningZhang (1), Laughing-q (1)

๋Œ“๊ธ€