Пример #1
0
    def train_D(data, labels=None, gen_data=None):
        if args.debug: print("dtrain")
        D.train()
        D_optimizer.zero_grad()

        run_batch_size = data.shape[0]
        deb = run_batch_size != args.batch_size

        if gen_data is None:
            gen_data = utils.gen(args, G, normal_dist, run_batch_size, labels=labels)

        if args.augment:
            p = args.aug_prob if not args.adaptive_prob else losses['p'][-1]
            data = augment.augment(args, data, p)
            gen_data = augment.augment(args, gen_data, p)

        D_real_output = D(data.clone(), labels, deb)

        if args.debug or run_batch_size != args.batch_size:
            print("D real output: ")
            print(D_real_output[:10])

        D_fake_output = D(gen_data, labels, deb)

        if args.debug or run_batch_size != args.batch_size:
            print("D fake output: ")
            print(D_fake_output[:10])

        D_loss, D_loss_items = utils.calc_D_loss(args, D, data, gen_data, D_real_output, D_fake_output, run_batch_size, Y_real, Y_fake)
        D_loss.backward()

        D_optimizer.step()
        return D_loss_items
Пример #2
0
    def train_D(data, gen_data=None, unrolled=False):
        if args.debug: print("dtrain")
        D.train()
        D_optimizer.zero_grad()

        run_batch_size = data.shape[0] if not args.gcnn else data.y.shape[0]

        if gen_data is None:
            gen_data = utils.gen(args, G, normal_dist, run_batch_size)
            if (args.gcnn):
                gen_data = utils.convert_to_batch(args, gen_data,
                                                  run_batch_size)

        if args.augment:
            p = args.aug_prob if not args.adaptive_prob else losses['p'][-1]
            data = augment.augment(args, data, p)
            gen_data = augment.augment(args, gen_data, p)

        D_real_output = D(data.clone())
        D_fake_output = D(gen_data)

        D_loss, D_loss_items = utils.calc_D_loss(args, D, data, gen_data,
                                                 D_real_output, D_fake_output,
                                                 run_batch_size, Y_real,
                                                 Y_fake)
        D_loss.backward(create_graph=unrolled)

        D_optimizer.step()
        return D_loss_items
def img_aug(name, train=False, input_shape=(480, 480)):
    global number

    img = cv2.imread(image_path + name)
    if train == False:
        h, w = input_shape
        ih, iw = img.shape[:2]
        scale = min(w / iw, h / ih)
        nw = int(iw * scale)
        nh = int(ih * scale)
        img = cv2.resize(img, (nw, nh))
        img = augment(img)

        # 用灰色像素块来做背景扩充图片满足输入尺寸需求
        dx = (w - nw) // 2
        dy = (h - nh) // 2
        img = np.pad(img, ((dy, dy), (dx, dx), (0, 0)),
                     'constant',
                     constant_values=128)
        if tuple(img.shape[:2]) != input_shape:
            img = np.pad(img, ((0, input_shape[0] - img.shape[0]),
                               (0, input_shape[1] - img.shape[1]), (0, 0)),
                         'constant',
                         constant_values=128)
    else:
        img = augment(img)

    cv2.imwrite(result_path + name, img)
    number += 1
    print('{}. {} is finish!'.format(number, name))
Пример #4
0
def get_weather(year):
    weather_file = '/home/malcolm/uclan/output/wparms/weather_parms{}.csv'.format(year)
    weather = pd.read_csv(weather_file, header=0, parse_dates=[0], index_col=0)
    weather.index = pd.DatetimeIndex(weather.index).tz_localize('UTC')

    augment.augment(weather)
    daily_weather = weather.resample('D').mean()
    return daily_weather
Пример #5
0
def train(args, model, sess, dataset):
    print('-- Train')

    for key in ['model', 'log']:
        if not os.path.isdir(args.path[key]):
            os.makedirs(args.path[key])
    saver = tf.train.Saver()
    random_state = np.random.RandomState(seed=0)
    logs = {'train': {'itr': [], 'los': [], 'acc': []}, 'val': {'itr': [], 'los': [], 'acc': []}}
    t_start = time.time()

    generators = {}
    generators['train'] = dataset.get_generator('unlimited', 'train', True)
    generators['val'] = dataset.get_generator('unlimited', 'val', True)

    for itr in range(args.train_iterations):
        batch = dataset.get_next_batch(args.batch_size, generators['train'])
        batch = augment(batch, args.aug_kinds, random_state)
        feed_dict = {}
        feed_dict.update({model.inputs[key]: batch[key] for key in ['image', 'label']})
        feed_dict.update({model.is_train: True})
        input_tensors = [model.outputs]
        if (itr+1) % args.check_interval == 0:
            input_tensors.extend([model.sparsity])
        input_tensors.extend([model.train_op])
        result = sess.run(input_tensors, feed_dict)
        logs['train'] = _update_logs(logs['train'],
            {'itr': itr+1, 'los': result[0]['los'], 'acc': result[0]['acc']})

        # Check on validation set.
        if (itr+1) % args.check_interval == 0:
            batch = dataset.get_next_batch(args.batch_size, generators['val'])
            batch = augment(batch, args.aug_kinds, random_state)
            feed_dict = {}
            feed_dict.update({model.inputs[key]: batch[key] for key in ['image', 'label']})
            input_tensors = [model.outputs]
            result_val = sess.run(input_tensors, feed_dict)
            logs['val'] = _update_logs(logs['val'],
                {'itr': itr+1, 'los': result_val[0]['los'], 'acc': result_val[0]['acc']})

        # Print results
        if (itr+1) % args.check_interval == 0:
            pstr = '(train/val) los:{:.3f}/{:.3f} acc:{:.3f}/{:.3f} spa:{:.3f}'.format(
                result[0]['los'], result_val[0]['los'],
                result[0]['acc'], result_val[0]['acc'],
                result[1],
            )
            print('itr{}: {} (t:{:.1f})'.format(itr+1, pstr, time.time() - t_start))
            t_start = time.time()

        # Save
        if (itr+1) % args.save_interval == 0:
            saver.save(sess, args.path['model'] + '/itr-' + str(itr))
            _save_logs(os.path.join(args.path['log'], 'train.pickle'), logs['train'])
            _save_logs(os.path.join(args.path['log'], 'val.pickle'), logs['val'])
Пример #6
0
def get_prepared_data(image_path_list):
    train_X = []
    train_y = []

    parent_path = Path(image_path_list[0]).parent
    scale_folder = os.path.join(parent_path, 'scale')
    augmented_folder = os.path.join(parent_path, 'padding', 'output')

    for index, image_path in enumerate(image_path_list):
        newImg = get_feature_from_link(image_path)
        feature = newImg.reshape(2048)
        train_X.append(feature)
        train_y.append('1')

        feature_cut = model.get_feature_vector(sess, cut_block(image_path))
        feature_cut = feature_cut.reshape(2048)
        train_X.append(feature_cut)
        train_y.append('0')

        if os.path.isdir(scale_folder):
            if Path(image_path).name not in os.listdir(scale_folder):
                resize_with_pad(image_path)
                scale_image(image_path)
        else:
            resize_with_pad(image_path)
            scale_image(image_path)

    if os.path.exists(augmented_folder):
        shutil.rmtree(augmented_folder)

    augment(Path(augmented_folder).parent)
    scaled_images = [
        os.path.join(scale_folder, e) for e in os.listdir(scale_folder)
    ]
    augmented_images = [
        os.path.join(augmented_folder, e) for e in os.listdir(augmented_folder)
    ]

    # for index, image_path in enumerate(scaled_images):
    #     newImg = get_feature_from_link(image_path)
    #     feature = newImg.reshape(2048)
    #     train_X.append(feature)
    #     train_y.append('0')

    for index, image_path in enumerate(augmented_images):
        newImg = get_feature_from_link(image_path)
        feature = newImg.reshape(2048)
        train_X.append(feature)
        train_y.append('0')

    train_X = np.asarray(train_X)
    train_y = np.asarray(train_y)

    return train_X, train_y
Пример #7
0
def train():
    x = tf.placeholder(tf.float32, [None, 96, 96, 3])
    t = tf.placeholder(tf.int32, [None])
    is_training = tf.placeholder(tf.bool, [])

    model = VGG19(x, t, is_training)
    sess = tf.Session()
    with tf.variable_scope('vgg19'):
        global_step = tf.Variable(0, name='global_step', trainable=False)
    opt = tf.train.AdamOptimizer(learning_rate=learning_rate)
    train_op = opt.minimize(model.loss, global_step=global_step)
    init = tf.global_variables_initializer()
    sess.run(init)

    # Restore the latest model
    if tf.train.get_checkpoint_state('backup/'):
        saver = tf.train.Saver()
        saver.restore(sess, 'backup/latest')

    # Load the dataset
    x_train, t_train, x_test, t_test = load.load()

    # Train
    while True:
        epoch = int(sess.run(global_step) / np.ceil(len(x_train)/batch_size)) + 1
        print('epoch:', epoch)
        perm = np.random.permutation(len(x_train))
        x_train = x_train[perm]
        t_train = t_train[perm]
        sum_loss_value = 0
        for i in tqdm(range(0, len(x_train), batch_size)):
            x_batch = augment.augment(x_train[i:i+batch_size])
            t_batch = t_train[i:i+batch_size]
            _, loss_value = sess.run(
                [train_op, model.loss],
                feed_dict={x: x_batch, t: t_batch, is_training: True})
            sum_loss_value += loss_value
        print('loss:', sum_loss_value)

        saver = tf.train.Saver()
        saver.save(sess, 'backup/latest', write_meta_graph=False)

        prediction = np.array([])
        answer = np.array([])
        for i in range(0, len(x_test), batch_size):
            x_batch = augment.augment(x_test[i:i+batch_size])
            t_batch = t_test[i:i+batch_size]
            output = model.out.eval(
                feed_dict={x: x_batch, is_training: False}, session=sess)
            prediction = np.concatenate([prediction, np.argmax(output, 1)])
            answer = np.concatenate([answer, t_batch])
            correct_prediction = np.equal(prediction, answer)
        accuracy = np.mean(correct_prediction)
        print('accuracy:', accuracy)
Пример #8
0
    def train_G(data):
        if args.debug: print("gtrain")
        G.train()
        G_optimizer.zero_grad()

        gen_data = utils.gen(args, G, normal_dist, args.batch_size)
        if (args.gcnn):
            gen_data = utils.convert_to_batch(args, gen_data, args.batch_size)

        if args.augment:
            p = args.aug_prob if not args.adaptive_prob else losses['p'][-1]
            gen_data = augment.augment(args, gen_data, p)

        if (args.unrolled_steps > 0):
            D_backup = deepcopy(D)
            for i in range(args.unrolled_steps - 1):
                train_D(data, gen_data=gen_data, unrolled=True)

        D_fake_output = D(gen_data)

        G_loss = utils.calc_G_loss(args, D_fake_output, Y_real)

        G_loss.backward()
        G_optimizer.step()

        if (args.unrolled_steps > 0):
            D.load(D_backup)

        return G_loss.item()
Пример #9
0
def load_images(image_paths, deterministic=False):
    X = []

    labels = []

    for image_path in image_paths:
        with gzip.open(image_path) as file:
            xy_xz_yz = pickle.load(file)
            x, y, z = xy_xz_yz
            if P.AUGMENT and not deterministic:
                x, y, z = augment.augment(xy_xz_yz)

            offset = (len(x) - P.INPUT_SIZE) / 2

            if offset > 0:
                x = x[offset:-offset, offset:-offset]
                y = y[offset:-offset, offset:-offset]
                z = z[offset:-offset, offset:-offset]

            X.append([x])
            X.append([y])
            X.append([z])

        label = [0, 1] if "True" in image_path else [1, 0]
        labels.append(label)
        labels.append(label)
        labels.append(label)

    X = np.array(X)
    X = normalize(X)

    if P.ZERO_CENTER:
        X -= P.MEAN_PIXEL

    return np.array(X, dtype=np.float32), np.array(labels)
Пример #10
0
    def train_G(data, labels=None, epoch=0):
        logging.debug("gtrain")
        G.train()
        G_optimizer.zero_grad()

        run_batch_size = labels.shape[
            0] if labels is not None else args.batch_size

        gen_data = utils.gen(args, G, run_batch_size, labels=labels)

        if args.augment:
            p = args.aug_prob if not args.adaptive_prob else losses['p'][-1]
            gen_data = augment.augment(args, gen_data, p)

        D_fake_output = D(gen_data, labels, epoch=epoch)

        logging.debug("D fake output:")
        logging.debug(D_fake_output[:10])

        G_loss = utils.calc_G_loss(args, D_fake_output, Y_real, run_batch_size,
                                   mse)

        G_loss.backward()
        G_optimizer.step()

        return G_loss.item()
Пример #11
0
def getRandomPositivePatch(x_full, y_full):
    x_i, y_i = getRandomPositiveImage(x_full, y_full)
    x_s, y_s = getRandomPositiveSlices(x_i, y_i)
    x_aug, y_aug = augment(x_s, y_s)
    x_patch, y_patch, found = getRandomPositivePatchAllSlices(x_aug, y_aug)

    if not found:
        x_patch, y_patch = getRandomPositivePatch(x_full, y_full)

    return x_patch, y_patch
Пример #12
0
    def next_batch(self, num, data, label):
        idx = np.arange(0, len(data))
        np.random.shuffle(idx)
        idx = idx[:num]
        data_shuffle = []
        label_shuffle = []
        for i in idx:
            distorted_data = augment(data[i])
            data_shuffle.append(distorted_data)
            label_shuffle.append(label[i])

        return np.asarray(data_shuffle), np.asarray(label_shuffle)
Пример #13
0
    def train_D(data, labels=None, gen_data=None, epoch=0, print_output=False):
        logging.debug("dtrain")
        log = logging.info if print_output else logging.debug

        D.train()
        D_optimizer.zero_grad()
        G.eval()

        run_batch_size = data.shape[0]

        D_real_output = D(data.clone(), labels, epoch=epoch)

        log("D real output: ")
        log(D_real_output[:10])

        if gen_data is None:
            gen_data = utils.gen(args, G, run_batch_size, labels=labels)

        if args.augment:
            p = args.aug_prob if not args.adaptive_prob else losses['p'][-1]
            data = augment.augment(args, data, p)
            gen_data = augment.augment(args, gen_data, p)

        log("G output: ")
        log(gen_data[:2, :10, :])

        D_fake_output = D(gen_data, labels, epoch=epoch)

        log("D fake output: ")
        log(D_fake_output[:10])

        D_loss, D_loss_items = utils.calc_D_loss(args, D, data, gen_data,
                                                 D_real_output, D_fake_output,
                                                 run_batch_size, Y_real,
                                                 Y_fake, mse)
        D_loss.backward()

        D_optimizer.step()
        return D_loss_items
    def __getitem__(self, idx):

        img, label_idx = self._raw_data[idx]
        img = np.reshape(img, (3, 32, 32))
        img = img.transpose([1, 2, 0])
        img = augment(img)
        img = img.transpose([2,0,1])
        # TODO: Augmentation
        img = img / 255.0
        img = (img-self._mean)/self._std
        label = np.zeros(10)
        label[label_idx] = 1

        return img, label
Пример #15
0
    def put(self, q):
        queue_max_size = 1000
        paths = []
        while True:
            if len(paths) == 0:
                paths = self.get_paths()
            if q.qsize() >= queue_max_size:
                time.sleep(0.1)
                continue

            ix = np.random.randint(0, len(paths))
            path = paths.pop(ix)
            im_path, bb_path = path
            npimg = np.fromfile(im_path, dtype=np.uint8)
            img = cv2.imdecode(npimg, cv2.IMREAD_COLOR)
            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

            with open(bb_path) as f:
                lines = f.read().splitlines()

            boxes = []
            for line in lines:
                ix, xmin, ymin, xmax, ymax = line.split('\t')
                onehot_label = np.eye(self.num_classes)[int(ix)]
                box = [float(xmin),
                       float(ymin),
                       float(xmax),
                       float(ymax)] + onehot_label.tolist()
                boxes.append(box)

            img, boxes = augment(img, boxes, self.input_size)

            if len(boxes) == 0:
                continue
            boxes = np.array(boxes)
            assignment = assign_boxes(boxes, self.priors, self.num_classes,
                                      self.assignment_threshold)
            q.put([img, assignment])
Пример #16
0
def gen(samples, batch_size=32, aug = False):

    while 1: # Loop forever so the generator never terminates
        shuffle(samples)

        images = []
        labels = []

        for sample in samples:
            # Extract steering
            steering = preprocess_steering(float(sample["steering"]))

            # Randomly drop near zero steering values
            if(abs(steering) < 0.1 and np.random.rand() < 0.7):
                continue

            # read in image
            image = imageio.imread(cache_dir + sample["img_file"])

            # Augment data with noise and lighting changes
            if aug:
                image = augment(image)

            # Prepare image for network
            image = preprocess_camera(image)

            images.append(image)
            labels.append(steering)

            #return batch
            if(len(images) >= batch_size):
                X = np.array(images)
                y = np.array(labels)
                images = []
                labels = []
                yield shuffle(X,y)
Пример #17
0
def train(args, loader, generator, discriminator, contrast_learner, g_optim,
          d_optim, g_ema):
    if args.distributed:
        g_module = generator.module
        d_module = discriminator.module
        if contrast_learner is not None:
            cl_module = contrast_learner.module
    else:
        g_module = generator
        d_module = discriminator
        cl_module = contrast_learner

    loader = sample_data(loader)
    sample_z = th.randn(args.n_sample, args.latent_size, device=device)
    mse = th.nn.MSELoss()
    mean_path_length = 0
    ada_augment = th.tensor([0.0, 0.0], device=device)
    ada_aug_p = args.augment_p if args.augment_p > 0 else 0.0
    ada_aug_step = args.ada_target / args.ada_length
    r_t_stat = 0
    fids = []

    pbar = range(args.iter)
    if get_rank() == 0:
        pbar = tqdm(pbar,
                    initial=args.start_iter,
                    dynamic_ncols=True,
                    smoothing=0)
    for idx in pbar:
        i = idx + args.start_iter
        if i > args.iter:
            print("Done!")
            break

        loss_dict = {
            "Generator": th.tensor(0, device=device).float(),
            "Discriminator": th.tensor(0, device=device).float(),
            "Real Score": th.tensor(0, device=device).float(),
            "Fake Score": th.tensor(0, device=device).float(),
            "Contrastive": th.tensor(0, device=device).float(),
            "Consistency": th.tensor(0, device=device).float(),
            "R1 Penalty": th.tensor(0, device=device).float(),
            "Path Length Regularization": th.tensor(0, device=device).float(),
            "Augment": th.tensor(0, device=device).float(),
            "Rt": th.tensor(0, device=device).float(),
        }

        requires_grad(generator, False)
        requires_grad(discriminator, True)

        discriminator.zero_grad()
        for _ in range(args.num_accumulate):
            real_img_og = next(loader).to(device)
            noise = make_noise(args.batch_size, args.latent_size,
                               args.mixing_prob)
            fake_img_og, _ = generator(noise)
            if args.augment:
                fake_img, _ = augment(fake_img_og, ada_aug_p)
                real_img, _ = augment(real_img_og, ada_aug_p)
            else:
                fake_img = fake_img_og
                real_img = real_img_og

            fake_pred = discriminator(fake_img)
            real_pred = discriminator(real_img)
            logistic_loss = d_logistic_loss(real_pred, fake_pred)
            loss_dict["Discriminator"] += logistic_loss.detach()
            loss_dict["Real Score"] += real_pred.mean().detach()
            loss_dict["Fake Score"] += fake_pred.mean().detach()
            d_loss = logistic_loss

            if args.contrastive > 0:
                contrast_learner(fake_img_og, fake_img, accumulate=True)
                contrast_learner(real_img_og, real_img, accumulate=True)
                contrast_loss = cl_module.calculate_loss()
                loss_dict["Contrastive"] += contrast_loss.detach()
                d_loss += args.contrastive * contrast_loss

            if args.balanced_consistency > 0:
                consistency_loss = mse(
                    real_pred, discriminator(real_img_og)) + mse(
                        fake_pred, discriminator(fake_img_og))
                loss_dict["Consistency"] += consistency_loss.detach()
                d_loss += args.balanced_consistency * consistency_loss

            d_loss /= args.num_accumulate
            d_loss.backward()
        d_optim.step()

        if args.r1 > 0 and i % args.d_reg_every == 0:
            discriminator.zero_grad()
            for _ in range(args.num_accumulate):
                real_img = next(loader).to(device)
                real_img.requires_grad = True
                real_pred = discriminator(real_img)
                r1_loss = d_r1_penalty(real_img, real_pred, args)
                loss_dict["R1 Penalty"] += r1_loss.detach().squeeze()
                r1_loss = args.r1 * args.d_reg_every * r1_loss / args.num_accumulate
                r1_loss.backward()
            d_optim.step()

        if args.augment and args.augment_p == 0:
            ada_augment += th.tensor(
                (th.sign(real_pred).sum().item(), real_pred.shape[0]),
                device=device)
            ada_augment = reduce_sum(ada_augment)

            if ada_augment[1] > 255:
                pred_signs, n_pred = ada_augment.tolist()

                r_t_stat = pred_signs / n_pred
                loss_dict["Rt"] = th.tensor(r_t_stat, device=device).float()
                if r_t_stat > args.ada_target:
                    sign = 1
                else:
                    sign = -1

                ada_aug_p += sign * ada_aug_step * n_pred
                ada_aug_p = min(1, max(0, ada_aug_p))
                ada_augment.mul_(0)
                loss_dict["Augment"] = th.tensor(ada_aug_p,
                                                 device=device).float()

        requires_grad(generator, True)
        requires_grad(discriminator, False)

        generator.zero_grad()
        for _ in range(args.num_accumulate):
            noise = make_noise(args.batch_size, args.latent_size,
                               args.mixing_prob)
            fake_img, _ = generator(noise)
            if args.augment:
                fake_img, _ = augment(fake_img, ada_aug_p)
            fake_pred = discriminator(fake_img)
            g_loss = g_non_saturating_loss(fake_pred)
            loss_dict["Generator"] += g_loss.detach()
            g_loss /= args.num_accumulate
            g_loss.backward()
        g_optim.step()

        if args.path_regularize > 0 and i % args.g_reg_every == 0:
            generator.zero_grad()
            for _ in range(args.num_accumulate):
                path_loss, mean_path_length = g_path_length_regularization(
                    generator, mean_path_length, args)
                loss_dict["Path Length Regularization"] += path_loss.detach()
                path_loss = args.path_regularize * args.g_reg_every * path_loss / args.num_accumulate
                path_loss.backward()
            g_optim.step()

        accumulate(g_ema, g_module)

        loss_reduced = reduce_loss_dict(loss_dict)
        log_dict = {
            k: v.mean().item() / args.num_accumulate
            for k, v in loss_reduced.items() if v != 0
        }
        if get_rank() == 0:
            if args.log_spec_norm:
                G_norms = []
                for name, spec_norm in g_module.named_buffers():
                    if "spectral_norm" in name:
                        G_norms.append(spec_norm.cpu().numpy())
                G_norms = np.array(G_norms)
                D_norms = []
                for name, spec_norm in d_module.named_buffers():
                    if "spectral_norm" in name:
                        D_norms.append(spec_norm.cpu().numpy())
                D_norms = np.array(D_norms)
                log_dict[f"Spectral Norms/G min spectral norm"] = np.log(
                    G_norms).min()
                log_dict[f"Spectral Norms/G mean spectral norm"] = np.log(
                    G_norms).mean()
                log_dict[f"Spectral Norms/G max spectral norm"] = np.log(
                    G_norms).max()
                log_dict[f"Spectral Norms/D min spectral norm"] = np.log(
                    D_norms).min()
                log_dict[f"Spectral Norms/D mean spectral norm"] = np.log(
                    D_norms).mean()
                log_dict[f"Spectral Norms/D max spectral norm"] = np.log(
                    D_norms).max()

            if i % args.img_every == 0:
                gc.collect()
                th.cuda.empty_cache()
                with th.no_grad():
                    g_ema.eval()
                    sample = []
                    for sub in range(0, len(sample_z), args.batch_size):
                        subsample, _ = g_ema(
                            [sample_z[sub:sub + args.batch_size]])
                        sample.append(subsample.cpu())
                    sample = th.cat(sample)
                    grid = utils.make_grid(sample,
                                           nrow=10,
                                           normalize=True,
                                           range=(-1, 1))
                log_dict["Generated Images EMA"] = [
                    wandb.Image(grid, caption=f"Step {i}")
                ]

            if i % args.eval_every == 0:
                fid_dict = validation.fid(g_ema, args.val_batch_size,
                                          args.fid_n_sample,
                                          args.fid_truncation, args.name)

                fid = fid_dict["FID"]
                fids.append(fid)
                density = fid_dict["Density"]
                coverage = fid_dict["Coverage"]

                ppl = validation.ppl(
                    g_ema,
                    args.val_batch_size,
                    args.ppl_n_sample,
                    args.ppl_space,
                    args.ppl_crop,
                    args.latent_size,
                )

                log_dict["Evaluation/FID"] = fid
                log_dict["Sweep/FID_smooth"] = gaussian_filter(
                    np.array(fids), [5])[-1]
                log_dict["Evaluation/Density"] = density
                log_dict["Evaluation/Coverage"] = coverage
                log_dict["Evaluation/PPL"] = ppl

                gc.collect()
                th.cuda.empty_cache()

            wandb.log(log_dict)
            description = (
                f"FID: {fid:.4f}   PPL: {ppl:.4f}   Dens: {density:.4f}   Cov: {coverage:.4f}   "
                +
                f"G: {log_dict['Generator']:.4f}   D: {log_dict['Discriminator']:.4f}"
            )
            if "Augment" in log_dict:
                description += f"   Aug: {log_dict['Augment']:.4f}"  #   Rt: {log_dict['Rt']:.4f}"
            if "R1 Penalty" in log_dict:
                description += f"   R1: {log_dict['R1 Penalty']:.4f}"
            if "Path Length Regularization" in log_dict:
                description += f"   Path: {log_dict['Path Length Regularization']:.4f}"
            pbar.set_description(description)

            if i % args.checkpoint_every == 0:
                check_name = "-".join([
                    args.name,
                    args.runname,
                    wandb.run.dir.split("/")[-1].split("-")[-1],
                    int(fid),
                    args.size,
                    str(i).zfill(6),
                ])
                th.save(
                    {
                        "g": g_module.state_dict(),
                        "d": d_module.state_dict(),
                        # "cl": cl_module.state_dict(),
                        "g_ema": g_ema.state_dict(),
                        "g_optim": g_optim.state_dict(),
                        "d_optim": d_optim.state_dict(),
                    },
                    f"/home/hans/modelzoo/maua-sg2/{check_name}.pt",
                )
Пример #18
0
def main():
    # tensorflow input and output
    keep_probability = tf.placeholder(tf.float32, name="keep_probabilty")
    image = tf.placeholder(tf.float32,
                           shape=[None, IMAGE_HEIGHT, IMAGE_WIDTH, 3],
                           name="input_image")
    annotation = tf.placeholder(tf.int32,
                                shape=[None, IMAGE_HEIGHT, IMAGE_WIDTH, 1],
                                name="annotation")

    pred_annotation, logits = inference(image, keep_probability)

    # Summary
    print('====================================================')
    tf.summary.image("input_image", image, max_outputs=4)
    tf.summary.image("ground_truth",
                     tf.cast(annotation * 255, tf.uint8),
                     max_outputs=4)
    tf.summary.image("pred_annotation",
                     tf.cast(pred_annotation * 255, tf.uint8),
                     max_outputs=4)
    loss = tf.reduce_mean((tf.nn.sparse_softmax_cross_entropy_with_logits(
        logits=logits,
        labels=tf.squeeze(annotation, squeeze_dims=[3]),
        name="entropy")))
    tf.summary.scalar("train_entropy", loss)

    trainable_var = tf.trainable_variables()
    if args.debug:
        for var in trainable_var:
            utils.add_to_regularization_and_summary(var)
    train_op = train(loss, trainable_var)

    print("> [FCN] Setting up summary op...")
    summary_op = tf.summary.merge_all()

    # Validation summary
    val_summary = tf.summary.scalar("validation_entropy", loss)

    # Read data
    print("> [FCN] Setting up image reader...")
    train_records, valid_records = read_dataset(args.data_dir)
    print('> [FCN] Train len:', len(train_records))
    print('> [FCN] Val len:', len(valid_records))

    t = timer.Timer()  # Qhan's timer

    if args.mode != 'test':
        print("> [FCN] Setting up dataset reader")
        image_options = {
            'resize': True,
            'resize_height': IMAGE_HEIGHT,
            'resize_width': IMAGE_WIDTH
        }
        if args.mode == 'train':
            t.tic()
            train_dataset_reader = dataset.BatchDatset(train_records,
                                                       image_options,
                                                       mode='train')
            load_time = t.toc()
            print('> [FCN] Train data set loaded. %.4f ms' % (load_time))
        t.tic()
        validation_dataset_reader = dataset.BatchDatset(valid_records,
                                                        image_options,
                                                        mode='val')
        load_time = t.toc()
        print('> [FCN] Validation data set loaded. %.4f ms' % (load_time))

    gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.90,
                                allow_growth=True)
    sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

    # Initialize model
    print("> [FCN] Setting up Saver...", flush=True)
    saver = tf.train.Saver()
    summary_writer = tf.summary.FileWriter(args.logs_dir, sess.graph)

    print("> [FCN] Initialize variables... ", flush=True, end='')
    t.tic()
    sess.run(tf.global_variables_initializer())
    print('%.4f ms' % (t.toc()))

    t.tic()
    ckpt = tf.train.get_checkpoint_state(args.logs_dir)
    if ckpt and ckpt.model_checkpoint_path:
        saver.restore(sess, ckpt.model_checkpoint_path)
        print("> [FCN] Model restored..." + ckpt.model_checkpoint_path +
              ', %.4f ms' % (t.toc()))

    print('==================================================== [%s]' %
          args.mode)

    if args.mode == 'train':
        np.random.seed(1028)
        start = args.start_iter
        end = start + args.iter + 1
        for itr in range(start, end):

            # Read batch data
            train_images, train_annotations = train_dataset_reader.next_batch(
                args.batch_size)
            images = np.zeros_like(train_images)
            annotations = np.zeros_like(train_annotations)

            # Data augmentation
            for i, (im, ann) in enumerate(zip(train_images,
                                              train_annotations)):
                flip_prob = np.random.random()
                aug_type = np.random.randint(0, 3)
                randoms = np.random.random(2)
                images[i] = augment(im, flip_prob, aug_type, randoms)
                annotations[i] = augment(ann, flip_prob, aug_type, randoms)

            t.tic()
            feed_dict = {
                image: images,
                annotation: annotations,
                keep_probability: 0.85
            }
            sess.run(train_op, feed_dict=feed_dict)
            train_time = t.toc()

            if itr % 10 == 0 and itr > 10:
                train_loss, summary_str = sess.run([loss, summary_op],
                                                   feed_dict=feed_dict)
                summary_writer.add_summary(summary_str, itr)
                print("[%6d], Train_loss: %g, %.4f ms" %
                      (itr, train_loss, train_time),
                      flush=True)

            if itr % 100 == 0 and itr != 0:
                valid_images, valid_annotations = validation_dataset_reader.next_batch(
                    args.batch_size * 2)
                val_feed_dict = {
                    image: valid_images,
                    annotation: valid_annotations,
                    keep_probability: 1.0
                }
                t.tic()
                val_loss, val_str = sess.run([loss, val_summary],
                                             feed_dict=val_feed_dict)
                val_time = t.toc()
                summary_writer.add_summary(val_str, itr)
                print("[%6d], Validation_loss: %g, %.4f ms" %
                      (itr, val_loss, val_time))

            if itr % 1000 == 0 and itr != 0:
                saver.save(sess, args.logs_dir + "model.ckpt", itr)

    elif args.mode == 'visualize':
        for itr in range(20):
            valid_images, valid_annotations = validation_dataset_reader.get_random_batch(
                1)
            t.tic()
            pred = sess.run(pred_annotation,
                            feed_dict={
                                image: valid_images,
                                keep_probability: 1.0
                            })
            val_time = t.toc()

            valid_annotations = np.squeeze(valid_annotations, axis=3)
            pred = np.squeeze(pred, axis=3)

            utils.save_image(valid_images[0].astype(np.uint8),
                             args.res_dir,
                             name="inp_" + str(itr))
            utils.save_image(valid_annotations[0].astype(np.uint8),
                             args.res_dir,
                             name="gt_" + str(itr))
            utils.save_image(pred[0].astype(np.uint8),
                             args.res_dir,
                             name="pred_" + str(itr))
            print("> [FCN] Saved image: %d, %.4f ms" % (itr, val_time))

    elif args.mode == 'test':
        testlist = args.testlist
        images, names, (H, W) = read_test_data(testlist, IMAGE_HEIGHT,
                                               IMAGE_WIDTH)
        for i, (im, name) in enumerate(zip(images, names)):

            t.tic()
            pred = sess.run(pred_annotation,
                            feed_dict={
                                image: im.reshape((1, ) + im.shape),
                                keep_probability: 1.0
                            })
            test_time = t.toc()

            pred = pred.reshape(IMAGE_HEIGHT, IMAGE_WIDTH)
            if args.video:
                save_video_image(im, pred,
                                 args.res_dir + '/pred_%05d' % (i) + '.png', H,
                                 W)
            else:
                misc.imsave(args.res_dir + '/inp_%d' % (i) + '.png',
                            im.astype(np.uint8))
                misc.imsave(args.res_dir + '/pred_%d' % (i) + '.png',
                            pred.astype(np.uint8))
            print('> [FCN] Img: %d,' % (i) + ' Name: ' + name +
                  ', %.4f ms' % test_time)

    else:
        pass
Пример #19
0
from augment import augment
from keras.layers import LSTM, Input, RepeatVector
from keras.models import Model
from preprocess import scale
from scipy.spatial.distance import pdist, squareform
from sklearn.metrics import silhouette_score
from statsmodels.tsa.stattools import coint

# First party modules
import n2d

# real data for clustering
test_x = scale("Data/stock_close.csv")

# fake data for training
train_x = augment(test_x, 100)
# transpose for our autoencoder
train_x = train_x.T

# x_test = np.asarray(test_x.values)
# x_test = x_test.reshape(476, 1225, 1)
#
# train_x = train_x.reshape(47600, 1225, 1)
#
# x.shape[0]
# x.shape[1]

# not used, an experiment
# it works but i lack any of understanding of LSTMs and how to input the data so
# this will be for another example
class LSTMAE:
Пример #20
0
def get_image(filename, deterministic):
    with gzip.open(filename,'rb') as f:
        lung = pickle.load(f)

    truth_filename = filename.replace('lung','nodule')
    segmentation_filename = filename.replace('lung','lung_masks')
    #segmentation_filename = re.sub(r'subset[0-9]','',segmentation_filename)

    if os.path.isfile(truth_filename):
        with gzip.open(truth_filename,'rb') as f:
            truth = np.array(pickle.load(f),dtype=np.float32)
    else:
        truth = np.zeros_like(lung)

    if os.path.isfile(segmentation_filename):
        with gzip.open(segmentation_filename,'rb') as f:
            outside = np.where(pickle.load(f)>0,0,1)
    else:
        outside = np.where(lung==0,1,0)
        print 'lung not found'

    if P.ERODE_SEGMENTATION > 0:
        kernel = skimage.morphology.disk(P.ERODE_SEGMENTATION)
        outside = skimage.morphology.binary_erosion(outside, kernel)

    outside = np.array(outside, dtype=np.float32)

    if P.AUGMENT and not deterministic:
        lung, truth, outside = augment([lung, truth, outside])

    if P.RANDOM_CROP > 0:
        im_x = lung.shape[0]
        im_y = lung.shape[1]
        x = np.random.randint(0, max(1,im_x-P.RANDOM_CROP))
        y = np.random.randint(0, max(1,im_y-P.RANDOM_CROP))

        lung = lung[x:x+P.RANDOM_CROP, y:y+P.RANDOM_CROP]
        truth = truth[x:x+P.RANDOM_CROP, y:y+P.RANDOM_CROP]
        outside = outside[x:x+P.RANDOM_CROP, y:y+P.RANDOM_CROP]

    truth = np.array(np.round(truth),dtype=np.int64)
    outside = np.array(np.round(outside),dtype=np.int64)

    #Set label of outside pixels to -10
    truth = truth - (outside*10)

    lung = lung*(1-outside)
    lung = lung-outside*3000

    if P.INPUT_SIZE > 0:
        lung = crop_or_pad(lung, INPUT_SIZE, -3000)
        truth = crop_or_pad(truth, OUTPUT_SIZE, 0)
        outside = crop_or_pad(outside, OUTPUT_SIZE, 1)
    else:
        out_size = output_size_for_input(lung.shape[1], P.DEPTH)
        #lung = crop_or_pad(lung, INPUT_SIZE, -1000)
        truth = crop_or_pad(truth, out_size, 0)
        outside = crop_or_pad(outside, out_size, 1)

    lung = normalize.normalize(lung)
    lung = np.expand_dims(np.expand_dims(lung, axis=0),axis=0)

    if P.ZERO_CENTER:
        lung = lung - P.MEAN_PIXEL

    truth = np.array(np.expand_dims(np.expand_dims(truth, axis=0),axis=0),dtype=np.int64)
    return lung, truth
if __name__ == '__main__':
    if len(argv) != 7:
        stderr.write(("USAGE: python3 %s train_file dev_file " +
                      "aug_factor num_epochs alpha modeloutfile\n") % argv[0])
        exit(1)

    TRAIN_FN = argv[1]
    DEV_FN = argv[2]
    AUG_FACTOR = int(argv[3])
    attention.EPOCHS = int(argv[4])
    ALPHA = float(argv[5])
    O_FN = argv[6]

    data = augment([
        l.strip().split('\t')
        for l in codecs.open(TRAIN_FN, 'r', "utf-8").read().split('\n')
        if l.strip() != ''
    ], AUG_FACTOR)

    idata = [[c for c in lemma] + tags.split(';') for lemma, _, tags in data]
    odata = [[c for c in wf] for _, wf, _ in data]
    devdata = [
        l.strip().split('\t')
        for l in codecs.open(DEV_FN, 'r', "utf-8").read().split('\n')
        if l.strip() != ''
    ]
    idevdata = [[c for c in lemma] + tags.split(';')
                for lemma, _, tags in devdata]
    odevdata = [[c for c in wf] for _, wf, _ in devdata]

    characters = set([attention.EOS])
Пример #22
0
def train(args):
    # Context
    ctx = get_extension_context(
        args.context, device_id=args.device_id, type_config=args.type_config)
    nn.set_default_context(ctx)

    aug_list = args.aug_list

    # Model
    scope_gen = "Generator"
    scope_dis = "Discriminator"
    # generator loss
    z = nn.Variable([args.batch_size, args.latent, 1, 1])
    x_fake = Generator(z, scope_name=scope_gen, img_size=args.image_size)
    p_fake = Discriminator([augment(xf, aug_list)
                            for xf in x_fake], label="fake", scope_name=scope_dis)
    lossG = loss_gen(p_fake)
    # discriminator loss
    x_real = nn.Variable(
        [args.batch_size, 3, args.image_size, args.image_size])
    x_real_aug = augment(x_real, aug_list)
    p_real, rec_imgs, part = Discriminator(
        x_real_aug, label="real", scope_name=scope_dis)
    lossD_fake = loss_dis_fake(p_fake)
    lossD_real = loss_dis_real(p_real, rec_imgs, part, x_real_aug)
    lossD = lossD_fake + lossD_real
    # generator with fixed latent values for test
    # Use train=True even in an inference phase
    z_test = nn.Variable.from_numpy_array(
        np.random.randn(args.batch_size, args.latent, 1, 1))
    x_test = Generator(z_test, scope_name=scope_gen,
                       train=True, img_size=args.image_size)[0]

    # Exponential Moving Average (EMA) model
    # Use train=True even in an inference phase
    scope_gen_ema = "Generator_EMA"
    x_test_ema = Generator(z_test, scope_name=scope_gen_ema,
                           train=True, img_size=args.image_size)[0]
    copy_params(scope_gen, scope_gen_ema)
    update_ema_var = make_ema_updater(scope_gen_ema, scope_gen, 0.999)

    # Solver
    solver_gen = S.Adam(args.lr, beta1=0.5)
    solver_dis = S.Adam(args.lr, beta1=0.5)
    with nn.parameter_scope(scope_gen):
        params_gen = nn.get_parameters()
        solver_gen.set_parameters(params_gen)
    with nn.parameter_scope(scope_dis):
        params_dis = nn.get_parameters()
        solver_dis.set_parameters(params_dis)

    # Monitor
    monitor = Monitor(args.monitor_path)
    monitor_loss_gen = MonitorSeries(
        "Generator Loss", monitor, interval=10)
    monitor_loss_dis_real = MonitorSeries(
        "Discriminator Loss Real", monitor, interval=10)
    monitor_loss_dis_fake = MonitorSeries(
        "Discriminator Loss Fake", monitor, interval=10)
    monitor_time = MonitorTimeElapsed(
        "Training Time", monitor, interval=10)
    monitor_image_tile_train = MonitorImageTile("Image Tile Train", monitor,
                                                num_images=args.batch_size,
                                                interval=1,
                                                normalize_method=lambda x: (x + 1.) / 2.)
    monitor_image_tile_test = MonitorImageTile("Image Tile Test", monitor,
                                               num_images=args.batch_size,
                                               interval=1,
                                               normalize_method=lambda x: (x + 1.) / 2.)
    monitor_image_tile_test_ema = MonitorImageTile("Image Tile Test EMA", monitor,
                                                   num_images=args.batch_size,
                                                   interval=1,
                                                   normalize_method=lambda x: (x + 1.) / 2.)

    # Data Iterator
    rng = np.random.RandomState(141)
    di = data_iterator(args.img_path, args.batch_size,
                       imsize=(args.image_size, args.image_size),
                       num_samples=args.train_samples, rng=rng)

    # Train loop
    for i in range(args.max_iter):
        # Train discriminator
        x_fake[0].need_grad = False  # no need backward to generator
        x_fake[1].need_grad = False  # no need backward to generator
        solver_dis.zero_grad()
        x_real.d = di.next()[0]
        z.d = np.random.randn(args.batch_size, args.latent, 1, 1)
        lossD.forward()
        lossD.backward()
        solver_dis.update()

        # Train generator
        x_fake[0].need_grad = True  # need backward to generator
        x_fake[1].need_grad = True  # need backward to generator
        solver_gen.zero_grad()
        lossG.forward()
        lossG.backward()
        solver_gen.update()

        # Update EMA model
        update_ema_var.forward()

        # Monitor
        monitor_loss_gen.add(i, lossG.d)
        monitor_loss_dis_real.add(i, lossD_real.d)
        monitor_loss_dis_fake.add(i, lossD_fake.d)
        monitor_time.add(i)

        # Save
        if (i+1) % args.save_interval == 0:
            with nn.parameter_scope(scope_gen):
                nn.save_parameters(os.path.join(
                    args.monitor_path, "Gen_iter{}.h5".format(i+1)))
            with nn.parameter_scope(scope_gen_ema):
                nn.save_parameters(os.path.join(
                    args.monitor_path, "GenEMA_iter{}.h5".format(i+1)))
            with nn.parameter_scope(scope_dis):
                nn.save_parameters(os.path.join(
                    args.monitor_path, "Dis_iter{}.h5".format(i+1)))
        if (i+1) % args.test_interval == 0:
            x_test.forward(clear_buffer=True)
            x_test_ema.forward(clear_buffer=True)
            monitor_image_tile_train.add(i+1, x_fake[0])
            monitor_image_tile_test.add(i+1, x_test)
            monitor_image_tile_test_ema.add(i+1, x_test_ema)

    # Last
    x_test.forward(clear_buffer=True)
    x_test_ema.forward(clear_buffer=True)
    monitor_image_tile_train.add(args.max_iter, x_fake[0])
    monitor_image_tile_test.add(args.max_iter, x_test)
    monitor_image_tile_test_ema.add(args.max_iter, x_test_ema)
    with nn.parameter_scope(scope_gen):
        nn.save_parameters(os.path.join(args.monitor_path,
                                        "Gen_iter{}.h5".format(args.max_iter)))
    with nn.parameter_scope(scope_gen_ema):
        nn.save_parameters(os.path.join(args.monitor_path,
                                        "GenEMA_iter{}.h5".format(args.max_iter)))
    with nn.parameter_scope(scope_dis):
        nn.save_parameters(os.path.join(args.monitor_path,
                                        "Dis_iter{}.h5".format(args.max_iter)))
Пример #23
0
"""
Preprocessing for the T1-MRI images consists of 4 steps:
 1. Loading from disk (`subject.py`) [DONE]
 2. Data augmentation (`augment.py`) *
 3. Data segmentation (`segment.py`) *
 4. Align and normalize (`normalization.py`) * [DONE]
 5. K-Fold Cross validation (`cross_validation.py`) *

 * = Exports NumPy compressed (`.npz`) files.
"""

from subject import LA5C_SUBJECTS

from augment import augment
from normalization import whiten, normalize

from matplotlib import pyplot as plt
from skimage.io import imshow, imshow_collection

subjs = LA5C_SUBJECTS.select(lambda s: s['diagnosis'] in ['CONTROL', 'SCHZ'])
sample = subjs.subjects[42].load_anat(
    'space-MNI152NLin2009cAsym_preproc').get_data()

print(f"Found {len(subjs)} subjects.")

subjs = augment(subjs)

# subjs = [subj.load_anat('space-MNI152NLin2009cAsym_preproc').get_data() for subj in subjs]
Пример #24
0
def train(args, model, sess, dataset):
    print('|========= START TRAINING =========|')
    if not os.path.isdir(args.path_summary): os.makedirs(args.path_summary)
    if not os.path.isdir(args.path_model): os.makedirs(args.path_model)
    saver = tf.train.Saver()
    random_state = np.random.RandomState(9)
    writer = {}
    writer['train'] = tf.summary.FileWriter(args.path_summary + '/train',
                                            sess.graph)
    writer['val'] = tf.summary.FileWriter(args.path_summary + '/val')
    t_start = time.time()

    if args.train_iterations == 0:
        saver.save(sess, args.path_model + '/itr-0')

    for itr in range(args.train_iterations):
        batch = dataset.get_next_batch('train', args.batch_size)
        batch = augment(batch, args.aug_kinds, random_state)
        feed_dict = {}
        feed_dict.update(
            {model.inputs[key]: batch[key]
             for key in ['input', 'label']})
        feed_dict.update({
            model.compress: False,
            model.is_train: True,
            model.pruned: True
        })
        input_tensors = [model.outputs]  # always execute the graph outputs
        if (itr + 1) % args.check_interval == 0:
            input_tensors.extend([model.summ_op, model.sparsity])
        input_tensors.extend([model.train_op])
        result = sess.run(input_tensors, feed_dict)

        # Check on validation set.
        if (itr + 1) % args.check_interval == 0:
            batch = dataset.get_next_batch('val', args.batch_size)
            batch = augment(batch, args.aug_kinds, random_state)
            feed_dict = {}
            feed_dict.update(
                {model.inputs[key]: batch[key]
                 for key in ['input', 'label']})
            feed_dict.update({
                model.compress: False,
                model.is_train: False,
                model.pruned: True
            })
            input_tensors = [model.outputs, model.summ_op, model.sparsity]
            result_val = sess.run(input_tensors, feed_dict)

        # Check summary and print results
        if (itr + 1) % args.check_interval == 0:
            writer['train'].add_summary(result[1], itr)
            writer['val'].add_summary(result_val[1], itr)
            pstr = '(train/val) los:{:.3f}/{:.3f} acc:{:.3f}/{:.3f} spa:{:.3f}'.format(
                result[0]['los'],
                result_val[0]['los'],
                result[0]['acc'],
                result_val[0]['acc'],
                result[2],
            )
            print('itr{}: {} (t:{:.1f})'.format(itr + 1, pstr,
                                                time.time() - t_start))
            t_start = time.time()

        # Save model
        if (itr + 1) % args.save_interval == 0:
            saver.save(sess, args.path_model + '/itr-' + str(itr))
Пример #25
0
def data_augment(img):
    # instagram
    # distortion
    # Assume camera is facing front and in the middle of bot.
    return augment(img)
Пример #26
0
    if len(argv) != 8:
        stderr.write(
            ("USAGE: python3 %s train_file dev_file " +
             "aug_factor num_epochs alpha beta modeloutfile\n") % argv[0])
        exit(1)

    TRAIN_FN = argv[1]
    DEV_FN = argv[2]
    AUG_FACTOR = int(argv[3])
    attention.EPOCHS = int(argv[4])
    ALPHA = float(argv[5])
    BETA = float(argv[6])
    O_FN = argv[7]

    data = augment([
        l.strip().split('\t')
        for l in open(TRAIN_FN).read().split('\n') if l.strip() != ''
    ], AUG_FACTOR)

    idata = [[c for c in lemma] + tags.split(';') for lemma, _, tags in data]
    odata = [[c for c in wf] for _, wf, _ in data]
    devdata = [
        l.strip().split('\t') for l in open(DEV_FN).read().split('\n')
        if l.strip() != ''
    ]
    idevdata = [[c for c in lemma] + tags.split(';')
                for lemma, _, tags in devdata]
    odevdata = [[c for c in wf] for _, wf, _ in devdata]

    characters = set([attention.EOS])

    for wf in idata + odata + idevdata + odevdata:
Пример #27
0
def get_image(filename, deterministic):
    # print filename
    with gzip.open(filename, 'rb') as f:
        lung = pickle.load(f)

    np.set_printoptions(threshold='nan')

    segmentation_filename = filename.replace('lung', 'lung_masks')
    truth_filename = filename.replace('lung', 'nodule')
    if os.path.isfile(truth_filename):
        with gzip.open(truth_filename, 'rb') as f:
            truth = np.array(pickle.load(f), dtype=np.float32)
    else:
        truth = np.zeros_like(lung)

    # print np.sum(truth)
    # print truth.shape
    # print truth_filename

    if os.path.isfile(segmentation_filename):
        with gzip.open(segmentation_filename, 'rb') as f:
            # print "segment file: ", segmentation_filename
            outside = np.where(pickle.load(f) > 0, 0, 1)
    else:
        outside = np.where(lung == 0, 1, 0)
        # print outside
        print 'lung masks are not found'
    # print "[1] truth number and outside number: ", np.sum(truth == 1), np.sum(outside)

    if P.ERODE_SEGMENTATION > 0:
        kernel = skimage.morphology.disk(P.ERODE_SEGMENTATION)
        outside = skimage.morphology.binary_erosion(outside, kernel)

    outside = np.array(outside, dtype=np.float32)

    if P.AUGMENT and not deterministic:
        lung, truth, outside = augment([lung, truth, outside])

    if P.RANDOM_CROP > 0:
        im_x = lung.shape[0]
        im_y = lung.shape[1]
        x = np.random.randint(0, max(1, im_x - P.RANDOM_CROP))
        y = np.random.randint(0, max(1, im_y - P.RANDOM_CROP))

        lung = lung[x:x + P.RANDOM_CROP, y:y + P.RANDOM_CROP]
        truth = truth[x:x + P.RANDOM_CROP, y:y + P.RANDOM_CROP]
        outside = outside[x:x + P.RANDOM_CROP, y:y + P.RANDOM_CROP]

    truth = np.array(np.round(truth), dtype=np.int64)
    outside = np.array(np.round(outside), dtype=np.int64)
    # print "[2] truth number and outside number: ", np.sum(truth == 1), np.sum(outside)

    # Set label of outside pixels to -10
    truth = truth - (outside * 10)

    lung = lung * (1 - outside)
    lung = lung - outside * 3000

    if P.INPUT_SIZE > 0:
        lung = crop_or_pad(lung, INPUT_SIZE, -3000)
        truth = crop_or_pad(truth, OUTPUT_SIZE, 0)
        outside = crop_or_pad(outside, OUTPUT_SIZE, 1)
    else:
        out_size = output_size_for_input(lung.shape[1], P.DEPTH)
        # lung = crop_or_pad(lung, INPUT_SIZE, -1000)
        truth = crop_or_pad(truth, out_size, 0)
        outside = crop_or_pad(outside, out_size, 1)

    lung = normalize.normalize(lung)
    lung = np.expand_dims(np.expand_dims(lung, axis=0), axis=0)

    if P.ZERO_CENTER:
        lung = lung - P.MEAN_PIXEL

    if P.GAUSSIAN_NOISE > 0:
        sigma = P.GAUSSIAN_NOISE
        mean = 0.0
        gauss = np.random.normal(mean, sigma, lung.shape)
        lung = lung + gauss

    truth = np.array(np.expand_dims(np.expand_dims(truth, axis=0), axis=0),
                     dtype=np.int64)

    # print "[3] truth number and outside number: ", np.sum(truth == 1), np.sum(outside)
    return lung, truth
Пример #28
0
def mobilenet_v1_model_fn(features, labels, mode, params = {'dim':[512,768,3], 'format':"NHWC", 'num_classes':257, 'learning_rate':1e-4}):

    if params['format'] == "NHWC":
        iHeight = 0
        iWidth = 1
        batchnorm_axis = 3
    else:
        raise ValueError('mobilenet_v1_model_fn format {} not supported'.format(params['format']))

    def parser(record):
        label_key = "image/label"
        bytes_key = "image/encoded"
        parsed = tf.parse_single_example(record, {
            bytes_key : tf.FixedLenFeature([], tf.string),
            label_key : tf.FixedLenFeature([], tf.int64),
        })
        image = tf.decode_raw(parsed[bytes_key], tf.uint8)
        dims = [width, height, channels]
        image = tf.reshape(image, dims)
        return { "image" : image }, parsed[label_key]                                                            

    images = features["image"]
    images = tf.image.convert_image_dtype(images, tf.float32)
     
    # Test support and performance of NHWC and NHWC
    #if params.data_format == 'NHWC':
        # Convert the inputs from channels_last (NHWC) to channels_first (NHWC).
        # This provides a large performance boost on GPU. See
        # https://www.tensorflow.org/performance/performance_guide#data_formats
        #images = tf.transpose(images, [0, 2, 1, 3], name="nhwc_input")

    # Augment dataset when training
    if mode == tf.contrib.learn.ModeKeys.TRAIN:
        images = augment(images, params)

    images = tf.image.per_image_standardization(images)

    images = tf.image.resize_with_crop_or_pad(images,params['dim'][iHeight],params['dim'][iWidth])

    # make_mobilenet_v1
    logits = make_mobilenet_v1(images, mode, batchnorm_axis, params['format'], params['num_classes'])  

    predictions = {
        # Returns the highest prediction from the output of logits.
        tf.contrib.learn.PredictionKey.CLASSES : tf.argmax(logits, axis=1, name="predicted_classes"),
        # Softmax squashes arbitrary real values into a range of 0 to 1 and returns the
        # probabilities of each of the classes. Name is used for logging.
        tf.contrib.learn.PredictionKey.PROBABILITIES : tf.nn.softmax(logits, name="predicted_probability")
    }

    # Run-time prediction
    if mode == tf.estimator.ModeKeys.PREDICT:
        exports = {'predictions' : tf.estimator.export.PredictOutput(predictions)}
        return tf.estimator.EstimatorSpec(mode, predictions=predictions, export_outputs=exports)

    #labels = tf.squeeze(labels, axis=3)  # reduce the channel dimension.
    predicted_labels = predictions[tf.contrib.learn.PredictionKey.CLASSES]

    model_metrics = metrics(labels, predicted_labels, tf.contrib.learn.PredictionKey.CLASSES)  

    tf.summary.scalar("accuracy", model_metrics['accuracy'][1])
    tf.summary.scalar("precision", model_metrics['precision'][1])
    tf.summary.scalar("recall", model_metrics['recall'][1])
    #tf.summary.scalar("meaniou", model_metrics['meaniou'][1])   

    logits_by_num_classes = tf.reshape(logits, [-1, params['num_classes']])
    labels_flat = tf.reshape(labels, [-1, ])
    valid_indices = tf.to_int32(labels_flat <= params['num_classes'] - 1)
    valid_logits = tf.dynamic_partition(logits_by_num_classes, valid_indices, num_partitions=2)[1]
    valid_labels = tf.dynamic_partition(labels_flat, valid_indices, num_partitions=2)[1]

    pred_loss = loss(valid_logits, valid_labels, params['num_classes'])
   
    # Training time evaluation
    if mode == tf.estimator.ModeKeys.EVAL:
      return tf.estimator.EstimatorSpec(mode, loss=pred_loss, eval_metric_ops=model_metrics)

    # Train the model with AdamOptimizer
    if mode == tf.estimator.ModeKeys.TRAIN:
        optimizer = tf.train.AdamOptimizer(learning_rate=params['learning_rate'])
        train_op = optimizer.minimize(pred_loss, global_step=tf.train.get_global_step())

        return tf.estimator.EstimatorSpec(mode, loss=pred_loss, train_op=train_op)
Пример #29
0
def do_step(chosen_tasks, training):
    losses = []
    accuracies_c = []
    accuracies_d = []
    gradient_accum = None
    for t_id, t in enumerate(chosen_tasks):
        corrects_c = []
        corrects_d = []
        with tf.GradientTape() as tape:
            if training and prm['AUGMENT']:
                t = augment(t, prm)

            target_shape = t[OUT_TEST].shape
            target_grid = t[OUT_TEST]

            result_c, result_d = tasksolver(t)

            if prm['SIZEPREDTYPE'] == SizePredType.CLASSIFICATION:
                loss_c = tf.reduce_mean(
                    tf.keras.losses.sparse_categorical_crossentropy(
                        target_shape, result_c, from_logits=True))
                pred_ids = tf.keras.backend.argmax(result_c, axis=-1)

            elif prm['SIZEPREDTYPE'] == SizePredType.REAL_NUMBER:
                result_c = tf.squeeze(result_c)
                loss_c = tf.reduce_mean(
                    tf.square(tf.cast(target_shape, tf.float32) - result_c))
                pred_ids = tf.cast(tf.math.round(result_c), tf.int64)

            correct_c = tf.reduce_all(tf.equal(pred_ids, target_shape))

            pred_grid = tf.keras.backend.argmax(result_d, axis=-1)

            if correct_c.numpy() == True:
                pred_grid = tf.reshape(
                    pred_grid, target_grid.shape)  #yes i'm doing it twice.
                correct_d = tf.reduce_all(
                    tf.equal(pred_grid, tf.cast(target_grid, tf.int64)))
            else:
                correct_d = tf.constant(False)

            if training:
                pred_grid = tf.reshape(
                    pred_grid, target_grid.shape)  #yes i'm doing it twice.
                loss_d = tf.reduce_mean(
                    tf.keras.losses.sparse_categorical_crossentropy(
                        target_grid, result_d, from_logits=True))
            else:
                loss_d = tf.constant(0.0)

            corrects_c.append(correct_c)
            corrects_d.append(correct_d)
            #print(pred_ids.numpy(), target_shape, correct.numpy())
            losses.append(loss_c)
            losses.append(loss_d)

        if training:
            gradients = tape.gradient(
                losses,
                tasksolver.trainable_variables,
                unconnected_gradients=tf.UnconnectedGradients.ZERO)

            if gradient_accum is None:
                gradient_accum = [
                    tf.convert_to_tensor(tens) for tens in gradients
                ]
            else:
                for t_id2 in range(0, len(gradient_accum)):
                    gradient_accum[t_id2] = tf.add(
                        gradient_accum[t_id2],
                        tf.convert_to_tensor(gradients[t_id2]))

        corrects_c = tf.reduce_all(tf.stack(corrects_c, axis=0))
        corrects_d = tf.reduce_all(tf.stack(corrects_d, axis=0))
        accuracy_c = tf.squeeze(
            tf.reduce_mean(tf.cast(corrects_c, dtype=tf.float32)))
        accuracy_d = tf.squeeze(
            tf.reduce_mean(tf.cast(corrects_d, dtype=tf.float32)))
        accuracies_c.append(accuracy_c)
        accuracies_d.append(accuracy_d)
        print(f"{t_id}/{len(chosen_tasks)}", end="     \r")

    totalparams = tf.reduce_sum(
        [tf.size(tens) for tens in tasksolver.trainable_variables])

    if training:
        #print(f"             #gt {len(gradient_accum)} #p {totalparams} ", end='')
        optimizer.apply_gradients(
            zip(gradient_accum, tasksolver.trainable_variables))

    return losses, accuracies_c, accuracies_d
Пример #30
0
        exit(1)

    TRAIN_FN = argv[1]
    DEV_FN = argv[2]
    MAX_SIZE = int(argv[3])
    attention_task2.EPOCHS = int(argv[4])
    ALPHA = float(argv[5])
    BETA = float(argv[6])
    O_FN = argv[7]

    orig_data = [
        l.strip().split('\t') for l in open(TRAIN_FN).read().split('\n')
        if l.strip() != ''
    ]
    AUG_FACTOR = max(1, int(MAX_SIZE / len(orig_data)))
    data = augment(orig_data, AUG_FACTOR)

    stdout.flush()
    idata = [[c for c in lemma] + tags.split(';') for lemma, _, tags in data]
    odata = [[c for c in wf] for _, wf, _ in data]
    devdata = [
        l.strip().split('\t') for l in open(DEV_FN).read().split('\n')
        if l.strip() != ''
    ]
    idevdata = [[c for c in lemma] + tags.split(';')
                for lemma, _, tags in devdata]
    odevdata = [[c for c in wf] for _, wf, _ in devdata]

    characters = set([attention_task2.EOS])

    for wf in idata + odata: