From 261d6a83acc8d8a3beb621f98c587385acc04206 Mon Sep 17 00:00:00 2001 From: Charles Otto Date: Tue, 18 Mar 2014 21:44:26 -0400 Subject: [PATCH] Take the ground truth metadata key as input to evalClustering, default to Label --- app/br/br.cpp | 4 ++-- openbr/core/cluster.cpp | 13 ++++++++----- openbr/core/cluster.h | 2 +- openbr/openbr.cpp | 4 ++-- openbr/openbr.h | 3 ++- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/app/br/br.cpp b/app/br/br.cpp index e78c71d..49f9a95 100644 --- a/app/br/br.cpp +++ b/app/br/br.cpp @@ -138,8 +138,8 @@ public: check(parc >= 2 && parc <= 4, "Incorrect parameter count for 'evalClassification'."); br_eval_classification(parv[0], parv[1], parc >= 3 ? parv[2] : "", parc >= 4 ? parv[3] : ""); } else if (!strcmp(fun, "evalClustering")) { - check(parc == 2, "Incorrect parameter count for 'evalClustering'."); - br_eval_clustering(parv[0], parv[1]); + check((parc >= 2) && (parc <= 3), "Incorrect parameter count for 'evalClustering'."); + br_eval_clustering(parv[0], parv[1], parc == 3 ? parv[2] : ""); } else if (!strcmp(fun, "evalDetection")) { check((parc >= 2) && (parc <= 3), "Incorrect parameter count for 'evalDetection'."); br_eval_detection(parv[0], parv[1], parc == 3 ? parv[2] : ""); diff --git a/openbr/core/cluster.cpp b/openbr/core/cluster.cpp index 9b3beda..b564faa 100644 --- a/openbr/core/cluster.cpp +++ b/openbr/core/cluster.cpp @@ -100,7 +100,9 @@ Neighborhood getNeighborhood(const QStringList &simmats) int currentRows = -1; int columnOffset = 0; for (int j=0; j format(br::Factory::make(simmats[i*numGalleries+j])); + br::Template t = format->read(); + cv::Mat m = t.m(); if (j==0) { currentRows = m.rows; allNeighbors.resize(currentRows); @@ -275,13 +277,14 @@ float jaccardIndex(const QVector &indicesA, const QVector &indicesB) // Evaluates clustering algorithms based on metrics described in // Santo Fortunato "Community detection in graphs", Physics Reports 486 (2010) -void br::EvalClustering(const QString &csv, const QString &input) +void br::EvalClustering(const QString &csv, const QString &input, QString truth_property) { + if (truth_property.isEmpty()) + truth_property = "Label"; qDebug("Evaluating %s against %s", qPrintable(csv), qPrintable(input)); - // We assume clustering algorithms store assigned cluster labels as integers (since the clusters are - // not named). Direct use of ClusterID is not general -cao - QList labels = File::get(TemplateList::fromGallery(input), "ClusterID"); + TemplateList tList = TemplateList::fromGallery(input); + QList labels = tList.indexProperty(truth_property); QHash labelToIndex; int nClusters = 0; diff --git a/openbr/core/cluster.h b/openbr/core/cluster.h index 9d5ce7b..84bb9ba 100644 --- a/openbr/core/cluster.h +++ b/openbr/core/cluster.h @@ -28,7 +28,7 @@ namespace br typedef QVector Clusters; Clusters ClusterGallery(const QStringList &simmats, float aggressiveness, const QString &csv); - void EvalClustering(const QString &csv, const QString &input); + void EvalClustering(const QString &csv, const QString &input, QString truth_property); Clusters ReadClusters(const QString &csv); void WriteClusters(const Clusters &clusters, const QString &csv); diff --git a/openbr/openbr.cpp b/openbr/openbr.cpp index e1d67fe..09ee63f 100644 --- a/openbr/openbr.cpp +++ b/openbr/openbr.cpp @@ -109,9 +109,9 @@ void br_eval_classification(const char *predicted_gallery, const char *truth_gal EvalClassification(predicted_gallery, truth_gallery, predicted_property, truth_property); } -void br_eval_clustering(const char *csv, const char *gallery) +void br_eval_clustering(const char *csv, const char *gallery, const char * truth_property) { - EvalClustering(csv, gallery); + EvalClustering(csv, gallery, truth_property); } float br_eval_detection(const char *predicted_gallery, const char *truth_gallery, const char *csv) diff --git a/openbr/openbr.h b/openbr/openbr.h index f2cce16..188ca59 100644 --- a/openbr/openbr.h +++ b/openbr/openbr.h @@ -167,9 +167,10 @@ BR_EXPORT void br_eval_classification(const char *predicted_gallery, const char * \brief Evaluates and prints clustering accuracy to the terminal. * \param csv The cluster results file. * \param gallery The br::Gallery used to generate the \ref simmat that was clustered. + * \param truth_property (Optional) which metadata key to use from gallery, defaults to Label * \see br_cluster */ -BR_EXPORT void br_eval_clustering(const char *csv, const char *gallery); +BR_EXPORT void br_eval_clustering(const char *csv, const char *gallery, const char * truth_property); /*! * \brief Evaluates and prints detection accuracy to terminal. -- libgit2 0.21.4