Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problem with training for a single class #13017

Closed
1 task done
kanis777 opened this issue May 16, 2024 · 6 comments
Closed
1 task done

Problem with training for a single class #13017

kanis777 opened this issue May 16, 2024 · 6 comments
Labels
question Further information is requested

Comments

@kanis777
Copy link

kanis777 commented May 16, 2024

Search before asking

Question

So I have to train the yolov5 on a single class to detect person . so i created a yaml file accordingly . ( I am using vscode) . After training - I am obtaining details where label_batch is correct as down image . But pred is not done - not even bounding box is displayed . When I tried using it for another annotated dataset with 2 classes i am getting valbatch0_pred and trainbatch0_pred correctly .
But when i am training for a single class - eventhough it works for finding valbatch0_labels it can't predict val_pred that is the there is no bounding box being displayed.

Additional

I have checked the annotated text file and tried bounding box for it . And it works . So there is no issue with annotation .
val_batch0_labels
val_batch0_pred

@kanis777 kanis777 added the question Further information is requested label May 16, 2024
Copy link
Contributor

👋 Hello @kanis777, 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
Copy link
Member

@kanis777 hello 👋,

Thanks for your detailed query! When training YOLOv5 on a single class, please double-check the following in your setup:

  1. YAML Configuration: Ensure that the nc (number of classes) is set to 1, and the names field contains only one class name.

  2. Data Labels: Verify that all label files only contain the class index 0 since you have only one class (persons).

  3. Model Output: Sometimes, predictions for single classes can be hard to spot if the model hasn't sufficiently learned. Try lowering your confidence threshold temporarily for the predictions with the command --conf-thres 0.1 when running detections to see if any low confidence predictions are being made.

If issues persist, adjusting learning rates or training for more epochs could also help improve detection.

If no bounding boxes are displayed at all, it may suggest the model hasn't learned effective features for that class, suggesting a possible need for hyperparameter tuning or more training data.

Keep up the efforts, and reach out if you have more questions! 🚀

@kanis777
Copy link
Author

kanis777 commented May 17, 2024

Thank you for replying
image
This is how my yaml file looks . So , I dont think the mistakes lie there.
I have about a total of 36 images - 20 for training 7 for testing and 7 for validation
In yolov5/runs/train/exp4
Train_batch0
image
Train_batch1
image
Train_batch2
image
val batch0_labels
image
val batch0_pred
image

![confusion_matrix](https://github.com/ultralyti
PR_curve
cs/yolov5/assets/106160864/88d1b09c-799a-4736-83bb-42cf231b5c66)

![R_curve](https://github.com/ultralytics/yolov5/assets
P_curve
/106160864/92dcb683-c4ee-4cde-8b7e-0a0133486d25)

Annotation is not the problem - I have got the pytorch yolov5 zip from roboflow . and i checked using bounding boxes .
I am setting the epochs to only 10
My doubt is if it is able to label ... then y cant it predict .

Maybe as u said the size is the problem . I will try out another dataset aswell . But if u can , I would like u to explain y can it label but not predict - is the labeling utilizing annotated data instead of labeling on its own ??

@glenn-jocher
Copy link
Member

Hello @kanis777,

Thanks for sharing the details and images from your training process. It looks like your YAML configuration is set up correctly.

Given your scenario, it's important to note that during training, the labels shown (e.g., train_batch0_labels, val_batch0_labels) are directly from your annotated dataset, not predictions by the model. These are used to guide the model's learning process.

The val_batch0_pred images, on the other hand, show the model's predictions based on what it has learned. If these predictions are missing or incorrect, it typically indicates that the model hasn't yet learned to generalize well from the training data provided. This could be due to several reasons:

  • Insufficient training data: 36 images in total might be too few to effectively train the model, especially for complex tasks like person detection.
  • Underfitting: Since you're only training for 10 epochs, the model might not have had enough iterations to learn effectively from the data.

You might consider increasing the number of epochs or using a dataset with more images. Additionally, experimenting with different learning rates or augmentation strategies could also help improve model performance.

Keep experimenting, and don't hesitate to reach out if you have more questions! 🚀

@kanis777
Copy link
Author

Thanks for replying back . It helped !!!

@glenn-jocher
Copy link
Member

You're welcome! I'm glad to hear that the information was helpful. If you have any more questions as you continue working with YOLOv5 or run into any challenges, feel free to reach out. Happy coding! 🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants