diff --git a/openbr/core/eval.cpp b/openbr/core/eval.cpp index 98ffe97..1136ebe 100755 --- a/openbr/core/eval.cpp +++ b/openbr/core/eval.cpp @@ -993,12 +993,14 @@ void EvalRegression(const QString &predictedGallery, const QString &truthGallery if (predicted[i].file.name != truth[i].file.name) qFatal("Input order mismatch."); - float difference = predicted[i].file.get(predictedProperty) - truth[i].file.get(truthProperty); + if (predicted[i].file.contains(predictedProperty) && truth[i].file.contains(truthProperty)) { + float difference = predicted[i].file.get(predictedProperty) - truth[i].file.get(truthProperty); - rmsError += pow(difference, 2.f); - maeError += fabsf(difference); - truthValues.append(QString::number(truth[i].file.get(truthProperty))); - predictedValues.append(QString::number(predicted[i].file.get(predictedProperty))); + rmsError += pow(difference, 2.f); + maeError += fabsf(difference); + truthValues.append(QString::number(truth[i].file.get(truthProperty))); + predictedValues.append(QString::number(predicted[i].file.get(predictedProperty))); + } } QStringList rSource; diff --git a/openbr/plugins/independent.cpp b/openbr/plugins/independent.cpp index f6ca991..998ed92 100644 --- a/openbr/plugins/independent.cpp +++ b/openbr/plugins/independent.cpp @@ -118,6 +118,40 @@ class DownsampleTrainingTransform : public Transform }; BR_REGISTER(Transform, DownsampleTrainingTransform) +class DownsampleMetadataTransform : public Transform +{ + Q_OBJECT + Q_PROPERTY(br::Transform* transform READ get_transform WRITE set_transform RESET reset_transform STORED true) + Q_PROPERTY(QString inputVariable READ get_inputVariable WRITE set_inputVariable RESET reset_inputVariable STORED false) + BR_PROPERTY(br::Transform*, transform, NULL) + BR_PROPERTY(QString, inputVariable, "Label") + + Transform *simplify(bool &newTForm) + { + Transform *res = transform->simplify(newTForm); + return res; + } + + void project(const Template &src, Template &dst) const + { + transform->project(src,dst); + } + + void train(const TemplateList &data) + { + if (!transform || !transform->trainable) + return; + + TemplateList downsampled = data; + for (int i=downsampled.size()-1; i>=0; i--) + if (!downsampled[i].file.contains(inputVariable)) + downsampled.removeAt(i); + + transform->train(downsampled); + } +}; +BR_REGISTER(Transform, DownsampleMetadataTransform) + /*! * \ingroup transforms * \brief Clones the transform so that it can be applied independently.