рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрдиреБрдорд╛рди рдХреЗ рд╕рд╛рде YOLO рдореЙрдбрд▓

рднрд╛рдЧрдирд╛ YOLO рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдореЙрдбрд▓ рдХреЛ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред PythonрдХреЗ рдПрд╕ threading рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рдХрдИ рдзрд╛рдЧреЗ рд╕рдорд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ YOLO рдЗрди рдзрд╛рдЧреЛрдВ рдореЗрдВ рдореЙрдбрд▓, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреГрд╖реНрда рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдореЗрдВ рдЖрдкрдХрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ YOLO рдореЙрдбрд▓ рдЕрдиреБрдорд╛рдиред

рд╕рдордЭ Python рд╕реВрддреНрд░рдг

Python рдереНрд░реЗрдбреНрд╕ рд╕рдорд╛рдВрддрд░рддрд╛ рдХрд╛ рдПрдХ рд░реВрдк рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рдСрдкрд░реЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд┐рд░ рднреА PythonрдЧреНрд▓реЛрдмрд▓ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рд▓реЙрдХ (GIL) рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдереНрд░реЗрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ Python рдПрдХ рдмрд╛рд░ рдореЗрдВ рдмрд╛рдЗрдЯрдХреЛрдбред

рд╕рд┐рдВрдЧрд▓ рдмрдирд╛рдо рдорд▓реНрдЯреА-рдереНрд░реЗрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реАрдорд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдзрд╛рдЧреЗ рдЕрднреА рднреА рд╕рдорд╡рд░реНрддреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ I/O-рдмрд╛рдЙрдВрдб рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдпрд╛ GIL рдХреЛ рдЫреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЬреИрд╕реЗ рдХрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП YOLOрдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдпред

рд╕рд╛рдЭрд╛ рдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЦрддрд░рд╛

рддрддреНрдХрд╛рд▓ рдПрдХ 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 рдпрд╛ рд╕рдорд░реНрдкрд┐рдд рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдп рдХрддрд╛рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ред



2023-11-12 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-05-03
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (2)

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ