Fix confusion matrix update when no predictions are made#8748
Merged
glenn-jocher merged 6 commits intoultralytics:masterfrom Jul 29, 2022
Merged
Fix confusion matrix update when no predictions are made#8748glenn-jocher merged 6 commits intoultralytics:masterfrom
glenn-jocher merged 6 commits intoultralytics:masterfrom
Conversation
Contributor
There was a problem hiding this comment.
👋 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
Member
|
@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
Contributor
Author
|
I agree that's a cleaner way to do it. This has been changed now. |
Member
|
@jbutle55 PR is merged. Thank you for your contributions to YOLOv5 🚀 and Vision AI ⭐ |
ctjanuhowski
pushed a commit
to ctjanuhowski/yolov5
that referenced
this pull request
Sep 8, 2022
…#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 <glenn.jocher@ultralytics.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
Noneindetectionsto handle cases with no detections.🎯 Purpose & Impact