Skip to content

Commit 64947c1

Browse files
authored
Fix #2398 - Crash on DeepSSM "Groom Training Shapes" when training is set to 0% (#2399)
We now have the user set training and val and test is auto set. Also fix crash and add error messages.
1 parent ff4d4c6 commit 64947c1

File tree

4 files changed

+78
-41
lines changed

4 files changed

+78
-41
lines changed

Libs/Groom/Groom.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,11 @@ bool Groom::run_alignment() {
518518
size_t num_domains = project_->get_number_of_domains_per_subject();
519519
auto subjects = project_->get_subjects();
520520

521+
if (subjects.empty()) {
522+
SW_ERROR("No subjects to groom");
523+
return false;
524+
}
525+
521526
auto base_params = GroomParameters(project_);
522527

523528
bool global_icp = false;
@@ -564,6 +569,10 @@ bool Groom::run_alignment() {
564569

565570
if (global_icp) {
566571
Mesh reference_mesh = vtkSmartPointer<vtkPolyData>::New();
572+
if (reference_meshes.empty()) {
573+
SW_ERROR("No reference meshes available");
574+
return false;
575+
}
567576
if (reference_index < 0 || reference_index >= reference_meshes.size()) {
568577
reference_index = MeshUtils::findReferenceMesh(reference_meshes, subset_size);
569578
if (reference_index < 0 || reference_index >= reference_meshes.size()) {
@@ -632,6 +641,11 @@ bool Groom::run_alignment() {
632641
reference_index = params.get_alignment_reference();
633642
subset_size = params.get_alignment_subset_size();
634643

644+
if (reference_meshes.empty()) {
645+
SW_ERROR("No reference meshes available");
646+
return false;
647+
}
648+
635649
Mesh reference_mesh = vtkSmartPointer<vtkPolyData>::New();
636650
if (reference_index < 0 || reference_index >= subjects.size()) {
637651
reference_index = MeshUtils::findReferenceMesh(reference_meshes, subset_size);

Studio/DeepSSM/DeepSSMJob.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,15 @@ void DeepSSMJob::run_prep() {
107107
py::object create_split = py_deep_ssm_utils.attr("create_split");
108108
create_split(project_, train_split, val_split, test_split);
109109

110+
int num_train = DeepSSMTool::get_split(project_, DeepSSMTool::SplitType::TRAIN).size();
111+
int num_val = DeepSSMTool::get_split(project_, DeepSSMTool::SplitType::VAL).size();
112+
int num_test = DeepSSMTool::get_split(project_, DeepSSMTool::SplitType::TEST).size();
113+
if (num_train == 0 || num_val == 0) {
114+
SW_ERROR("DeepSSM: Not enough subjects in training and validation. Please check split.");
115+
abort();
116+
//return;
117+
}
118+
110119
if (is_aborted()) {
111120
return;
112121
}

Studio/DeepSSM/DeepSSMTool.cpp

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ DeepSSMTool::DeepSSMTool(Preferences& prefs) : preferences_(prefs) {
9494
QIntValidator* zero_to_hundred = new QIntValidator(0, 100, this);
9595
ui_->validation_split->setValidator(zero_to_hundred);
9696
ui_->testing_split->setValidator(zero_to_hundred);
97+
ui_->training_split->setValidator(zero_to_hundred);
9798

9899
QDoubleValidator* double_validator = new QDoubleValidator(0, 100, 4, this);
99100
double_validator->setNotation(QDoubleValidator::StandardNotation);
@@ -102,8 +103,8 @@ DeepSSMTool::DeepSSMTool(Preferences& prefs) : preferences_(prefs) {
102103
ui_->spacing_y->setValidator(double_validator);
103104
ui_->spacing_z->setValidator(double_validator);
104105

106+
connect(ui_->training_split, &QLineEdit::editingFinished, this, &DeepSSMTool::update_split);
105107
connect(ui_->validation_split, &QLineEdit::editingFinished, this, &DeepSSMTool::update_split);
106-
connect(ui_->testing_split, &QLineEdit::editingFinished, this, &DeepSSMTool::update_split);
107108

108109
ui_->tl_net_options->setVisible(false);
109110

@@ -198,6 +199,7 @@ void DeepSSMTool::load_params() {
198199
void DeepSSMTool::store_params() {
199200
auto params = DeepSSMParameters(session_->get_project());
200201

202+
params.set_training_split(ui_->training_split->text().toDouble());
201203
params.set_validation_split(ui_->validation_split->text().toDouble());
202204
params.set_testing_split(ui_->testing_split->text().toDouble());
203205

@@ -382,22 +384,24 @@ void DeepSSMTool::update_panels() {
382384

383385
//---------------------------------------------------------------------------
384386
void DeepSSMTool::update_split() {
387+
double training = ui_->training_split->text().toDouble();
385388
double testing = ui_->testing_split->text().toDouble();
386389
double validation = ui_->validation_split->text().toDouble();
390+
training = std::max<double>(std::min<double>(training, 100), 0);
387391
testing = std::max<double>(std::min<double>(testing, 100), 0);
388392
validation = std::max<double>(std::min<double>(validation, 100), 0);
389393

390-
if (testing + validation > 100) {
391-
if (testing > validation) {
392-
validation = 100 - testing;
394+
if (training + validation > 100) {
395+
if (training > validation) {
396+
validation = 100 - training;
393397
} else {
394-
testing = 100 - validation;
398+
training = 100 - validation;
395399
}
396400
}
397401

398-
ui_->testing_split->setText(QString::number(testing));
402+
ui_->training_split->setText(QString::number(training));
399403
ui_->validation_split->setText(QString::number(validation));
400-
ui_->training_split->setText(QString::number(100 - testing - validation));
404+
ui_->testing_split->setText(QString::number(100 - training - validation));
401405
}
402406

403407
//---------------------------------------------------------------------------
@@ -922,6 +926,10 @@ void DeepSSMTool::run_tool(DeepSSMTool::ToolMode type) {
922926
} else if (type == DeepSSMTool::ToolMode::DeepSSM_PrepType) {
923927
ui_->tab_widget->setCurrentIndex(0);
924928

929+
// check that there are at least 1 subject in test/val/train each
930+
931+
932+
925933
SW_LOG("Please Wait: Running Groom/Optimize...");
926934
} else {
927935
SW_ERROR("Unknown tool mode");

Studio/DeepSSM/DeepSSMTool.ui

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -579,8 +579,11 @@ Preserved</string>
579579
<string>Split</string>
580580
</property>
581581
<layout class="QGridLayout" name="gridLayout_14">
582-
<item row="0" column="1">
582+
<item row="2" column="1">
583583
<widget class="QLineEdit" name="testing_split">
584+
<property name="enabled">
585+
<bool>false</bool>
586+
</property>
584587
<property name="sizePolicy">
585588
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
586589
<horstretch>0</horstretch>
@@ -590,22 +593,44 @@ Preserved</string>
590593
<property name="alignment">
591594
<set>Qt::AlignCenter</set>
592595
</property>
596+
<property name="readOnly">
597+
<bool>true</bool>
598+
</property>
593599
</widget>
594600
</item>
595-
<item row="1" column="0">
596-
<widget class="QLabel" name="label_12">
601+
<item row="0" column="0">
602+
<widget class="QLabel" name="label_33">
597603
<property name="sizePolicy">
598604
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
599605
<horstretch>0</horstretch>
600606
<verstretch>0</verstretch>
601607
</sizepolicy>
602608
</property>
603609
<property name="text">
604-
<string>Validation</string>
610+
<string>Training</string>
605611
</property>
606612
</widget>
607613
</item>
608-
<item row="0" column="0">
614+
<item row="0" column="1">
615+
<widget class="QLineEdit" name="training_split">
616+
<property name="enabled">
617+
<bool>true</bool>
618+
</property>
619+
<property name="sizePolicy">
620+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
621+
<horstretch>0</horstretch>
622+
<verstretch>0</verstretch>
623+
</sizepolicy>
624+
</property>
625+
<property name="alignment">
626+
<set>Qt::AlignCenter</set>
627+
</property>
628+
<property name="readOnly">
629+
<bool>false</bool>
630+
</property>
631+
</widget>
632+
</item>
633+
<item row="2" column="0">
609634
<widget class="QLabel" name="label_11">
610635
<property name="sizePolicy">
611636
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@@ -618,51 +643,35 @@ Preserved</string>
618643
</property>
619644
</widget>
620645
</item>
621-
<item row="0" column="2">
646+
<item row="2" column="2">
622647
<widget class="QLabel" name="label_14">
623648
<property name="text">
624649
<string>%</string>
625650
</property>
626651
</widget>
627652
</item>
628-
<item row="1" column="1">
629-
<widget class="QLineEdit" name="validation_split">
630-
<property name="sizePolicy">
631-
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
632-
<horstretch>0</horstretch>
633-
<verstretch>0</verstretch>
634-
</sizepolicy>
635-
</property>
636-
<property name="alignment">
637-
<set>Qt::AlignCenter</set>
638-
</property>
639-
</widget>
640-
</item>
641-
<item row="1" column="2">
642-
<widget class="QLabel" name="label_15">
653+
<item row="0" column="2">
654+
<widget class="QLabel" name="label_34">
643655
<property name="text">
644656
<string>%</string>
645657
</property>
646658
</widget>
647659
</item>
648-
<item row="2" column="0">
649-
<widget class="QLabel" name="label_33">
660+
<item row="1" column="0">
661+
<widget class="QLabel" name="label_12">
650662
<property name="sizePolicy">
651663
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
652664
<horstretch>0</horstretch>
653665
<verstretch>0</verstretch>
654666
</sizepolicy>
655667
</property>
656668
<property name="text">
657-
<string>Training</string>
669+
<string>Validation</string>
658670
</property>
659671
</widget>
660672
</item>
661-
<item row="2" column="1">
662-
<widget class="QLineEdit" name="training_split">
663-
<property name="enabled">
664-
<bool>false</bool>
665-
</property>
673+
<item row="1" column="1">
674+
<widget class="QLineEdit" name="validation_split">
666675
<property name="sizePolicy">
667676
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
668677
<horstretch>0</horstretch>
@@ -672,13 +681,10 @@ Preserved</string>
672681
<property name="alignment">
673682
<set>Qt::AlignCenter</set>
674683
</property>
675-
<property name="readOnly">
676-
<bool>true</bool>
677-
</property>
678684
</widget>
679685
</item>
680-
<item row="2" column="2">
681-
<widget class="QLabel" name="label_34">
686+
<item row="1" column="2">
687+
<widget class="QLabel" name="label_15">
682688
<property name="text">
683689
<string>%</string>
684690
</property>

0 commit comments

Comments
 (0)