ν¬μ¦ μΆμ λ°μ΄ν° μΈνΈ κ°μ
μ§μλλ λ°μ΄ν° μΈνΈ νμ
Ultralytics YOLO νμ
YOLO ν¬μ¦ λͺ¨λΈ νμ΅μ μ¬μ©λλ λ°μ΄ν° μΈνΈ λ μ΄λΈ νμμ λ€μκ³Ό κ°μ΅λλ€:
- μ΄λ―Έμ§λΉ νλμ ν μ€νΈ νμΌ: λ°μ΄ν° μΈνΈμ κ° μ΄λ―Έμ§μλ μ΄λ―Έμ§ νμΌκ³Ό μ΄λ¦μ΄ κ°κ³ νμ₯μκ° ".txt"μΈ ν΄λΉ ν μ€νΈ νμΌμ΄ μμ΅λλ€.
- κ°μ²΄λΉ νλμ ν: ν μ€νΈ νμΌμ κ° νμ μ΄λ―Έμ§μ κ°μ²΄ μΈμ€ν΄μ€ νλμ ν΄λΉν©λλ€.
- νλ³ κ°μ²΄ μ 보: κ° νμλ κ°μ²΄ μΈμ€ν΄μ€μ λν λ€μ μ λ³΄κ° ν¬ν¨λ©λλ€:
- κ°μ²΄ ν΄λμ€ μΈλ±μ€: κ°μ²΄μ ν΄λμ€λ₯Ό λνλ΄λ μ μ(μ: μ¬λμ κ²½μ° 0, μλμ°¨μ κ²½μ° 1 λ±)μ λλ€.
- κ°μ²΄ μ€μ¬ μ’νμ λλ€: κ°μ²΄ μ€μ¬μ x λ° y μ’νλ‘, 0κ³Ό 1 μ¬μ΄λ‘ μ κ·νλ μ’νμ λλ€.
- κ°μ²΄μ λλΉμ λμ΄μ λλ€: κ°μ²΄μ λλΉμ λμ΄λ‘, 0κ³Ό 1 μ¬μ΄λ‘ μ κ·νλ κ°μ λλ€.
- κ°μ²΄ ν€ν¬μΈνΈ μ’νμ λλ€: 0μμ 1 μ¬μ΄λ‘ μ κ·νλ κ°μ²΄μ ν€ν¬μΈνΈ μ’νμ λλ€.
λ€μμ ν¬μ¦ μΆμ μμ μ μν λΌλ²¨ νμμ μμμ λλ€:
μ΄λ‘κ² = 2λ‘ ν¬λ§·
μ΄λ‘κ² = 3μΌλ‘ ν¬λ§·
<class-index> <x> <y> <width> <height> <px1> <py1> <p1-visibility> <px2> <py2> <p2-visibility> <pxn> <pyn> <p2-visibility>
μ΄ νμμ
λλ€, <class-index>
λ κ°μ²΄μ λν ν΄λμ€μ μΈλ±μ€μ
λλ€,<x> <y> <width> <height>
μ μ’νμ
λλ€. λ°μ΄λ© λ°μ€λ° <px1> <py1> <px2> <py2> ... <pxn> <pyn>
λ ν€ν¬μΈνΈμ ν½μ
μ’νμ
λλ€. μ’νλ 곡백μΌλ‘ ꡬλΆλ©λλ€.
λ°μ΄ν° μΈνΈ YAML νμ
Ultralytics νλ μμν¬λ νμ§ λͺ¨λΈ νμ΅μ μν λ°μ΄ν° μΈνΈ λ° λͺ¨λΈ ꡬμ±μ μ μνκΈ° μν΄ YAML νμΌ νμμ μ¬μ©ν©λλ€. λ€μμ νμ§ λ°μ΄ν° μΈνΈλ₯Ό μ μνλ λ° μ¬μ©λλ YAML νμμ μμ λλ€:
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8-pose # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Keypoints
kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
# Classes dictionary
names:
0: person
κ·Έλ¦¬κ³ train
κ·Έλ¦¬κ³ val
νλλ κ°κ° νΈλ μ΄λ μ΄λ―Έμ§μ μ ν¨μ± κ²μ¬ μ΄λ―Έμ§κ° ν¬ν¨λ λλ ν°λ¦¬μ κ²½λ‘λ₯Ό μ§μ ν©λλ€.
names
λ ν΄λμ€ μ΄λ¦μ μ¬μ μ
λλ€. μ΄λ¦μ μμλ YOLO λ°μ΄ν° μΈνΈ νμΌμ κ°μ²΄ ν΄λμ€ μΈλ±μ€ μμμ μΌμΉν΄μΌ ν©λλ€.
(μ ν μ¬ν) ν¬μΈνΈκ° λμΉμΈ κ²½μ° μ¬λμ΄λ μΌκ΅΄μ μΌμͺ½/μ€λ₯Έμͺ½κ³Ό κ°μ΄ flip_idxκ° νμν©λλ€. μλ₯Ό λ€μ΄ μΌκ΅΄ λλλ§ν¬μ ν€ν¬μΈνΈκ° 5κ°λΌκ³ κ°μ ν©λλ€: [μΌμͺ½ λ, μ€λ₯Έμͺ½ λ, μ½, μΌμͺ½ μ , μ€λ₯Έμͺ½ μ ]μ΄κ³ μλ μΈλ±μ€κ° [0, 1, 2, 3, 4]μΈ κ²½μ° flip_idxλ [1, 0, 2, 4, 3]μ λλ€(μ΄ μμμλ 0-1κ³Ό 3-4μ²λΌ μ’μ° μΈλ±μ€λ§ λ°κΎΈκ³ μ½ κ°μ λ€λ₯Έ μΈλ±μ€λ μμ νμ§ λ§μΈμ).
μ¬μ©λ²
μ
μ§μλλ λ°μ΄ν° μΈνΈ
μ΄ μΉμ μμλ Ultralytics YOLO νμκ³Ό νΈνλλ©° ν¬μ¦ μΆμ λͺ¨λΈ νλ ¨μ μ¬μ©ν μ μλ λ°μ΄ν° μΈνΈμ λν΄ κ°λ΅νκ² μ€λͺ ν©λλ€:
μ½μ½ ν¬μ¦
- μ€λͺ : COCO-Poseλ λκ·λͺ¨ 물체 κ°μ§, μΈλΆν λ° ν¬μ¦ μΆμ λ°μ΄ν° μΈνΈμ λλ€. λ리 μ¬μ©λλ COCO λ°μ΄ν° μΈνΈμ νμ μ§ν©μΌλ‘, μ¬λμ ν¬μ¦ μΆμ μ μ€μ μ λκ³ μμ΅λλ€. COCO-Poseμλ κ° μ¬λ μΈμ€ν΄μ€μ λν μ¬λ¬ ν€ν¬μΈνΈκ° ν¬ν¨λμ΄ μμ΅λλ€.
- λΌλ²¨ νμ: μμμ μ€λͺ ν Ultralytics YOLO νμκ³Ό λμΌνλ©°, μ¬λ ν¬μ¦μ λν ν€ν¬μΈνΈκ° μμ΅λλ€.
- ν΄λμ€ μ: 1 (μΈκ°).
- ν€ν¬μΈνΈ: μ½, λ, κ·, μ΄κΉ¨, νκΏμΉ, μλͺ©, μλ©μ΄, 무λ¦, λ°λͺ© λ± 17κ°μ ν€ν¬μΈνΈ.
- μ¬μ©λ²: μ¬μ©λ²: μ¬λ μμΈ μΆμ λͺ¨λΈ νλ ¨μ μ ν©ν©λλ€.
- μΆκ° μ°Έκ³ μ¬ν: λ°μ΄ν° μΈνΈλ νλΆνκ³ λ€μνλ©°, λΌλ²¨μ΄ μ§μ λ μ΄λ―Έμ§κ° 200λ§ κ° μ΄μ ν¬ν¨λμ΄ μμ΅λλ€.
- COCO-Poseμ λν΄ μμΈν μμ보기
COCO8-Pose
- μ€λͺ : Ultralytics COCO8-Poseλ μμ§λ§ λ€μ©λλ‘ νμ© κ°λ₯ν ν¬μ¦ κ°μ§ λ°μ΄ν° μΈνΈλ‘, COCO νΈλ μΈ 2017 μΈνΈμ 첫 8κ° μ΄λ―Έμ§ μ€ νλ ¨μ© 4κ°μ κ²μ¦μ© 4κ°λ‘ ꡬμ±λμ΄ μμ΅λλ€.
- λΌλ²¨ νμ: μμμ μ€λͺ ν Ultralytics YOLO νμκ³Ό λμΌνλ©°, μ¬λ ν¬μ¦μ λν ν€ν¬μΈνΈκ° μμ΅λλ€.
- ν΄λμ€ μ: 1 (μΈκ°).
- ν€ν¬μΈνΈ: μ½, λ, κ·, μ΄κΉ¨, νκΏμΉ, μλͺ©, μλ©μ΄, 무λ¦, λ°λͺ© λ± 17κ°μ ν€ν¬μΈνΈ.
- μ¬μ©λ²: μ¬μ© λ°©λ²: κ°μ²΄ κ°μ§ λͺ¨λΈμ ν μ€νΈ λ° λλ²κΉ νκ±°λ μλ‘μ΄ κ°μ§ μ κ·Ό λ°©μμ μ€ννλ λ° μ ν©ν©λλ€.
- μΆκ° μ°Έκ³ μ¬ν: COCO8-Poseλ μ μ μν νμΈ λ° CI νμΈμ μ΄μμ μ λλ€.
- COCO8-Poseμ λν΄ μμΈν μμ보기
νΈλμ΄ ν¬μ¦
- μ€λͺ : Ultralytics μ΄ λλ¬Ό ν¬μ¦ λ°μ΄ν° μΈνΈλ YouTube λμμμμ κ°μ Έμ¨ 263κ°μ μ΄λ―Έμ§λ‘ ꡬμ±λμ΄ μμΌλ©°, 210κ°μ μ΄λ―Έμ§λ νμ΅μ©μΌλ‘, 53κ°μ μ΄λ―Έμ§λ κ²μ¦μ©μΌλ‘ ν λΉλμ΄ μμ΅λλ€.
- λΌλ²¨ νμ: μμμ μ€λͺ ν Ultralytics YOLO νμκ³Ό λμΌνλ©°, λλ¬Ό ν¬μ¦λ₯Ό μν 12κ°μ ν€ν¬μΈνΈκ° μκ³ μΉμκ° νμλμ§ μμ΅λλ€.
- ν΄λμ€ μ: 1 (νΈλμ΄).
- ν€ν¬μΈνΈ: ν€ν¬μΈνΈ: 12κ°.
- μ¬μ©λ²: μ¬μ©λ²: λλ¬Ό ν¬μ¦λ μ¬λμ΄ μλ λ€λ₯Έ ν¬μ¦μ μ ν©ν©λλ€.
- νΈλμ΄ ν¬μ¦μ λν΄ μμΈν μμ보기
μ ν€ν¬μΈνΈ
- μ€λͺ : μ ν€ν¬μΈνΈ ν¬μ¦ λ°μ΄ν° μΈνΈλ μ½ 26Kκ°μ μ΄λ―Έμ§λ‘ ꡬμ±λμ΄ μμΌλ©°, νμ΅μ©μΌλ‘ 18776κ°, κ²μ¦μ©μΌλ‘ 7992κ°μ μ΄λ―Έμ§κ° ν λΉλμ΄ μμ΅λλ€.
- λ μ΄λΈ νμ: μμμ μ€λͺ ν Ultralytics YOLO νμκ³Ό λμΌνμ§λ§ μ¬λμ μκ³Ό λμ 보μ΄λ μΉμλ₯Ό μν 21κ°μ ν€ν¬μΈνΈκ° μμ΅λλ€.
- μμ μ: 1(νΈλ).
- ν€ν¬μΈνΈ: ν€ν¬μΈνΈ: 21κ°.
- μ¬μ©λ²: μ¬λμ μ ν¬μ¦λ₯Ό μΆμ νλ λ° μ ν©ν©λλ€.
- νΈλ ν€ν¬μΈνΈμ λν΄ μμΈν μμ보기
κ° ν¬μ¦
- μ€λͺ : κ° μμΈ λ°μ΄ν° μΈνΈμλ μ½ 6,000κ°μ μ΄λ―Έμ§κ° ν¬ν¨λμ΄ μμΌλ©°, κ° μμΈ μΆμ λͺ¨λΈμ νλ ¨ λ° κ²μ¦μ μν λ€μνκ³ κ΄λ²μν 리μμ€λ₯Ό μ 곡ν©λλ€.
- λΌλ²¨ νμ: Ultralytics YOLO νμμ λ°λ₯΄λ©°, κ°μ ν΄λΆνμ ꡬ쑰μ κ΄λ ¨λ μ¬λ¬ ν€ν¬μΈνΈμ λν μ£Όμμ΄ ν¬ν¨λμ΄ μμ΅λλ€.
- μμ μ: 1(κ°).
- ν€ν¬μΈνΈ: νλ€λ¦¬, κ΄μ , 머리 μμΉ λ± λ°λ €κ²¬μ ν¬μ¦μ λ§μΆ 24κ°μ ν€ν¬μΈνΈκ° ν¬ν¨λμ΄ μμ΅λλ€.
- μ¬μ©λ²: μ¬μ© λ°©λ²: μ°κ΅¬λΆν° μ€μ μ μ©κΉμ§ λ€μν μλ리μ€μμ κ°μ ν¬μ¦λ₯Ό μΆμ νκΈ° μν λͺ¨λΈ νλ ¨μ μ΄μμ μ λλ€.
- λκ·Έ ν¬μ¦μ λν΄ μμΈν μμ보기
λλ§μ λ°μ΄ν° μ§ν© μΆκ°νκΈ°
μ체 λ°μ΄ν° μΈνΈκ° μκ³ μ΄λ₯Ό Ultralytics YOLO νμμΌλ‘ ν¬μ¦ μΆμ λͺ¨λΈ νμ΅μ μ¬μ©νλ €λ©΄ μμ "Ultralytics YOLO νμ"μ μ§μ λ νμμ λ°λ₯΄λμ§ νμΈνμΈμ. μ΄λ Έν μ΄μ μ νμν νμμΌλ‘ λ³ννκ³ YAML κ΅¬μ± νμΌμ κ²½λ‘, ν΄λμ€ μ, ν΄λμ€ μ΄λ¦μ μ§μ ν©λλ€.
μ ν λꡬ
Ultralytics λ λ리 μ¬μ©λλ COCO λ°μ΄ν°μΈνΈ νμμμ YOLO νμμΌλ‘ λΌλ²¨μ λ³ννλ νΈλ¦¬ν λ³ν λꡬλ₯Ό μ 곡ν©λλ€:
μ
μ΄ λ³ν λꡬλ COCO λ°μ΄ν° μΈνΈ λλ COCO νμμ λ°μ΄ν° μΈνΈλ₯Ό Ultralytics YOLO νμμΌλ‘ λ³ννλ λ° μ¬μ©ν μ μμ΅λλ€. κ·Έλ¦¬κ³ use_keypoints
맀κ°λ³μλ λ³νλ λ μ΄λΈμ ν€ν¬μΈνΈ(ν¬μ¦ μΆμ μ©)λ₯Ό ν¬ν¨ν μ§ μ¬λΆλ₯Ό μ§μ ν©λλ€.
μμ£Ό 묻λ μ§λ¬Έ
ν¬μ¦ μΆμ μ μν Ultralytics YOLO νμμ΄λ 무μμΈκ°μ?
ν¬μ¦ μΆμ λ°μ΄ν° μΈνΈμ Ultralytics YOLO νμμ κ° μ΄λ―Έμ§μ ν΄λΉ ν μ€νΈ νμΌλ‘ λ μ΄λΈμ μ§μ νλ κ²μ ν¬ν¨ν©λλ€. ν μ€νΈ νμΌμ κ° νμλ κ°μ²΄ μΈμ€ν΄μ€μ λν μ λ³΄κ° μ μ₯λ©λλ€:
- κ°μ²΄ ν΄λμ€ μμΈ
- κ°μ²΄ μ€μ¬ μ’ν(μ κ·νλ x λ° y)
- κ°μ²΄ λλΉ λ° λμ΄(μ κ·ν)
- κ°μ²΄ ν€ν¬μΈνΈ μ’ν(μ κ·νλ pxn λ° pyn)
2D ν¬μ¦μ κ²½μ° ν€ν¬μΈνΈμλ ν½μ μ’νκ° ν¬ν¨λ©λλ€. 3Dμ κ²½μ° κ° ν€ν¬μΈνΈμλ κ°μμ± νλκ·Έλ μμ΅λλ€. μμΈν λ΄μ©μ Ultralytics YOLO νμμ μ°Έμ‘°νμΈμ.
COCO-Pose λ°μ΄ν° μΈνΈλ Ultralytics YOLO μμ μ΄λ»κ² μ¬μ©νλμ?
COCO-Pose λ°μ΄ν°μ μ μ¬μ©νλ €λ©΄ Ultralytics YOLO :
- λ°μ΄ν° μΈνΈλ₯Ό λ€μ΄λ‘λνκ³ YOLO νμμΌλ‘ λΌλ²¨ νμΌμ μ€λΉν©λλ€.
- νΈλ μ΄λ λ° μ ν¨μ± κ²μ¬ μ΄λ―Έμ§μ κ²½λ‘, ν€ν¬μΈνΈ λͺ¨μ, ν΄λμ€ μ΄λ¦μ μ§μ νλ YAML κ΅¬μ± νμΌμ λ§λλλ€.
-
κ΅μ‘μ κ΅¬μ± νμΌμ μ¬μ©ν©λλ€:
from ultralytics import YOLO model = YOLO("yolo11n-pose.pt") # load pretrained model results = model.train(data="coco-pose.yaml", epochs=100, imgsz=640)
μμΈν λ΄μ©μ μ½μ½ ν¬μ¦ λ° κΈ°μ°¨ μΉμ μ μ°Έμ‘°νμΈμ.
Ultralytics YOLO μμ ν¬μ¦ μΆμ μ μν λλ§μ λ°μ΄ν° μΈνΈλ₯Ό μΆκ°νλ €λ©΄ μ΄λ»κ² ν΄μΌ νλμ?
λ°μ΄ν° μ§ν©μ μΆκ°νλ €λ©΄:
- μ£Όμμ Ultralytics YOLO νμμΌλ‘ λ³νν©λλ€.
- λ°μ΄ν° μΈνΈ κ²½λ‘, ν΄λμ€ μ, ν΄λμ€ μ΄λ¦μ μ§μ νλ YAML κ΅¬μ± νμΌμ λ§λλλ€.
-
κ΅¬μ± νμΌμ μ¬μ©νμ¬ λͺ¨λΈμ νμ΅μν΅λλ€:
from ultralytics import YOLO model = YOLO("yolo11n-pose.pt") results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)
μ 체 λ¨κ³λ λλ§μ λ°μ΄ν° μΈνΈ μΆκ°νκΈ° μΉμ μ μ°Έμ‘°νμΈμ.
Ultralytics YOLO μ μλ λ°μ΄ν° μΈνΈ YAML νμΌμ λͺ©μ μ 무μμΈκ°μ?
Ultralytics YOLO μ λ°μ΄ν° μΈνΈ YAML νμΌμ νμ΅μ μν λ°μ΄ν° μΈνΈ λ° λͺ¨λΈ ꡬμ±μ μ μν©λλ€. μ¬κΈ°μλ νμ΅, μ ν¨μ± κ²μ¬ λ° ν μ€νΈ μ΄λ―Έμ§μ κ²½λ‘, ν€ν¬μΈνΈ λͺ¨μ, ν΄λμ€ μ΄λ¦ λ° κΈ°ν κ΅¬μ± μ΅μ μ΄ μ§μ λμ΄ μμ΅λλ€. μ΄ κ΅¬μ‘°νλ νμμ λ°μ΄ν° μΈνΈ κ΄λ¦¬μ λͺ¨λΈ νμ΅μ κ°μννλ λ° λμμ΄ λ©λλ€. λ€μμ YAML νμμ μμμ λλ€:
λ°μ΄ν° μ§ν© YAML νμμ YAML κ΅¬μ± νμΌ μμ±μ λν΄ μμΈν μμ보μΈμ.
ν¬μ¦ μΆμ μ μν΄ COCO λ°μ΄ν° μΈνΈ λ μ΄λΈμ Ultralytics YOLO νμμΌλ‘ λ³ννλ €λ©΄ μ΄λ»κ² ν΄μΌ νλμ?
Ultralytics λ ν€ν¬μΈνΈ μ 보λ₯Ό ν¬ν¨νμ¬ COCO λ°μ΄ν° μΈνΈ λΌλ²¨μ YOLO νμμΌλ‘ λ³ννλ λ³ν λꡬλ₯Ό μ 곡ν©λλ€:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)
μ΄ λꡬλ COCO λ°μ΄ν°μ μ YOLO νλ‘μ νΈμ μννκ² ν΅ν©νλ λ° λμμ΄ λ©λλ€. μμΈν λ΄μ©μ λ³ν λꡬ μΉμ μ μ°Έμ‘°νμΈμ.