Day 54: Evaluating your fine-tuned detector
Does it actually detect garments?
Evaluate on the validation set with the Day-49 metric: per-class AP and overall mAP. But numbers alone hide failure modes — also look at the confusion between classes and at actual predicted boxes on held-out images. A detector with decent mAP that systematically confuses 'kurta' and 'dress' has a labelling or class-definition problem you'd never see from the single number.
metrics = model.val(data="garment_dataset/data.yaml")
print("mAP@0.5:", metrics.box.map50)
print("mAP@[0.5:0.95]:", metrics.box.map)
print("per-class AP@0.5:", metrics.box.ap50) # find the weak classes
# eyeball predictions on held-out images — numbers hide failure modes
model.predict("val_samples/", save=True) # writes annotated imagesWeak classes tell a story
If one garment class has much lower AP, the cause is usually one of three: too few examples of it, inconsistent labels for it, or genuine visual similarity to another class. Diagnosing which — by looking at its actual failures — is worth more than any hyperparameter sweep, and it's exactly the kind of honest analysis the Day-90 checkpoint rewards.
Key terms
- Per-class AP
- Average Precision computed separately for each class, exposing which classes the detector handles well or poorly.
- Qualitative evaluation
- Inspecting actual predicted boxes on sample images to find failure modes numbers alone hide.
Your detector has good overall mAP but one class has much lower AP. Why look at its actual predicted images rather than just tuning hyperparameters?