Commit 872ecd47d4c632a584ac0402f8ba06edf4ba831f

Authored by Josh Klontz
1 parent 6298e600

commented eval detection for #138

Showing 1 changed file with 8 additions and 2 deletions
openbr/core/eval.cpp
@@ -394,6 +394,7 @@ static QStringList computeDetectionResults(const QList<ResolvedDetection> &detec @@ -394,6 +394,7 @@ static QStringList computeDetectionResults(const QList<ResolvedDetection> &detec
394 for (int i=0; i<detections.size(); i++) { 394 for (int i=0; i<detections.size(); i++) {
395 const ResolvedDetection &detection = detections[i]; 395 const ResolvedDetection &detection = detections[i];
396 if (discrete) { 396 if (discrete) {
  397 + // A 50% overlap is considered a true positive
397 if (detection.overlap >= 0.5) TP++; 398 if (detection.overlap >= 0.5) TP++;
398 else FP++; 399 else FP++;
399 } else { 400 } else {
@@ -507,11 +508,13 @@ float EvalDetection(const QString &amp;predictedGallery, const QString &amp;truthGallery @@ -507,11 +508,13 @@ float EvalDetection(const QString &amp;predictedGallery, const QString &amp;truthGallery
507 QMap<QString, Detections> allDetections = getDetections(predicted, truth); 508 QMap<QString, Detections> allDetections = getDetections(predicted, truth);
508 509
509 QList<ResolvedDetection> resolvedDetections, falseNegativeDetections; 510 QList<ResolvedDetection> resolvedDetections, falseNegativeDetections;
510 - foreach (Detections detections, allDetections.values()) { 511 + foreach (Detections detections, allDetections.values()) { // For every file
  512 + // Try to associate ground truth detections with predicted detections
511 while (!detections.truth.isEmpty() && !detections.predicted.isEmpty()) { 513 while (!detections.truth.isEmpty() && !detections.predicted.isEmpty()) {
512 - const Detection truth = detections.truth.takeFirst(); 514 + const Detection truth = detections.truth.takeFirst(); // Take removes the detection
513 int bestIndex = -1; 515 int bestIndex = -1;
514 float bestOverlap = -std::numeric_limits<float>::max(); 516 float bestOverlap = -std::numeric_limits<float>::max();
  517 + // Find the nearest predicted detection to this ground truth detection
515 for (int i=0; i<detections.predicted.size(); i++) { 518 for (int i=0; i<detections.predicted.size(); i++) {
516 const float overlap = truth.overlap(detections.predicted[i]); 519 const float overlap = truth.overlap(detections.predicted[i]);
517 if (overlap > bestOverlap) { 520 if (overlap > bestOverlap) {
@@ -519,6 +522,9 @@ float EvalDetection(const QString &amp;predictedGallery, const QString &amp;truthGallery @@ -519,6 +522,9 @@ float EvalDetection(const QString &amp;predictedGallery, const QString &amp;truthGallery
519 bestIndex = i; 522 bestIndex = i;
520 } 523 }
521 } 524 }
  525 + // Removing the detection prevents us from considering it twice.
  526 + // We don't want to associate two ground truth detections with the
  527 + // same prediction, over vice versa.
522 const Detection predicted = detections.predicted.takeAt(bestIndex); 528 const Detection predicted = detections.predicted.takeAt(bestIndex);
523 resolvedDetections.append(ResolvedDetection(predicted.confidence, bestOverlap)); 529 resolvedDetections.append(ResolvedDetection(predicted.confidence, bestOverlap));
524 } 530 }