μ½˜ν…μΈ λ‘œ κ±΄λ„ˆλ›°κΈ°

포즈 μΆ”μ •

포즈 μΆ”μ • μ˜ˆμ‹œ

포즈 좔정은 μ΄λ―Έμ§€μ—μ„œ νŠΉμ • μ§€μ μ˜ μœ„μΉ˜λ₯Ό μ‹λ³„ν•˜λŠ” μž‘μ—…μœΌλ‘œ, 일반적으둜 ν‚€ν¬μΈνŠΈλΌκ³  ν•©λ‹ˆλ‹€. ν‚€ν¬μΈνŠΈλŠ” κ΄€μ ˆ, λžœλ“œλ§ˆν¬ λ˜λŠ” 기타 νŠΉμ§•μ μΈ νŠΉμ§•κ³Ό 같은 물체의 λ‹€μ–‘ν•œ 뢀뢄을 λ‚˜νƒ€λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ν‚€ν¬μΈνŠΈμ˜ μœ„μΉ˜λŠ” 일반적으둜 일련의 2D [x, y] λ˜λŠ” 3D [x, y, visible] μ’Œν‘œμž…λ‹ˆλ‹€.

포즈 μΆ”μ • λͺ¨λΈμ˜ 좜λ ₯은 일반적으둜 각 ν¬μΈνŠΈμ— λŒ€ν•œ μ‹ λ’° μ μˆ˜μ™€ ν•¨κ»˜ μ΄λ―Έμ§€μ—μ„œ 객체의 ν‚€ν¬μΈνŠΈλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 포인트 μ§‘ν•©μž…λ‹ˆλ‹€. 포즈 좔정은 μž₯λ©΄μ—μ„œ 객체의 νŠΉμ • λΆ€λΆ„κ³Ό μ„œλ‘œμ— λŒ€ν•œ μœ„μΉ˜λ₯Ό 식별해야 ν•  λ•Œ 쒋은 μ„ νƒμž…λ‹ˆλ‹€.


Watch: 포즈 μΆ”μ • Ultralytics YOLOv8 .

Watch: 포즈 좔정을 μœ„ν•œ Ultralytics HUB.

팁

YOLOv8 포즈 λͺ¨λΈμ€ -pose 접미사, 즉 yolov8n-pose.pt. 이 λͺ¨λΈμ€ COCO ν‚€ν¬μΈνŠΈ 데이터 μ„ΈνŠΈλ₯Ό μ‚¬μš©ν•˜λ©° λ‹€μ–‘ν•œ 포즈 μΆ”μ • μž‘μ—…μ— μ ν•©ν•©λ‹ˆλ‹€.

κΈ°λ³Έ YOLOv8 포즈 λͺ¨λΈμ—λŠ” 17개의 ν‚€ν¬μΈνŠΈκ°€ 있으며, 각 ν‚€ν¬μΈνŠΈλŠ” 인체의 λ‹€λ₯Έ 뢀뢄을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. λ‹€μŒμ€ 각 μΈλ±μŠ€μ™€ ν•΄λ‹Ή 신체 κ΄€μ ˆμ˜ λ§€ν•‘μž…λ‹ˆλ‹€:

0: μ½” 1: μ™Όμͺ½ 눈 2: 였λ₯Έμͺ½ 눈 3: μ™Όμͺ½ κ·€ 4: 였λ₯Έμͺ½ κ·€ 5: μ™Όμͺ½ μ–΄κΉ¨ 6: 였λ₯Έμͺ½ μ–΄κΉ¨ 7: μ™Όμͺ½ νŒ”κΏˆμΉ˜ 8: 였λ₯Έμͺ½ νŒ”κΏˆμΉ˜ 9: μ™Όμͺ½ 손λͺ© 10: 였λ₯Έμͺ½ 손λͺ© 11: μ™Όμͺ½ 엉덩이 12: 였λ₯Έμͺ½ 엉덩이 13: μ™Όμͺ½ 무릎 14: 였λ₯Έμͺ½ 무릎 15: μ™Όμͺ½ 발λͺ© 16: 였λ₯Έμͺ½ 발λͺ©

λͺ¨λΈ

YOLOv8 사전 ν•™μŠ΅λœ 포즈 λͺ¨λΈμ΄ 여기에 λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€. 감지, μ„Έκ·Έλ¨ΌνŠΈ 및 포즈 λͺ¨λΈμ€ COCO 데이터 μ„ΈνŠΈμ— λŒ€ν•΄ 사전 ν•™μŠ΅λœ 반면, λΆ„λ₯˜ λͺ¨λΈμ€ ImageNet 데이터 μ„ΈνŠΈμ— λŒ€ν•΄ 사전 ν•™μŠ΅λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λͺ¨λΈμ€ 처음 μ‚¬μš©ν•  λ•Œ μ΅œμ‹  Ultralytics λ¦΄λ¦¬μŠ€μ—μ„œ μžλ™μœΌλ‘œ λ‹€μš΄λ‘œλ“œλ©λ‹ˆλ‹€.

λͺ¨λΈ 크기
(ν”½μ…€)
mAPpose
50-95
mAPpose
50
속도
CPU ONNX
(ms)
속도
A100 TensorRT
(ms)
λ§€κ°œλ³€μˆ˜
(M)
FLOPs
(B)
YOLOv8n-pose 640 50.4 80.1 131.8 1.18 3.3 9.2
YOLOv8s-pose 640 60.0 86.2 233.2 1.42 11.6 30.2
YOLOv8m-pose 640 65.0 88.8 456.3 2.00 26.4 81.0
YOLOv8l-pose 640 67.6 90.0 784.5 2.59 44.4 168.6
YOLOv8x-pose 640 69.2 90.2 1607.1 3.73 69.4 263.2
YOLOv8x-pose-p6 1280 71.6 91.2 4088.7 10.04 99.1 1066.4
  • mAPval 값은 단일 λͺ¨λΈ 단일 μŠ€μΌ€μΌμ— λŒ€ν•œ κ²ƒμž…λ‹ˆλ‹€. COCO ν‚€ν¬μΈνŠΈ val2017 데이터 μ„ΈνŠΈ.
    볡제 λŒ€μƒ yolo val pose data=coco-pose.yaml device=0
  • 속도 λ₯Ό μ‚¬μš©ν•˜μ—¬ COCO κ°’ 이미지에 λŒ€ν•œ 평균을 κ΅¬ν•©λ‹ˆλ‹€. Amazon EC2 P4d μΈμŠ€ν„΄μŠ€.
    볡제 λŒ€μƒ yolo val pose data=coco8-pose.yaml batch=1 device=0|cpu

κΈ°μ°¨

COCO128 포즈 데이터 μ„ΈνŠΈμ— λŒ€ν•΄ YOLOv8-pose λͺ¨λΈμ„ ν•™μŠ΅μ‹œν‚΅λ‹ˆλ‹€.

예

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n-pose.yaml")  # build a new model from YAML
model = YOLO("yolov8n-pose.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolov8n-pose.yaml").load("yolov8n-pose.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="coco8-pose.yaml", epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo pose train data=coco8-pose.yaml model=yolov8n-pose.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo pose train data=coco8-pose.yaml model=yolov8n-pose.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo pose train data=coco8-pose.yaml model=yolov8n-pose.yaml pretrained=yolov8n-pose.pt epochs=100 imgsz=640

데이터 집합 ν˜•μ‹

YOLO 포즈 데이터셋 ν˜•μ‹μ€ 데이터셋 κ°€μ΄λ“œμ—μ„œ μžμ„Ένžˆ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ 데이터셋을 λ‹€λ₯Έ ν˜•μ‹(예: COCO λ“±)μ—μ„œ YOLO ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λ €λ©΄ JSON2YOLO 도ꡬ( Ultralytics)λ₯Ό μ‚¬μš©ν•˜μ„Έμš”.

Val

COCO128 포즈 데이터 μ„ΈνŠΈμ— λŒ€ν•΄ ν•™μŠ΅λœ YOLOv8n-pose λͺ¨λΈ 정확도λ₯Ό κ²€μ¦ν•©λ‹ˆλ‹€. μΈμˆ˜λŠ” 전달할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. model ꡐ윑 μœ μ§€ data 및 인수λ₯Ό λͺ¨λΈ μ†μ„±μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

예

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list contains map50-95 of each category
yolo pose val model=yolov8n-pose.pt  # val official model
yolo pose val model=path/to/best.pt  # val custom model

예츑

ν•™μŠ΅λœ YOLOv8n-pose λͺ¨λΈμ„ μ‚¬μš©ν•˜μ—¬ 이미지에 λŒ€ν•œ μ˜ˆμΈ‘μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.

예

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image
yolo pose predict model=yolov8n-pose.pt source='https://ultralytics.com/images/bus.jpg'  # predict with official model
yolo pose predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg'  # predict with custom model

전체 보기 predict λͺ¨λ“œ μ„ΈλΆ€ μ •λ³΄μ—μ„œ 예츑 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

내보내기

YOLOv8n 포즈 λͺ¨λΈμ„ ONNX, CoreML λ“±κ³Ό 같은 λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ λ‚΄λ³΄λƒ…λ‹ˆλ‹€.

예

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom trained model

# Export the model
model.export(format="onnx")
yolo export model=yolov8n-pose.pt format=onnx  # export official model
yolo export model=path/to/best.pt format=onnx  # export custom trained model

μ‚¬μš© κ°€λŠ₯ YOLOv8-내보내기 ν˜•μ‹μ€ μ•„λž˜ ν‘œμ— λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€. λ‚΄λ³΄λ‚΄λŠ” ν˜•μ‹μ€ format 인수, 즉 format='onnx' λ˜λŠ” format='engine'. 내보낸 λͺ¨λΈμ—μ„œ 직접 μ˜ˆμΈ‘ν•˜κ±°λ‚˜ μœ νš¨μ„±μ„ 검사할 수 μžˆμŠ΅λ‹ˆλ‹€. yolo predict model=yolov8n-pose.onnx. 내보내기가 μ™„λ£Œλœ ν›„ λͺ¨λΈμ— λŒ€ν•œ μ‚¬μš© μ˜ˆκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

ν˜•μ‹ format 인수 λͺ¨λΈ 메타데이터 인수
PyTorch - yolov8n-pose.pt βœ… -
TorchScript torchscript yolov8n-pose.torchscript βœ… imgsz, optimize, batch
ONNX onnx yolov8n-pose.onnx βœ… imgsz, half, dynamic, simplify, opset, batch
OpenVINO openvino yolov8n-pose_openvino_model/ βœ… imgsz, half, int8, batch
TensorRT engine yolov8n-pose.engine βœ… imgsz, half, dynamic, simplify, workspace, int8, batch
CoreML coreml yolov8n-pose.mlpackage βœ… imgsz, half, int8, nms, batch
TF SavedModel saved_model yolov8n-pose_saved_model/ βœ… imgsz, keras, int8, batch
TF GraphDef pb yolov8n-pose.pb ❌ imgsz, batch
TF Lite tflite yolov8n-pose.tflite βœ… imgsz, half, int8, batch
TF Edge TPU edgetpu yolov8n-pose_edgetpu.tflite βœ… imgsz
TF.js tfjs yolov8n-pose_web_model/ βœ… imgsz, half, int8, batch
PaddlePaddle paddle yolov8n-pose_paddle_model/ βœ… imgsz, batch
NCNN ncnn yolov8n-pose_ncnn_model/ βœ… imgsz, half, batch

전체 보기 export μ„ΈλΆ€ μ •λ³΄μ—μ„œ 내보내기 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

자주 λ¬»λŠ” 질문

포즈 μΆ”μ •( Ultralytics YOLOv8 )μ΄λž€ 무엇이며 μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”?

Ultralytics YOLOv8 을 μ‚¬μš©ν•œ 포즈 μΆ”μ •μ—λŠ” μ΄λ―Έμ§€μ—μ„œ ν‚€ν¬μΈνŠΈλΌκ³  ν•˜λŠ” νŠΉμ • 지점을 μ‹λ³„ν•˜λŠ” μž‘μ—…μ΄ ν¬ν•¨λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ ν‚€ν¬μΈνŠΈλŠ” 일반적으둜 κ΄€μ ˆμ΄λ‚˜ 객체의 λ‹€λ₯Έ μ€‘μš”ν•œ νŠΉμ§•μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 좜λ ₯μ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ©λ‹ˆλ‹€. [x, y] μ’Œν‘œμ™€ 각 ν¬μΈνŠΈμ— λŒ€ν•œ 신뒰도 점수λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. YOLOv8-λͺ¨λΈμ€ 이 μž‘μ—…μ„ μœ„ν•΄ νŠΉλ³„νžˆ μ„€κ³„λ˜μ—ˆμœΌλ©° -pose 접미사와 같은 yolov8n-pose.pt. μ΄λŸ¬ν•œ λͺ¨λΈμ€ λ‹€μŒκ³Ό 같은 데이터 μ„ΈνŠΈμ— λŒ€ν•΄ 사전 ν•™μŠ΅λ©λ‹ˆλ‹€. COCO ν‚€ν¬μΈνŠΈ λ‹€μ–‘ν•œ 포즈 μΆ”μ • μž‘μ—…μ— μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ 포즈 μΆ”μ • νŽ˜μ΄μ§€.

μ‚¬μš©μž 지정 데이터 μ§‘ν•©μ—μ„œ YOLOv8-pose λͺ¨λΈμ„ ν•™μŠ΅ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ‚˜μš”?

μ‚¬μš©μž 지정 데이터 μ„ΈνŠΈμ—μ„œ YOLOv8-pose λͺ¨λΈμ„ ν•™μŠ΅ν•˜λ €λ©΄ YAML 파일둜 μ •μ˜λœ μƒˆ λͺ¨λΈμ΄λ‚˜ 사전 ν•™μŠ΅λœ λͺ¨λΈ 쀑 ν•˜λ‚˜λ₯Ό λ‘œλ“œν•΄μ•Ό ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ μ§€μ •λœ 데이터 μ„ΈνŠΈμ™€ 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•™μŠ΅ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n-pose.yaml")  # build a new model from YAML
model = YOLO("yolov8n-pose.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)

κ΅μœ‘μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ ꡐ윑 μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.

ν›ˆλ ¨λœ YOLOv8-pose λͺ¨λΈμ˜ μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•˜λ‚˜μš”?

YOLOv8-pose λͺ¨λΈμ˜ μœ νš¨μ„± κ²€μ‚¬μ—λŠ” ν•™μŠ΅ 쀑에 μœ μ§€λœ λ™μΌν•œ 데이터 μ„ΈνŠΈ 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 정확도λ₯Ό ν‰κ°€ν•˜λŠ” 것이 ν¬ν•¨λ©λ‹ˆλ‹€. λ‹€μŒμ€ μ˜ˆμ‹œμž…λ‹ˆλ‹€:

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered

μžμ„Έν•œ λ‚΄μš©μ€ Val μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.

YOLOv8-pose λͺ¨λΈμ„ λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ 내보낼 수 있으며 κ·Έ 방법은 λ¬΄μ—‡μΈκ°€μš”?

예, YOLOv8-pose λͺ¨λΈμ„ ONNX, CoreML, TensorRT λ“±κ³Ό 같은 λ‹€μ–‘ν•œ ν˜•μ‹μœΌλ‘œ 내보낼 수 μžˆμŠ΅λ‹ˆλ‹€. 이 μž‘μ—…μ€ Python λ˜λŠ” λͺ…령쀄 μΈν„°νŽ˜μ΄μŠ€(CLI)λ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom trained model

# Export the model
model.export(format="onnx")

μžμ„Έν•œ λ‚΄μš©μ€ 내보내기 μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.

μ‚¬μš© κ°€λŠ₯ν•œ Ultralytics YOLOv8 -pose λͺ¨λΈκ³Ό ν•΄λ‹Ή μ„±λŠ₯ μ§€ν‘œλŠ” λ¬΄μ—‡μΈκ°€μš”?

Ultralytics YOLOv8 YOLOv8n-pose, -pose, -pose λ“± λ‹€μ–‘ν•œ 사전 ν•™μŠ΅λœ 포즈 λͺ¨λΈμ„ μ œκ³΅ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λΈμ€ 크기, 정확도(mAP) 및 속도가 λ‹€λ¦…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ -pose λͺ¨λΈμ€ YOLOv8s YOLOv8m YOLOv8nmAPpose50-95의50.4와 mAPpose50의80.1을 λ‹¬μ„±ν•©λ‹ˆλ‹€. 전체 λͺ©λ‘κ³Ό μ„±λŠ₯에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ λͺ¨λΈ μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.



2023-11-12 생성, 2024-07-08 μ—…λ°μ΄νŠΈλ¨
μ €μž: k-2feng@hotmail.com (1), glenn-jocher (20), Burhan-Q (4), RizwanMunawar (1), AyushExel (1), Laughing-q (1)

λŒ“κΈ€