Spaces:
Running
Running
title: det-metrics | |
tags: | |
- evaluate | |
- metric | |
description: >- | |
Modified cocoevals.py which is wrapped into torchmetrics' mAP metric with numpy instead of torch dependency. | |
sdk: gradio | |
sdk_version: 3.19.1 | |
app_file: app.py | |
pinned: false | |
emoji: 🕵️ | |
# SEA-AI/det-metrics | |
This hugging face metric uses `seametrics.detection.PrecisionRecallF1Support` under the hood to compute coco-like metrics for object detection tasks. It is a [modified cocoeval.py](https://github.com/SEA-AI/seametrics/blob/develop/seametrics/detection/cocoeval.py) wrapped inside [torchmetrics' mAP metric](https://lightning.ai/docs/torchmetrics/stable/detection/mean_average_precision.html) but with numpy arrays instead of torch tensors. | |
## Getting Started | |
To get started with det-metrics, make sure you have the necessary dependencies installed. This metric relies on the `evaluate` and `seametrics` libraries for metric calculation and integration with FiftyOne datasets. | |
### Installation | |
First, ensure you have Python 3.8 or later installed. Then, install det-metrics using pip: | |
```sh | |
pip install evaluate git+https://github.com/SEA-AI/seametrics@develop | |
``` | |
### Basic Usage | |
Here's how to quickly evaluate your object detection models using SEA-AI/det-metrics: | |
```python | |
import evaluate | |
# Define your predictions and references (dict values can also by numpy arrays) | |
predictions = [ | |
{ | |
"boxes": [[449.3, 197.75390625, 6.25, 7.03125], [334.3, 181.58203125, 11.5625, 6.85546875]], | |
"labels": [0, 0], | |
"scores": [0.153076171875, 0.72314453125], | |
} | |
] | |
references = [ | |
{ | |
"boxes": [[449.3, 197.75390625, 6.25, 7.03125], [334.3, 181.58203125, 11.5625, 6.85546875]], | |
"labels": [0, 0], | |
"area": [132.2, 83.8], | |
} | |
] | |
# Load SEA-AI/det-metrics and evaluate | |
module = evaluate.load("SEA-AI/det-metrics") | |
module.add(prediction=predictions, reference=references) | |
results = module.compute() | |
print(results) | |
``` | |
This will output the evaluation metrics for your detection model. | |
``` | |
{'all': {'range': [0, 10000000000.0], | |
'iouThr': '0.00', | |
'maxDets': 100, | |
'tp': 2, | |
'fp': 0, | |
'fn': 0, | |
'duplicates': 0, | |
'precision': 1.0, | |
'recall': 1.0, | |
'f1': 1.0, | |
'support': 2, | |
'fpi': 0, | |
'nImgs': 1} | |
``` | |
## FiftyOne Integration | |
Integrate SEA-AI/det-metrics with FiftyOne datasets for enhanced analysis and visualization: | |
```python | |
import evaluate | |
import logging | |
from seametrics.payload import PayloadProcessor | |
logging.basicConfig(level=logging.WARNING) | |
# Configure your dataset and model details | |
processor = PayloadProcessor( | |
dataset_name="SAILING_DATASET_QA", | |
gt_field="ground_truth_det", | |
models=["yolov5n6_RGB_D2304-v1_9C"], | |
sequence_list=["Trip_14_Seq_1"], | |
data_type="rgb", | |
) | |
# Evaluate using SEA-AI/det-metrics | |
module = evaluate.load("SEA-AI/det-metrics") | |
module.add_payload(processor.payload) | |
results = module.compute() | |
print(results) | |
``` | |
```console | |
{'all': {'range': [0, 10000000000.0], | |
'iouThr': '0.00', | |
'maxDets': 100, | |
'tp': 89, | |
'fp': 13, | |
'fn': 15, | |
'duplicates': 1, | |
'precision': 0.8725490196078431, | |
'recall': 0.8557692307692307, | |
'f1': 0.8640776699029126, | |
'support': 104, | |
'fpi': 0, | |
'nImgs': 22}} | |
``` | |
## Metric Settings | |
Customize your evaluation by specifying various parameters when loading SEA-AI/det-metrics: | |
- **area_ranges_tuples**: Define different area ranges for metrics calculation. | |
- **bbox_format**: Set the bounding box format (e.g., `"xywh"`). | |
- **iou_threshold**: Choose the IOU threshold for determining correct detections. | |
- **class_agnostic**: Specify whether to calculate metrics disregarding class labels. | |
```python | |
area_ranges_tuples = [ | |
("all", [0, 1e5**2]), | |
("small", [0**2, 6**2]), | |
("medium", [6**2, 12**2]), | |
("large", [12**2, 1e5**2]), | |
] | |
module = evaluate.load( | |
"SEA-AI/det-metrics", | |
iou_thresholds=[0.00001], | |
area_ranges_tuples=area_ranges_tuples, | |
) | |
``` | |
## Output Values | |
SEA-AI/det-metrics provides a detailed breakdown of performance metrics for each specified area range: | |
- **range**: The area range considered. | |
- **iouThr**: The IOU threshold applied. | |
- **maxDets**: The maximum number of detections evaluated. | |
- **tp/fp/fn**: Counts of true positives, false positives, and false negatives. | |
- **duplicates**: Number of duplicate detections. | |
- **precision/recall/f1**: Calculated precision, recall, and F1 score. | |
- **support**: Number of ground truth boxes considered. | |
- **fpi**: Number of images with predictions but no ground truths. | |
- **nImgs**: Total number of images evaluated. | |
## Further References | |
- **seametrics Library**: Explore the [seametrics GitHub repository](https://github.com/SEA-AI/seametrics/tree/main) for more details on the underlying library. | |
- **Pycoco Tools**: SEA-AI/det-metrics calculations are based on [pycoco tools](https://github.com/cocodataset/cocoapi/tree/master/PythonAPI/pycocotools), a widely used library for COCO dataset evaluation. | |
- **Understanding Metrics**: For a deeper understanding of precision, recall, and other metrics, read [this comprehensive guide](https://www.analyticsvidhya.com/blog/2020/09/precision-recall-machine-learning/). | |
## Contribution | |
Your contributions are welcome! If you'd like to improve SEA-AI/det-metrics or add new features, please feel free to fork the repository, make your changes, and submit a pull request. |