Fixed a bug in the object_detector testing code that caused the average

precision values to be slightly wrong.
This commit is contained in:
Davis King 2013-07-31 19:24:42 -04:00
parent c0c1995d50
commit 92a3c41010
1 changed files with 11 additions and 16 deletions

View File

@ -50,32 +50,27 @@ namespace dlib
std::vector<bool> used(boxes.size(),false); std::vector<bool> used(boxes.size(),false);
for (unsigned long i = 0; i < truth_boxes.size(); ++i) for (unsigned long i = 0; i < truth_boxes.size(); ++i)
{ {
unsigned long best_idx = 0; bool found_match = false;
double best_overlap = 0; // Find the first box that hits truth_boxes[i]
// Find the best box that hits truth_boxes[i]
for (unsigned long j = 0; j < boxes.size(); ++j) for (unsigned long j = 0; j < boxes.size(); ++j)
{ {
if (used[j]) if (used[j])
continue; continue;
const double overlap = truth_boxes[i].get_rect().intersect(boxes[j].second).area() / (double)(truth_boxes[i].get_rect()+boxes[j].second).area(); const double overlap = truth_boxes[i].get_rect().intersect(boxes[j].second).area() /
if (overlap > best_overlap) (double)(truth_boxes[i].get_rect()+boxes[j].second).area();
if (overlap >= overlap_eps)
{ {
best_overlap = overlap; used[j] = true;
best_idx = j; ++count;
found_match = true;
break;
} }
} }
// if there was any box that hit truth_boxes[i] if (!found_match)
if (best_overlap > overlap_eps)
{
used[best_idx] = true;
++count;
}
else
{
++missing_detections; ++missing_detections;
}
} }
for (unsigned long i = 0; i < boxes.size(); ++i) for (unsigned long i = 0; i < boxes.size(); ++i)