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

배포λ₯Ό μœ„ν•΄ YOLOv8 μ—μ„œ TF GraphDef 으둜 λ‚΄λ³΄λ‚΄λŠ” 방법

YOLOv8 κ³Ό 같은 μ΅œμ²¨λ‹¨ 컴퓨터 λΉ„μ „ λͺ¨λΈμ„ λ‹€μ–‘ν•œ ν™˜κ²½μ— 배포할 λ•Œ ν˜Έν™˜μ„± λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. Google의 TensorFlow GraphDef λ˜λŠ” TF GraphDef μ—μ„œλŠ” ν”Œλž«νΌμ— 독립적인 μ§λ ¬ν™”λœ λͺ¨λΈ ν‘œν˜„μ„ μ œκ³΅ν•¨μœΌλ‘œμ¨ 해결책을 μ œμ‹œν•©λ‹ˆλ‹€. TF GraphDef λͺ¨λΈ ν˜•μ‹μ„ μ‚¬μš©ν•˜λ©΄ λͺ¨λ°”일 λ””λ°”μ΄μŠ€λ‚˜ 특수 ν•˜λ“œμ›¨μ–΄μ™€ 같이 전체 TensorFlow μ—μ½”μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•  수 μ—†λŠ” ν™˜κ²½μ—μ„œ YOLOv8 λͺ¨λΈμ„ 배포할 수 μžˆμŠ΅λ‹ˆλ‹€.

이 κ°€μ΄λ“œμ—μ„œλŠ” λͺ¨λΈμ„ λ‚΄λ³΄λ‚΄λŠ” 방법을 λ‹¨κ³„λ³„λ‘œ μ•ˆλ‚΄ν•©λ‹ˆλ‹€. Ultralytics YOLOv8 λͺ¨λΈμ„ TF GraphDef λͺ¨λΈ ν˜•μ‹μœΌλ‘œ λ‚΄λ³΄λ‚΄λŠ” 방법을 λ‹¨κ³„λ³„λ‘œ μ•ˆλ‚΄ν•©λ‹ˆλ‹€. λͺ¨λΈμ„ λ³€ν™˜ν•˜λ©΄ 배포λ₯Ό κ°„μ†Œν™”ν•˜κ³  YOLOv8 의 컴퓨터 λΉ„μ „ κΈ°λŠ₯을 더 λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό ν”Œλž«νΌμ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

TensorFlow GraphDef

TF GraphDef 으둜 내보내야 ν•˜λŠ” 이유 ?

TF GraphDef 은 Googleμ—μ„œ κ°œλ°œν•œ TensorFlow μ—μ½”μ‹œμŠ€ν…œμ˜ κ°•λ ₯ν•œ ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€. YOLOv8 κ³Ό 같은 λͺ¨λΈμ„ μ΅œμ ν™”ν•˜κ³  λ°°ν¬ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. TF GraphDef 으둜 내보내면 λͺ¨λΈμ„ μ—°κ΅¬μš©μ—μ„œ μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 전체 TensorFlow ν”„λ ˆμž„μ›Œν¬κ°€ μ—†λŠ” ν™˜κ²½μ—μ„œλ„ λͺ¨λΈμ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

GraphDef ν˜•μ‹μ€ λͺ¨λΈμ„ μ§λ ¬ν™”λœ 계산 κ·Έλž˜ν”„λ‘œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 이λ₯Ό 톡해 μƒμˆ˜ 폴딩, μ–‘μžν™”, κ·Έλž˜ν”„ λ³€ν™˜κ³Ό 같은 λ‹€μ–‘ν•œ μ΅œμ ν™” 기법을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ΅œμ ν™”λ₯Ό 톡해 효율적인 μ‹€ν–‰, λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ κ°μ†Œ, μΆ”λ‘  속도 ν–₯상을 보μž₯ν•©λ‹ˆλ‹€.

GraphDef λͺ¨λΈμ€ GPU, TPU, AI μΉ©κ³Ό 같은 ν•˜λ“œμ›¨μ–΄ 가속기λ₯Ό μ‚¬μš©ν•  수 μžˆμ–΄ YOLOv8 μΆ”λ‘  νŒŒμ΄ν”„λΌμΈμ˜ μ„±λŠ₯을 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. TF GraphDef ν˜•μ‹μ€ λͺ¨λΈκ³Ό ν•΄λ‹Ή 쒅속성이 ν¬ν•¨λœ λ…λ¦½ν˜• νŒ¨ν‚€μ§€λ₯Ό μƒμ„±ν•˜μ—¬ λ‹€μ–‘ν•œ μ‹œμŠ€ν…œμœΌλ‘œμ˜ 배포 및 톡합을 κ°„μ†Œν™”ν•©λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯ TF GraphDef λͺ¨λΈ

TF GraphDef λŠ” λͺ¨λΈ 배포 및 μ΅œμ ν™”λ₯Ό κ°„μ†Œν™”ν•  수 μžˆλŠ” μ°¨λ³„ν™”λœ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

μ£Όμš” νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • λͺ¨λΈ 직렬화: TF GraphDef 은 TensorFlow λͺ¨λΈμ„ ν”Œλž«νΌμ— 독립적인 ν˜•μ‹μœΌλ‘œ μ§λ ¬ν™”ν•˜μ—¬ μ €μž₯ν•˜λŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. 이 μ§λ ¬ν™”λœ ν‘œν˜„μ„ μ‚¬μš©ν•˜λ©΄ 원본 Python μ½”λ“œλ² μ΄μŠ€ 없이도 λͺ¨λΈμ„ λ‘œλ“œν•˜κ³  μ‹€ν–‰ν•  수 μžˆμœΌλ―€λ‘œ 배포가 더 μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

  • κ·Έλž˜ν”„ μ΅œμ ν™”: TF GraphDef 을 μ‚¬μš©ν•˜λ©΄ 계산 κ·Έλž˜ν”„λ₯Ό μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ΅œμ ν™”λ₯Ό 톡해 μ‹€ν–‰ 흐름을 κ°„μ†Œν™”ν•˜κ³ , 쀑볡을 쀄이며, νŠΉμ • ν•˜λ“œμ›¨μ–΄μ— 맞게 μž‘μ—…μ„ μ‘°μ •ν•˜μ—¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • 배포 μœ μ—°μ„±: GraphDef ν˜•μ‹μœΌλ‘œ 내보낸 λͺ¨λΈμ€ λ¦¬μ†ŒμŠ€κ°€ μ œν•œλœ λ””λ°”μ΄μŠ€, μ›Ή λΈŒλΌμš°μ €, 특수 ν•˜λ“œμ›¨μ–΄κ°€ μ„€μΉ˜λœ μ‹œμŠ€ν…œ λ“± λ‹€μ–‘ν•œ ν™˜κ²½μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ TensorFlow λͺ¨λΈμ„ 더 ν­λ„“κ²Œ 배포할 수 μžˆλŠ” κ°€λŠ₯성이 μ—΄λ¦½λ‹ˆλ‹€.

  • ν”„λ‘œλ•μ…˜ 포컀슀: GraphDef λŠ” ν”„λ‘œλ•μ…˜ 배포λ₯Ό μœ„ν•΄ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 효율적인 μ‹€ν–‰, 직렬화 κΈ°λŠ₯ 및 μ‹€μ œ μ‚¬μš© 사둀에 λΆ€ν•©ν•˜λŠ” μ΅œμ ν™”λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

배포 μ˜΅μ…˜ TF GraphDef

YOLOv8 λͺ¨λΈμ„ TF GraphDef 둜 λ‚΄λ³΄λ‚΄λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚΄νŽ΄λ³΄κΈ° 전에 이 ν˜•μ‹μ΄ μ‚¬μš©λ˜λŠ” λͺ‡ 가지 일반적인 배포 상황을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ‹€μ–‘ν•œ ν”Œλž«νΌμ—μ„œ TF GraphDef 으둜 효율적으둜 λ°°ν¬ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • TensorFlow μ„œλΉ™: 이 ν”„λ ˆμž„μ›Œν¬λŠ” ν”„λ‘œλ•μ…˜ ν™˜κ²½μ— TensorFlow λͺ¨λΈμ„ λ°°ν¬ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. TensorFlow Serving은 λͺ¨λΈ 관리, 버전 관리 및 λŒ€κ·œλͺ¨μ˜ 효율적인 λͺ¨λΈ μ œκ³΅μ„ μœ„ν•œ 인프라λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. GraphDef 기반 λͺ¨λΈμ„ ν”„λ‘œλ•μ…˜ μ›Ή μ„œλΉ„μŠ€ λ˜λŠ” API에 μ›ν™œν•˜κ²Œ 톡합할 수 μžˆλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

  • λͺ¨λ°”일 및 μž„λ² λ””λ“œ λ””λ°”μ΄μŠ€: TensorFlow Lite와 같은 도ꡬλ₯Ό μ‚¬μš©ν•˜λ©΄ TF GraphDef λͺ¨λΈμ„ 슀마트폰, νƒœλΈ”λ¦Ώ 및 λ‹€μ–‘ν•œ μž„λ² λ””λ“œ μž₯μΉ˜μ— μ΅œμ ν™”λœ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ λͺ¨λΈμ„ λ‘œμ»¬μ—μ„œ μ‹€ν–‰λ˜λŠ” μ˜¨λ””λ°”μ΄μŠ€ 좔둠에 μ‚¬μš©ν•  수 있으며, μ’…μ’… μ„±λŠ₯ ν–₯상과 μ˜€ν”„λΌμΈ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

  • μ›Ή λΈŒλΌμš°μ €: TensorFlow.jsλ₯Ό μ‚¬μš©ν•˜λ©΄ μ›Ή λΈŒλΌμš°μ € λ‚΄μ—μ„œ TF GraphDef λͺ¨λΈμ„ 직접 배포할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” JavaScriptλ₯Ό 톡해 YOLOv8 의 κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ μ‹€ν–‰λ˜λŠ” μ‹€μ‹œκ°„ 객체 탐지 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μœ„ν•œ 길을 μ—΄μ–΄μ€λ‹ˆλ‹€.

  • 특수 ν•˜λ“œμ›¨μ–΄: TF GraphDef ν”Œλž«νΌμ— ꡬ애받지 μ•ŠλŠ” νŠΉμ„± 덕뢄에 가속기 및 TPU(Tensor 처리 μž₯치)와 같은 λ§žμΆ€ν˜• ν•˜λ“œμ›¨μ–΄λ₯Ό νƒ€κ²ŸνŒ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μž₯μΉ˜λŠ” μ—°μ‚° 집약적인 λͺ¨λΈμ— μ„±λŠ₯ 이점을 μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

YOLOv8 λͺ¨λΈλ‘œ 내보내기 TF GraphDef

YOLOv8 개체 감지 λͺ¨λΈμ„ λ‹€μ–‘ν•œ μ‹œμŠ€ν…œκ³Ό ν˜Έν™˜λ˜λŠ” TF GraphDef ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ μ—¬λŸ¬ ν”Œλž«νΌμ—μ„œ μ„±λŠ₯을 κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ„€μΉ˜

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

μ„€μΉ˜

# 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 TF GraphDef format
model.export(format="pb")  # creates 'yolov8n.pb'

# Load the exported TF GraphDef model
tf_graphdef_model = YOLO("yolov8n.pb")

# Run inference
results = tf_graphdef_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to TF GraphDef format
yolo export model=yolov8n.pt format=pb  # creates 'yolov8n.pb'

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

μ§€μ›λ˜λŠ” 내보내기 μ˜΅μ…˜μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ 배포 μ˜΅μ…˜μ— λŒ€ν•œUltralytics λ¬Έμ„œ νŽ˜μ΄μ§€λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

내보내기 배포 YOLOv8 TF GraphDef λͺ¨λΈ

YOLOv8 λͺ¨λΈμ„ TF GraphDef ν˜•μ‹μœΌλ‘œ 내보낸 ν›„μ—λŠ” λ‹€μŒ λ‹¨κ³„λŠ” λ°°ν¬μž…λ‹ˆλ‹€. TF GraphDef λͺ¨λΈμ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•œ 기본적이고 ꢌμž₯λ˜λŠ” 첫 번째 λ‹¨κ³„λŠ” μ•žμ„œ μ‚¬μš© μ½”λ“œ 쑰각에 ν‘œμ‹œλœ λŒ€λ‘œ YOLO("model.pb") λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ TF GraphDef λͺ¨λΈ 배포에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ λ‹€μŒ λ¦¬μ†ŒμŠ€λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”:

  • TensorFlow μ„œλΉ™: ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ λ¨Έμ‹  λŸ¬λ‹ λͺ¨λΈμ„ 효율적으둜 λ°°ν¬ν•˜κ³  μ„œλΉ„μŠ€ν•˜λŠ” 방법을 μ•Œλ €μ£ΌλŠ” TensorFlow μ„œλΉ™μ— λŒ€ν•œ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

  • TensorFlow Lite: 이 νŽ˜μ΄μ§€μ—μ„œλŠ” TensorFlow Liteλ₯Ό μ‚¬μš©ν•˜μ—¬ λ¨Έμ‹  λŸ¬λ‹ λͺ¨λΈμ„ μ˜¨λ””λ°”μ΄μŠ€ 좔둠에 μ΅œμ ν™”λœ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 방법을 μ„€λͺ…ν•©λ‹ˆλ‹€.

  • TensorFlow.js: TensorFlow λ˜λŠ” Keras λͺ¨λΈμ„ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ TensorFlow.js ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 방법을 μ•Œλ €μ£ΌλŠ” λͺ¨λΈ λ³€ν™˜ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

μš”μ•½

이 κ°€μ΄λ“œμ—μ„œλŠ” Ultralytics YOLOv8 λͺ¨λΈμ„ TF GraphDef ν˜•μ‹μœΌλ‘œ λ‚΄λ³΄λ‚΄λŠ” 방법에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ΅œμ ν™”λœ YOLOv8 λͺ¨λΈμ„ λ‹€μ–‘ν•œ ν™˜κ²½μ— μœ μ—°ν•˜κ²Œ 배포할 수 μžˆμŠ΅λ‹ˆλ‹€.

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

Ultralytics YOLOv8 을 λ‹€λ₯Έ ν”Œλž«νΌ 및 ν”„λ ˆμž„μ›Œν¬μ™€ ν†΅ν•©ν•˜λŠ” 방법에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ 톡합 κ°€μ΄λ“œ νŽ˜μ΄μ§€λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. ν”„λ‘œμ νŠΈμ—μ„œ YOLOv8 을 μ΅œλŒ€ν•œ ν™œμš©ν•˜λŠ” 데 도움이 λ˜λŠ” ν›Œλ₯­ν•œ λ¦¬μ†ŒμŠ€μ™€ μΈμ‚¬μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€.



생성 2024-03-22, μ—…λ°μ΄νŠΈ 2024-05-18
μž‘μ„±μž: glenn-jocher (1), RizwanMunawar (1), Burhan-Q (1), abirami-vina (1)

λŒ“κΈ€