ultralytics / yolov5

YOLOv5 šŸš€ in PyTorch > ONNX > CoreML > TFLite
https://docs.ultralytics.com
GNU Affero General Public License v3.0
48.59k stars 15.9k forks source link

How can a model trained on Ultralytics HUB perform inference prediction on the test set? #13167

Open Aq114 opened 1 week ago

Aq114 commented 1 week ago

Search before asking

Question

I have successfully trained several models on Ultratics HUB, and now I want to make the final test machine inference prediction. However, Ultratics HUB can only perform online inference by uploading a few images. I found in the subsequent section that entering relevant instructions at the local command line can perform local inference, such as Python segment/predict.py -- weights yolov5m seg.pt -- data data/images/bus.jpg, where the weights are replaced with the trained best.pt file and the data is replaced with a custom training set. However, during code execution, it shows YOLOv5n6u summary (fused): 253 layers, 4126316 parameters, 0 gradients, 7.2 GFLOPs Traceback (most recent call last): File "D:\DesktoI have successfully trained several models on Ultratics HUB, and now I want to make the final test machine inference prediction. However, Ultratics HUB can only perform online inference by uploading a few images. I found in the subsequent section that entering relevant instructions at the local command line can perform local inference, such as Python segment/predict.py -- weights yolov5m seg.pt -- data data/images/bus.jpg, where the weights are replaced with the trained best.pt file and the data is replaced with a custom training set. However, during code execution, it shows YOLOv5n6u summary (fused): 253 layers, 4126316 parameters, 0 gradients, 7.2 GFLOPs Traceback (most recent call last): File "D:\Desktop\YOLO5\yolov5\detect.py", line 312, in main(opt) File "D:\Desktop\YOLO5\yolov5\detect.py", line 307, in main run(*vars(opt)) File "C:\Users\Y\AppData\Local\anaconda3\envs\yolov5\Lib\site-packages\torch\utils_contextlib.py", line 115, in decorate_context return func(args, *kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "D:\Desktop\YOLO5\yolov5\detect.py", line 200, in run s += f"{n} {names[int(c)]}{'s' (n > 1)}, " # add to string


KeyError: 5059

However, when I use the best. pt file of the model trained on the local command line, I can use the above method for inference prediction. May I ask which step went wrong? Is it possible that the best. pt file for both types of training cannot be used interchangeably? Or are there any other methods for batch testing at Ultralytics HUB?

### Additional

_No response_
github-actions[bot] commented 1 week ago

šŸ‘‹ Hello @Aq114, thank you for your interest in YOLOv5 šŸš€! Please visit our ā­ļø Tutorials to get started, where you can find quickstart guides for simple tasks like Custom Data Training all the way to advanced concepts like Hyperparameter Evolution.

If this is a šŸ› Bug Report, please provide a minimum reproducible example to help us debug it.

If this is a custom training ā“ Question, please provide as much information as possible, including dataset image examples and training logs, and verify you are following our Tips for Best Training Results.

Requirements

Python>=3.8.0 with all requirements.txt installed including PyTorch>=1.8. To get started:

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

Environments

YOLOv5 may be run in any of the following up-to-date verified environments (with all dependencies including CUDA/CUDNN, Python and PyTorch preinstalled):

Status

YOLOv5 CI

If this badge is green, all YOLOv5 GitHub Actions Continuous Integration (CI) tests are currently passing. CI tests verify correct operation of YOLOv5 training, validation, inference, export and benchmarks on macOS, Windows, and Ubuntu every 24 hours and on every commit.

Introducing YOLOv8 šŸš€

We're excited to announce the launch of our latest state-of-the-art (SOTA) object detection model for 2023 - YOLOv8 šŸš€!

Designed to be fast, accurate, and easy to use, YOLOv8 is an ideal choice for a wide range of object detection, image segmentation and image classification tasks. With YOLOv8, you'll be able to quickly and accurately detect objects in real-time, streamline your workflows, and achieve new levels of accuracy in your projects.

Check out our YOLOv8 Docs for details and get started with:

pip install ultralytics
glenn-jocher commented 1 week ago

@Aq114 hello,

Thank you for reaching out and for providing detailed information about your issue. It sounds like you've encountered a KeyError during inference with a model trained on Ultralytics HUB. Let's address this step-by-step.

KeyError Issue

The KeyError: 5059 suggests that the model is trying to access a class index that doesn't exist in the names list. This can happen if there is a mismatch between the class indices in your dataset and the model's configuration.

Steps to Resolve

  1. Verify Class Names: Ensure that the class names in your dataset match those expected by the model. You can check the data.yaml file used during training to confirm the class names and indices.

  2. Update to Latest Versions: Make sure you are using the latest versions of YOLOv5 and PyTorch. This can resolve many issues related to compatibility and bugs.

    pip install --upgrade torch
    git pull https://github.com/ultralytics/yolov5
  3. Reproduce the Issue: If the issue persists, please provide a minimum reproducible example. This helps us to investigate the problem more effectively. You can follow the guidelines here: Minimum Reproducible Example.

  4. Local Inference: For performing local inference, you can use the following code snippet. Ensure that the best.pt file is correctly specified and that the data.yaml file is accessible.

    import torch
    
    # Load model
    model = torch.hub.load('ultralytics/yolov5', 'custom', path='path/to/best.pt')
    
    # Perform inference
    img = 'path/to/your/image.jpg'
    results = model(img)
    
    # Print results
    results.print()
    results.save()  # Save results to runs/hub
  5. Batch Inference: If you need to perform batch inference on a test set, you can use the following approach:

    import torch
    from pathlib import Path
    
    # Load model
    model = torch.hub.load('ultralytics/yolov5', 'custom', path='path/to/best.pt')
    
    # Directory containing test images
    test_dir = Path('path/to/test/images')
    
    # Perform inference on all images in the directory
    for img_path in test_dir.glob('*.jpg'):
        results = model(img_path)
        results.save()  # Save results to runs/hub

Ultralytics HUB Batch Testing

Currently, Ultralytics HUB supports online inference for individual images. For batch testing, you would need to perform inference locally as described above.

If you continue to face issues, please share the exact steps and code you are using, along with any additional error messages. This will help us provide more targeted assistance.

Thank you for your patience and understanding. The YOLO community and the Ultralytics team are here to support you!