-
-
Notifications
You must be signed in to change notification settings - Fork 16.4k
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
Fix confusion matrix update when no predictions are made #8748
Fix confusion matrix update when no predictions are made #8748
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👋 Hello @jbutle55, thank you for submitting a YOLOv5 🚀 PR! To allow your work to be integrated as seamlessly as possible, we advise you to:
- ✅ Verify your PR is up-to-date with upstream/master. If your PR is behind upstream/master an automatic GitHub Actions merge may be attempted by writing /rebase in a new comment, or by running the following code, replacing 'feature' with the name of your local branch:
git remote add upstream https://github.com/ultralytics/yolov5.git
git fetch upstream
# git checkout feature # <--- replace 'feature' with local branch name
git merge upstream/master
git push -u origin -f
- ✅ Verify all Continuous Integration (CI) checks are passing.
- ✅ Reduce changes to the absolute minimum required for your bug fix or feature addition. "It is not daily increase but daily decrease, hack away the unessential. The closer to the source, the less wastage there is." -Bruce Lee
@jbutle55 thanks for the PR! This looks good, but can you simply add an if statement to process_batch(), i.e. pass proccess_batch(detections=None, ...) in val.py and then: if detections is None:
[code from your new function here]
return |
…sion_matrix_fix # Conflicts: # utils/metrics.py
I agree that's a cleaner way to do it. This has been changed now. |
@jbutle55 PR is merged. Thank you for your contributions to YOLOv5 🚀 and Vision AI ⭐ |
…#8748) * Fix confusion matrix update when no predictions are made * Update metrics.py * Simply confusion matrix changes * Simply confusion matrix fix Co-authored-by: Glenn Jocher <[email protected]>
This pull request is in response to #8729. All of the below confusion matrices were created using yolov5l.pt and coco128.yaml with val.py.
If an image has labelled objects within it, but the model makes zero predictions on the image, then each of these missed objects is a False Negative and should be recorded as such in the confusion matrix (a prediction of background where the object exists). The way val.py handles when an image has zero predictions results in the confusion matrix not being updated accordingly.
If YOLO were to make zero predictions on every image, simulated by the following temporary change to val.py before this pull request is implemented:
then the following confusion matrix is generated:
Following this pull request, val.py would generate the following confusion matrix with the same simulated zero predictions:
If the temporary simulation of zero predictions is removed, on the coco128.yaml data then the model produces a confusion matrix as follows with the implemented code changes.
This is compared to the below image, the confusion matrix generated by YOLOv5l without the implemented pull request on coco128:
🛠️ PR Summary
Made with ❤️ by Ultralytics Actions
🌟 Summary
Improved handling of edge cases in confusion matrix computation.
📊 Key Changes
None
indetections
to handle cases with no detections.🎯 Purpose & Impact