コード例 #1
0
                                         batch_size=mini_batch_size,
                                         seed=seed)
    mask_generator = mask_datagen.flow(mask_train,
                                       shuffle=False,
                                       batch_size=mini_batch_size,
                                       seed=seed)
    train_generator = zip_longest(image_generator, mask_generator)

    dev_generator = (img_dev, mask_dev)

    max_iter = int(np.ceil(len(img_train) / mini_batch_size)) * epochs
    steps_per_epoch = int(np.ceil(len(img_train) / mini_batch_size))
    curr_iter = 0

    base_lr = K.eval(model.optimizer.lr)
    lrate = lr_poly_decay(model, base_lr, curr_iter, max_iter, power=0.5)

    callbacks = []
    # ####################### tfboard ###########################
    if K.backend() == 'tensorflow':
        tensorboard = TensorBoard(log_dir=os.path.join(save_path,
                                                       'logs_unet_inv'),
                                  histogram_freq=10,
                                  write_graph=False,
                                  write_grads=False,
                                  write_images=False)
        callbacks.append(tensorboard)
    # ################### checkpoint saver#######################
    checkpoint = ModelCheckpoint(filepath=os.path.join(save_path,
                                                       'temp_weights.hdf5'),
                                 save_weights_only=True,
コード例 #2
0
def lr_scheduler(curr_epoch, curr_iter):
    total_iter = curr_epoch * steps_per_epoch + curr_iter
    lrate = lr_poly_decay(model, base_lr, total_iter, max_iter, power=0.5)

    print(' - lr: %f' % lrate)
    return lrate
コード例 #3
0
def train(image_path, contour_path, *, contour_type, crop_size, batch_size,
          seed, epoch_count):
    contours = load_all_contours(contour_path, contour_type, shuffle=True)

    loaded_train_x, loaded_train_y = export_all_contours(
        contours,
        image_path,
        crop_size=crop_size,
        sax_series=get_SAX_SERIES(),
    )

    input_shape = (crop_size, crop_size, 1)
    num_classes = 2

    m = fcn_model

    model = m(input_shape, num_classes)

    kwargs = dict(
        rotation_range=180,
        zoom_range=0.0,
        width_shift_range=0.0,
        height_shift_range=0.0,
        horizontal_flip=True,
        vertical_flip=True,
    )
    image_datagen = ImageDataGenerator(**kwargs)
    mask_datagen = ImageDataGenerator(**kwargs)

    image_generator = image_datagen.flow(
        loaded_train_x,
        shuffle=False,
        batch_size=batch_size,
        seed=seed,
    )
    mask_generator = mask_datagen.flow(
        loaded_train_y,
        shuffle=False,
        batch_size=batch_size,
        seed=seed,
    )
    train_generator = zip(image_generator, mask_generator)

    max_iter = (len(contours) / batch_size) * epoch_count
    curr_iter = 0
    base_lr = K.eval(model.optimizer.lr)
    learning_rate = lr_poly_decay(model,
                                  base_lr,
                                  curr_iter,
                                  max_iter,
                                  power=0.5)

    for epoch in range(1, epoch_count + 1):
        print()
        print('Main Epoch {:d}'.format(epoch))
        print('Learning rate: {:6f}'.format(learning_rate))
        train_result = []

        iter_count = len(img_train) // batch_size
        for img, mask in islice(train_generator, iter_count):
            res = model.train_on_batch(img, mask)
            curr_iter += 1
            learning_rate = lr_poly_decay(model,
                                          base_lr,
                                          curr_iter,
                                          max_iter,
                                          power=0.5)
            train_result.append(res)

        train_result = np.asarray(train_result)
        train_result = np.mean(train_result, axis=0).round(decimals=10)

        print('Train result {}:'.format(str(model.metrics_names)))
        print('{}'.format(str(train_result)))
        print()
        print('Evaluating dev set ...')

        result = model.evaluate(img_dev, mask_dev, batch_size=32)
        result = np.round(result, decimals=10)

        print()
        print('Dev set result {}:'.format(str(model.metrics_names)))
        print('{}'.format(str(result)))

        predict_and_save(
            model,
            img_dev[:10],
            output_dir=os.path.join(DIR_DATA, 'predictions'),
        )

        save_file = '_'.join([
            'sunnybrook',
            contour_type,
            'epoch',
            str(epoch),
        ]) + '.h5'

        logs_dir = os.path.join(DIR_DATA, 'model_logs')
        os.makedirs(logs_dir, exist_ok=True)
        save_path = os.path.join(logs_dir, save_file)

        print()
        print('Saving model weights to {}'.format(save_path))

        model.save_weights(save_path)