Mask2Former์ OneFormer: ๐ค Transformers์ ๋ฒ์ฉ ์ด๋ฏธ์ง ๋ถํ ๋ชจ๋ธ
TL;DR
Mask2Former์ OneFormer๊ฐ ์ด์ ๐ค Transformers์์ ์ฌ์ฉ ๊ฐ๋ฅํด์ก์ผ๋ฉฐ, ์์ โํน์ ๋ชจ๋ธ ์์ด ์ธ์คํด์ค, ์๋ฏธ, ํ๋ ธํํฑ ๋ถํ ์ ์ํํ ์ ์๋ ํตํฉ ์ํคํ ์ฒ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ฏธ์ง ๋ถํ ์์
Instance segmentation์ ๊ฐ ๊ฐ์ฒด ์ธ์คํด์ค(์: ๊ฐ ์ฌ๋)๋ฅผ ์๋ณํ๊ณ ์ธ์คํด์ค๋น ์ด์ง ๋ง์คํฌ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
Semantic segmentation์ ๊ฐ ํฝ์ ์ ๋จ์ผ ํด๋์ค ๋ ์ด๋ธ์ ํ ๋นํ๋ฉฐ, ๋์ผ ํด๋์ค์ ๋ณ๋ ์ธ์คํด์ค๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค.
Panoptic segmentation์ ๋ ๊ฐ์ง๋ฅผ ๊ฒฐํฉํฉ๋๋ค: ๊ฒน์น์ง ์๋ ์ธ๊ทธ๋จผํธ ์งํฉ์ ์์ฑํ๊ณ , ๊ฐ ์ธ๊ทธ๋จผํธ๋ ์ด์ง ๋ง์คํฌ์ ํด๋์ค ๋ ์ด๋ธ์ ๊ฐ์ง๋ฉฐ, โthingsโ(์ธ์คํด์ค)์ โstuffโ(๋ฐฐ๊ฒฝ ์นดํ ๊ณ ๋ฆฌ)๋ฅผ ๋ชจ๋ ํฌ๊ดํฉ๋๋ค.
์ด ์ธ ๊ฐ์ง ํ์ ์์ ์ ๊ณผ๊ฑฐ์ ์๋ก ๋ค๋ฅธ ๋ชจ๋ธ๊ตฐ์ ํ์๋ก ํ์ง๋ง, ์ต๊ทผ ์ฐ๊ตฌ๋ ๋ชจ๋ ์์ ์ ๋์ผํ๊ฒ ์ฒ๋ฆฌํ๋ ๋จ์ผ โ๋ง์คํฌ ๋ถ๋ฅโ ํจ๋ฌ๋ค์์ผ๋ก ์๋ ดํ๊ณ ์์ต๋๋ค.
๋ฒ์ฉ ์ด๋ฏธ์ง ๋ถํ
2020๋ ์ดํ DETR๊ณผ ๊ฐ์ ๋ชจ๋ธ์ ํธ๋์คํฌ๋จธ ๊ธฐ๋ฐ ๋์ฝ๋๋ฅผ ๋์ ํ์ฌ ์ด์ง ๋ง์คํฌ์ ํด๋์ค ๋ ์ด๋ธ ์งํฉ์ ๋ณ๋ ฌ๋ก ์์ธกํจ์ผ๋ก์จ ํตํฉ๋ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ํ๋ ธํํฑ ๋ถํ ์ ๊ฐ๋ฅํ๊ฒ ํ์ต๋๋ค. MaskFormer๋ ๋์ผํ ํจ๋ฌ๋ค์์ด ์๋ฏธ ๋ถํ ์๋ ์ ์ฉ๋ ์ ์์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
Mask2Former๋ ๋ฐฑ๋ณธ, ํฝ์ ๋์ฝ๋, ํธ๋์คํฌ๋จธ ๋์ฝ๋๋ฅผ ๊ฐ์ ํ์ฌ ์ด ์์ด๋์ด๋ฅผ ์ธ์คํด์ค ๋ถํ ์ ํ์ฅํฉ๋๋ค. ์ํคํ ์ฒ๋ ๋ค์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- ๋ฐฑ๋ณธ(ResNet ๋๋ Swin Transformer)์ผ๋ก ์ ํด์๋ ํน์ง ๋งต์ ์์ฑํฉ๋๋ค.
- ํฝ์ ๋์ฝ๋๊ฐ ์ด๋ฌํ ๋งต์ ๊ณ ํด์๋ ํน์ง์ผ๋ก ์ ์ํ๋งํฉ๋๋ค.
- ํธ๋์คํฌ๋จธ ๋์ฝ๋๊ฐ ๊ณ ์ ๋ ์ฟผ๋ฆฌ ์งํฉ์ ๋ฐ์ ์ด์ง ๋ง์คํฌ ์ ์๊ณผ ํด๋์ค ๋ก์ง์ ์ถ๋ ฅํฉ๋๋ค.
Mask2Former๋ ์ฌ์ ํ ์ต์ฒจ๋จ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด ์์ ๋ณ ๋ณ๋ ํ์ต์ด ํ์ํฉ๋๋ค.
OneFormer๋ Mask2Former์ ํ ์คํธ ์ธ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ๋ชจ๋ธ์ ์์ ์ค๋ช (โinstanceโ, โsemanticโ, ๋๋ โpanopticโ)์ ์กฐ๊ฑดํํฉ๋๋ค. ํ๋ ธํํฑ ์คํ์ผ ๋ฐ์ดํฐ์ ๋ง์ผ๋ก ํ์ต๋ OneFormer๋ ์ธ ์์ ๋ชจ๋์์ ์ต์ฒจ๋จ ๊ฒฐ๊ณผ๋ฅผ ๋ฌ์ฑํ์ง๋ง, ์ถ๊ฐ ํ ์คํธ ์ธ์ฝ๋๋ก ์ธํด ์ถ๋ก ์ง์ฐ ์๊ฐ์ด ์ฆ๊ฐํฉ๋๋ค. Swin Transformer ๋๋ DiNAT ๋ฐฑ๋ณธ์ ์ง์ํฉ๋๋ค.
Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ์ถ๋ก
๋ ๋ชจ๋ธ ๋ชจ๋ AutoImageProcessor(๋๋ OneFormerProcessor)์ ์ ์ ํ ๋ชจ๋ธ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ค์ ์ฝ๋๋ก ๋ก๋ํ ์ ์์ต๋๋ค:
from transformers import AutoImageProcessor, Mask2FormerForUniversalSegmentation
processor = AutoImageProcessor.from_pretrained(
"facebook/mask2former-swin-base-coco-panoptic"
)
model = Mask2FormerForUniversalSegmentation.from_pretrained(
"facebook/mask2former-swin-base-coco-panoptic"
)
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์ํ ๋ฐ์ดํฐ์ ๊ณผ ๋ฐฑ๋ณธ์ ํฌ๊ดํ๋ 30๊ฐ ์ด์์ ์ฌ์ ํ์ต ์ฒดํฌํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ ํ์ ์ธ ์ถ๋ก ํ์ดํ๋ผ์ธ:
from PIL import Image, ImageDraw
import requests, torch
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# Convert raw mask proposals to panoptic output
prediction = processor.post_process_panoptic_segmentation(
outputs, target_sizes=[image.size[::-1]]
)[0]
print(prediction.keys()) # dict_keys(['segmentation', 'segments_info'])
prediction['segmentation']์ ๊ฐ ํฝ์
๊ฐ์ด ์ธ์คํด์ค ID๋ฅผ ์ธ์ฝ๋ฉํ๋ (H,โฏW) ๋งต์ด๋ฉฐ, segments_info๋ ํด๋์ค ID, ์ ์ ๋ฐ ๊ธฐํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค.
Matplotlib์ ์ฌ์ฉํ์ฌ ๊ฐ ์ธ๊ทธ๋จผํธ ID๋ฅผ ๊ณ ์ ์์์ ๋งคํํ๊ณ , ํด๋์ค ์ด๋ฆ๊ณผ ์ธ์คํด์ค ์๋ฅผ ํ์ํ๋ ๋ ์ ๋๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์๊ฐํํ ์ ์์ต๋๋ค.
OneFormer ์ถ๋ก ์ ๋์ผํ API๋ฅผ ๋ฐ๋ฅด์ง๋ง ์ถ๊ฐ ํ
์คํธ ํ๋กฌํํธ๊ฐ ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋
ธํํฑ์ "segment everything", ์ธ์คํด์ค๋ "segment instances", ์๋ฏธ ๋ถํ ์ "segment semantics"์ ๊ฐ์ด ์
๋ ฅํฉ๋๋ค. ์ ์ฒด ๋ฐ๋ชจ ๋
ธํธ๋ถ์ Hugging Face TransformersโTutorials ์ ์ฅ์์์ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ์ ๋ํ ํ์ธํ๋
ํ์ธํ๋์ MaskFormer์ ๋์ผํ ๊ณ ์์ค API๋ฅผ ์ฌ์ฉํฉ๋๋ค. MaskFormerForInstanceSegmentation์ Mask2FormerForUniversalSegmentation ๋๋ OneFormerForUniversalSegmentation์ผ๋ก ๊ต์ฒดํฉ๋๋ค. ํ๋ก์ธ์ ํด๋์ค๋ ๋ณ๊ฒฝ๋ฉ๋๋ค:
Mask2FormerImageProcessor(๋๋AutoImageProcessor)๋ Mask2Former์ฉ์ ๋๋ค.OneFormerProcessor๋ OneFormer์ฉ์ผ๋ก ์ด๋ฏธ์ง์ ํ ์คํธ ์ ๋ ฅ์ ๋ชจ๋ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ชจ ๋ ธํธ๋ถ์ ๋ฐ์ดํฐ์ ์ค๋น, ํ์ต ๋ฃจํ ๋ฐ ์ธ ๊ฐ์ง ๋ถํ ์์ ์ ๋ํ ํ๊ฐ ๊ณผ์ ์ ์๋ดํฉ๋๋ค.
์๋ฏธ์ ์ค์์ฑ
- ํตํฉ ์ํฌํ๋ก์ฐ โ ์ฐ๊ตฌ์์ ์ค๋ฌด์๋ ์ด์ ๊ฐ ๋ถํ ์์ ๋ง๋ค ๋ณ๋์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ ํ์๊ฐ ์์ต๋๋ค.
- ์์ง๋์ด๋ง ๋น์ฉ ๊ฐ์ โ ๋จ์ผ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ฌ๋ฌ ๋ค์ด์คํธ๋ฆผ ์ ํ๋ฆฌ์ผ์ด์ (์: ์์จ ์ฃผํ, ์๋ฃ ์์, ์ฝํ ์ธ ๋ชจ๋๋ ์ด์ )์ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
- ์ต์ฒจ๋จ ์ฑ๋ฅ โ OneFormer๋ ๋จ์ผ ํ๋ ธํํฑ ๋ฐ์ดํฐ์ ์ผ๋ก ํ์ต๋๋ฉด์๋ ํนํ๋ ๋ชจ๋ธ์ ๋ฅ๊ฐํ๊ฑฐ๋ ๋๋ฑํ ์ฑ๋ฅ์ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ ์์ง์ ๋จ์ํํฉ๋๋ค.
- ์คํ์์ค ์ ๊ทผ์ฑ โ ์ด๋ฌํ ๋ชจ๋ธ์ ๐ค Transformers์ ํตํฉํจ์ผ๋ก์จ Hugging Face๋ ๊ณ ํ์ง ๋ถํ ์ ์ง์ ์ฅ๋ฒฝ์ ๋ฎ์ถ๊ณ , ๋น ๋ฅธ ํ๋กํ ํ์ดํ๊ณผ ์ฌํ ๊ฐ๋ฅํ ์ฐ๊ตฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๋ฆฌ์์ค
- ๋ฐ๋ชจ ๋ ธํธ๋ถ: Mask2Former, OneFormer
- ์ค์๊ฐ ๋ฐ๋ชจ Spaces: Mask2Former demo, OneFormer demo
- ์๋ณธ ๋ ผ๋ฌธ: Mask2Former (arXiv:2112.01527), OneFormer (arXiv:2211.06220)