YOLO λͺ¨λΈμ μ¬μ©ν μ€λ λ μμ μΆλ‘
λ©ν° μ€λ λ νκ²½μμ YOLO λͺ¨λΈμ μ€ννλ €λ©΄ μ€λ λ μμ μ 보μ₯νκΈ° μν΄ μ μ€ν κ³ λ €κ° νμν©λλ€. Python's threading
λͺ¨λμ μ¬μ©νλ©΄ μ¬λ¬ μ€λ λλ₯Ό λμμ μ€νν μ μμ§λ§ μ΄λ¬ν μ€λ λμμ YOLO λͺ¨λΈμ μ¬μ©ν λλ μ£Όμν΄μΌ ν μ€μν μμ λ¬Έμ κ° μμ΅λλ€. μ΄ νμ΄μ§μμλ μ€λ λμ μμ ν YOLO λͺ¨λΈ μΆλ‘ μ λ§λλ λ°©λ²μ μλ΄ν©λλ€.
Python μ€λ λ© μ΄ν΄
Python μ€λ λλ νλ‘κ·Έλ¨μμ ν λ²μ μ¬λ¬ μμ μ μ€νν μ μλ λ³λ ¬ μ²λ¦¬μ ν ννμ λλ€. νμ§λ§ Python μ κΈλ‘λ² μΈν°νλ¦¬ν° μ κΈ(GIL)μ ν λ²μ νλμ μ€λ λλ§ Python λ°μ΄νΈμ½λλ₯Ό μ€νν μ μμμ μλ―Έν©λλ€.
μ΄λ μ ν μ¬νμ²λΌ λ€λ¦¬μ§λ§, μ€λ λλ νΉν I/O λ°μΈλ© μ°μ°μ΄λ YOLO μ κΈ°λ³Έ C λΌμ΄λΈλ¬λ¦¬μμ μννλ κ²κ³Ό κ°μ΄ GILμ ν΄μ νλ μ°μ°μ μ¬μ©ν λ λμμ±μ μ 곡ν μ μμ΅λλ€.
곡μ λͺ¨λΈ μΈμ€ν΄μ€μ μνμ±
YOLO λͺ¨λΈμ μ€λ λ μΈλΆμμ μΈμ€ν΄μ€ννκ³ μ΄ μΈμ€ν΄μ€λ₯Ό μ¬λ¬ μ€λ λμμ 곡μ νλ©΄ λμ μ‘μΈμ€λ‘ μΈν΄ λͺ¨λΈμ λ΄λΆ μνκ° μΌκ΄μ± μμ΄ μμ λλ κ²½μ μ‘°κ±΄μ΄ λ°μν μ μμ΅λλ€. μ΄λ λͺ¨λΈ λλ κ·Έ κ΅¬μ± μμκ° μ€λ λμ μμ νμ§ μλλ‘ μ€κ³λμ§ μμ μνλ₯Ό 보μ ν λ νΉν λ¬Έμ κ° λ©λλ€.
μ€λ λ μμ νμ§ μμ μμ : λ¨μΌ λͺ¨λΈ μΈμ€ν΄μ€
Python μμ μ€λ λλ₯Ό μ¬μ©ν λλ λμμ± λ¬Έμ λ₯Ό μΌμΌν¬ μ μλ ν¨ν΄μ μΈμνλ κ²μ΄ μ€μν©λλ€. λ¨μΌ YOLO λͺ¨λΈ μΈμ€ν΄μ€λ₯Ό μ¬λ¬ μ€λ λμμ 곡μ νλ κ²μ νΌν΄μΌ ν©λλ€.
# Unsafe: Sharing a single model instance across threads
from ultralytics import YOLO
from threading import Thread
# Instantiate the model outside the thread
shared_model = YOLO("yolov8n.pt")
def predict(image_path):
"""Predicts objects in an image using a preloaded YOLO model, take path string to image as argument."""
results = shared_model.predict(image_path)
# Process results
# Starting threads that share the same model instance
Thread(target=predict, args=("image1.jpg",)).start()
Thread(target=predict, args=("image2.jpg",)).start()
μμ μμμ shared_model
κ° μ¬λ¬ μ€λ λμμ μ¬μ©λλ©΄ λ€μκ³Ό κ°μ μ΄μ λ‘ μμΈ‘ν μ μλ κ²°κ³Όκ° λ°μν μ μμ΅λλ€. predict
λ₯Ό μ¬λ¬ μ€λ λμμ λμμ μ€νν μ μμ΅λλ€.
μ€λ λ μμ νμ§ μμ μμ : μ¬λ¬ λͺ¨λΈ μΈμ€ν΄μ€
λ§μ°¬κ°μ§λ‘ YOLO λͺ¨λΈ μΈμ€ν΄μ€κ° μ¬λ¬ κ° μλ μμ νμ§ μμ ν¨ν΄λ μμ΅λλ€:
# Unsafe: Sharing multiple model instances across threads can still lead to issues
from ultralytics import YOLO
from threading import Thread
# Instantiate multiple models outside the thread
shared_model_1 = YOLO("yolov8n_1.pt")
shared_model_2 = YOLO("yolov8n_2.pt")
def predict(model, image_path):
"""Runs prediction on an image using a specified YOLO model, returning the results."""
results = model.predict(image_path)
# Process results
# Starting threads with individual model instances
Thread(target=predict, args=(shared_model_1, "image1.jpg")).start()
Thread(target=predict, args=(shared_model_2, "image2.jpg")).start()
λ κ°μ κ°λ³ λͺ¨λΈ μΈμ€ν΄μ€κ° μλλΌλ λμμ± λ¬Έμ μ μνμ μ¬μ ν μ‘΄μ¬ν©λλ€. λ΄λΆ ꡬνμμ YOLO
λ μ€λ λ μμ νμ§ μμΌλ―λ‘ λ³λμ μΈμ€ν΄μ€λ₯Ό μ¬μ©νλ©΄ νΉν μ΄λ¬ν μΈμ€ν΄μ€κ° μ€λ λ λ‘μ»¬μ΄ μλ κΈ°λ³Έ 리μμ€λ μνλ₯Ό 곡μ νλ κ²½μ° κ²½μ 쑰건μ λ°©μ§νμ§ λͺ»ν μ μμ΅λλ€.
μ€λ λ μμ μΆλ‘
μ€λ λ μμ μΆλ‘ μ μννλ €λ©΄ κ° μ€λ λ λ΄μ λ³λμ YOLO λͺ¨λΈμ μΈμ€ν΄μ€νν΄μΌ ν©λλ€. μ΄λ κ² νλ©΄ κ° μ€λ λκ° κ³ μ μ 격리λ λͺ¨λΈ μΈμ€ν΄μ€λ₯Ό κ°κ² λμ΄ κ²½μ 쑰건μ μνμ μ κ±°ν μ μμ΅λλ€.
μ€λ λ μμ μμ
μμ ν λ³λ ¬ μΆλ‘ μ μν΄ κ° μ€λ λ λ΄μμ YOLO λͺ¨λΈμ μΈμ€ν΄μ€ννλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€:
# Safe: Instantiating a single model inside each thread
from ultralytics import YOLO
from threading import Thread
def thread_safe_predict(image_path):
"""Predict on an image using a new YOLO model instance in a thread-safe manner; takes image path as input."""
local_model = YOLO("yolov8n.pt")
results = local_model.predict(image_path)
# Process results
# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("image1.jpg",)).start()
Thread(target=thread_safe_predict, args=("image2.jpg",)).start()
μ΄ μμ μμλ κ° μ€λ λκ° κ³ μ ν YOLO
μΈμ€ν΄μ€. μ΄λ κ² νλ©΄ μ΄λ€ μ€λ λκ° λ€λ₯Έ μ€λ λμ λͺ¨λΈ μνλ₯Ό κ°μνμ§ λͺ»νλ―λ‘ κ° μ€λ λκ° λ€λ₯Έ μ€λ λμ μκΈ°μΉ μμ μνΈ μμ© μμ΄ μμ νκ² μΆλ‘ μ μνν μ μμ΅λλ€.
κ²°λ‘
YOLO λͺ¨λΈκ³Ό Python threading
λ₯Ό μ¬μ©νλ©΄ μ€λ λ μμ μ 보μ₯νκΈ° μν΄ νμ λͺ¨λΈμ μ¬μ©ν μ€λ λ λ΄μμ λͺ¨λΈμ μΈμ€ν΄μ€νν©λλ€. μ΄λ κ² νλ©΄ κ²½μ 쑰건μ νΌνκ³ μΆλ‘ μμ
μ μμ μ μΌλ‘ μ€νν μ μμ΅λλ€.
λ³΄λ€ κ³ κΈ μλ리μ€μ λ©ν°μ€λ λ μΆλ‘ μ±λ₯μ λμ± μ΅μ ννλ €λ©΄ λ€μκ³Ό κ°μ΄ νλ‘μΈμ€ κΈ°λ° λ³λ ¬ μ²λ¦¬λ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. multiprocessing
λλ μ μ© μμ
μ νλ‘μΈμ€κ° μλ μμ
λκΈ°μ΄μ νμ©νμΈμ.