YOLOv8 λΉ λ₯Έ λ°°ν¬λ₯Ό μν΄ TorchScript μΌλ‘ λͺ¨λΈ λ΄λ³΄λ΄κΈ°
μλ² λλ μμ€ν , μΉ λΈλΌμ°μ λλ Python μ§μμ΄ μ νλ νλ«νΌ λ± λ€μν νκ²½μ μ»΄ν¨ν° λΉμ λͺ¨λΈμ λ°°ν¬νλ €λ©΄ μ μ°νκ³ μ΄μ κ°λ₯ν μ루μ μ΄ νμν©λλ€. TorchScript μ μ΄μμ±κ³Ό μ 체 Python νλ μμν¬λ₯Ό μ¬μ©ν μ μλ νκ²½μμ λͺ¨λΈμ μ€ννλ κΈ°λ₯μ μ€μ μ λκ³ μμ΅λλ€. λ°λΌμ λ€μν λλ°μ΄μ€λ νλ«νΌμ μ»΄ν¨ν° λΉμ κΈ°λ₯μ λ°°ν¬ν΄μΌ νλ μλ리μ€μ μ΄μμ μ λλ€.
Torchscript μΌλ‘ λ΄λ³΄λ΄μ Ultralytics YOLOv8 λͺ¨λΈμ μ§λ ¬ννμ¬ νλ«νΌ κ° νΈνμ±μ λμ΄κ³ λ°°ν¬λ₯Ό κ°μνν μ μμ΅λλ€. μ΄ κ°μ΄λμμλ YOLOv8 λͺ¨λΈμ TorchScript νμμΌλ‘ λ΄λ³΄λ΄μ λ λ€μν μ ν리μΌμ΄μ μμ μ½κ² μ¬μ©ν μ μλλ‘ νλ λ°©λ²μ λ³΄μ¬ λλ¦¬κ² μ΅λλ€.
TorchScript μΌλ‘ λ΄λ³΄λ΄μΌ νλ μ΄μ λ 무μμΈκ°μ?
PyTorch μ κ°λ°μκ° κ°λ°ν TorchScript μ λ€μν νλ«νΌμμ PyTorch λͺ¨λΈμ μ΅μ ννκ³ λ°°ν¬ν μ μλ κ°λ ₯ν λꡬμ λλ€. YOLOv8 λͺ¨λΈλ‘ λ΄λ³΄λ΄κΈ° TorchScript λ‘ λ΄λ³΄λ΄λ κ²μ μ°κ΅¬μμ μ€μ μ ν리μΌμ΄μ μΌλ‘ μ ννλ λ° λ§€μ° μ€μν©λλ€. TorchScript PyTorch νλ μμν¬μ μΌλΆμΈ PyTorch λͺ¨λΈμ Python μ μ§μνμ§ μλ νκ²½μμλ λͺ¨λΈμ μ¬μ©ν μ μκ² ν¨μΌλ‘μ¨ μ΄λ¬ν μ νμ λ³΄λ€ μννκ² ν΄μ€λλ€.
μ΄ νλ‘μΈμ€μλ μΆμ κ³Ό μ€ν¬λ¦½ν μ΄λΌλ λ κ°μ§ κΈ°μ μ΄ ν¬ν¨λ©λλ€. μΆμ μ λͺ¨λΈ μ€ν μ€ μμ μ κΈ°λ‘νκ³ , μ€ν¬λ¦½ν μ Python μ νμ μ§ν©μ μ¬μ©νμ¬ λͺ¨λΈμ μ μν μ μμ΅λλ€. μ΄λ¬ν κΈ°μ μ ν΅ν΄ YOLOv8 κ³Ό κ°μ λͺ¨λΈμ μΌλ°μ μΈ Python νκ²½ λ°μμλ κ³μ μλν μ μμ΅λλ€.
TorchScript μ°μ°μ μ΅ν© λ° λ©λͺ¨λ¦¬ μ¬μ©λ κ°μ κ³Ό κ°μ κΈ°μ μ ν΅ν΄ λͺ¨λΈμ μ΅μ ννμ¬ ν¨μ¨μ μΈ μ€νμ 보μ₯ν μλ μμ΅λλ€. TorchScript μΌλ‘ λ΄λ³΄λ΄λ λ λ€λ₯Έ μ₯μ μ λ€μν νλμ¨μ΄ νλ«νΌμμ λͺ¨λΈ μ€νμ κ°μνν μ μλ€λ μ μ λλ€. μ΄λ C++ νκ²½, μλ² λλ μμ€ν μ ν΅ν©νκ±°λ μΉ λλ λͺ¨λ°μΌ μ ν리μΌμ΄μ μ λ°°ν¬ν μ μλ λ 립ν, νλ‘λμ μ€λΉ μνμ PyTorch λͺ¨λΈμ μμ±ν©λλ€.
TorchScript λͺ¨λΈμ μ£Όμ κΈ°λ₯
TorchScriptλ PyTorch μμ½μμ€ν μ ν΅μ¬ λΆλΆμΌλ‘, λ₯λ¬λ λͺ¨λΈμ μ΅μ ννκ³ λ°°ν¬νκΈ° μν κ°λ ₯ν κΈ°λ₯μ μ 곡ν©λλ€.
λ€μμ 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 μΌλ‘ λ΄λ³΄λ΄λ©΄ λ€λ₯Έ κ³³μμ λ μ½κ² μ¬μ©ν μ μκ³ λ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μ€νν μ μμ΅λλ€. μ΄ κΈ°λ₯μ μ€μ μ ν리μΌμ΄μ μμ λ₯λ¬λ λͺ¨λΈμ λ³΄λ€ ν¨κ³Όμ μΌλ‘ μ¬μ©νλ €λ λͺ¨λ μ¬μ©μμκ² μ μ©ν©λλ€.
μ€μΉ
νμν ν¨ν€μ§λ₯Ό μ€μΉνλ €λ©΄ μ€νν©λλ€:
μ€μΉ κ³Όμ κ³Ό κ΄λ ¨λ μμΈν μ§μΉ¨κ³Ό λͺ¨λ² μ¬λ‘λ 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')
λ΄λ³΄λ΄κΈ° νλ‘μΈμ€μ λν μμΈν λ΄μ©μ λ΄λ³΄λ΄κΈ° κ΄λ ¨ λ¬Έμ νμ΄μ§(Ultralytics )λ₯Ό μ°Έμ‘°νμΈμ.
λ΄λ³΄λΈ YOLOv8 TorchScript λͺ¨λΈ λ°°ν¬
Ultralytics YOLOv8 λͺ¨λΈμ TorchScript νμμΌλ‘ μ±κ³΅μ μΌλ‘ λ΄λ³΄λΈ νμλ μ΄μ λ°°ν¬ν μ μμ΅λλ€. TorchScript λͺ¨λΈμ μ€ννκΈ° μν κΈ°λ³Έμ μ΄κ³ κΆμ₯λλ 첫 λ²μ§Έ λ¨κ³λ μ΄μ μ¬μ© μ½λ μ‘°κ°μ μ€λͺ λ λλ‘ YOLO("λͺ¨λΈ.torchscript") λ°©λ²μ νμ©νλ κ²μ λλ€. κ·Έλ¬λ λ€μν λ€λ₯Έ μ€μ μμ TorchScript λͺ¨λΈμ λ°°ν¬νλ λ°©λ²μ λν μμΈν μ§μΉ¨μ λ€μ 리μμ€λ₯Ό μ°Έμ‘°νμΈμ:
-
λͺ¨λ°μΌ λ°°ν¬ μ΄ν΄λ³΄κΈ°: PyTorch λͺ¨λ°μΌ λ¬Έμμμλ λͺ¨λ°μΌ μ₯μΉμ λͺ¨λΈμ λ°°ν¬νκΈ° μν ν¬κ΄μ μΈ μ§μΉ¨μ μ 곡νμ¬ μ ν리μΌμ΄μ μ ν¨μ¨μ±κ³Ό μλ΅μ±μ 보μ₯ν©λλ€.
-
λ§μ€ν° μλ² μΈ‘ λ°°ν¬: νμ₯ κ°λ₯νκ³ ν¨μ¨μ μΈ λͺ¨λΈ μ 곡μ μν λ¨κ³λ³ νν 리μΌμ μ 곡νλ TorchServeλ₯Ό μ¬μ©νμ¬ μλ² μΈ‘μ λͺ¨λΈμ λ°°ν¬νλ λ°©λ²μ μμ보μΈμ.
-
C++ λ°°ν¬ κ΅¬ν: TorchScript λͺ¨λΈμ C++λ‘ λ‘λνλ νν 리μΌμ ν΅ν΄ TorchScript λͺ¨λΈμ C++ μ ν리μΌμ΄μ μ ν΅ν©νμ¬ ν₯μλ μ±λ₯κ³Ό λ€μν κΈ°λ₯μ νμ©ν μ μμ΅λλ€.
μμ½
μ΄ κ°μ΄λμμλ Ultralytics YOLOv8 λͺ¨λΈμ TorchScript νμμΌλ‘ λ΄λ³΄λ΄λ νλ‘μΈμ€λ₯Ό μ΄ν΄λ΄€μ΅λλ€. μ 곡λ μ§μΉ¨μ λ°λΌ YOLOv8 λͺ¨λΈμ μ±λ₯μ λ§κ² μ΅μ ννκ³ λ€μν νλ«νΌκ³Ό νκ²½μ λ°°ν¬ν μ μλ μ μ°μ±μ ν보ν μ μμ΅λλ€.
μ¬μ©λ²μ λν μμΈν λ΄μ©μ TorchScriptμ 곡μ λ¬Έμλ₯Ό μ°Έμ‘°νμΈμ.
λν Ultralytics YOLOv8 ν΅ν©μ λν΄ λ μμΈν μκ³ μΆλ€λ©΄ ν΅ν© κ°μ΄λ νμ΄μ§λ₯Ό λ°©λ¬ΈνμΈμ. μ μ©ν 리μμ€μ μΈμ¬μ΄νΈλ₯Ό λ§μ΄ μ°Ύμ μ μμ΅λλ€.