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

λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ λͺ¨λΈ 내보내기 Ultralytics YOLO

Ultralytics YOLO μ—μ½”μ‹œμŠ€ν…œ 및 톡합

μ†Œκ°œ

λͺ¨λΈ ν•™μŠ΅μ˜ ꢁ극적인 λͺ©ν‘œλŠ” μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λ°°ν¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. Ultralytics YOLOv8 의 내보내기 λͺ¨λ“œμ—μ„œλŠ” ν•™μŠ΅λœ λͺ¨λΈμ„ λ‹€μ–‘ν•œ 포맷으둜 내보낼 수 μžˆλŠ” λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ μ œκ³΅ν•˜μ—¬ λ‹€μ–‘ν•œ ν”Œλž«νΌκ³Ό λ””λ°”μ΄μŠ€μ— 배포할 수 μžˆμŠ΅λ‹ˆλ‹€. 이 포괄적인 κ°€μ΄λ“œλŠ” λͺ¨λΈ λ‚΄λ³΄λ‚΄κΈ°μ˜ λ―Έλ¬˜ν•œ 차이λ₯Ό μ•ˆλ‚΄ν•˜κ³  ν˜Έν™˜μ„±κ³Ό μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.



Watch: μ‚¬μš©μž 지정 ν•™μŠ΅λœ Ultralytics YOLOv8 λͺ¨λΈμ„ 내보내고 μ›ΉμΊ μ—μ„œ 라이브 좔둠을 μ‹€ν–‰ν•˜λŠ” 방법.

YOLOv8 의 내보내기 λͺ¨λ“œλ₯Ό μ„ νƒν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΈκ°€μš”?

  • λ‹€μš©λ„μ„±: ONNX , TensorRT, CoreML, λ“± λ‹€μ–‘ν•œ ν˜•μ‹μœΌλ‘œ 내보낼 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„±λŠ₯: TensorRT 으둜 μ΅œλŒ€ 5λ°° GPU 속도 ν–₯상, ONNX λ˜λŠ” OpenVINO 둜 3λ°° CPU 속도 ν–₯상 .
  • ν˜Έν™˜μ„±: λ‹€μ–‘ν•œ ν•˜λ“œμ›¨μ–΄ 및 μ†Œν”„νŠΈμ›¨μ–΄ ν™˜κ²½μ—μ„œ λͺ¨λΈμ„ λ²”μš©μ μœΌλ‘œ 배포할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‚¬μš© νŽΈμ˜μ„±: κ°„λ‹¨ν•œ CLI 및 Python API둜 λΉ λ₯΄κ³  κ°„νŽΈν•˜κ²Œ λͺ¨λΈμ„ 내보낼 수 μžˆμŠ΅λ‹ˆλ‹€.

내보내기 λͺ¨λ“œμ˜ μ£Όμš” κΈ°λŠ₯

λ‹€μŒμ€ λͺ‡ 가지 λˆˆμ— λ„λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€:

  • 원클릭 내보내기: λ‹€μ–‘ν•œ ν˜•μ‹μœΌλ‘œ 내보내기λ₯Ό μœ„ν•œ κ°„λ‹¨ν•œ λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.
  • 일괄 내보내기: 일괄 좔둠이 κ°€λŠ₯ν•œ λͺ¨λΈμ„ λ‚΄λ³΄λƒ…λ‹ˆλ‹€.
  • μΆ”λ‘  μ΅œμ ν™”: 내보낸 λͺ¨λΈμ€ 더 λΉ λ₯Έ μΆ”λ‘  μ‹œκ°„μ„ μœ„ν•΄ μ΅œμ ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • νŠœν† λ¦¬μ–Ό λ™μ˜μƒ: μ›ν™œν•œ 내보내기 ν™˜κ²½μ„ μœ„ν•œ 심측 κ°€μ΄λ“œ 및 νŠœν† λ¦¬μ–Όμž…λ‹ˆλ‹€.

팁

  • 내보내기 ONNX λ˜λŠ” OpenVINO 둜 내보내면 CPU 속도가 μ΅œλŒ€ 3λ°° λΉ¨λΌμ§‘λ‹ˆλ‹€.
  • 내보내기 TensorRT 둜 내보내면 GPU 속도가 μ΅œλŒ€ 5λ°° λΉ¨λΌμ§‘λ‹ˆλ‹€.

μ‚¬μš© 예

YOLOv8n λͺ¨λΈμ„ ONNX λ˜λŠ” TensorRT κ³Ό 같은 λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ 내보내기 내보내기 인수의 전체 λͺ©λ‘μ€ μ•„λž˜ 인수 μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.

예

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.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.pt format=onnx  # export official model
yolo export model=path/to/best.pt format=onnx  # export custom trained model

인수

이 ν‘œμ—λŠ” YOLO λͺ¨λΈμ„ λ‹€μ–‘ν•œ ν˜•μ‹μœΌλ‘œ λ‚΄λ³΄λ‚΄λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” ꡬ성 및 μ˜΅μ…˜μ΄ μžμ„Ένžˆ μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 섀정은 내보낸 λͺ¨λΈμ˜ μ„±λŠ₯, 크기 및 λ‹€μ–‘ν•œ ν”Œλž«νΌκ³Ό ν™˜κ²½μ—μ„œμ˜ ν˜Έν™˜μ„±μ„ μ΅œμ ν™”ν•˜λŠ” 데 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. μ μ ˆν•œ ꡬ성을 톡해 λͺ¨λΈμ΄ 졜적의 νš¨μœ¨μ„±μœΌλ‘œ μ˜λ„ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 배포될 수 μžˆλ„λ‘ μ€€λΉ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

인수 μœ ν˜• κΈ°λ³Έκ°’ μ„€λͺ…
format str 'torchscript' 내보낸 λͺ¨λΈμ˜ λŒ€μƒ ν˜•μ‹μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 'onnx', 'torchscript', 'tensorflow'등을 μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ 배포 ν™˜κ²½κ³Όμ˜ ν˜Έν™˜μ„±μ„ μ •μ˜ν•©λ‹ˆλ‹€.
imgsz int λ˜λŠ” tuple 640 λͺ¨λΈ μž…λ ₯에 μ‚¬μš©ν•  μ›ν•˜λŠ” 이미지 ν¬κΈ°μž…λ‹ˆλ‹€. μ •μ‚¬κ°ν˜• μ΄λ―Έμ§€μ˜ 경우 μ •μˆ˜ λ˜λŠ” νŠœν”ŒμΌ 수 μžˆμŠ΅λ‹ˆλ‹€. (height, width) λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.
keras bool False TensorFlow SavedModel 에 λŒ€ν•΄ Keras ν˜•μ‹μœΌλ‘œ 내보내기λ₯Ό ν™œμ„±ν™”ν•˜μ—¬ TensorFlow μ„œλΉ„μŠ€ 및 APIμ™€μ˜ ν˜Έν™˜μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
optimize bool False TorchScript 으둜 내보낼 λ•Œ λͺ¨λ°”일 μž₯μΉ˜μ— λŒ€ν•œ μ΅œμ ν™”λ₯Ό μ μš©ν•˜μ—¬ λͺ¨λΈ 크기λ₯Ό 쀄이고 μ„±λŠ₯을 κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
half bool False FP16(λ°˜μ •λ°€) μ–‘μžν™”λ₯Ό ν™œμ„±ν™”ν•˜μ—¬ λͺ¨λΈ 크기λ₯Ό 쀄이고 μ§€μ›λ˜λŠ” ν•˜λ“œμ›¨μ–΄μ—μ„œ μΆ”λ‘  속도λ₯Ό 높일 수 μžˆμŠ΅λ‹ˆλ‹€.
int8 bool False INT8 μ–‘μžν™”λ₯Ό ν™œμ„±ν™”ν•˜μ—¬ λͺ¨λΈμ„ λ”μš± μ••μΆ•ν•˜κ³  주둜 에지 λ””λ°”μ΄μŠ€μ˜ 경우 정확도 손싀을 μ΅œμ†Œν™”ν•˜λ©΄μ„œ μΆ”λ‘  속도λ₯Ό λ†’μž…λ‹ˆλ‹€.
dynamic bool False ONNX 및 TensorRT 내보내기에 동적 μž…λ ₯ 크기λ₯Ό ν—ˆμš©ν•˜μ—¬ λ‹€μ–‘ν•œ 이미지 크기λ₯Ό μœ μ—°ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
simplify bool False 에 λŒ€ν•œ λͺ¨λΈ κ·Έλž˜ν”„λ₯Ό λ‹¨μˆœν™”ν•©λ‹ˆλ‹€. ONNX 내보내기 onnxslim, 잠재적으둜 μ„±λŠ₯κ³Ό ν˜Έν™˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
opset int None λ‹€λ₯Έ ONNX νŒŒμ„œ 및 λŸ°νƒ€μž„κ³Όμ˜ ν˜Έν™˜μ„±μ„ μœ„ν•΄ ONNX μ˜΅μ…‹ 버전을 μ§€μ •ν•©λ‹ˆλ‹€. μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μ§€μ›λ˜λŠ” μ΅œμ‹  버전을 μ‚¬μš©ν•©λ‹ˆλ‹€.
workspace float 4.0 TensorRT μ΅œμ ν™”λ₯Ό μœ„ν•œ μ΅œλŒ€ μž‘μ—… 곡간 크기λ₯Ό GiB λ‹¨μœ„λ‘œ μ„€μ •ν•˜μ—¬ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰κ³Ό μ„±λŠ₯의 κ· ν˜•μ„ 맞μΆ₯λ‹ˆλ‹€.
nms bool False μ •ν™•ν•˜κ³  효율적인 탐지 ν›„μ²˜λ¦¬λ₯Ό μœ„ν•΄ ν•„μˆ˜μ μΈ λΉ„μ΅œλŒ€ μ–΅μ œ(NMS)λ₯Ό CoreML 내보내기에 μΆ”κ°€ν•©λ‹ˆλ‹€.
batch int 1 내보내기 λͺ¨λΈ 배치 μΆ”λ‘  크기 λ˜λŠ” 내보낸 λͺ¨λΈμ΄ λ™μ‹œμ— μ²˜λ¦¬ν•  μ΅œλŒ€ 이미지 수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€ predict λͺ¨λ“œλ‘œ μ „ν™˜ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ λ§€κ°œλ³€μˆ˜λ₯Ό μ‘°μ •ν•˜λ©΄ 배포 ν™˜κ²½, ν•˜λ“œμ›¨μ–΄ μ œμ•½ 쑰건, μ„±λŠ₯ λͺ©ν‘œ λ“± νŠΉμ • μš”κ΅¬μ‚¬ν•­μ— 맞게 내보내기 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚¬μš©μž 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λΈ 크기, 속도, 정확도 간에 졜적의 κ· ν˜•μ„ 이루렀면 μ μ ˆν•œ ν˜•μ‹κ³Ό 섀정을 μ„ νƒν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€.

내보내기 ν˜•μ‹

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

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

자주 λ¬»λŠ” 질문

YOLOv8 λͺ¨λΈμ„ ONNX ν˜•μ‹μœΌλ‘œ 내보내렀면 μ–΄λ–»κ²Œ ν•˜λ‚˜μš”?

YOLOv8 λͺ¨λΈμ„ ONNX ν˜•μ‹μœΌλ‘œ λ‚΄λ³΄λ‚΄λŠ” 방법은 Ultralytics 을 μ‚¬μš©ν•˜λ©΄ κ°„λ‹¨ν•©λ‹ˆλ‹€. Python κ³Ό CLI 두 가지 λ°©λ²•μœΌλ‘œ λͺ¨λΈμ„ 내보낼 수 μžˆμŠ΅λ‹ˆλ‹€.

예

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.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.pt format=onnx  # export official model
yolo export model=path/to/best.pt format=onnx  # export custom trained model

λ‹€μ–‘ν•œ μž…λ ₯ 크기 μ²˜λ¦¬μ™€ 같은 κ³ κΈ‰ μ˜΅μ…˜μ„ ν¬ν•¨ν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ ONNX μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.

λͺ¨λΈ 내보내기에 TensorRT 을 μ‚¬μš©ν•˜λ©΄ μ–΄λ–€ 이점이 μžˆλ‚˜μš”?

TensorRT YOLOv8 λͺ¨λΈμ„ 둜 내보내면 μ΅œλŒ€ 5배의 속도 ν–₯상을 달성할 수 μžˆμœΌλ―€λ‘œ μ‹€μ‹œκ°„ μΆ”λ‘  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ΄μƒμ μž…λ‹ˆλ‹€. TensorRT GPU

  • λ‹€μš©λ„μ„±: νŠΉμ • ν•˜λ“œμ›¨μ–΄ 섀정에 맞게 λͺ¨λΈμ„ μ΅œμ ν™”ν•˜μ„Έμš”.
  • 속도: κ³ κΈ‰ μ΅œμ ν™”λ₯Ό 톡해 더 λΉ λ₯Έ 좔둠을 λ‹¬μ„±ν•˜μ„Έμš”.
  • ν˜Έν™˜μ„±: NVIDIA ν•˜λ“œμ›¨μ–΄μ™€ μ›ν™œν•˜κ²Œ ν†΅ν•©λ©λ‹ˆλ‹€.

톡합에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄λ €λ©΄ TensorRT 을 μ°Έμ‘°ν•˜μ„Έμš”. TensorRT 톡합 κ°€μ΄λ“œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

YOLOv8 λͺ¨λΈμ„ 내보낼 λ•Œ INT8 μ •λŸ‰ν™”λ₯Ό ν™œμ„±ν™”ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ‚˜μš”?

INT8 μ–‘μžν™”λŠ” 특히 엣지 λ””λ°”μ΄μŠ€μ—μ„œ λͺ¨λΈμ„ μ••μΆ•ν•˜κ³  μΆ”λ‘  속도λ₯Ό 높일 수 μžˆλŠ” ν›Œλ₯­ν•œ λ°©λ²•μž…λ‹ˆλ‹€. INT8 μ–‘μžν™”λ₯Ό ν™œμ„±ν™”ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

예

from ultralytics import YOLO

model = YOLO("yolov8n.pt")  # Load a model
model.export(format="onnx", int8=True)
yolo export model=yolov8n.pt format=onnx int8=True   # export model with INT8 quantization

INT8 μ •λŸ‰ν™”λŠ” TensorRT 및 CoreML κ³Ό 같은 λ‹€μ–‘ν•œ ν˜•μ‹μ— μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ 내보내기 μ„Ήμ…˜μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λΈμ„ 내보낼 λ•Œ 동적 μž…λ ₯ 크기가 μ€‘μš”ν•œ μ΄μœ λŠ” λ¬΄μ—‡μΈκ°€μš”?

동적 μž…λ ₯ 크기λ₯Ό μ‚¬μš©ν•˜λ©΄ 내보낸 λͺ¨λΈμ΄ λ‹€μ–‘ν•œ 이미지 크기λ₯Ό μ²˜λ¦¬ν•  수 μžˆμ–΄ μœ μ—°μ„±μ„ μ œκ³΅ν•˜κ³  λ‹€μ–‘ν•œ μ‚¬μš© 사둀에 맞게 처리 νš¨μœ¨μ„ μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ONNX λ˜λŠ” TensorRT κ³Ό 같은 ν˜•μ‹μœΌλ‘œ 내보낼 λ•Œ 동적 μž…λ ₯ 크기λ₯Ό ν™œμ„±ν™”ν•˜λ©΄ λͺ¨λΈμ΄ λ‹€μ–‘ν•œ μž…λ ₯ λͺ¨μ–‘에 μ›ν™œν•˜κ²Œ 적응할 수 μžˆμŠ΅λ‹ˆλ‹€.

이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ €λ©΄ dynamic=True ν”Œλž˜κ·Έλ₯Ό λ‚΄λ³΄λ‚΄λŠ” μ€‘μž…λ‹ˆλ‹€:

예

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolov8n.pt format=onnx dynamic=True

μžμ„Έν•œ λ‚΄μš©μ€ 동적 μž…λ ₯ 크기 ꡬ성을 μ°Έμ‘°ν•˜μ„Έμš”.

λͺ¨λΈ μ„±λŠ₯을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ κ³ λ €ν•΄μ•Ό ν•  μ£Όμš” 내보내기 μΈμˆ˜λŠ” λ¬΄μ—‡μΈκ°€μš”?

내보내기 인수λ₯Ό μ΄ν•΄ν•˜κ³  κ΅¬μ„±ν•˜λŠ” 것은 λͺ¨λΈ μ„±λŠ₯을 μ΅œμ ν™”ν•˜λŠ” 데 맀우 μ€‘μš”ν•©λ‹ˆλ‹€:

  • format: 내보낸 λͺ¨λΈμ˜ λŒ€μƒ ν˜•μ‹(예, onnx, torchscript, tensorflow).
  • imgsz: λͺ¨λΈ μž…λ ₯에 λŒ€ν•œ μ›ν•˜λŠ” 이미지 크기(예 640 λ˜λŠ” (height, width)).
  • half: FP16 μ–‘μžν™”λ₯Ό μ§€μ›ν•˜μ—¬ λͺ¨λΈ 크기λ₯Ό 쀄이고 μΆ”λ‘  속도λ₯Ό 높일 수 μžˆμŠ΅λ‹ˆλ‹€.
  • optimize: λͺ¨λ°”일 λ˜λŠ” μ œν•œλœ ν™˜κ²½μ„ μœ„ν•œ νŠΉμ • μ΅œμ ν™”λ₯Ό μ μš©ν•©λ‹ˆλ‹€.
  • int8: INT8 μ •λŸ‰ν™”λ₯Ό μ§€μ›ν•˜μ—¬ 엣지 배포에 맀우 μœ μš©ν•©λ‹ˆλ‹€.

λͺ¨λ“  내보내기 μΈμˆ˜μ— λŒ€ν•œ μžμ„Έν•œ λͺ©λ‘κ³Ό μ„€λͺ…은 내보내기 인수 μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.



생성 2023-11-12, μ—…λ°μ΄νŠΈ 2024-07-04
μž‘μ„±μž: glenn-jocher (17), Burhan-Q (4), Kayzwer (2)

λŒ“κΈ€