YOLO-์ธ๊ณ ๋ชจ๋ธ
YOLO-์ธ๊ณ ๋ชจ๋ธ์์๋ ๊ณ ๊ธ ์ค์๊ฐ Ultralytics YOLOv8-๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ๋์ ํฉ๋๋ค. ์ด ํ์ ์ ์ค๋ช ํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง ๋ด์ ๋ชจ๋ ๋ฌผ์ฒด๋ฅผ ๊ฐ์งํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ฒฝ์๋ ฅ ์๋ ์ฑ๋ฅ์ ์ ์งํ๋ฉด์ ๊ณ์ฐ ์๊ตฌ ์ฌํญ์ ํฌ๊ฒ ๋ฎ์ถ YOLO-World๋ ๋ค์ํ ๋น์ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ค๋ชฉ์ ๋๊ตฌ๋ก ๋ถ์ํ๊ณ ์์ต๋๋ค.
Watch: YOLO ์ฌ์ฉ์ ์ง์ ๋ฐ์ดํฐ ์ธํธ์ ์๋ ํธ๋ ์ด๋ ์ํฌํ๋ก
๊ฐ์
YOLO-World๋ ๊ด๋ฒ์ํ ๊ณ์ฐ ๋ฆฌ์์ค๋ฅผ ํ์๋ก ํ๋ ๋ฒ๊ฑฐ๋ก์ด ํธ๋์คํฌ๋จธ ๋ชจ๋ธ์ ์์กดํ๋ ๊ธฐ์กด์ ๊ฐ๋ฐฉํ ์ดํ ๊ฐ์ง ๋ชจ๋ธ์ด ์ง๋ฉดํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ธ์ ์ฌ์ ์ ์๋ ๊ฐ์ฒด ๋ฒ์ฃผ์ ์์กดํ๊ธฐ ๋๋ฌธ์ ๋์ ์๋๋ฆฌ์ค์์ ์ ์ฉ์ฑ์ด ์ ํ๋๊ธฐ๋ ํฉ๋๋ค. YOLO-์ธ๊ณ๋ ๊ฐ๋ฐฉํ ์ดํ ๊ฐ์ง ๊ธฐ๋ฅ์ผ๋ก YOLOv8 ํ๋ ์์ํฌ๋ฅผ ํ์ฑํํ์ฌ ๋น์ ์ธ์ด๋ชจ๋ธ๋ง๊ณผ ๋ฐฉ๋ํ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์ฌ์ ํ์ต์ ํตํด ์ ๋ก ์ท ์๋๋ฆฌ์ค์์ ํ์ํ ํจ์จ์ฑ์ผ๋ก ๊ด๋ฒ์ํ ๊ฐ์ฒด๋ฅผ ์๋ณํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ
-
์ค์๊ฐ ์๋ฃจ์ : CNN์ ๊ณ์ฐ ์๋๋ฅผ ํ์ฉํ๋ YOLO-World๋ ์ฆ๊ฐ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ํ์๋ก ํ๋ ์ฐ์ ์ ๋ง๋ ์ ์ํ ๊ฐ๋ฐฉํ ์ดํ ๊ฐ์ง ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
-
ํจ์จ์ฑ ๋ฐ ์ฑ๋ฅ: YOLO- ์ฑ๋ฅ ์ ํ ์์ด ๊ณ์ฐ ๋ฐ ๋ฆฌ์์ค ์๊ตฌ ์ฌํญ์ ์ ๊ฐํ์ฌ SAM ๊ฐ์ ๋ชจ๋ธ์ ๋ํ ๊ฐ๋ ฅํ ๋์์ ์ ๊ณตํ์ง๋ง ๊ณ์ฐ ๋น์ฉ์ ํจ์ฌ ์ ๋ ดํ์ฌ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ํฉ๋๋ค.
-
์คํ๋ผ์ธ ์ดํ๋ฅผ ์ฌ์ฉํ ์ถ๋ก : YOLO-World๋ ์คํ๋ผ์ธ ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ ํจ์จ์ฑ์ ๋์ฑ ํฅ์์ํค๋ 'ํ๋กฌํํธ ํ ๊ฐ์ง' ์ ๋ต์ ๋์ ํ์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์บก์ ์ด๋ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ํฌํจํ์ฌ ์ ํ์ ์ผ๋ก ๊ณ์ฐ๋ ์ฌ์ฉ์ ์ง์ ํ๋กฌํํธ๋ฅผ ์คํ๋ผ์ธ ์ดํ ์๋ฒ ๋ฉ์ผ๋ก ์ธ์ฝ๋ฉํ๊ณ ์ ์ฅํ์ฌ ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ ์ ์์ต๋๋ค.
-
์ ๊ณต: YOLOv8: ๊ธฐ๋ฐ Ultralytics YOLOv8, YOLO-World๋ ์ค์๊ฐ ๊ฐ์ฒด ๊ฐ์ง์ ์ต์ ๊ธฐ์ ์ ํ์ฉํ์ฌ ํ์ํ ์ ํ๋์ ์๋๋ก ๊ฐ๋ฐฉํ ์ดํ ๊ฐ์ง๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
-
๋ฒค์น๋งํฌ ์ฐ์์ฑ: YOLO-ํ์ค ๋ฒค์น๋งํฌ์์ ์๋์ ํจ์จ์ฑ ์ธก๋ฉด์์ MDETR ๋ฐ GLIP ์๋ฆฌ์ฆ๋ฅผ ํฌํจํ ๊ธฐ์กด ์คํ ์ดํ ๊ฒ์ถ๊ธฐ๋ณด๋ค ์๋ฑํ ์ฑ๋ฅ์ ๋ฐํํ์ฌ ๋จ์ผ NVIDIA V100 GPU ์์ YOLOv8 ์ ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค.
-
๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ : YOLO-์ธ๊ณ์ ํ์ ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋ค์ํ ๋น์ ์์ ์ ๋ํ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ฃผ๋ฉฐ ๊ธฐ์กด ๋ฐฉ์๋ณด๋ค ๋ช ๋ฐฐ์ ์๋ ํฅ์์ ์ ๊ณตํฉ๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ, ์ง์๋๋ ์์ ๋ฐ ์๋ ๋ชจ๋
์ด ์น์ ์์๋ ํน์ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ธ, ์ง์๋๋ ์์ , ์ถ๋ก , ๊ฒ์ฆ, ํ์ต, ๋ด๋ณด๋ด๊ธฐ ๋ฑ ๋ค์ํ ์๋ ๋ชจ๋์์ ํธํ์ฑ์ ๋ํด ์์ธํ ์ค๋ช ํ๋ฉฐ ์ง์๋๋ ๋ชจ๋์ ๊ฒฝ์ฐ โ ๋ก, ์ง์๋์ง ์๋ ๋ชจ๋์ ๊ฒฝ์ฐ โ๋ก ํ์๋์ด ์์ต๋๋ค.
์ฐธ๊ณ
๋ชจ๋ YOLOv8-World ๊ฐ์ค์น๋ ๊ณต์ YOLO-World ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ง์ ๋ง์ด๊ทธ๋ ์ด์ ํ ๊ฒ์ผ๋ก, ๋ฐ์ด๋ ๊ธฐ์ฌ๋๊ฐ ๋๋ณด์ ๋๋ค.
๋ชจ๋ธ ์ ํ | ์ฌ์ ํ์ต๋ ๊ฐ์ค์น | ์ง์๋๋ ์์ | ์ถ๋ก | ์ ํจ์ฑ ๊ฒ์ฌ | ๊ต์ก | ๋ด๋ณด๋ด๊ธฐ |
---|---|---|---|---|---|---|
YOLOv8s-์ธ๊ณ | yolov8s-world.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8m-์ธ๊ณ | yolov8m-world.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8l-์ธ๊ณ | yolov8l-world.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8x-์ธ๊ณ | yolov8x-world.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
COCO ๋ฐ์ดํฐ ์ธํธ์ ์ ๋ก ์ท ์ ์ก
๋ชจ๋ธ ์ ํ | mAP | mAP50 | mAP75 |
---|---|---|---|
yolov8s-์ธ๊ณ | 37.4 | 52.0 | 40.6 |
yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
yolov8m-์ธ๊ณ | 42.0 | 57.0 | 45.6 |
yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
yolov8l-์ธ๊ณ | 45.7 | 61.3 | 49.8 |
yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
yolov8x-์ธ๊ณ | 47.0 | 63.0 | 51.2 |
yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
์ฌ์ฉ ์
YOLO-World ๋ชจ๋ธ์ Python ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๋ค. Ultralytics ์ฌ์ฉ์ ์นํ์ ์ธ Python API์ CLI ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์ ๊ฐ์ํํฉ๋๋ค.
์ด์ฐจ ์ฌ์ฉ๋
ํ
๋ค์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. yolov8-worldv2
๋ชจ๋ธ์ ๊ฒฐ์ ๋ก ์ ํ๋ จ์ ์ง์ํ๊ณ ๋ค๋ฅธ ํ์(์: onnx/tensorrt)์ ์ฝ๊ฒ ๋ด๋ณด๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ง์ ํ๋ จ์ ์ํด ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฌผ์ฒด ๊ฐ์ง ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํฉ๋๋ค. train
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค:
์
PyTorch ์ฌ์ ๊ต์ก *.pt
๋ชจ๋ธ ๋ฐ ๊ตฌ์ฑ *.yaml
ํ์ผ์ YOLOWorld()
ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ python ์์ ๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLOv8n model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
์ฌ์ฉ๋ ์์ธก
๋ฌผ์ฒด ๊ฐ์ง๋ predict
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค:
์
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
์ด ์ค๋ํซ์ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ๋ก๋ํ๊ณ ์ด๋ฏธ์ง์ ๋ํด ์์ธก์ ์คํํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
Val ์ฌ์ฉ๋
๋ฐ์ดํฐ ์ธํธ์ ๋ํ ๋ชจ๋ธ ์ ํจ์ฑ ๊ฒ์ฌ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ํ๋ฉ๋๋ค:
์
์ฌ์ฉ๋ ์ถ์
๋์์/์ด๋ฏธ์ง์์ YOLO-์ธ๊ณ ๋ชจ๋ธ์ ์ฌ์ฉํ ๊ฐ์ฒด ์ถ์ ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ํ๋์์ต๋๋ค:
์
์ฐธ๊ณ
Ultralytics ์์ ์ ๊ณตํ๋ YOLO-World ๋ชจ๋ธ์ ์คํ๋ผ์ธ ์ดํ์ ์ผ๋ถ๋ก COCO ๋ฐ์ดํฐ ์ธํธ ์นดํ ๊ณ ๋ฆฌ๊ฐ ์ฌ์ ๊ตฌ์ฑ๋์ด ์์ด ์ฆ์ ์ ์ฉํ ์ ์๋๋ก ํจ์จ์ฑ์ ๋์ ๋๋ค. ์ด๋ฌํ ํตํฉ์ ํตํด YOLOv8-World ๋ชจ๋ธ์ ์ถ๊ฐ ์ค์ ์ด๋ ์ฌ์ฉ์ ์ง์ ์์ด๋ COCO ๋ฐ์ดํฐ ์ธํธ์ ์ ์๋ 80๊ฐ์ ํ์ค ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ง์ ์ธ์ํ๊ณ ์์ธกํ ์ ์์ต๋๋ค.
ํ๋กฌํํธ ์ค์
YOLO-World ํ๋ ์์ํฌ๋ ์ฌ์ฉ์ ์ง์ ํ๋กฌํํธ๋ฅผ ํตํด ํด๋์ค๋ฅผ ๋์ ์ผ๋ก ์ง์ ํ ์ ์์ด ์ฌ์ฉ์๊ฐ ์ฌํ์ต ์์ด๋ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ๋ชจ๋ธ์ ์กฐ์ ํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์๋ ํ์ต ๋ฐ์ดํฐ์ ํฌํจ๋์ง ์์๋ ์๋ก์ด ๋๋ฉ์ธ์ด๋ ํน์ ์์ ์ ๋ชจ๋ธ์ ์ ์ฉํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ํ๋กฌํํธ๋ฅผ ์ค์ ํจ์ผ๋ก์จ ์ฌ์ฉ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ธ์ ์ด์ ์ ๊ด์ฌ ์๋ ๊ฐ์ฒด๋ก ์ ๋ํ์ฌ ํ์ง ๊ฒฐ๊ณผ์ ๊ด๋ จ์ฑ๊ณผ ์ ํ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ ํ๋ฆฌ์ผ์ด์ ์์ '์ฌ๋'๊ณผ '๋ฒ์ค' ๊ฐ์ฒด๋ง ๊ฐ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ํด๋์ค๋ฅผ ์ง์ ์ง์ ํ ์ ์์ต๋๋ค:
์
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
์ฌ์ฉ์ ์ ์ ํด๋์ค๋ฅผ ์ค์ ํ ํ ๋ชจ๋ธ์ ์ ์ฅํ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํน์ ์ฌ์ฉ ์ฌ๋ก์ ํนํ๋ YOLO-World ๋ชจ๋ธ ๋ฒ์ ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ํ๋ก์ธ์ค๋ ์ฌ์ฉ์ ์ง์ ํด๋์ค ์ ์๋ฅผ ๋ชจ๋ธ ํ์ผ์ ์ง์ ํฌํจํ๋ฏ๋ก ์ถ๊ฐ ์กฐ์ ์์ด ์ง์ ๋ ํด๋์ค์์ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ง์ YOLOv8 ๋ชจ๋ธ์ ์ ์ฅํ๊ณ ๋ก๋ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
์
๋จผ์ YOLO-World ๋ชจ๋ธ์ ๋ก๋ํ๊ณ ์ฌ์ฉ์ ์ง์ ํด๋์ค๋ฅผ ์ค์ ํ ํ ์ ์ฅํฉ๋๋ค:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")
์ ์ฅ ํ custom_yolov8s.pt ๋ชจ๋ธ์ ์ฌ์ ํ์ต๋ ๋ค๋ฅธ YOLOv8 ๋ชจ๋ธ๊ณผ ๋์ผํ๊ฒ ์๋ํ์ง๋ง ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์ด์ ์ฌ์ฉ์๊ฐ ์ ์ํ ํด๋์ค๋ง ๊ฐ์งํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ์ด ์ฌ์ฉ์ ์ง์ ์ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์๋๋ฆฌ์ค์ ๋ํ ํ์ง ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ง์ ์ดํ๋ฅผ ํตํ ์ ์ฅ์ ์ด์
- ํจ์จ์ฑ: ๊ด๋ จ ๊ฐ์ฒด์ ์ง์คํ๊ณ ๊ณ์ฐ ์ค๋ฒํค๋๋ฅผ ์ค์ด๋ฉฐ ์ถ๋ก ์๋๋ฅผ ๋์ฌ ํ์ง ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํฉ๋๋ค.
- ์ ์ฐ์ฑ: ๊ด๋ฒ์ํ ์ฌ๊ต์ก์ด๋ ๋ฐ์ดํฐ ์์ง ์์ด๋ ์๋ก์ด ๋๋ ํ์ ํ์ง ์์ ์ ๋ชจ๋ธ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
- ๋จ์์ฑ: ๋ฐํ์์ ์ฌ์ฉ์ ์ง์ ํด๋์ค๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ง์ ํ ํ์๊ฐ ์์ด ๋ฐฐํฌ๊ฐ ๊ฐ์ํ๋๋ฉฐ, ๋ด์ฅ๋ ์ดํ๋ก ๋ชจ๋ธ์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ: ๋ชจ๋ธ์ ์ฃผ์์ ๋ฆฌ์์ค๋ฅผ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ธ์ํ๋ ๋ฐ ์ง์คํ์ฌ ์ง์ ๋ ํด๋์ค์ ๋ํ ํ์ง ์ ํ๋๋ฅผ ํฅ์์ํต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ํน์ ์์ ์ ๋ง๊ฒ ์ต์ฒจ๋จ ๊ฐ์ฒด ๊ฐ์ง ๋ชจ๋ธ์ ์ฌ์ฉ์ ์ง์ ํ ์ ์๋ ๊ฐ๋ ฅํ ์๋จ์ ์ ๊ณตํ์ฌ ๊ณ ๊ธ AI๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์ ๊ทผํ๊ณ ๊ด๋ฒ์ํ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
๊ณต์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ์๋ถํฐ ์ฌํ(์คํ์ )
๋ฐ์ดํฐ ์งํฉ ์ค๋น
- ๋ฐ์ดํฐ ํ๋ จ
๋ฐ์ดํฐ ์ธํธ | ์ ํ | ์ํ | ์์ | ์ฃผ์ ํ์ผ |
---|---|---|---|---|
์ค๋ธ์ ํธ365v1 | ํ์ง | 609k | 9621k | objects365_train.json |
GQA | ์ ์ง | 621k | 3681k | final_mixed_train_no_coco.json |
Flickr30k | ์ ์ง | 149k | 641k | final_flickr_separateGT_train.json |
- Val ๋ฐ์ดํฐ
๋ฐ์ดํฐ ์ธํธ | ์ ํ | ์ฃผ์ ํ์ผ |
---|---|---|
LVIS ๋ฏธ๋๋ฐด | ํ์ง | minival.txt |
์ฒ์๋ถํฐ ๊ต์ก ์์
์ฐธ๊ณ
WorldTrainerFromScratch
๋ ํ์ง ๋ฐ์ดํฐ ์ธํธ์ ์ ์ง ๋ฐ์ดํฐ ์ธํธ ๋ชจ๋์์ ๋์์ yolo-world ๋ชจ๋ธ์ ํ์ตํ ์ ์๋๋ก ๊ณ ๋๋ก ๋ง์ถคํ๋์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์์ ํ์ธํ์ธ์. ultralytics.model.yolo.world.train_world.py.
์
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = dict(
train=dict(
yolo_data=["Objects365.yaml"],
grounding_data=[
dict(
img_path="../datasets/flickr30k/images",
json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
),
dict(
img_path="../datasets/GQA/images",
json_file="../datasets/GQA/final_mixed_train_no_coco.json",
),
],
),
val=dict(yolo_data=["lvis.yaml"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)
์ธ์ฉ ๋ฐ ๊ฐ์ฌ
์ค์๊ฐ ๊ฐ๋ฐฉํ ์ดํ ๊ฐ์ฒด ๊ฐ์ง( YOLO-World)๋ฅผ ํตํด ์ ๊ตฌ์ ์ธ ์์ ์ ์ํํ Tencent AILab ์ปดํจํฐ ๋น์ ์ผํฐ์ ๊ฐ์ฌ๋ฅผ ํํฉ๋๋ค:
์์ธํ ๋ด์ฉ์ ๋ณด๋ ค๋ฉด ์๋ณธ YOLO-World ๋ ผ๋ฌธ์ arXiv์์ ํ์ธํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ์ ์์ค ์ฝ๋์ ์ถ๊ฐ ๋ฆฌ์์ค๋ GitHub ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํตํด ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด ๋ถ์ผ๋ฅผ ๋ฐ์ ์ํค๊ณ ๊ท์คํ ์ธ์ฌ์ดํธ๋ฅผ ์ปค๋ฎค๋ํฐ์ ๊ณต์ ํ๋ ค๋ ์ด๋ค์ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
YOLO-World ๋ชจ๋ธ์ด๋ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ์๋ํ๋์?
YOLO-World ๋ชจ๋ธ์ ํ๋ ์์ํฌ์ ๊ธฐ๋ฐํ ๊ณ ๊ธ ์ค์๊ฐ ๊ฐ์ฒด ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. Ultralytics YOLOv8 ํ๋ ์์ํฌ์ ๊ธฐ๋ฐํ ๊ณ ๊ธ ์ค์๊ฐ ๊ฐ์ฒด ๊ฐ์ง ๋ฐฉ์์ ๋๋ค. ์ค๋ช ํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง ๋ด์ ๊ฐ์ฒด๋ฅผ ์๋ณํ์ฌ ๊ฐ๋ฐฉํ ์ดํ ๊ฐ์ง ์์ ์ ํ์ํฉ๋๋ค. ๋น์ ์ธ์ด ๋ชจ๋ธ๋ง๊ณผ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์ฌ์ ํ์ต์ ์ฌ์ฉํ๋ YOLO-World๋ ๊ณ์ฐ ์๊ตฌ ์ฌํญ์ ํฌ๊ฒ ์ค์ด๋ฉด์ ๋์ ํจ์จ์ฑ๊ณผ ์ฑ๋ฅ์ ๋ฌ์ฑํ์ฌ ๋ค์ํ ์ฐ์ ๋ถ์ผ์ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์์ ์ ๋๋ค.
YOLO-World๋ ์ฌ์ฉ์ ์ง์ ํ๋กฌํํธ์์ ์ถ๋ก ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์?
YOLO-์คํ๋ผ์ธ ์ดํ๋ฅผ ํ์ฉํ์ฌ ํจ์จ์ฑ์ ๋์ด๋ 'ํ๋กฌํํธ ํ ๊ฐ์ง' ์ ๋ต์ ์ง์ํฉ๋๋ค. ์บก์ ์ด๋ ํน์ ๊ฐ์ฒด ์นดํ ๊ณ ๋ฆฌ์ ๊ฐ์ ์ฌ์ฉ์ ์ง์ ํ๋กฌํํธ๋ ๋ฏธ๋ฆฌ ์ธ์ฝ๋ฉ๋์ด ์คํ๋ผ์ธ ์ดํ ์๋ฒ ๋ฉ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ๊ต์ก ์์ด๋ ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํฉ๋๋ค. ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ชจ๋ธ ๋ด์์ ์ด๋ฌํ ํ๋กฌํํธ๋ฅผ ๋์ ์ผ๋ก ์ค์ ํ์ฌ ํน์ ํ์ง ์์ ์ ๋ง๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt")
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
๊ธฐ์กด์ ๊ฐ๋ฐฉํ ์ดํ ๊ฐ์ง ๋ชจ๋ธ ๋์ YOLO-World๋ฅผ ์ ํํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
YOLO-World๋ ๊ธฐ์กด์ ๊ฐ๋ฐฉํ ์ดํ ๊ฐ์ง ๋ชจ๋ธ์ ๋นํด ๋ช ๊ฐ์ง ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ค์๊ฐ ์ฑ๋ฅ: CNN์ ๊ณ์ฐ ์๋๋ฅผ ํ์ฉํ์ฌ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ํ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ํจ์จ์ฑ ๋ฐ ๋ฎ์ ๋ฆฌ์์ค ์๊ตฌ ์ฌํญ: YOLO-World๋ ๋์ ์ฑ๋ฅ์ ์ ์งํ๋ฉด์ ๊ณ์ฐ ๋ฐ ๋ฆฌ์์ค ์๊ตฌ ์ฌํญ์ ํฌ๊ฒ ์ค์ ๋๋ค.
- ์ฌ์ฉ์ ์ง์ ๊ฐ๋ฅํ ํ๋กฌํํธ: ์ด ๋ชจ๋ธ์ ๋์ ํ๋กฌํํธ ์ค์ ์ ์ง์ํ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์ฌ๊ต์ก ์์ด๋ ์ฌ์ฉ์ ์ง์ ํ์ง ํด๋์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
- ๋ฒค์น๋งํฌ ์ฐ์์ฑ: ํ์ค ๋ฒค์น๋งํฌ์์ ์๋์ ํจ์จ์ฑ ๋ชจ๋์์ MDETR ๋ฐ GLIP๊ณผ ๊ฐ์ ๋ค๋ฅธ ์คํ ์ดํ ๋ํ ํฐ๋ณด๋ค ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค.
๋ด ๋ฐ์ดํฐ ์งํฉ์์ YOLO-World ๋ชจ๋ธ์ ํ๋ จํ๋ ค๋ฉด ์ด๋ป๊ฒ ํ๋์?
์ ๊ณต๋ Python API ๋๋ CLI ๋ช ๋ น์ ํตํด ๋ฐ์ดํฐ ์ธํธ์ ๋ํด YOLO-World ๋ชจ๋ธ์ ํ๋ จํ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค. Python ์ ์ฌ์ฉํ์ฌ ํ๋ จ์ ์์ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
๋๋ CLI ์ ์ฌ์ฉํ์ธ์:
์ฌ์ ํ์ต๋ YOLO-World ๋ชจ๋ธ๊ณผ ์ง์๋๋ ์์ ์๋ ์ด๋ค ๊ฒ์ด ์๋์?
Ultralytics ๋ค์ํ ์์ ๊ณผ ์ด์ ๋ชจ๋๋ฅผ ์ง์ํ๋ ์ฌ๋ฌ ์ฌ์ ํ์ต๋ YOLO-World ๋ชจ๋ธ์ ์ ๊ณตํฉ๋๋ค:
๋ชจ๋ธ ์ ํ | ์ฌ์ ํ์ต๋ ๊ฐ์ค์น | ์ง์๋๋ ์์ | ์ถ๋ก | ์ ํจ์ฑ ๊ฒ์ฌ | ๊ต์ก | ๋ด๋ณด๋ด๊ธฐ |
---|---|---|---|---|---|---|
YOLOv8s-์ธ๊ณ | yolov8s-world.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8m-์ธ๊ณ | yolov8m-world.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8l-์ธ๊ณ | yolov8l-world.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8x-์ธ๊ณ | yolov8x-world.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | ๋ฌผ์ฒด ๊ฐ์ง | โ | โ | โ | โ |
YOLO-World์ ๊ณต์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์ฌํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
๊ณต์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ์๋ถํฐ ์ฌํํ๋ ค๋ฉด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ค๋นํ๊ณ ์ ๊ณต๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ต์ ์์ํด์ผ ํฉ๋๋ค. ํ๋ จ ์ ์ฐจ์๋ ๋ฐ์ดํฐ ์ฌ์ ์ ์์ฑํ๊ณ train
๋ฉ์๋๋ฅผ ์ฌ์ฉ์ ์ง์ ํธ๋ ์ด๋์ ํจ๊ป ์ฌ์ฉํ์ธ์:
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "../datasets/flickr30k/images",
"json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "../datasets/GQA/images",
"json_file": "../datasets/GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)