Fix confusion matrix update when no predictions are made #8748
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
None
indetections
to handle cases with no detections.🎯 Purpose & Impact