Commit 5e474ce86b75741bfad8c0d3e867458e3bd2fa70

Authored by Scott Klum
1 parent 4e7f9c4f

Handle nan related edge conditions better

openbr/core/evalutils.cpp
... ... @@ -261,7 +261,7 @@ QStringList EvalUtils::computeDetectionResults(const QList<ResolvedDetection> &d
261 261 foreach (float FAR, FARsToOutput)
262 262 if (prevFP / numImages < FAR && FP / numImages >= FAR) {
263 263 debug << QString("|") << QString::number(FAR, 'f', 4).leftJustified(10, ' ');
264   - debug << QString("|") << QString::number(TP / totalTrueDetections, 'f', 4).leftJustified(10, ' ');
  264 + debug << QString("|") << QString::number(totalTrueDetections ? TP / totalTrueDetections : 0, 'f', 4).leftJustified(10, ' ');
265 265 debug << QString("|") << QString::number(detection.confidence, 'f', 4).leftJustified(10, ' ');
266 266 debug << QString("|") << QString::number(TP ? poseMatch / TP : 0., 'f', 4).leftJustified(10, ' ');
267 267 debug << QString("|") << endl;
... ... @@ -306,7 +306,7 @@ QStringList EvalUtils::computeDetectionResults(const QList&lt;ResolvedDetection&gt; &amp;d
306 306  
307 307 debug << QString("Minimum %1 Precision:").arg(discrete ? "Discrete" : "Continuous").leftJustified(32, ' ') << QString("%1").arg(QString::number(points.last().Precision)) << endl;
308 308 debug << QString("Maximum %1 Recall:").arg(discrete ? "Discrete" : "Continuous").leftJustified(32, ' ') << QString("%1").arg(QString::number(points.last().Recall)) << endl;
309   - debug << QString("%1 F1 Score:").arg(discrete ? "Discrete" : "Continuous").leftJustified(32, ' ') << QString("%1").arg(QString::number(2 * (points.last().Recall * points.last().Precision) / (points.last().Recall + points.last().Precision))) << endl;
  309 + debug << QString("%1 F1 Score:").arg(discrete ? "Discrete" : "Continuous").leftJustified(32, ' ') << QString("%1").arg(QString::number((points.last().Recall + points.last().Precision) ? 2 * (points.last().Recall * points.last().Precision) / (points.last().Recall + points.last().Precision) : 0)) << endl;
310 310  
311 311 const int keep = qMin(points.size(), Max_Points);
312 312 if (keep < 1) qFatal("Insufficient points.");
... ...
openbr/core/evalutils.h
... ... @@ -89,7 +89,7 @@ struct DetectionOperatingPoint
89 89 float Recall, FalsePositiveRate, Precision, Confidence;
90 90 DetectionOperatingPoint() : Recall(-1), FalsePositiveRate(-1), Precision(-1) {}
91 91 DetectionOperatingPoint(float TP, float FP, float totalPositives, float numImages, float confidence)
92   - : Recall(TP/totalPositives), FalsePositiveRate(FP/numImages), Precision(TP/(TP+FP)), Confidence(confidence) {}
  92 + : Recall(totalPositives ? TP/totalPositives : 0), FalsePositiveRate(FP/numImages), Precision(TP/(TP+FP)), Confidence(confidence) {}
93 93 };
94 94  
95 95 // Detection
... ...