def test_centre_of_mass(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'],
                                          pixdim=[2])
     self.assertListEqual(list(pairwise_measures.com_ref()), [0.0])
     self.assertListEqual(list(pairwise_measures.com_seg()), [1.0])
     self.assertEqual(pairwise_measures.com_dist(), 2.)
Beispiel #2
0
 def test_centre_of_mass(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'],
                                          pixdim=[2])
     self.assertListEqual(list(pairwise_measures.com_ref()), [0.0])
     self.assertListEqual(list(pairwise_measures.com_seg()), [1.0])
     self.assertEqual(pairwise_measures.com_dist(), 2.)
 def test_accuracy(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.accuracy(), 3. / 4)
 def test_sensitivity(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.sensitivity(), 1.)
 def test_n_negative(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.n_neg_ref(), 3.)
     self.assertEqual(pairwise_measures.n_neg_seg(), 2.)
 def test_faulty_inputs(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[3]['seg_img'],
                                          ref_img=TEST_CASES[3]['ref_img'])
     self.assertRaises(ValueError, pairwise_measures.tp)
 def test_binary_check_for_probabilities(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[3]['seg_img'],
                                          ref_img=TEST_CASES[3]['ref_img'])
     self.assertRaises(ValueError, pairwise_measures.check_binary)
 def test_informedness(self):
     # true positive rate - false positive rate
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertAlmostEqual(pairwise_measures.informedness(), 2. / 3)
Beispiel #9
0
 def test_n_negative(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.n_neg_ref(), 3.)
     self.assertEqual(pairwise_measures.n_neg_seg(), 2.)
Beispiel #10
0
 def test_true_negative(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.tn(), 2.)
Beispiel #11
0
 def test_dice_score(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[0]['seg_img'],
                                          ref_img=TEST_CASES[0]['ref_img'])
     self.assertEqual(pairwise_measures.dice_score(), 1.0)
Beispiel #12
0
 def test_vol_diff(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'],
                                          pixdim=[2])
     self.assertEqual(pairwise_measures.vol_diff(), 1.)
Beispiel #13
0
 def test_markedness(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.markedness(), 1. / 2)
Beispiel #14
0
 def test_informedness(self):
     # true positive rate - false positive rate
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertAlmostEqual(pairwise_measures.informedness(), 2. / 3)
Beispiel #15
0
 def test_intersection(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.n_intersection(), 1.)
Beispiel #16
0
 def test_jaccard(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.jaccard(), 1. / 2)
Beispiel #17
0
 def test_sensitivity(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.sensitivity(), 1.)
Beispiel #18
0
 def test_markedness(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.markedness(), 1. / 2)
Beispiel #19
0
 def test_specificity(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.specificity(), 2. / 3)
Beispiel #20
0
 def test_vol_diff(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'],
                                          pixdim=[2])
     self.assertEqual(pairwise_measures.vol_diff(), 1.)
Beispiel #21
0
 def test_accuracy(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.accuracy(), 3. / 4)
Beispiel #22
0
 def test_dice_score(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[0]['seg_img'],
                                          ref_img=TEST_CASES[0]['ref_img'])
     self.assertEqual(pairwise_measures.dice_score(), 1.0)
Beispiel #23
0
 def test_false_positive_rate(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.false_positive_rate(), 1. / 3)
Beispiel #24
0
 def test_true_negative(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.tn(), 2.)
Beispiel #25
0
 def test_positive_predictive_value(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.positive_predictive_values(), 1. / 2)
Beispiel #26
0
 def test_intersection(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.n_intersection(), 1.)
Beispiel #27
0
 def test_false_positive_rate(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.false_positive_rate(), 1. / 3)
Beispiel #28
0
 def test_specificity(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.specificity(), 2. / 3)
Beispiel #29
0
 def test_negative_predictive_value(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.negative_predictive_values(), 1.)
Beispiel #30
0
def train(dsets, model, criterion, optimizer, num_epochs, device, cp_path,
          batch_size):
    since = time.time()

    dataloaders = {
        x: DataLoader(dsets[x],
                      batch_size=batch_size,
                      shuffle=True,
                      num_workers=4)
        for x in ['training', 'validation']
    }

    model = model.to(device)

    for epoch in range(num_epochs):
        print('Epoch {}/{}'.format(epoch + 1, num_epochs))
        print('-' * 10)

        # Each epoch has a training and validation phase
        for phase in ['training', 'validation']:
            if phase == 'training':
                model.train()  # Set model to training mode
            else:
                model.eval()  # Set model to evaluate mode

            running_loss = 0.0
            running_corrects = 0.0
            epoch_samples = 0

            # Iterate over data
            for iteration, (inputs,
                            labels) in enumerate(dataloaders[phase], 1):

                nbatches, wsize, nchannels, x, y, z, _ = inputs.size()

                inputs = inputs.view(nbatches * wsize, nchannels, x, y, z)
                labels = labels.view(nbatches * wsize, nchannels, x, y, z)

                inputs = inputs.to(device)
                labels = labels.to(device)

                # zero the parameter gradients
                optimizer.zero_grad()

                # forward
                # track history if only in train
                with torch.set_grad_enabled(phase == 'training'):
                    outputs = model(inputs)
                    pred = (outputs > 0.5)

                    loss = criterion(outputs, labels)

                    # backward + optimize only if in training phase
                    if phase == 'training':
                        loss.backward()
                        optimizer.step()

                # statistics
                epoch_samples += inputs.size(0)
                running_loss += loss.item() * inputs.size(0)
                measures = PairwiseMeasures(pred.cpu().numpy(),
                                            labels.cpu().numpy())
                running_corrects += measures.dice_score() * inputs.size(0)

            epoch_loss = running_loss / epoch_samples

            epoch_acc = running_corrects / epoch_samples

            print('{} Loss: {:.4f} Dice: {:.4f}'.format(
                phase, epoch_loss, epoch_acc))

            if epoch == 0:
                best_loss = epoch_loss
                torch.save(model.state_dict(), cp_path.format(epoch + 1))

            # deep copy the model
            if phase == 'validation' and epoch_loss < best_loss:
                best_loss = epoch_loss
                torch.save(model.state_dict(), cp_path)
                print('Checkpoint {} saved!'.format(epoch + 1))

        print()

    time_elapsed = time.time() - since
    print('Training complete in {:.0f}m {:.0f}s'.format(
        time_elapsed // 60, time_elapsed % 60))
Beispiel #31
0
 def test_jaccard(self):
     pairwise_measures = PairwiseMeasures(seg_img=TEST_CASES[1]['seg_img'],
                                          ref_img=TEST_CASES[1]['ref_img'])
     self.assertEqual(pairwise_measures.jaccard(), 1. / 2)