Ultralytics YOLO27: Join the waitlist.
Get Started

Comprehensive Guide to Ultralytics YOLOv5

Ultralytics YOLOv5, the fifth iteration of the "You Only Look Once" object detection model, is designed to deliver fast, accurate results in real time. YOLOv5 remains widely used, but its successors Ultralytics YOLOv8, YOLO11, and YOLO26 offer the latest advancements, and YOLO26 is the recommended model for new projects.

YOLOv5 is built on PyTorch, a popular deep learning framework, and is known for its versatility, ease of use, and performance. This documentation covers installation, the model architecture, common use cases, and a series of detailed tutorials to help you apply YOLOv5 to your computer vision projects.

Explore and Learn#

These tutorials guide you through different aspects of YOLOv5:

Supported Environments#

Ultralytics provides a range of ready-to-use environments, each pre-installed with essential dependencies such as CUDA, cuDNN, Python, and PyTorch, so you can start projects quickly. You can also manage your models and datasets using Ultralytics Platform.

Project Status#

YOLOv5 CI

This badge indicates that all YOLOv5 GitHub Actions Continuous Integration (CI) tests are successfully passing. These CI tests rigorously check the functionality and performance of YOLOv5 across various key aspects: training, validation, inference, export, and benchmarks. They ensure consistent and reliable operation on macOS, Windows, and Ubuntu, with tests conducted every 24 hours and upon each new commit.


Ultralytics GitHub Ultralytics LinkedIn Ultralytics Twitter Ultralytics YouTube Ultralytics TikTok Ultralytics BiliBili Ultralytics Discord

Connect and Contribute#

Join the Ultralytics community on GitHub, connect with professionals on LinkedIn, share your results on Twitter, and find educational resources on YouTube. Follow us on TikTok and BiliBili for more content.

Interested in contributing? We welcome contributions of all forms, from code improvements and bug reports to documentation updates. Check out our contributing guidelines for more information.

FAQ#

  • Ultralytics YOLOv5 is known for fast, high-accuracy object detection. Built on PyTorch, it is versatile and user-friendly, making it suitable for various computer vision projects. Key features include real-time inference, support for inference techniques like Test-Time Augmentation (TTA) and Model Ensembling, and compatibility with export formats such as TFLite, ONNX, CoreML, and TensorRT.

  • Training a custom YOLOv5 model on your dataset involves a few key steps. First, prepare your dataset in the required format, annotated with labels. Then, configure the YOLOv5 training parameters and start the training process using the train.py script.

  • Ultralytics YOLOv5 is often chosen over models like R-CNN for its speed and accuracy in real-time object detection. As a one-stage detector, YOLOv5 processes the entire image in a single pass, making it significantly faster than the region-based approach of R-CNN, which involves multiple passes. Its support for many export formats and extensive documentation also make it a good choice for both beginners and professionals.

  • Optimizing YOLOv5 model performance involves tuning various hyperparameters and incorporating techniques like data augmentation and transfer learning. Ultralytics provides guides on hyperparameter evolution and pruning/sparsity to improve model efficiency, and the Tips for Best Training Results guide collects practical training advice.

  • Ultralytics YOLOv5 supports a variety of environments, including free GPU notebooks on Gradient, Google Colab, and Kaggle, as well as major cloud platforms like Google Cloud, Amazon AWS, and Azure. Docker images are also available for convenient setup. For a detailed guide on setting up these environments, check our Supported Environments section, which includes step-by-step instructions for each platform.

Comments33

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

  1. sustaintipsdevelopersustaintipsdeveloperGitHub

    Hello, I wanted to calculate the accuracy of the YOLOv5. I'm doing a physical testing. Can you recommend me, what is the formula that can I used for this physical testing? Is the formula will be like this? Accuracy = Sum of Confidence Score/Total Test Cases × 100

    1. Glenn JocherGlenn JocherUltralytics

      @sustaintipsdeveloper the formula you mentioned, Accuracy = Sum of Confidence Score / Total Test Cases × 100, is not typically used to calculate accuracy in object detection. Instead, metrics like Mean Average Precision (mAP) and Intersection over Union (IoU) are commonly used. You can refer to the YOLOv5 documentation for guidance on evaluating model performance using these metrics. Let me know if you need further clarification!

      1
    2. Glenn JocherGlenn JocherUltralytics

      The confidence level in YOLO models is the score that represents the model's certainty that a detected object belongs to a particular class. It is not calculated manually but is an output of the model, ranging from 0 to 1. You can adjust the confidence threshold during inference to filter predictions. For more details on confidence scores, refer to the YOLOv5 documentation. Let me know if you need further clarification!

      1
  2. Vidhul-SVidhul-SGitHub

    Hello i am new to this but her i go, i am supposed to create a streamlined way to run a yolov5 model on a jetson nano since it runs runs ubuntu 18.04 and torch limitations i decided to go with virtual environment But i am still limited to python 3.6.9 because the last compiled torch available 1.10.0 only works on 3.6.9 or lower So i had to use an older version of yolov5 namely Yolov5 v6.1 on the nano Now i am training my models on a much better system and only inferencing on the nano My issue starts here First i Tried to train a model on yolov5 v7.0 (latest one) and tried to inference in on nano and obviously it didn't run so i tried to checkout v6.1 on my system but i am un able to get it running due to the dependencies I tried everything i can think off ranging from using different python version and environments to modifying the requirements.txt to forcefully chance the versions ,I couldn't get a working project which can train models can anyone provide me a working set of versions of all these packages to install . Or link to a project with yolov5 v6.1

    Note:

    The machine i am training models on is a really capable one so no issue in that front I am not a programmer and still learning so pardon me for anything wrong above English is not my first language so if anything is confusing firstly i am sorry feel free to ask for any clarification

    1. Vidhul-SVidhul-SGitHub

      let me know if there is any other way i can get yolov5 running on jetson nano with pytorch 1.10.0 python3.6.9

    2. Glenn JocherGlenn JocherUltralytics

      @Vidhul-S running YOLOv5 on a Jetson Nano with PyTorch 1.10.0 and Python 3.6.9 can be challenging due to compatibility issues. Given your constraints, using YOLOv5 v6.1 is a reasonable approach. To streamline your workflow, ensure you match the dependencies of YOLOv5 v6.1 on both your training system and the Jetson Nano. You can find the specific versions of dependencies in the requirements.txt file of the YOLOv5 v6.1 repository. If you encounter issues, consider using Docker to create a consistent environment across different systems. For further guidance, refer to the YOLOv5 documentation.

  3. dalmeidalorrainedalmeidalorraineGitHub

    Does YOLO v5 support multi label classification? If yes, where can I find some examples and documentation?

    1. Paula DerrengerPaula DerrengerUltralytics

      Yes, YOLOv5 does support multi-label classification. You can find examples and detailed documentation on how to train YOLOv5 on your custom dataset, which can include multi-label scenarios, in our comprehensive guide. Please refer to the "Train Custom Data" section of the YOLOv5 documentation for step-by-step instructions and tips to optimize your training process. This will help you effectively handle multiple labels per image in your projects. Happy modeling! 🚀

  4. roihanmjdroihanmjdGitHub

    i have a problem like this : (base) D:\yolov5update\yolov5>python detect.py Traceback (most recent call last): File "D:\yolov5update\yolov5\detect.py", line 38, in import torch File "C:\Users\ASUS\AppData\Roaming\Python\Python311\site-packages\torch_init_.py", line 141, in raise err OSError: [WinError 126] The specified module could not be found. Error loading "C:\Users\ASUS\AppData\Roaming\Python\Python311\site-packages\torch\lib\shm.dll" or one of its dependencies.

    1. Paula DerrengerPaula DerrengerUltralytics

      It looks like there's an issue with loading the PyTorch library due to a missing shm.dll file. This can happen if the PyTorch installation is incomplete or corrupted. Here are a few steps to resolve this:

      1. Reinstall PyTorch: Ensure you have the correct version of PyTorch installed for your Python version. You can reinstall it using pip:

        pip install torch --force-reinstall
      2. Check System Path: Ensure that the path to your Python environment is correctly set in your system's PATH variable.

      3. Dependencies: Sometimes, missing system dependencies can cause this error. You might want to ensure all necessary system dependencies for PyTorch are installed.

      If the issue persists after trying these steps, consider reinstalling Python and PyTorch in a new virtual environment. This can sometimes resolve hidden conflicts or corrupted installations.

    2. dalmeidalorrainedalmeidalorraineGitHub

      Does YOLO v5 support multi label classification? If yes, where can I find some examples and documentation?

    3. Paula DerrengerPaula DerrengerUltralytics

      @dalmeidalorraine yes, YOLOv5 supports multi-label classification! You can train a model to detect multiple labels per detection by adjusting your dataset annotations to reflect multiple classes per bounding box. For examples and more detailed instructions on setting this up, please refer to the "Train Custom Data" section of our comprehensive YOLOv5 documentation. This section will guide you through the process of training YOLOv5 on your custom dataset, which can include multi-label scenarios. Happy modeling! 🚀

  5. ShashankMPatilShashankMPatilGitHub

    Why i am not able to open webcam

    import cv2 import numpy as np import torch

    my best.pt is in content folder

    model = torch.hub.load('ultralytics/yolov5', 'custom', path='/content/best.pt', force_reload=True)

    cap =cv2.VideoCapture(2) while cap.isOpened(): ret,frame=cap.read()

    results=model(frame)

    cv2.imshow("YOLO", np.squeeze(results.render()))

    even if i enter below code , webcam doesn't open !python detect.py --source 0

    if cv2.waitKey(10) & 0xFF == ord('q'): break

    cap.release() cv2.destroyAllWindows()

    1. Glenn JocherGlenn JocherUltralytics

      It looks like you're having trouble with opening the webcam using OpenCV and YOLOv5. Here are a few things you might want to check:

      1. Webcam Index: Ensure that the webcam index you are using (2 in your case) is correct. Typically, the default webcam is at index 0. If you have multiple cameras, you might need to try different indices like 0 or 1.

      2. Camera Permissions: Make sure that your system has the necessary permissions to access the webcam.

      3. Code Check: Ensure that your code for opening the webcam and reading frames is correct. Here's a simplified version to test webcam functionality:

        import cv2
        
        cap = cv2.VideoCapture(0)  # Try changing this index to 0 or 1
        if not cap.isOpened():
            print("Cannot open camera")
            exit()
        while True:
            ret, frame = cap.read()
            if not ret:
                print("Can't receive frame (stream end?). Exiting ...")
                break
            cv2.imshow('frame', frame)
            if cv2.waitKey(1) == ord('q'):
                break
        cap.release()
        cv2.destroyAllWindows()
      4. Driver Issues: Sometimes, driver issues can prevent access to the webcam. Ensure your device drivers are up to date.

      If you're still facing issues, it might be helpful to provide more details or check the camera with other software to isolate the problem.

  6. ghitabnrghitabnrGitHub

    hello please i trained the yolov5 in my custom dataset that contains two classes but when i do the test the two classes show up with very close colors ( red and pink ) i want to the change the color of the boxes of detection? how please ?

    1. Glenn JocherGlenn JocherUltralytics

      @ghitabnr hi there! 👋 Changing the color of detection boxes in YOLOv5 involves modifying the plot_one_box() function typically found in the utils/plots.py file. You'll have the flexibility to assign different colors to different classes.

      Here's a quick example of how you can modify it:

      1. Locate the plot_one_box() function.

      2. Inside this function, you'll find a line that sets the color. Modify this line to choose your colors based on class IDs. For instance:

        color = colors[int(cls)]  # default color selection

        Change to:

        colors = [[0,255,0], [255,0,0]]  # Define colors for each class, e.g., green and blue
        color = colors[int(cls)]

      Remember to define enough colors for each class you have to distinguish them clearly.

      Hope this helps! Let me know if there's anything else you'd like to tweak! 🚀

  7. Sequential-circuitsSequential-circuitsGitHub

    Trying it in an nvidia jetson nano with jetpack 4.6 installed and getting AttributeError: partially initialized module 'cv2' has no attribute '_registerMatType' (most likely due to a circular import)

    1. Paula DerrengerPaula DerrengerUltralytics

      @Sequential-circuits hey there! It looks like you're facing an AttributeError related to OpenCV on your NVIDIA Jetson Nano. This issue might indeed be tied to a circular import or an incompatible OpenCV version. 😕

      Here's a quick suggestion:

      1. Ensure OpenCV is correctly installed and updated. Sometimes, reinstalling can help resolve strange errors. You can reinstall OpenCV using:
        pip install opencv-python-headless --force-reinstall
        Given the NVIDIA platform, ensure all dependencies and JetPack SDK components are compatible and up-to-date.

      If the issue persists, consider checking the OpenCV installation specific to Jetson devices or exploring the NVIDIA forums for any JetPack-related quirks. The Jetson community is quite active and may have encountered similar issues.

      Wishing you smoother sailing ahead! 🚀 If you have more questions or updates, feel free to reach out.

  8. nickguimnickguimGitHub

    Is there any tutorials on utilizing an object tracker such as deepsort or sort with an older model like yolov5? Everytime I attempt to use a github I have found something breaks

    1. Paula DerrengerPaula DerrengerUltralytics

      Hi there! 👋 It seems like you're looking to use an object tracker like deepsort or sort with YOLOv5 and encountering some issues. While specific tutorials on integrating these trackers with older models like YOLOv5 might not be readily available on our documentation, I suggest checking out the YOLOv5 GitHub repo or community discussions for any shared solutions or advice from other users who might have attempted something similar.

      Integration usually involves passing YOLOv5 detection outputs as inputs to the tracker. Here's a very basic snippet to give you an idea of how you might start:

      # Assuming 'detections' is a list of detections from YOLOv5, 
      # and 'tracker' is an instance of your tracking algorithm (e.g., deepsort)
      
      for detection in detections:
          bbox, confidence, class_id = detection
          # Convert bbox from x1y1x2y2 to xywh format expected by some trackers
          xywh_bbox = convert_to_xywh(bbox) 
          # Now, you can update your tracker per frame
          tracker.update(xywh_bbox, confidence, class_id)

      Unfortunately, integrating third-party trackers can sometimes lead to compatibility issues due to updates or differences in expected inputs/outputs. If specifics break, consider checking:

      1. The version compatibility between YOLOv5 and the tracking library.
      2. The format of the detection outputs and expected tracker inputs.
      3. Any recent changes or updates in the tracker's source code that might affect integration.

      For troubleshooting, I'd recommend revisiting the tracker documentation or seeking help directly from the tracker's GitHub page. Sometimes, the community might have already provided solutions for similar issues. 🛠️

      Let us know if you encounter any specific errors or need further guidance! Our community is always here to help. Good luck with your project!

  9. mature-1111mature-1111GitHub

    Yes,I do it. I have converted from json format with Polygon labels to YOLOv7 instance segmentation. The solution to this problem is to  use hyp.scratch-high.yaml but set mixup to 0.0  

    天空 @.***

     

    ------------------ 原始邮件 ------------------ 发件人: "Glenn @.>; 发送时间: 2024年4月18日(星期四) 上午6:56 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [ultralytics/ultralytics] yolov5/ (Discussion #8575)

    Hi there 👋! It seems like you're encountering an issue with dimension mismatch during the mixup augmentation process in YOLOv9's instance segmentation. This error typically occurs when the arrays you're trying to concatenate don't have the same shape — in this case, a discrepancy between the number of dimensions.

    Without seeing the exact code or data structure you're working with, it's a bit difficult to provide a precise solution. However, one common approach is to ensure that both arrays being concatenated (segments and segments2) have the same dimensionality before performing the operation. For instance, if segments is a 1D array and segments2 is 3D, you might need to reshape or pad segments to match the dimensionality of segments2.

    Here's a rough example of how to ensure they have the same number of dimensions: import numpy as np # Assuming segments is 1D and segments2 is 3D # Reshape or pad segments to make its dimensions compatible with segments2 segments = np.expand_dims(segments, axis=(1, 2)) # Adjust this based on your specific shapes # Now that both have the same number of dimensions, concatenate should work segments_combined = np.concatenate((segments, segments2), 0)

    Remember, the key here is to adjust the dimensions so they're compatible. The exact method (expand_dims, reshape, pad, etc.) will depend on your data.

    If you continue to face issues, could you provide more details or a snippet of the code where this error occurs? That way, we can offer more targeted advice. Happy coding! 🚀

    — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

    1. Glenn JocherGlenn JocherUltralytics

      Hey there! 😊 It's great to hear you've successfully transitioned from JSON format with Polygon labels to YOLOv7 instance segmentation using the hyp.scratch-high.yaml and tweaking mixup to 0.0. It sounds like you encountered a similar dimensionality issue during augmentation in YOLOv9 as discussed previously.

      For dimension mismatch errors, ensuring that both arrays to be concatenated have matching shapes is indeed crucial. The previous suggestion to harmonize dimensions using operations like np.expand_dims or reshape before concatenation is a solid approach 👍.

      Your initiative to share your solution and actively participate in this discussion enriches the community. If you hit any other snags or have further insights, feel free to share. Happy coding! 🚀

  10. mature-1111mature-1111GitHub

    Traceback (most recent call last): File "D:/zyqi/yolov9-main/segment/train.py", line 646, in main(opt) File "D:/zyqi/yolov9-main/segment/train.py", line 542, in main train(opt.hyp, opt, device, callbacks) File "D:/zyqi/yolov9-main/segment/train.py", line 270, in train for i, (imgs, targets, paths, _, masks) in pbar: # batch ------------------------------------------------------ File "D:\anaconda3\envs\yolov9\lib\site-packages\tqdm\std.py", line 1181, in iter for obj in iterable: File "D:\zyqi\yolov9-main\utils\dataloaders.py", line 170, in iter yield next(self.iterator) File "D:\anaconda3\envs\yolov9\lib\site-packages\torch\utils\data\dataloader.py", line 628, in next data = self._next_data() File "D:\anaconda3\envs\yolov9\lib\site-packages\torch\utils\data\dataloader.py", line 671, in _next_data data = self._dataset_fetcher.fetch(index) # may raise StopIteration File "D:\anaconda3\envs\yolov9\lib\site-packages\torch\utils\data_utils\fetch.py", line 58, in fetch data = [self.dataset[idx] for idx in possibly_batched_index] File "D:\anaconda3\envs\yolov9\lib\site-packages\torch\utils\data_utils\fetch.py", line 58, in data = [self.dataset[idx] for idx in possibly_batched_index] File "D:\zyqi\yolov9-main\utils\segment\dataloaders.py", line 116, in getitem img, labels, segments = mixup(img, labels, segments, *self.load_mosaic(random.randint(0, self.n - 1))) File "D:\zyqi\yolov9-main\utils\segment\augmentations.py", line 16, in mixup segments = np.concatenate((segments, segments2), 0) File "<array_function internals>", line 200, in concatenate ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 3 dimension(s)

    1. Glenn JocherGlenn JocherUltralytics

      Hi there 👋! It seems like you're encountering an issue with dimension mismatch during the mixup augmentation process in YOLOv9's instance segmentation. This error typically occurs when the arrays you're trying to concatenate don't have the same shape — in this case, a discrepancy between the number of dimensions.

      Without seeing the exact code or data structure you're working with, it's a bit difficult to provide a precise solution. However, one common approach is to ensure that both arrays being concatenated (segments and segments2) have the same dimensionality before performing the operation. For instance, if segments is a 1D array and segments2 is 3D, you might need to reshape or pad segments to match the dimensionality of segments2.

      Here's a rough example of how to ensure they have the same number of dimensions:

      import numpy as np
      
      # Assuming segments is 1D and segments2 is 3D
      # Reshape or pad segments to make its dimensions compatible with segments2
      segments = np.expand_dims(segments, axis=(1, 2))  # Adjust this based on your specific shapes
      
      # Now that both have the same number of dimensions, concatenate should work
      segments_combined = np.concatenate((segments, segments2), 0)

      Remember, the key here is to adjust the dimensions so they're compatible. The exact method (expand_dims, reshape, pad, etc.) will depend on your data.

      If you continue to face issues, could you provide more details or a snippet of the code where this error occurs? That way, we can offer more targeted advice. Happy coding! 🚀