Commit 261d6a83acc8d8a3beb621f98c587385acc04206
1 parent
ddd731c7
Take the ground truth metadata key as input to evalClustering, default to Label
Defaulting to ClusterID did not make much sense, since the key being indexed is in fact the ground truth, not the cluster labels (cluster labels are stored as indices in a csv file, not a gallery). Also, use Format to read similarity matrices instead of assuming mtx is in use.
Showing
5 changed files
with
15 additions
and
11 deletions
app/br/br.cpp
| ... | ... | @@ -138,8 +138,8 @@ public: |
| 138 | 138 | check(parc >= 2 && parc <= 4, "Incorrect parameter count for 'evalClassification'."); |
| 139 | 139 | br_eval_classification(parv[0], parv[1], parc >= 3 ? parv[2] : "", parc >= 4 ? parv[3] : ""); |
| 140 | 140 | } else if (!strcmp(fun, "evalClustering")) { |
| 141 | - check(parc == 2, "Incorrect parameter count for 'evalClustering'."); | |
| 142 | - br_eval_clustering(parv[0], parv[1]); | |
| 141 | + check((parc >= 2) && (parc <= 3), "Incorrect parameter count for 'evalClustering'."); | |
| 142 | + br_eval_clustering(parv[0], parv[1], parc == 3 ? parv[2] : ""); | |
| 143 | 143 | } else if (!strcmp(fun, "evalDetection")) { |
| 144 | 144 | check((parc >= 2) && (parc <= 3), "Incorrect parameter count for 'evalDetection'."); |
| 145 | 145 | br_eval_detection(parv[0], parv[1], parc == 3 ? parv[2] : ""); | ... | ... |
openbr/core/cluster.cpp
| ... | ... | @@ -100,7 +100,9 @@ Neighborhood getNeighborhood(const QStringList &simmats) |
| 100 | 100 | int currentRows = -1; |
| 101 | 101 | int columnOffset = 0; |
| 102 | 102 | for (int j=0; j<numGalleries; j++) { |
| 103 | - cv::Mat m = BEE::readMat(simmats[i*numGalleries+j]); | |
| 103 | + QScopedPointer<br::Format> format(br::Factory<br::Format>::make(simmats[i*numGalleries+j])); | |
| 104 | + br::Template t = format->read(); | |
| 105 | + cv::Mat m = t.m(); | |
| 104 | 106 | if (j==0) { |
| 105 | 107 | currentRows = m.rows; |
| 106 | 108 | allNeighbors.resize(currentRows); |
| ... | ... | @@ -275,13 +277,14 @@ float jaccardIndex(const QVector<int> &indicesA, const QVector<int> &indicesB) |
| 275 | 277 | |
| 276 | 278 | // Evaluates clustering algorithms based on metrics described in |
| 277 | 279 | // Santo Fortunato "Community detection in graphs", Physics Reports 486 (2010) |
| 278 | -void br::EvalClustering(const QString &csv, const QString &input) | |
| 280 | +void br::EvalClustering(const QString &csv, const QString &input, QString truth_property) | |
| 279 | 281 | { |
| 282 | + if (truth_property.isEmpty()) | |
| 283 | + truth_property = "Label"; | |
| 280 | 284 | qDebug("Evaluating %s against %s", qPrintable(csv), qPrintable(input)); |
| 281 | 285 | |
| 282 | - // We assume clustering algorithms store assigned cluster labels as integers (since the clusters are | |
| 283 | - // not named). Direct use of ClusterID is not general -cao | |
| 284 | - QList<int> labels = File::get<int>(TemplateList::fromGallery(input), "ClusterID"); | |
| 286 | + TemplateList tList = TemplateList::fromGallery(input); | |
| 287 | + QList<int> labels = tList.indexProperty(truth_property); | |
| 285 | 288 | |
| 286 | 289 | QHash<int, int> labelToIndex; |
| 287 | 290 | int nClusters = 0; | ... | ... |
openbr/core/cluster.h
| ... | ... | @@ -28,7 +28,7 @@ namespace br |
| 28 | 28 | typedef QVector<Cluster> Clusters; |
| 29 | 29 | |
| 30 | 30 | Clusters ClusterGallery(const QStringList &simmats, float aggressiveness, const QString &csv); |
| 31 | - void EvalClustering(const QString &csv, const QString &input); | |
| 31 | + void EvalClustering(const QString &csv, const QString &input, QString truth_property); | |
| 32 | 32 | |
| 33 | 33 | Clusters ReadClusters(const QString &csv); |
| 34 | 34 | void WriteClusters(const Clusters &clusters, const QString &csv); | ... | ... |
openbr/openbr.cpp
| ... | ... | @@ -109,9 +109,9 @@ void br_eval_classification(const char *predicted_gallery, const char *truth_gal |
| 109 | 109 | EvalClassification(predicted_gallery, truth_gallery, predicted_property, truth_property); |
| 110 | 110 | } |
| 111 | 111 | |
| 112 | -void br_eval_clustering(const char *csv, const char *gallery) | |
| 112 | +void br_eval_clustering(const char *csv, const char *gallery, const char * truth_property) | |
| 113 | 113 | { |
| 114 | - EvalClustering(csv, gallery); | |
| 114 | + EvalClustering(csv, gallery, truth_property); | |
| 115 | 115 | } |
| 116 | 116 | |
| 117 | 117 | float br_eval_detection(const char *predicted_gallery, const char *truth_gallery, const char *csv) | ... | ... |
openbr/openbr.h
| ... | ... | @@ -167,9 +167,10 @@ BR_EXPORT void br_eval_classification(const char *predicted_gallery, const char |
| 167 | 167 | * \brief Evaluates and prints clustering accuracy to the terminal. |
| 168 | 168 | * \param csv The cluster results file. |
| 169 | 169 | * \param gallery The br::Gallery used to generate the \ref simmat that was clustered. |
| 170 | + * \param truth_property (Optional) which metadata key to use from <i>gallery</i/>, defaults to Label | |
| 170 | 171 | * \see br_cluster |
| 171 | 172 | */ |
| 172 | -BR_EXPORT void br_eval_clustering(const char *csv, const char *gallery); | |
| 173 | +BR_EXPORT void br_eval_clustering(const char *csv, const char *gallery, const char * truth_property); | |
| 173 | 174 | |
| 174 | 175 | /*! |
| 175 | 176 | * \brief Evaluates and prints detection accuracy to terminal. | ... | ... |