From aa3fb9f9b91a0cc1f70e1dcf1f99cccfa05d76af Mon Sep 17 00:00:00 2001 From: Daniel Girardeau-Montaut Date: Fri, 21 Sep 2018 20:16:44 +0200 Subject: [PATCH] First draft of the training GUI + other stuff --- mainDialog.ui | 110 ++++ qCanupo2Plugin.cpp | 4 +- qCanupo2Plugin.h | 2 +- training.ui | 1440 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1553 insertions(+), 3 deletions(-) create mode 100644 mainDialog.ui create mode 100644 training.ui diff --git a/mainDialog.ui b/mainDialog.ui new file mode 100644 index 0000000..e7b7fc7 --- /dev/null +++ b/mainDialog.ui @@ -0,0 +1,110 @@ + + + Dialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 20 + 50 + 205 + 54 + + + + + + + false + + + + 0 + 0 + + + + Source cloud #1 (not labelled) + + + + + + + color: red; + + + Warning: points must be associated to the +same class labels as the trained classes + + + Qt::AlignCenter + + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/qCanupo2Plugin.cpp b/qCanupo2Plugin.cpp index 7e79772..4c8a807 100644 --- a/qCanupo2Plugin.cpp +++ b/qCanupo2Plugin.cpp @@ -32,7 +32,7 @@ void qCanupo2Plugin::onNewSelection(const ccHObject::Container& selectedEntities // m_action->setEnabled(!selectedEntities.empty()); } -void qCanupo2Plugin::getActions(QActionGroup& group) +QList qCanupo2Plugin::getActions() { if (!m_action) { @@ -43,7 +43,7 @@ void qCanupo2Plugin::getActions(QActionGroup& group) connect(m_action, SIGNAL(triggered()), this, SLOT(doAction())); } - group.addAction(m_action); + return QList{m_action}; } void qCanupo2Plugin::doAction() diff --git a/qCanupo2Plugin.h b/qCanupo2Plugin.h index 412cbc8..9cc2a97 100644 --- a/qCanupo2Plugin.h +++ b/qCanupo2Plugin.h @@ -41,7 +41,7 @@ public: //inherited from ccStdPluginInterface void onNewSelection(const ccHObject::Container& selectedEntities) override; - virtual void getActions(QActionGroup& group) override; + virtual QList getActions() override; protected slots: diff --git a/training.ui b/training.ui new file mode 100644 index 0000000..576abc4 --- /dev/null +++ b/training.ui @@ -0,0 +1,1440 @@ + + + Dialog + + + + 0 + 0 + 750 + 650 + + + + Dialog + + + + + + 0 + + + + Classes, Training and Test data + + + + + + + + percentage of training data + + + true + + + + + + + 0.050000000000000 + + + 0.200000000000000 + + + + + + + cloud + + + + + + + false + + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Source cloud #1 (not labelled) + + + + + + + color: red; + + + Warning: points must be associated to the same class labels as the trained classes + + + Qt::AlignCenter + + + + + + + + + + + + + + + 0 + 0 + + + + Source cloud #1 (not labelled) + + + + + + + source cloud #2 (not labelled) + + + + + + + false + + + + 0 + 0 + + + + Source cloud #2 (not labelled) - optional + + + + + + + core points (labelled) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + QFrame::Box + + + + + + + 0 + 0 + + + + Labelled core points: coud be the same as cloud #1 +but should ideally be smaller (e.g. a subsampled version of cloud #1) + + + + + + + + + classification scalar field + + + + + + + + + + number of classes + + + + + + + 0 + + + + + + + classes + + + + + + + + 16777215 + 120 + + + + + 7 + + + + true + + + true + + + false + + + + 0 + + + + + 1 + + + + + Class + + + + + Count + + + + + 0 + + + + + 32651 + + + + + 1 + + + + + 465 + + + + + + + + + + false + + + Use previously computed features +(only if the cloud has already been processed) + + + USE PREVIOUSLY COMPUTED FEATURES + + + + + + + + + + source cloud #1 (not labelled) + + + true + + + + + + + + + + + contextual cloud (labelled) + + + + + + + false + + + + 0 + 0 + + + + Source cloud #1 (not labelled) + + + + + + + + + + + homogenize sample numbers for each class + + + + + + + false + + + + + + 1000000000 + + + + + + + (max = 0) + + + + + + + + + + + + Contextual features + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Training + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Qt::Horizontal + + + + + + + Test data + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + + + + + Training data +pre-processing +and model testing + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + + Scales and Scalar/features selection + + + + + + From file + + + true + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Load file + + + + + + + <a href="https://www.cloudcompare.org/doc/wiki">see documentation</a> + + + true + + + + + + + + + + GUI mode (limited) + + + + + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Scales + + + + + + ramp + + + true + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Mininum scale + + + Min = + + + 6 + + + 0.000001000000000 + + + 1000000000.000000000000000 + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + Step + + + Step = + + + 6 + + + 0.000001000000000 + + + 1000000000.000000000000000 + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + Max scale + + + Max = + + + 6 + + + 0.000001000000000 + + + 1000000000.000000000000000 + + + 1.000000000000000 + + + + + + + + + + Inp + + + list + + + + + + + false + + + Input scales as a list of values (separated by a space character) + + + + + + + + + + Point based features + + + + + + intensity + + + + + + + number of returns + + + + + + + return number + + + + + + + echo ratio = return number / number of returns + + + echo ratio + + + + + + + RGB + + + + + + + dip angle + + + + + + + + + + + 0 + 0 + + + + Neigborhood based features + + + + + + + 0 + 0 + + + + QAbstractItemView::MultiSelection + + + + option 1 + + + + + option 2 + + + + + ... + + + + + + + + + + + + 0 + 0 + + + + Contextual features + + + true + + + + + + + 0 + 0 + + + + QAbstractItemView::MultiSelection + + + + Ground + + + + + Water + + + + + ... + + + + + + + + + + Nearest neighbors + + + + + + + The vertical distance will be computed to the 'k' nearest neighbors + + + + + + + + + + + + Requires two source clouds + + + Dual-cloud features + + + true + + + false + + + + + + mean elveation difference + + + + + + + ratio of mean intensities + + + + + + + standard deviation of cloud #1 + + + + + + + standard deviation of cloud #2 + + + + + + + + + + + + + + Classifier and training mode + + + + + + Random Trees + + + + + + Number of trees + + + + + + + 10 + + + 10000 + + + 10 + + + 200 + + + + + + + Tree depth + + + + + + + 1 + + + 200 + + + 25 + + + + + + + + + + Training mode + + + + + + Simple training + + + true + + + + + + + Select the most contributive features and scales +(in order to reduce computation time and reduce the classifier size) + + + Feature and scale selection by importance + + + + + + + k-fold Crossvalidation + + + + + + + false + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + k + + + + + + + 2 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Select the most contributive features and scales +(in order to reduce computation time and reduce the classifier size) + + + Feature and scale selection + + + + + + + Select the most contributive features and scales +(in order to reduce computation time and reduce the classifier size) + + + Tree depth selection + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 253 + + + + + + + + + Speed features + + + + + + Pyramidal subsampling + + + true + + + + + + Pyramidal levels + + + + + + + 2 + + + 10 + + + 3 + + + + + + + + + + Octree-based feature computation + + + + + + Min. scale + + + + + + + 3 + + + 0.001000000000000 + + + 1000000.000000000000000 + + + 0.100000000000000 + + + 0.500000000000000 + + + + + + + Depth + + + + + + + 1 + + + 21 + + + 5 + + + + + + + + + + Qt::Vertical + + + + 20 + 412 + + + + + + + + + Outputs + + + + + + Output display + + + + + + Confusion matrix + + + + + + + Bar chart of feature importance + + + + + + + false + + + + + + number of features + + + + + + + Number of features to show in the bar chart + + + 1 + + + + + + + + + + + + + Can be re-used in 3DMASC "Create" to avoid re-computing the features + + + Save training core points with computed features as scalars + + + + + + + Qt::Vertical + + + + 20 + 449 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + sourceCloud2CheckBox + toggled(bool) + clud2CloudComboBox + setEnabled(bool) + + + 254 + 76 + + + 534 + 77 + + + + + contextualFeaturesCheckBox + toggled(bool) + contextFeaturesCloudComboBox + setEnabled(bool) + + + 220 + 511 + + + 502 + 512 + + + + + testWithPercentageRadioButton + toggled(bool) + testPercentageDoubleSpinBox + setEnabled(bool) + + + 240 + 407 + + + 532 + 408 + + + + + homogenizeSampleCountCheckBox + toggled(bool) + sampleCountFrame + setEnabled(bool) + + + 267 + 580 + + + 462 + 582 + + + + + fromFileRadioButton + toggled(bool) + featuresFromFileGroupBox + setEnabled(bool) + + + 51 + 48 + + + 426 + 51 + + + + + guiModeRadioButton + toggled(bool) + featuresFromGUIGroupBox + setEnabled(bool) + + + 75 + 77 + + + 426 + 415 + + + + + simpleTrainingRadioButton + toggled(bool) + simpleFeatAndScaleSelectCheckBox + setEnabled(bool) + + + 141 + 319 + + + 331 + 319 + + + + + kFoldCrossValidRadioButton + toggled(bool) + kValueFrame + setEnabled(bool) + + + 141 + 379 + + + 297 + 414 + + + + + showBarChartCheckBox + toggled(bool) + barChatFeatureGroupBox + setEnabled(bool) + + + 155 + 459 + + + 329 + 461 + + + + + testWithCloudRadioButton + toggled(bool) + testCloudFrame + setEnabled(bool) + + + 147 + 370 + + + 505 + 385 + + + + +