Commit 7f2c455eac1191fa6805b1849ae341ddad1791d1
1 parent
1699213d
Average Distance, minor output changes, eval now outputs max rank scores
Showing
5 changed files
with
16 additions
and
14 deletions
openbr/core/plot.cpp
| ... | ... | @@ -250,6 +250,7 @@ float Evaluate(const QString &simmat, const QString &mask, const QString &csv) |
| 250 | 250 | |
| 251 | 251 | // Write Cumulative Match Characteristic (CMC) curve |
| 252 | 252 | const int Max_Retrieval = 25; |
| 253 | + float maxRankRate; | |
| 253 | 254 | for (int i=1; i<=Max_Retrieval; i++) { |
| 254 | 255 | int realizedReturns = 0, possibleReturns = 0; |
| 255 | 256 | foreach (int firstGenuineReturn, firstGenuineReturns) { |
| ... | ... | @@ -257,10 +258,11 @@ float Evaluate(const QString &simmat, const QString &mask, const QString &csv) |
| 257 | 258 | if (firstGenuineReturn <= i) realizedReturns++; |
| 258 | 259 | } |
| 259 | 260 | lines.append(qPrintable(QString("CMC,%1,%2").arg(QString::number(i), QString::number(float(realizedReturns)/possibleReturns)))); |
| 261 | + if (i==(Max_Retrieval)) maxRankRate = float(realizedReturns)/possibleReturns; | |
| 260 | 262 | } |
| 261 | 263 | |
| 262 | 264 | if (!csv.isEmpty()) QtUtils::writeFile(csv, lines); |
| 263 | - qDebug("TAR @ FAR = 0.01: %.3f", result); | |
| 265 | + qDebug("TAR @ FAR = 0.01: %.3f\nRetrieval Rate at Rank 25: %.3f", result, maxRankRate); | |
| 264 | 266 | return result; |
| 265 | 267 | } |
| 266 | 268 | ... | ... |
openbr/openbr_plugin.cpp
| ... | ... | @@ -968,6 +968,7 @@ void br::Context::messageHandler(QtMsgType type, const QMessageLogContext &conte |
| 968 | 968 | // Write debug output then close |
| 969 | 969 | qDebug(" File: %s\n Function: %s\n Line: %d", qPrintable(context.file), qPrintable(context.function), context.line); |
| 970 | 970 | Globals->finalize(); |
| 971 | + //QCoreApplication::exit(-1); | |
| 971 | 972 | abort(); |
| 972 | 973 | } |
| 973 | 974 | } | ... | ... |
openbr/plugins/distance.cpp
| ... | ... | @@ -177,6 +177,11 @@ class PipeDistance : public Distance |
| 177 | 177 | |
| 178 | 178 | BR_REGISTER(Distance, PipeDistance) |
| 179 | 179 | |
| 180 | +/*! | |
| 181 | + * \ingroup distances | |
| 182 | + * \brief Average distance of multiple matrices | |
| 183 | + * \author Scott Klum \cite sklum | |
| 184 | + */ | |
| 180 | 185 | class AverageDistance : public Distance |
| 181 | 186 | { |
| 182 | 187 | Q_OBJECT |
| ... | ... | @@ -190,19 +195,12 @@ class AverageDistance : public Distance |
| 190 | 195 | |
| 191 | 196 | float compare(const Template &a, const Template &b) const |
| 192 | 197 | { |
| 193 | - if (a.size() != b.size()) | |
| 194 | - qDebug() << a.size() << " " << b.size(); | |
| 198 | + if (a.size() != b.size()) qFatal("Comparison size mismatch"); | |
| 195 | 199 | |
| 196 | 200 | float score = 0; |
| 201 | + for (int i = 0; i < a.size(); i++) score += distance->compare(a[i],b[i]); | |
| 197 | 202 | |
| 198 | - for (int i = 0; i < a.size(); i++) { | |
| 199 | - //Template | |
| 200 | - score += distance->compare(a[i],b[i]); | |
| 201 | - } | |
| 202 | - | |
| 203 | - qDebug() << score; | |
| 204 | - | |
| 205 | - return score; | |
| 203 | + return score/(float)a.size(); | |
| 206 | 204 | } |
| 207 | 205 | }; |
| 208 | 206 | ... | ... |
openbr/plugins/gallery.cpp
| ... | ... | @@ -302,7 +302,7 @@ class memGallery : public Gallery |
| 302 | 302 | |
| 303 | 303 | static void align(TemplateList &templates) |
| 304 | 304 | { |
| 305 | - //if (templates[0].size() > 1) return; | |
| 305 | + if (!templates.empty() && templates[0].size() > 1) return; | |
| 306 | 306 | |
| 307 | 307 | bool uniform = true; |
| 308 | 308 | QVector<uchar> alignedData(templates.bytes<size_t>()); | ... | ... |
openbr/plugins/meta.cpp
| ... | ... | @@ -86,7 +86,7 @@ class PipeTransform : public CompositeTransform |
| 86 | 86 | TemplateList copy(data); |
| 87 | 87 | int i = 0; |
| 88 | 88 | while (i < transforms.size()) { |
| 89 | - fprintf(stderr, "%s", qPrintable(transforms[i]->objectName())); | |
| 89 | + fprintf(stderr, "\n%s", qPrintable(transforms[i]->objectName())); | |
| 90 | 90 | |
| 91 | 91 | // Conditional statement covers likely case that first transform is untrainable |
| 92 | 92 | if (transforms[i]->trainable) { |
| ... | ... | @@ -104,7 +104,7 @@ class PipeTransform : public CompositeTransform |
| 104 | 104 | !transforms[nextTrainableTransform]->trainable) |
| 105 | 105 | nextTrainableTransform++; |
| 106 | 106 | |
| 107 | - fprintf(stderr, " projecting...\n"); | |
| 107 | + fprintf(stderr, " projecting..."); | |
| 108 | 108 | QFutureSynchronizer<void> futures; |
| 109 | 109 | for (int j=0; j<copy.size(); j++) |
| 110 | 110 | if (Globals->parallelism) futures.addFuture(QtConcurrent::run(this, &PipeTransform::_projectPartial, ©[j], i, nextTrainableTransform)); |
| ... | ... | @@ -285,6 +285,7 @@ class ForkTransform : public CompositeTransform |
| 285 | 285 | |
| 286 | 286 | void train(const TemplateList &data) |
| 287 | 287 | { |
| 288 | + | |
| 288 | 289 | QFutureSynchronizer<void> futures; |
| 289 | 290 | for (int i=0; i<transforms.size(); i++) { |
| 290 | 291 | if (Globals->parallelism) futures.addFuture(QtConcurrent::run(_train, transforms[i], &data)); | ... | ... |