65 lines
1.9 KiB
Python

import fiftyone as fo
from PIL import Image
from detection import detect
name = "dataset-small"
dataset_dir = "/home/zenon/Documents/master-thesis/classification/evaluation/dataset-small"
# The splits to load
splits = ["val"]
# Load the dataset, using tags to mark the samples in each split
dataset = fo.Dataset(name)
for split in splits:
dataset.add_dir(
dataset_dir=dataset_dir,
dataset_type=fo.types.YOLOv5Dataset,
split=split,
tags=split,
)
classes = dataset.default_classes
predictions_view = dataset.view()
with fo.ProgressBar() as pb:
for sample in pb(predictions_view):
image = Image.open(sample.filepath)
w, h = image.size
pred = detect(sample.filepath, '../weights/yolo.onnx', '../weights/resnet.onnx')
detections = []
for _, row in pred.iterrows():
xmin, xmax = int(row['xmin']), int(row['xmax'])
ymin, ymax = int(row['ymin']), int(row['ymax'])
rel_box = [
xmin / w, ymin / h, (xmax - xmin) / w, (ymax - ymin) / h
]
detections.append(
fo.Detection(label=classes[int(row['cls'])],
bounding_box=rel_box,
confidence=int(row['cls_conf'])))
sample["yolo_resnet"] = fo.Detections(detections=detections)
sample.save()
results = predictions_view.evaluate_detections(
"yolo_resnet",
gt_field="ground_truth",
eval_key="eval",
compute_mAP=True,
)
# Get the 10 most common classes in the dataset
counts = dataset.count_values("ground_truth.detections.label")
classes_top10 = sorted(counts, key=counts.get, reverse=True)[:10]
# Print a classification report for the top-10 classes
results.print_report(classes=classes_top10)
plot = results.plot_pr_curves(classes=["Healthy", "Stressed"])
plot.show()
session = fo.launch_app(dataset)
session.view = predictions_view
session.wait()