コード例 #1
0
    def __init__(self, geometry: RadonGeometry, data_name: str = '', algorithm_name: str = ''):
        """
        Args:
            data_name: suffix added to data directories name
            algorithm_name: suffix added to concrete system's directory name
        """
        if platform.system() == 'Windows':
            self.PROJECT_DIRECTORY = "C:\\Users\\juhos\\NemSzinkronizalt\\NN\\LIDCArtifactReduction"
            self.PROJECT_DATA_DIRECTORY = utility.direc(PROJECT_DIRECTORY, 'LIDCArtifactReduction_Data')

        else:  # 'Linux'
            self.PROJECT_DIRECTORY = '/home/juhosa/LIDCArtifactReduction/'
            self.PROJECT_DATA_DIRECTORY = '/home/juhosa/CI/LIDCArtifactReduction_Data'

        data_prefix = '-' + data_name
        configuration = data_prefix \
                        + '-width' + str(geometry.volume_img_width) \
                        + '-detw' + str(geometry.projection_width) \
                        + '-a' + str(geometry.nr_projections)
        self.DATA_DIRECTORY = utility.direc(PROJECT_DATA_DIRECTORY, 'LIDC-IDRI-transformed' + configuration)
        self.SAMPLE_DATA_DIRECTORY = utility.direc(PROJECT_DATA_DIRECTORY,
                                                   'LIDC-IDRI-sample-transformed' + configuration)


        algorithm_dir = 'algorithm-' + algorithm_name
        self.ALGORITHM_DIRECTORY = utility.direc(PROJECT_DATA_DIRECTORY, algorithm_dir)

        self.MODEL_WEIGHTS_DIRECTORY = utility.direc(self.ALGORITHM_DIRECTORY, 'model_weights')
        self.PREDICTED_IMAGES_DIR = utility.direc(self.ALGORITHM_DIRECTORY, 'predictions')
        self.DATA_CONFIGURATION_DIR = utility.direc(self.ALGORITHM_DIRECTORY, 'data_config')

        self.LOG_DIRECTORY = utility.direc(self.ALGORITHM_DIRECTORY, 'logs')
        self.TENSORBOARD_LOGDIR = utility.direc(self.LOG_DIRECTORY, 'tensorboard')
        self.CSV_LOGDIR = utility.direc(self.LOG_DIRECTORY, 'csvlogger')
コード例 #2
0
    def evaluate(self,
                 data_iterator,
                 steps=None,
                 tensorboard_logging: bool = False,
                 csv_logging: bool = False,
                 verbose=1):
        callbacks = []

        name_datetime = self.name + '-' + datetime.now().strftime(
            "%Y%m%d-%H%M")
        # Tensorboard
        if tensorboard_logging:
            tensorboard_logdir = utility.direc(
                self._directory_system.TENSORBOARD_LOGDIR, "evaluate",
                name_datetime)
            tensorboard = TensorBoard(log_dir=tensorboard_logdir,
                                      histogram_freq=1,
                                      write_graph=True)
            callbacks.append(tensorboard)

        # CSV logging
        if csv_logging:
            txt_logdir = utility.direc(self._directory_system.CSV_LOGDIR,
                                       "evaluate")
            txt_filename = os.path.join(txt_logdir, name_datetime + '.log')
            csvlogger = CSVLogger(filename=txt_filename)
            callbacks.append(csvlogger)

        # Number of batches used.
        # Use entire dataset once.
        if steps is None:
            steps: int = len(data_iterator)

        return self._model.evaluate(x=data_iterator,
                                    steps=steps,
                                    callbacks=callbacks,
                                    verbose=verbose)
コード例 #3
0
import platform

from LIDCArtifactReduction.radon_transformation.radon_geometry import RadonGeometry
from LIDCArtifactReduction import utility


if platform.system() == 'Windows':
    PROJECT_DIRECTORY = "C:\\Users\\juhos\\NemSzinkronizalt\\NN\\LIDCArtifactReduction"
    PROJECT_DATA_DIRECTORY = utility.direc(PROJECT_DIRECTORY, 'LIDCArtifactReduction_Data')

else:  # 'Linux'
    PROJECT_DIRECTORY = '/home/juhosa/LIDCArtifactReduction/'
    PROJECT_DATA_DIRECTORY = '/home/juhosa/CI/LIDCArtifactReduction_Data'


MODEL_PLOTS_DIRECTORY = utility.direc(PROJECT_DIRECTORY, 'model_plots')
#MODEL_DIRECTORY = utility.direc(PROJECT_DATA_DIRECTORY, 'models')

BASE_MODEL_WEIGHTS_DIRECTORY = utility.direc(PROJECT_DATA_DIRECTORY, 'model_weights')




class DirectorySystem:
    def __init__(self, geometry: RadonGeometry, data_name: str = '', algorithm_name: str = ''):
        """
        Args:
            data_name: suffix added to data directories name
            algorithm_name: suffix added to concrete system's directory name
        """
        if platform.system() == 'Windows':
コード例 #4
0
    def fit(self,
            train_iterator,
            validation_iterator,
            epochs: int,
            steps_per_epoch=None,
            validation_steps=None,
            early_stoppig_patience: int or None = None,
            csv_logging: bool = False,
            test_data=None,
            verbose=1,
            initial_epoch=0):

        ## Callbacks
        # Modelcheckpointer
        name_datetime = self.name + '-' + datetime.now().strftime(
            "%Y%m%d-%H%M")
        monitored_value = 'val_' + DCAR_TrainingNetwork.reconstruction_output_name + '_hu_mae'

        file = os.path.join(self.weight_dir, name_datetime)
        #file = file + '.{epoch:02d}-{' + monitored_value + ':.1f}' + self._model_weights_extension
        file = file + '-HUMAE-{' + monitored_value + ':.1f}' + self._model_weights_extension
        checkpointer = ModelCheckpoint(monitor=monitored_value,
                                       filepath=file,
                                       save_best_only=True,
                                       save_weights_only=True,
                                       verbose=1,
                                       save_freq='epoch')

        # Tensorboard
        tensorboard_logdir = utility.direc(
            self._directory_system.TENSORBOARD_LOGDIR, "fit", name_datetime)
        tensorboard = TensorBoard(log_dir=tensorboard_logdir,
                                  histogram_freq=1,
                                  write_graph=True)

        callbacks = [checkpointer, tensorboard]

        if early_stoppig_patience is not None:
            earlystopping = EarlyStopping(patience=early_stoppig_patience,
                                          verbose=1)
            callbacks.append(earlystopping)

        if csv_logging:
            txt_logdir = utility.direc(self._directory_system.CSV_LOGDIR,
                                       "fit")
            txt_filename = os.path.join(txt_logdir, name_datetime + '.log')
            csvlogger = CSVLogger(filename=txt_filename)
            callbacks.append(csvlogger)

        if test_data is not None:
            test_image_direc = utility.direc(tensorboard_logdir,
                                             'case_studies')
            tb_test_image_writer = tf.summary.create_file_writer(
                test_image_direc)
            tb_test_image_writer.set_as_default()

            bad_rec, good_rec, good_sino = DCAR_TrainingNetwork.input_data_decoder(
                test_data)
            nr_imgs = len(bad_rec)

            def log_test_data(epoch, logs):
                test_reconstructions, test_sinograms = self._model(bad_rec)
                for i in range(0, nr_imgs):
                    tf.summary.image(name=f"test_image_{i}",
                                     data=tf.stack([
                                         good_rec[i], bad_rec[i],
                                         test_reconstructions[i]
                                     ]),
                                     step=epoch)

            test_data_cb = LambdaCallback(on_epoch_end=log_test_data)
            callbacks.append(test_data_cb)

        # Number of batches used.
        # Use entire dataset once.
        if steps_per_epoch is None:
            steps_per_epoch: int = len(train_iterator)
        if validation_steps is None:
            validation_steps: int = len(validation_iterator)

        return self._model.fit(x=train_iterator,
                               validation_data=validation_iterator,
                               epochs=epochs,
                               steps_per_epoch=steps_per_epoch,
                               validation_steps=validation_steps,
                               callbacks=callbacks,
                               verbose=verbose,
                               initial_epoch=initial_epoch)
コード例 #5
0
    radon_geometry=geometry,
    radon_transformation=radon_transform,
    target_model=unet,
    name='UNet_L1TV_ValRec_Sample_Training',
    dir_system=ds)
training_network.load_weights(
    name='UNet_Transferred_NoTV_Training.06-0.0042')  #latest=True)

test_batch = next(test_iterator)
test_batch = test_batch[:2]
results = training_network(test_batch)
results = (results[0].numpy(), results[1].numpy())

nr_of_samples = 3
timestemp = datetime.now().strftime("%Y%m%d-%H%M%S")
base_dir = utility.direc(ds.PREDICTED_IMAGES_DIR,
                         'UNet_Transferred_NoTV_Training.06-0.0042')

for i in range(nr_of_samples):

    direc = utility.direc(base_dir, '{:02d}'.format(i))
    show_grey([
        test_batch[0][DCAR_TrainingNetwork.input_name][i],
        test_batch[1][DCAR_TrainingNetwork.reconstruction_output_name][i],
        results[0][i]
    ],
              norm_values=[-1.0, 5.0],
              save_names=['in_noisy_rec', 'out_expected_rec', 'predicted_rec'],
              directory=direc)

    show_grey([
        test_batch[1][DCAR_TrainingNetwork.sino_output_name][i], results[1][i]