Hi @zindi! Can you please share evaluation metric - because right now I have strong assumption that metric is different from standard mAP metric and have some separate logic for NEG class - I have submitted 3 submits with different lower threshold levels for confidences (0.1 0.2 0.05) and scores differs a lot and if we follow standard COCO eval from pycocotools the difference is such small thresholds should not be so high.
Hello, you can read about the error metric here - https://kharshit.github.io/blog/2019/09/20/evaluation-metrics-for-object-detection-and-segmentation
Here is the calculation for the metric.
print("error: %s" % msg)gt_counter_per_class = {}counter_images_per_class = {}reference_dict = reference.groupby("Image_ID")["boxes"].apply(list).to_dict()error_msg = "Missing columns {} on the submission file".format(column)error_msg = "Error. Image ID {} not found in submission file:".format(image_id)sample_submission_dict = sample_submission.groupby("Image_ID")["boxes"].apply(list).to_dict()bounding_boxes.append({"class_name": class_name, "bbox": bbox, "used": False, "difficult": True})bounding_boxes.append({"class_name": class_name, "bbox": bbox, "used": False})error_msg = "Error. Image ID {} not found in reference file:".format(k)# print("match")bounding_boxes.append({"confidence": confidence, "file_id": file_id, "bbox": bbox})ap_dictionary = {}lamr_dictionary = {}count_true_positives = {}# output_file.write("# AP and precision/recall per class\n")text = "{0:.2f}%".format(ap * 100) + " = " + class_name + " AP " # class_name + " AP = {0:.2f}%".format(ap*100)text = "mAP = {0:.2f}%".format(mAP * 100)Is this just what any package would do and you're giving the behind the scenes look at MAP.50? Or is this custom to run yourself if needed? How are NEG classes handled again? I tested... seems like confidence or box dims don't change the score - why?
For negative classes you need to set the bbox coordinates all to 0 and the confidence as high as your are confident in it.