Ultralytics YOLO27: Join the waitlist.
Get Started

Python Usage#

This guide shows how to integrate Ultralytics YOLO into your Python projects for object detection, instance segmentation, semantic segmentation, depth estimation, classification, pose estimation, and oriented bounding box detection. You'll learn how to load and use pretrained models, train new models, and run predictions on images. The Python interface lets you add YOLO to a project with only a few lines of code.



Watch: Mastering Ultralytics YOLO: Python

For example, users can load a model, train it, evaluate its performance on a validation set, and even export it to ONNX format with just a few lines of code.

Python
from ultralytics import YOLO

# Create a new YOLO model from scratch
model = YOLO("yolo26n.yaml")

# Load a pretrained YOLO model (recommended for training)
model = YOLO("yolo26n.pt")

# Train the model using the 'coco8.yaml' dataset for 3 epochs
results = model.train(data="coco8.yaml", epochs=3)

# Evaluate the model's performance on the validation set
results = model.val()

# Perform object detection on an image using the model
results = model("https://ultralytics.com/images/bus.jpg")

# Export the model to ONNX format
success = model.export(format="onnx")

Train#

Train mode is used for training a YOLO model on a custom dataset. In this mode, the model is trained using the specified dataset and hyperparameters. The training process involves optimizing the model's parameters so that it can accurately predict the classes and locations of objects in an image.

Train
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # pass any model type
results = model.train(epochs=5)

Train Examples

Val#

Val mode is used for validating a YOLO model after it has been trained. In this mode, the model is evaluated on a validation set to measure its accuracy and generalization performance. This mode can be used to tune the hyperparameters of the model to improve its performance.

Val
from ultralytics import YOLO

# Load a YOLO model
model = YOLO("yolo26n.yaml")

# Train the model
model.train(data="coco8.yaml", epochs=5)

# Validate on the training dataset's validation split
model.val()

Val Examples

Predict#

Predict mode is used for making predictions using a trained YOLO model on new images or videos. In this mode, the model is loaded from a checkpoint file, and the user can provide images or videos to perform inference. The model predicts the classes and locations of objects in the input images or videos.

Predict
import cv2
from PIL import Image

from ultralytics import YOLO

model = YOLO("model.pt")
# accepts all formats - image/dir/Path/URL/video/PIL/ndarray. 0 for webcam
results = model.predict(source="folder", show=True)  # Display preds. Accepts all YOLO predict arguments

# from PIL
im1 = Image.open("bus.jpg")
results = model.predict(source=im1, save=True)  # save plotted images

# from ndarray
im2 = cv2.imread("bus.jpg")
results = model.predict(source=im2, save=True, save_txt=True)  # save predictions as labels

# from list of PIL/ndarray
results = model.predict(source=[im1, im2])

Predict Examples

Export#

Export mode is used for exporting a YOLO model to a format that can be used for deployment. In this mode, the model is converted to a format that can be used by other software applications or hardware devices. This mode is useful when deploying the model to production environments.

Export

Export an official YOLO model to ONNX with dynamic batch size and image size.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)

Export Examples

Track#

Track mode is used for tracking objects in real time using a YOLO model. In this mode, the model is loaded from a checkpoint file, and the user can provide a live video stream to perform real-time object tracking. This mode is useful for applications such as surveillance systems or self-driving cars.

Track
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official detection model
model = YOLO("yolo26n-seg.pt")  # load an official segmentation model
model = YOLO("path/to/best.pt")  # load a custom model

# Track with the model
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True)
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")

Track Examples

Benchmark#

Benchmark mode is used to profile the speed and accuracy of various export formats for YOLO. The benchmarks provide information on the size of the exported format, its task metric (mAP50-95 for detection, segmentation, pose and OBB, mIoU for semantic segmentation, δ1 for depth estimation, or accuracy_top1 for classification), and the inference time in milliseconds per image across various export formats like ONNX, OpenVINO, TensorRT and others. This information can help users choose the optimal export format for their specific use case based on their requirements for speed and accuracy.

Benchmark

Benchmark an official YOLO model across all export formats.

from ultralytics.utils.benchmarks import benchmark

# Benchmark
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)

Benchmark Examples

Using Trainers#

The YOLO model class serves as a high-level wrapper for Trainer classes. Each YOLO task has its own trainer, which inherits from BaseTrainer. This architecture allows for greater flexibility and customization in your machine learning workflows.

Detection Trainer Example
from ultralytics.models.yolo.detect import DetectionPredictor, DetectionTrainer, DetectionValidator

overrides = {"model": "yolo26n.pt", "data": "coco8.yaml", "epochs": 3}

# Trainer
trainer = DetectionTrainer(overrides=overrides)
trainer.train()
trained_model = trainer.best  # path to best.pt

# Validator
validator = DetectionValidator(args={"data": "coco8.yaml"})
validator(model=trained_model)

# Predictor
predictor = DetectionPredictor(overrides={"model": trained_model})
predictor(source="https://ultralytics.com/images/bus.jpg")

# Resume an interrupted training run from its last checkpoint
trainer = DetectionTrainer(overrides={"resume": "path/to/last.pt"})
trainer.train()

You can customize Trainers to support custom tasks or explore research and development ideas. The modular design of Ultralytics YOLO allows you to adapt the framework to your specific needs, whether you're working on a novel computer vision task or fine-tuning existing models for better performance.

Customization tutorials

FAQ#

  • Integrating Ultralytics YOLO into your Python projects is simple. You can load a pretrained model or train a new model from scratch. Here's how to get started:

    from ultralytics import YOLO
    
    # Load a pretrained YOLO model
    model = YOLO("yolo26n.pt")
    
    # Perform object detection on an image
    results = model("https://ultralytics.com/images/bus.jpg")
    
    # Visualize the results
    for result in results:
        result.show()

    See more detailed examples in our Predict Mode section.

  • Ultralytics YOLO provides six modes for different machine learning workflows:

    • Train: Train a model using custom datasets.
    • Val: Validate model performance on a validation set.
    • Predict: Make predictions on new images or video streams.
    • Export: Export models to various formats like ONNX and TensorRT.
    • Track: Real-time object tracking in video streams.
    • Benchmark: Benchmark model performance across different configurations.

    Each mode covers a different stage of model development and deployment.

  • To train a custom YOLO model, specify your dataset and any other hyperparameters. Here's a quick example:

    from ultralytics import YOLO
    
    # Load the YOLO model
    model = YOLO("yolo26n.yaml")
    
    # Train the model with custom dataset
    model.train(data="path/to/your/dataset.yaml", epochs=10)
  • Exporting YOLO models in a format suitable for deployment is straightforward with the export function. For example, you can export a model to ONNX format:

    from ultralytics import YOLO
    
    # Load the YOLO model
    model = YOLO("yolo26n.pt")
    
    # Export the model to ONNX format
    model.export(format="onnx")

    For various export options, refer to the Export Mode documentation.

  • Yes. After training, pass a different dataset YAML to val() to evaluate the model on it:

    from ultralytics import YOLO
    
    # Load a YOLO model
    model = YOLO("yolo26n.yaml")
    
    # Train the model
    model.train(data="coco8.yaml", epochs=5)
    
    # Validate the model on a different dataset
    model.val(data="path/to/separate/data.yaml")

    Check the Val Mode page for detailed examples and usage.

Comments31

Ask a question, share your results, or help someone else.

  1. kindaichinisankindaichinisanGitHub

    How do I detect object using onnx model exported from pt model (yolo v9). Any sample code? Is it required to do pre-processing and post-processing?

    1. Glenn JocherGlenn JocherUltralytics

      @kindaichinisan you can use ONNX models directly with Ultralytics for inference - no manual pre/post-processing needed:

      from ultralytics import YOLO
      
      # Load the ONNX model
      model = YOLO("your_model.onnx")
      
      # Run inference
      results = model("image.jpg")

      The Ultralytics framework handles all pre-processing and post-processing automatically when using ONNX models, just like with PT models.

  2. UltralyticsAssistantUltralyticsAssistantGitHubUltralytics

    👋 Hello, thank you for your interest in Ultralytics 🚀! We recommend checking out the Docs for new users, particularly the Python Usage guide you’ve linked, which contains detailed instructions on integrating YOLO for object detection, segmentation, and classification.

    If this is a 🐛 Bug Report, please provide a minimum reproducible example so we can assist you better.

    For custom training or ❓ questions, please include as much detail as possible, such as your Python script, dataset examples, training logs, or errors, and ensure you’re following our Tips for Best Training Results.

    Looking to connect with the Ultralytics community? Join us:

    • For real-time chat, visit Discord 🎧
    • For focused discussions, try Discourse
    • For general discussions and tips, explore our Subreddit

    Upgrade

    Ensure you’re running the latest version of the ultralytics package with all its requirements. Upgrade in a Python>=3.8 environment with PyTorch>=1.8 by running:

    pip install -U ultralytics

    Environments

    YOLO works seamlessly in any of the following verified environments (preloaded with dependencies like CUDA, Python, and PyTorch):

    Status

    Ultralytics CI

    If the badge above is green, our Ultralytics CI tests are passing. These tests are run daily and verify correct operation of all YOLO Modes and Tasks across macOS, Windows, and Ubuntu.

    This is an automated response to assist you quickly. An Ultralytics engineer will review your question and provide additional support shortly 😊

    1. dnnxldnnxlGitHub

      @dnnxl yes, YOLO11 supports augmentations during training, which are defined in the dataset configuration YAML file. You can customize augmentations such as flipping, scaling, and cropping to enhance model performance. For more details, refer to the Train Mode documentation. Let us know if you have further questions!

      Thanks for your answer, it works for object detection purposes right?

    2. Glenn JocherGlenn JocherUltralytics

      Yes, augmentations in YOLO11 are fully supported for object detection tasks and can be applied during training to improve model generalization. Let us know if you need guidance on configuring them!

  3. Rain020Rain020GitHub

    Operating system: Win11, Ultralyicts: 8.3.27, YOLO11. I have developed a desktop application for PC-side processing. I need to release related GPU memory resources after closing the page or completing tasks. However, I haven’t found an effective way to release the memory to prevent GPU memory leaks. Looking forward to your response.

    1. Glenn JocherGlenn JocherUltralytics

      @Rain020 to release GPU memory after completing tasks with YOLO11, you can try using PyTorch's torch.cuda.empty_cache() function to clear unused cached memory. Additionally, ensure that all model and variable references are deleted and use del to remove them before calling the cache clearing function. If issues persist, consider checking for any persistent references that might still occupy memory. For more details, refer to the PyTorch documentation.

    2. Rain020Rain020GitHub

      Thank you for your response. I need to conduct some experiments to verify whether our solution is effective.

  4. Sheepy1977Sheepy1977GitHub

    There are some translation-mistakes in Chinese "Train" should be "训练",not “火车” "Val" should be "校验",not "瓦尔" "Track“ should be "跟踪“,not "轨道"

    1. Paula DerrengerPaula DerrengerUltralytics

      @Sheepy1977 thank you for pointing out the translation errors. We appreciate your attention to detail. We will update the translations as follows:

      • "Train" will be corrected to "训练"
      • "Val" will be corrected to "校验"
      • "Track" will be corrected to "跟踪"

      Your feedback helps us improve the documentation for all users. If you notice any other issues, please let us know.

  5. yirenyixinyirenyixinGitHub

    Hello, when I was training with the dataset, I found that all the label names I gave were changed to class_X after training. The following is the configuration of my ymal file: path: E:\BaiduNetdiskDownload\Citypersons train: images/train val: images/train nc: 1 name: 0: person

    After training, use the model to recognize others. The label information displays class_0

    1. Glenn JocherGlenn JocherUltralytics

      Hello! It seems like the class names are defaulting to class_X because the model might not be recognizing the class names specified in your YAML file. This can sometimes happen if there's an issue with the formatting of the YAML file or how the classes are being read during training.

      To ensure your class names are recognized correctly, please make sure your YAML file is formatted correctly. Here's a corrected version of your YAML configuration:

      path: E:\BaiduNetdiskDownload\Citypersons
      train: images/train
      val: images/train
      nc: 1
      names:
        - person

      Notice the change from name: to names: and ensuring that the class names are listed with a dash -. This should help the model recognize and use the correct class names during training and inference.

      If the issue persists after this adjustment, please double-check the path and file names for typos and ensure that the dataset is being loaded correctly during training. If you need further assistance, feel free to ask! 😊

  6. flyingship19820207flyingship19820207GitHub

    The code is simple, for it is the same with your sample:

    from ultralytics import YOLO

    Create a new YOLO model from scratch

    model = YOLO('yolov8n.yaml')

    Load a pretrained YOLO model (recommended for training)

    model = YOLO('yolov8n.pt')

    Train the model using the 'coco128.yaml' dataset for 3 epochs

    results = model.train(data='coco128.yaml', epochs=3)

    Evaluate the model's performance on the validation set

    results = model.val()

    Perform object detection on an image using the model

    results = model('https://ultralytics.com/images/bus.jpg')

    Export the model to ONNX format

    success = model.export(format='onnx')

    Below is the error details: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/ultralytics/engine/trainer.py", line 133, in init self.data = check_det_dataset(self.args.data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/ultralytics/data/utils.py", line 271, in check_det_dataset if zipfile.is_zipfile(file) or is_tarfile(file): ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/tarfile.py", line 2791, in is_tarfile t = open(name) ^^^^^^^^^^ File "/usr/local/lib/python3.11/tarfile.py", line 1804, in open return func(name, "r", fileobj, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/tarfile.py", line 1933, in xzopen t = cls.taropen(name, mode, fileobj, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/tarfile.py", line 1854, in taropen return cls(name, mode, fileobj, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/tarfile.py", line 1714, in init self.firstmember = self.next() ^^^^^^^^^^^ File "/usr/local/lib/python3.11/tarfile.py", line 2631, in next raise e File "/usr/local/lib/python3.11/tarfile.py", line 2604, in next tarinfo = self.tarinfo.fromtarfile(self) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/tarfile.py", line 1292, in fromtarfile buf = tarfile.fileobj.read(BLOCKSIZE) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/lzma.py", line 207, in read return self._buffer.read(size) ^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/_compression.py", line 68, in readinto data = self.read(len(byte_view)) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/_compression.py", line 96, in read if self._decompressor.needs_input: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: '_lzma.LZMADecompressor' object has no attribute 'needs_input'

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/root/chenyong/1_yolo/1_test/yolo_test.py", line 10, in results = model.train(data='coco128.yaml', epochs=3) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/ultralytics/engine/model.py", line 635, in train self.trainer = (trainer or self._smart_load("trainer"))(overrides=args, _callbacks=self.callbacks) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/ultralytics/engine/trainer.py", line 137, in init raise RuntimeError(emojis(f"Dataset '{clean_url(self.args.data)}' error ❌ {e}")) from e RuntimeError: Dataset 'coco128.yaml' error ❌ '_lzma.LZMADecompressor' object has no attribute 'needs_input'

    1. Paula DerrengerPaula DerrengerUltralytics

      It seems like you're encountering an issue related to the LZMA compression library, specifically with the _lzma.LZMADecompressor object. This could be due to a variety of reasons, including compatibility issues with the Python version you're using or the specific dataset file format.

      As a first step, I recommend ensuring that your Python environment is up-to-date and that you're using a compatible version of the Ultralytics YOLO package. Additionally, verifying the integrity and format of the coco128.yaml dataset file might help, as the error suggests there could be an issue with reading the dataset file.

      If you're still facing this issue after checking these points, could you please provide more details about your environment, such as the Python and Ultralytics YOLO versions? This information will help us better understand the problem and assist you more effectively. 🛠️

      In the meantime, here's a quick check you can perform to ensure your dataset file is accessible and correctly formatted:

      import yaml
      
      # Attempt to load the YAML file to check its integrity
      with open('coco128.yaml', 'r') as file:
          dataset = yaml.safe_load(file)
          print(dataset)

      This code snippet will try to load your coco128.yaml file and print its contents, which can help identify if there are any issues with the file itself.

    2. flyingship19820207flyingship19820207GitHub

      Thanks for your reply. I copy coco128.yaml from /usr/local/lib/python3.11/site-packages/ultralytics/cfg/datasets/coco128.yaml to current work dir.And run the code you provided: import yaml

      Attempt to load the YAML file to check its integrity

      with open('coco128.yaml', 'r') as file: dataset = yaml.safe_load(file) print(dataset) The result is as below: {'path': '../datasets/coco128', 'train': 'images/train2017', 'val': 'images/train2017', 'test': None, 'names': {0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 4: 'airplane', 5: 'bus', 6: 'train', 7: 'truck', 8: 'boat', 9: 'traffic light', 10: 'fire hydrant', 11: 'stop sign', 12: 'parking meter', 13: 'bench', 14: 'bird', 15: 'cat', 16: 'dog', 17: 'horse', 18: 'sheep', 19: 'cow', 20: 'elephant', 21: 'bear', 22: 'zebra', 23: 'giraffe', 24: 'backpack', 25: 'umbrella', 26: 'handbag', 27: 'tie', 28: 'suitcase', 29: 'frisbee', 30: 'skis', 31: 'snowboard', 32: 'sports ball', 33: 'kite', 34: 'baseball bat', 35: 'baseball glove', 36: 'skateboard', 37: 'surfboard', 38: 'tennis racket', 39: 'bottle', 40: 'wine glass', 41: 'cup', 42: 'fork', 43: 'knife', 44: 'spoon', 45: 'bowl', 46: 'banana', 47: 'apple', 48: 'sandwich', 49: 'orange', 50: 'broccoli', 51: 'carrot', 52: 'hot dog', 53: 'pizza', 54: 'donut', 55: 'cake', 56: 'chair', 57: 'couch', 58: 'potted plant', 59: 'bed', 60: 'dining table', 61: 'toilet', 62: 'tv', 63: 'laptop', 64: 'mouse', 65: 'remote', 66: 'keyboard', 67: 'cell phone', 68: 'microwave', 69: 'oven', 70: 'toaster', 71: 'sink', 72: 'refrigerator', 73: 'book', 74: 'clock', 75: 'vase', 76: 'scissors', 77: 'teddy bear', 78: 'hair drier', 79: 'toothbrush'}, 'download': 'https://ultralytics.com/assets/coco128.zip'}

    3. Paula DerrengerPaula DerrengerUltralytics(edited)

      @flyingship19820207 hey there! Thanks for reaching out with your environment details. It looks like you're using Python 3.11.7 and YOLOv8 version 8.1.24, which should be compatible.

      Given the error you encountered, it seems like there might be an issue with the LZMA library in Python 3.11.7 or how the dataset is being processed. As a quick workaround, you might want to try running your code in a virtual environment with an earlier version of Python (e.g., Python 3.8 or 3.9) to see if the issue persists. This can help isolate whether it's a Python version-specific issue.

      Here's a quick guide on setting up a virtual environment:

      # Create a virtual environment with Python 3.8 (needs to be installed already)
      python3.8 -m venv yolov8-env
      
      # Activate the virtual environment
      source yolov8-env/bin/activate
      
      # Install Ultralytics YOLO
      pip install ultralytics

      After setting up and activating your virtual environment, try running your YOLOv8 code again. If the problem is resolved, it might be worth reporting this as a compatibility issue with Python 3.11.7 on the Ultralytics GitHub page for further investigation. 🕵️‍♂️

      Let me know how it goes!

    4. flyingship19820207flyingship19820207GitHub

      I have tried python3.10 which system-provided by ubuntu 22.4,it works well.It seems the error is caused by many python version in one system.

    5. Paula DerrengerPaula DerrengerUltralytics

      Hey there! 🎉 It's great to hear that switching to Python 3.10 resolved the issue for you. It seems like the problem was indeed related to having multiple Python versions in your system. This can sometimes lead to conflicts, especially with dependencies and libraries that are sensitive to the Python version.

      For future reference, it's always a good idea to use virtual environments for each project. This way, you can manage dependencies more effectively and avoid version conflicts. Here's a quick way to set up a virtual environment for your projects:

      python3 -m venv myenv
      source myenv/bin/activate

      And then, you can install the specific packages you need within this isolated environment.

      If you have any more questions or run into further issues, feel free to reach out. Happy coding with YOLOv8! 🚀

  7. flyingship19820207flyingship19820207GitHub

    there is an error while trying to train yolo8 :RuntimeError: Dataset 'coco8.yaml' error ❌ '_lzma.LZMADecompressor' object has no attribute 'needs_input'.I use python3.11 and the system is ubuntu.How to fix it.

    1. Paula DerrengerPaula DerrengerUltralytics

      Hey there! 👋 It seems like you're encountering an issue related to the _lzma module while training YOLOv8 with Python 3.11 on Ubuntu. This could be due to a compatibility issue with the LZMA library in Python 3.11.

      A quick workaround could be to try downgrading to Python 3.8 or 3.9, as these versions are known to work well with YOLOv8 and its dependencies. You can manage multiple Python versions using a tool like pyenv.

      Here's how you can install and use pyenv to switch to Python 3.8:

      # Install pyenv
      curl https://pyenv.run | bash
      
      # Add pyenv to path (you might want to add this to your .bashrc or .zshrc)
      export PATH="$HOME/.pyenv/bin:$PATH"
      eval "$(pyenv init --path)"
      eval "$(pyenv virtualenv-init -)"
      
      # Install Python 3.8
      pyenv install 3.8.10
      
      # Set the local (current directory) Python version to 3.8.10
      pyenv local 3.8.10
      
      # Verify the Python version
      python --version

      After switching to Python 3.8, try running your training command again. If the issue persists or you have any more questions, feel free to reach out! 😊

    2. flyingship19820207flyingship19820207GitHub

      I comment these code below: #if zipfile.is_zipfile(file) or is_tarfile(file):

      new_dir = safe_download(file, dir=DATASETS_DIR, unzip=True, delete=False)

      file = find_dataset_yaml(DATASETS_DIR / new_dir)

      extract_dir, autodownload = file.parent, False

      in file /usr/local/lib/python3.11/site-packages/ultralytics/data/utils.py,then run again, it seems works.

    3. Paula DerrengerPaula DerrengerUltralytics(edited)

      Hey there! 👋 It looks like you've found a workaround by commenting out some code related to dataset extraction in utils.py. While this might work temporarily, it's generally not recommended to modify library code directly, as it could lead to unexpected behavior or issues with future updates.

      The error you encountered seems related to the _lzma module in Python 3.11. This could be a compatibility issue with the Python version and the LZMA library. A safer approach might be to ensure all your dependencies are correctly installed and compatible with Python 3.11. You could try reinstalling the lzma module or using a Python environment with a version known to work well with YOLOv8, such as Python 3.8 or 3.9.

      If you're set on using Python 3.11, you might also want to check if there's an open issue on the Ultralytics YOLOv8 GitHub repository regarding this, or consider opening a new issue to bring this to the developers' attention. They might offer a more permanent fix or advice on handling this compatibility issue.

      In the meantime, if you need to keep working, using a virtual environment with a different Python version could be a quick fix:

      # Create a virtual environment with Python 3.8
      python3.8 -m venv yolov8-env
      
      # Activate the virtual environment
      source yolov8-env/bin/activate
      
      # Install YOLOv8 and other dependencies
      pip install ultralytics

      Hope this helps, and happy coding! 😊