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

YOLOv8 λΉ λ₯Έ 배포λ₯Ό μœ„ν•΄ TorchScript 으둜 λͺ¨λΈ 내보내기

μž„λ² λ””λ“œ μ‹œμŠ€ν…œ, μ›Ή λΈŒλΌμš°μ € λ˜λŠ” Python 지원이 μ œν•œλœ ν”Œλž«νΌ λ“± λ‹€μ–‘ν•œ ν™˜κ²½μ— 컴퓨터 λΉ„μ „ λͺ¨λΈμ„ λ°°ν¬ν•˜λ €λ©΄ μœ μ—°ν•˜κ³  이식 κ°€λŠ₯ν•œ μ†”λ£¨μ…˜μ΄ ν•„μš”ν•©λ‹ˆλ‹€. TorchScript 은 이식성과 전체 Python ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” ν™˜κ²½μ—μ„œ λͺ¨λΈμ„ μ‹€ν–‰ν•˜λŠ” κΈ°λŠ₯에 쀑점을 두고 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ‹€μ–‘ν•œ λ””λ°”μ΄μŠ€λ‚˜ ν”Œλž«νΌμ— 컴퓨터 λΉ„μ „ κΈ°λŠ₯을 배포해야 ν•˜λŠ” μ‹œλ‚˜λ¦¬μ˜€μ— μ΄μƒμ μž…λ‹ˆλ‹€.

Torchscript 으둜 λ‚΄λ³΄λ‚΄μ„œ Ultralytics YOLOv8 λͺ¨λΈμ„ μ§λ ¬ν™”ν•˜μ—¬ ν”Œλž«νΌ κ°„ ν˜Έν™˜μ„±μ„ 높이고 배포λ₯Ό κ°„μ†Œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 κ°€μ΄λ“œμ—μ„œλŠ” YOLOv8 λͺ¨λΈμ„ TorchScript ν˜•μ‹μœΌλ‘œ λ‚΄λ³΄λ‚΄μ„œ 더 λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” 방법을 보여 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

TorchScript 으둜 내보내야 ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΈκ°€μš”?

Torchscript κ°œμš”

PyTorch 의 κ°œλ°œμžκ°€ κ°œλ°œν•œ TorchScript 은 λ‹€μ–‘ν•œ ν”Œλž«νΌμ—μ„œ PyTorch λͺ¨λΈμ„ μ΅œμ ν™”ν•˜κ³  배포할 수 μžˆλŠ” κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. YOLOv8 λͺ¨λΈλ‘œ 내보내기 TorchScript 둜 λ‚΄λ³΄λ‚΄λŠ” 것은 μ—°κ΅¬μ—μ„œ μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ μ „ν™˜ν•˜λŠ” 데 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. TorchScript PyTorch ν”„λ ˆμž„μ›Œν¬μ˜ 일뢀인 PyTorch λͺ¨λΈμ€ Python 을 μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν™˜κ²½μ—μ„œλ„ λͺ¨λΈμ„ μ‚¬μš©ν•  수 있게 ν•¨μœΌλ‘œμ¨ μ΄λŸ¬ν•œ μ „ν™˜μ„ 보닀 μ›ν™œν•˜κ²Œ ν•΄μ€λ‹ˆλ‹€.

이 ν”„λ‘œμ„ΈμŠ€μ—λŠ” 좔적과 μŠ€ν¬λ¦½νŒ…μ΄λΌλŠ” 두 가지 기술이 ν¬ν•¨λ©λ‹ˆλ‹€. 좔적은 λͺ¨λΈ μ‹€ν–‰ 쀑 μž‘μ—…μ„ κΈ°λ‘ν•˜κ³ , μŠ€ν¬λ¦½νŒ…μ€ Python 의 ν•˜μœ„ 집합을 μ‚¬μš©ν•˜μ—¬ λͺ¨λΈμ„ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κΈ°μˆ μ„ 톡해 YOLOv8 κ³Ό 같은 λͺ¨λΈμ€ 일반적인 Python ν™˜κ²½ λ°–μ—μ„œλ„ 계속 μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

TorchScript 슀크립트 및 좔적

TorchScript μ—°μ‚°μž μœ΅ν•© 및 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ κ°œμ„ κ³Ό 같은 κΈ°μˆ μ„ 톡해 λͺ¨λΈμ„ μ΅œμ ν™”ν•˜μ—¬ 효율적인 싀행을 보μž₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. TorchScript 으둜 λ‚΄λ³΄λ‚΄λŠ” 또 λ‹€λ₯Έ μž₯점은 λ‹€μ–‘ν•œ ν•˜λ“œμ›¨μ–΄ ν”Œλž«νΌμ—μ„œ λͺ¨λΈ 싀행을 가속화할 수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€. μ΄λŠ” C++ ν™˜κ²½, μž„λ² λ””λ“œ μ‹œμŠ€ν…œμ— ν†΅ν•©ν•˜κ±°λ‚˜ μ›Ή λ˜λŠ” λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 배포할 수 μžˆλŠ” λ…λ¦½ν˜•, ν”„λ‘œλ•μ…˜ μ€€λΉ„ μƒνƒœμ˜ PyTorch λͺ¨λΈμ„ μƒμ„±ν•©λ‹ˆλ‹€.

TorchScript λͺ¨λΈμ˜ μ£Όμš” κΈ°λŠ₯

TorchScriptλŠ” PyTorch μ—μ½”μ‹œμŠ€ν…œμ˜ 핡심 λΆ€λΆ„μœΌλ‘œ, λ”₯λŸ¬λ‹ λͺ¨λΈμ„ μ΅œμ ν™”ν•˜κ³  λ°°ν¬ν•˜κΈ° μœ„ν•œ κ°•λ ₯ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

TorchScript νŠΉμ§•

λ‹€μŒμ€ TorchScript 을 κ°œλ°œμžμ—κ²Œ μœ μš©ν•œ λ„κ΅¬λ‘œ λ§Œλ“œλŠ” μ£Όμš” κΈ°λŠ₯μž…λ‹ˆλ‹€:

  • 정적 κ·Έλž˜ν”„ μ‹€ν–‰: TorchScript 은 λͺ¨λΈ κ³„μ‚°μ˜ 정적 κ·Έλž˜ν”„ ν‘œν˜„μ„ μ‚¬μš©ν•˜λ©°, PyTorch의 동적 κ·Έλž˜ν”„ μ‹€ν–‰κ³ΌλŠ” λ‹€λ¦…λ‹ˆλ‹€. 정적 κ·Έλž˜ν”„ μ‹€ν–‰μ—μ„œλŠ” 계산 κ·Έλž˜ν”„κ°€ μ‹€μ œ μ‹€ν–‰ 전에 ν•œ 번 μ •μ˜λ˜κ³  μ»΄νŒŒμΌλ˜λ―€λ‘œ μΆ”λ‘  μ‹œ μ„±λŠ₯이 ν–₯μƒλ©λ‹ˆλ‹€.

  • λͺ¨λΈ 직렬화: TorchScript λ₯Ό μ‚¬μš©ν•˜λ©΄ PyTorch λͺ¨λΈμ„ ν”Œλž«νΌμ— 독립적인 ν˜•μ‹μœΌλ‘œ 직렬화할 수 μžˆμŠ΅λ‹ˆλ‹€. μ§λ ¬ν™”λœ λͺ¨λΈμ€ 원본 Python μ½”λ“œ 없이도 λ‘œλ“œν•  수 μžˆμœΌλ―€λ‘œ λ‹€μ–‘ν•œ λŸ°νƒ€μž„ ν™˜κ²½μ— 배포할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • JIT 컴파일: TorchScript 은 JIT(Just-In-Time) μ»΄νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ PyTorch λͺ¨λΈμ„ μ΅œμ ν™”λœ 쀑간 ν‘œν˜„μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€. JITλŠ” λͺ¨λΈμ˜ 계산 κ·Έλž˜ν”„λ₯Ό μ»΄νŒŒμΌν•˜μ—¬ λŒ€μƒ μž₯μΉ˜μ—μ„œ 효율적으둜 μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

  • μ–Έμ–΄ κ°„ 톡합: TorchScript 을 μ‚¬μš©ν•˜λ©΄ PyTorch λͺ¨λΈμ„ C++, Java, JavaScript와 같은 λ‹€λ₯Έ μ–Έμ–΄λ‘œ 내보낼 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ PyTorch λͺ¨λΈμ„ λ‹€λ₯Έ μ–Έμ–΄λ‘œ μž‘μ„±λœ κΈ°μ‘΄ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ— μ‰½κ²Œ 톡합할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • 점진적 λ³€ν™˜: TorchScript μ—μ„œλŠ” 점진적 λ³€ν™˜ 방식을 μ œκ³΅ν•˜μ—¬ PyTorch λͺ¨λΈμ˜ 일뢀λ₯Ό TorchScript 둜 μ μ§„μ μœΌλ‘œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 μœ μ—°μ„±μ€ λ³΅μž‘ν•œ λͺ¨λΈμ„ λ‹€λ£¨κ±°λ‚˜ μ½”λ“œμ˜ νŠΉμ • 뢀뢄을 μ΅œμ ν™”ν•˜λ €λŠ” κ²½μš°μ— 특히 μœ μš©ν•©λ‹ˆλ‹€.

배포 μ˜΅μ…˜ TorchScript

YOLOv8 λͺ¨λΈμ„ TorchScript ν˜•μ‹μœΌλ‘œ λ‚΄λ³΄λ‚΄λŠ” μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄κΈ° 전에 TorchScript λͺ¨λΈμ΄ 일반적으둜 μ‚¬μš©λ˜λŠ” μœ„μΉ˜λ₯Ό 이해해 λ³΄κ² μŠ΅λ‹ˆλ‹€.

TorchScript λŠ” λ‹€μŒκ³Ό 같은 λ¨Έμ‹  λŸ¬λ‹ λͺ¨λΈμ„ μœ„ν•œ λ‹€μ–‘ν•œ 배포 μ˜΅μ…˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€:

  • C++ API: TorchScript 의 κ°€μž₯ 일반적인 μ‚¬μš© μ‚¬λ‘€λŠ” μ΅œμ ν™”λœ TorchScript λͺ¨λΈμ„ C++ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄μ—μ„œ 직접 λ‘œλ“œν•˜κ³  μ‹€ν–‰ν•  수 μžˆλŠ” C++ APIμž…λ‹ˆλ‹€. μ΄λŠ” Python 이 μ ν•©ν•˜μ§€ μ•Šκ±°λ‚˜ μ‚¬μš©ν•  수 μ—†λŠ” ν”„λ‘œλ•μ…˜ ν™˜κ²½μ— μ΄μƒμ μž…λ‹ˆλ‹€. C++ APIλŠ” TorchScript λͺ¨λΈμ„ μ˜€λ²„ν—€λ“œκ°€ 적고 효율적으둜 μ‹€ν–‰ν•˜μ—¬ μ„±λŠ₯ 잠재λ ₯을 κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€.

  • λͺ¨λ°”일 배포: TorchScript μ—μ„œλŠ” λͺ¨λΈμ„ λͺ¨λ°”일 μž₯μΉ˜μ— μ‰½κ²Œ 배포할 수 μžˆλŠ” ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 도ꡬλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. PyTorch λͺ¨λ°”일은 iOS 및 Android μ•± λ‚΄μ—μ„œ μ΄λŸ¬ν•œ λͺ¨λΈμ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•œ λŸ°νƒ€μž„μ„ μ œκ³΅ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 지연 μ‹œκ°„μ΄ 짧은 μ˜€ν”„λΌμΈ μΆ”λ‘  κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜κ³Ό 데이터 ν”„λΌμ΄λ²„μ‹œλ₯Ό ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • ν΄λΌμš°λ“œ 배포: TorchScript λͺ¨λΈμ€ TorchServe와 같은 μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜μ—¬ ν΄λΌμš°λ“œ 기반 μ„œλ²„μ— 배포할 수 μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ ν™•μž₯ κ°€λŠ₯ν•œ 배포λ₯Ό μœ„ν•΄ λͺ¨λΈ 버전 관리, 배치 및 λ©”νŠΈλ¦­ λͺ¨λ‹ˆν„°λ§κ³Ό 같은 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. TorchScript 을 ν†΅ν•œ ν΄λΌμš°λ“œ λ°°ν¬λŠ” API λ˜λŠ” 기타 μ›Ή μ„œλΉ„μŠ€λ₯Ό 톡해 λͺ¨λΈμ— μ•‘μ„ΈμŠ€ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

TorchScript 으둜 내보내기: YOLOv8 λͺ¨λΈ λ³€ν™˜

YOLOv8 λͺ¨λΈμ„ TorchScript 으둜 내보내면 λ‹€λ₯Έ κ³³μ—μ„œ 더 μ‰½κ²Œ μ‚¬μš©ν•  수 있고 더 λΉ λ₯΄κ³  효율적으둜 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 κΈ°λŠ₯은 μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ”₯λŸ¬λ‹ λͺ¨λΈμ„ 보닀 효과적으둜 μ‚¬μš©ν•˜λ €λŠ” λͺ¨λ“  μ‚¬μš©μžμ—κ²Œ μœ μš©ν•©λ‹ˆλ‹€.

μ„€μΉ˜

ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜λ €λ©΄ μ‹€ν–‰ν•©λ‹ˆλ‹€:

μ„€μΉ˜

# Install the required package for YOLOv8
pip install ultralytics

μ„€μΉ˜ κ³Όμ •κ³Ό κ΄€λ ¨λœ μžμ„Έν•œ 지침과 λͺ¨λ²” μ‚¬λ‘€λŠ” Ultralytics μ„€μΉ˜ κ°€μ΄λ“œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. YOLOv8 에 ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜λŠ” λ™μ•ˆ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ 일반적인 문제 κ°€μ΄λ“œλ₯Ό μ°Έμ‘°ν•˜μ—¬ ν•΄κ²° 방법과 νŒμ„ ν™•μΈν•˜μ„Έμš”.

μ‚¬μš©λ²•

μ‚¬μš© 지침을 μ‚΄νŽ΄λ³΄κΈ° 전에 λͺ¨λ“  Ultralytics YOLOv8 λͺ¨λΈμ—μ„œ 내보내기λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, μ„ νƒν•œ λͺ¨λΈμ΄ 내보내기 κΈ°λŠ₯을 μ§€μ›ν•˜λŠ”μ§€ μ—¬κΈ°μ—μ„œ 확인할 수 μžˆλ‹€λŠ” 점에 μœ μ˜ν•˜μ„Έμš”.

μ‚¬μš©λ²•

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')

# Export the model to TorchScript format
model.export(format='torchscript')  # creates 'yolov8n.torchscript'

# Load the exported TorchScript model
torchscript_model = YOLO('yolov8n.torchscript')

# Run inference
results = torchscript_model('https://ultralytics.com/images/bus.jpg')
# Export a YOLOv8n PyTorch model to TorchScript format
yolo export model=yolov8n.pt format=torchscript  # creates 'yolov8n.torchscript'

# Run inference with the exported model
yolo predict model=yolov8n.torchscript source='https://ultralytics.com/images/bus.jpg'

내보내기 ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ 내보내기 κ΄€λ ¨ λ¬Έμ„œ νŽ˜μ΄μ§€(Ultralytics )λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

내보낸 YOLOv8 TorchScript λͺ¨λΈ 배포

Ultralytics YOLOv8 λͺ¨λΈμ„ TorchScript ν˜•μ‹μœΌλ‘œ μ„±κ³΅μ μœΌλ‘œ 내보낸 ν›„μ—λŠ” 이제 배포할 수 μžˆμŠ΅λ‹ˆλ‹€. TorchScript λͺ¨λΈμ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•œ 기본적이고 ꢌμž₯λ˜λŠ” 첫 번째 λ‹¨κ³„λŠ” 이전 μ‚¬μš© μ½”λ“œ 쑰각에 μ„€λͺ…λœ λŒ€λ‘œ YOLO("λͺ¨λΈ.torchscript") 방법을 ν™œμš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€μ–‘ν•œ λ‹€λ₯Έ μ„€μ •μ—μ„œ TorchScript λͺ¨λΈμ„ λ°°ν¬ν•˜λŠ” 방법에 λŒ€ν•œ μžμ„Έν•œ 지침은 λ‹€μŒ λ¦¬μ†ŒμŠ€λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”:

  • λͺ¨λ°”일 배포 μ‚΄νŽ΄λ³΄κΈ°: PyTorch λͺ¨λ°”일 λ¬Έμ„œμ—μ„œλŠ” λͺ¨λ°”일 μž₯μΉ˜μ— λͺ¨λΈμ„ λ°°ν¬ν•˜κΈ° μœ„ν•œ 포괄적인 지침을 μ œκ³΅ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νš¨μœ¨μ„±κ³Ό 응닡성을 보μž₯ν•©λ‹ˆλ‹€.

  • λ§ˆμŠ€ν„° μ„œλ²„ μΈ‘ 배포: ν™•μž₯ κ°€λŠ₯ν•˜κ³  효율적인 λͺ¨λΈ μ œκ³΅μ„ μœ„ν•œ 단계별 νŠœν† λ¦¬μ–Όμ„ μ œκ³΅ν•˜λŠ” TorchServeλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„ 츑에 λͺ¨λΈμ„ λ°°ν¬ν•˜λŠ” 방법을 μ•Œμ•„λ³΄μ„Έμš”.

  • C++ 배포 κ΅¬ν˜„: TorchScript λͺ¨λΈμ„ C++둜 λ‘œλ“œν•˜λŠ” νŠœν† λ¦¬μ–Όμ„ 톡해 TorchScript λͺ¨λΈμ„ C++ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— ν†΅ν•©ν•˜μ—¬ ν–₯μƒλœ μ„±λŠ₯κ³Ό λ‹€μ–‘ν•œ κΈ°λŠ₯을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μš”μ•½

이 κ°€μ΄λ“œμ—μ„œλŠ” Ultralytics YOLOv8 λͺ¨λΈμ„ TorchScript ν˜•μ‹μœΌλ‘œ λ‚΄λ³΄λ‚΄λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚΄νŽ΄λ΄€μŠ΅λ‹ˆλ‹€. 제곡된 지침에 따라 YOLOv8 λͺ¨λΈμ„ μ„±λŠ₯에 맞게 μ΅œμ ν™”ν•˜κ³  λ‹€μ–‘ν•œ ν”Œλž«νΌκ³Ό ν™˜κ²½μ— 배포할 수 μžˆλŠ” μœ μ—°μ„±μ„ 확보할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©λ²•μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ TorchScript의 곡식 λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

λ˜ν•œ Ultralytics YOLOv8 톡합에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œκ³  μ‹Άλ‹€λ©΄ 톡합 κ°€μ΄λ“œ νŽ˜μ΄μ§€λ₯Ό λ°©λ¬Έν•˜μ„Έμš”. μœ μš©ν•œ λ¦¬μ†ŒμŠ€μ™€ μΈμ‚¬μ΄νŠΈλ₯Ό 많이 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.



생성 2024-03-01, μ—…λ°μ΄νŠΈ 2024-03-03
μž‘μ„±μž: glenn-jocher (1), abirami-vina (2)

λŒ“κΈ€