예제 #1
0
def bakeGenerator(annot):
	lines = open(annot, 'r').read().strip().split('\n')
	x_set = [line.split()[0] for line in lines]
	y_set = [line.split()[1] for line in lines]
	# x_set = glob.glob(os.path.join(root, 'raw', '*.jpg'))
	# y_set = glob.glob(os.path.join(root, 'mask', '*.jpg'))
	gen = DataGenerator(x_set, y_set, batch_size=batch_size, shuffle=True)
	return gen
예제 #2
0
            for item in data.dataset['train']:
                f.write(f"TR_L {item}\n")

            for item, noise in zip(data.dataset['valid'], valid_noised):
                f.write(f"VA_L {item}\nVA_P {noise}\n")

            for item, noise in zip(data.dataset['test'], test_noised):
                f.write(f"TE_L {item}\nTE_P {noise}\n")

    else:
        assert os.path.isfile(source_path) or os.path.isfile(target_path)
        os.makedirs(output_path, exist_ok=True)

        dtgen = DataGenerator(source=source_path,
                              batch_size=args.batch_size,
                              charset=(charset_base + charset_special),
                              max_text_length=max_text_length,
                              predict=args.test)

        if args.mode in ['similarity', 'norvig', 'symspell', 'kaldi']:
            lm = LanguageModel(mode=args.mode, output=output_path, N=args.N)

            if args.train:
                if args.mode == "kaldi":
                    lm.autocorrect(sentences=None, predict=args.test)
                else:
                    corpus = lm.create_corpus(dtgen.dataset['train']['gt'] +
                                              dtgen.dataset['valid']['gt'] +
                                              dtgen.dataset['test']['gt'])

                    with open(os.path.join(output_path, "corpus.txt"),
예제 #3
0
            print("\nProb.  - Predict")

            for (pd, pb) in zip(pred, prob):
                print(f"{pb:.4f} - {pd}")

            cv2.imshow(f"Image {i + 1}", pp.adjust_to_see(img))
        print("\n####################################")
        cv2.waitKey(0)

    else:
        assert os.path.isfile(source_path) or os.path.isfile(target_path)
        os.makedirs(output_path, exist_ok=True)

        dtgen = DataGenerator(source=source_path,
                              batch_size=args.batch_size,
                              charset=charset_base,
                              max_text_length=max_text_length,
                              predict=args.test)

        model = HTRModel(architecture=args.arch,
                         input_size=input_size,
                         vocab_size=dtgen.tokenizer.vocab_size)

        model.compile(learning_rate=0.001)
        model.load_checkpoint(target=target_path)

        if args.train:
            model.summary(output_path, "summary.txt")
            callbacks = model.get_callbacks(logdir=output_path,
                                            checkpoint=target_path,
                                            verbose=1)
예제 #4
0
os.makedirs(output_path, exist_ok=True)

# define input size, number max of chars per line and list of valid chars
input_size = (1024, 128, 1)
max_text_length = 128
charset_base = string.printable[:95]

print("source:", source_path)
print("output", output_path)
print("target", target_path)
print("charset:", charset_base)

from data.generator import DataGenerator

dtgen = DataGenerator(source=source_path,
                      batch_size=batch_size,
                      charset=charset_base,
                      max_text_length=max_text_length)

print(f"Train images: {dtgen.size['train']}")
print(f"Validation images: {dtgen.size['valid']}")
print(f"Test images: {dtgen.size['test']}")

from network.model import HTRModel

# create and compile HTRModel
model = HTRModel(architecture=arch,
                 input_size=input_size,
                 vocab_size=dtgen.tokenizer.vocab_size,
                 beam_width=10,
                 stop_tolerance=20,
                 reduce_tolerance=15)
예제 #5
0
파일: main.py 프로젝트: famus2310/VK-OCR
    else:
        assert os.path.isfile(source_path) or os.path.isfile(target_path)
        os.makedirs(output_path, exist_ok=True)

        if args.train:

            device = torch.device(args.device)
            model = make_model(tokenizer.vocab_size,
                               hidden_dim=256,
                               nheads=4,
                               num_encoder_layers=4,
                               num_decoder_layers=4)
            model.to(device)

            train_loader = torch.utils.data.DataLoader(
                DataGenerator(source_path, charset_base, max_text_length,
                              'train', transform),
                batch_size=args.batch_size,
                shuffle=False,
                num_workers=2)
            val_loader = torch.utils.data.DataLoader(
                DataGenerator(source_path, charset_base, max_text_length,
                              'valid', transform),
                batch_size=args.batch_size,
                shuffle=False,
                num_workers=2)

            criterion = LabelSmoothing(size=tokenizer.vocab_size,
                                       padding_idx=0,
                                       smoothing=0.1)
            criterion.to(device)
            lr = args.lr  # learning rate
예제 #6
0
from data.generator import DataGenerator

datagen = DataGenerator()


def get_most_viewed_screens_by_all_time(sessions):
    screens_time_map = {}
    for session in sessions:
        session_screens = session.get('screens', [])
        for screen in session_screens:
            screen_id = screen['id']
            screen_time = screen['time']
            total_screen_time = screens_time_map.get(screen['id'], 0)
            screens_time_map[screen_id] = total_screen_time + screen_time

    sorted_screen_ids = sorted(screens_time_map.keys(),
                               key=lambda key: screens_time_map[key],
                               reverse=True)

    sorted_screens = [{
        'screen': datagen.get_screen_by_id(screen_id),
        'time': screens_time_map[screen_id]
    } for screen_id in sorted_screen_ids]

    return sorted_screens


def get_most_viewed_screens_by_count(sessions):
    screens_time_map = {}
    for session in sessions:
        session_screens = session.get('screens', [])
        with h5py.File(hdf5_src, "r") as hf:
            dt = hf["test"]["dt"][:]
            gt = hf["test"]["gt"][:]

        for x in range(len(dt)):
            print(f"Image shape: {dt[x].shape}")
            print(f"Ground truth: {gt[x].decode()}\n")

            cv2.imshow("img", pp.adjust_to_see(dt[x]))
            cv2.waitKey(0)

    elif args.train or args.test:
        os.makedirs(output_path, exist_ok=True)

        dtgen = DataGenerator(hdf5_src=hdf5_src,
                              batch_size=args.batch_size,
                              charset=charset_base,
                              max_text_length=max_text_length)

        network_func = getattr(architecture, args.arch)

        ioo = network_func(input_size=input_size,
                           output_size=(dtgen.tokenizer.vocab_size + 1),
                           learning_rate=0.001)

        model = HTRModel(inputs=ioo[0], outputs=ioo[1])
        model.compile(optimizer=ioo[2])

        checkpoint = "checkpoint_weights.hdf5"
        model.load_checkpoint(target=os.path.join(output_path, checkpoint))

        if args.train:
예제 #8
0
        lambda x: 1 if class_name in x else 0)

BATCH_SIZE = 32

train_imgs, val_imgs = train_test_split(train['Image'].values,
                                        test_size=0.2,
                                        stratify=train['Class'].map(lambda x: str(sorted(list(x)))),
                                        random_state=2019)

img_2_ohe_vector = {img: vec for img, vec in zip(train['Image'], train.iloc[:, 2:].values)}

albumentations_train = Compose([
    VerticalFlip(), HorizontalFlip(), Rotate(limit=20), GridDistortion()
], p=1)

data_generator_train = DataGenerator(train_imgs, augmentation=albumentations_train, img_2_ohe_vector=img_2_ohe_vector)
data_generator_train_eval = DataGenerator(train_imgs, shuffle=False, img_2_ohe_vector=img_2_ohe_vector)
data_generator_val = DataGenerator(val_imgs, shuffle=False, img_2_ohe_vector=img_2_ohe_vector)

train_metric_callback = PrAucCallback(data_generator_train_eval)
val_callback = PrAucCallback(data_generator_val, stage='val')

# Unet model
# preprocess = get_preprocessing('resnet34')  # for resnet, img = (img-110.0)/1.0
# model = Unet('resnet34', input_shape=(256, 256, 3),
#              classes=4, activation='sigmoid')

# EfficientNet model 
def get_model():
    K.clear_session()
    base_model = efn.EfficientNetB2(weights='imagenet', include_top=False, pooling='avg', input_shape=(256, 256, 3))
# define input size, number max of chars per line and list of valid chars
input_size = (1024, 128, 1)
max_text_length = 128
charset_base = string.printable[:95]

print("source:", source_path)
print("output", output_path)
print("target", target_path)
print("charset:", charset_base)

#TODO DataGenerator Class

from data.generator import DataGenerator

dtgen = DataGenerator(source=source_path,
                      batch_size=batch_size,
                      charset=charset_base,
                      max_text_length=max_text_length)

print(f"Train images: {dtgen.size['train']}")
print(f"Validation images: {dtgen.size['valid']}")
print(f"Test images: {dtgen.size['test']}")

#TODO HTRModel Class
from network.model import HTRModel

# create and compile HTRModel
model = HTRModel(architecture=arch,
                 input_size=input_size,
                 vocab_size=dtgen.tokenizer.vocab_size,
                 beam_width=10,
                 stop_tolerance=20,
    force_images=False,
    scale_around_zero=True,
    size_cropped=(256, 256),
    size_output=(64, 64),
    suffixes=[
        ['ed-after', 'ed-v'],
    ],
)

#%%

image_generator_type = 'Bicycle'

if image_generator_type == 'Pix2Pix':
    image_generator = Pix2Pix(
        training_generator=DataGenerator(train_set, shuffle=True),
        validation_generator=DataGenerator(validation_set, shuffle=True),
        result_path=data.result_path,
        generator_path=data.model_path / 'predict-gen-6.h5',
        discriminator_path=data.model_path / 'predict-dis-6.h5',
    )

elif image_generator_type == 'VAE':
    image_generator = VAE(
        training_generator=DataGenerator(train_set, shuffle=True),
        validation_generator=DataGenerator(validation_set, shuffle=True),
        result_path=data.result_path,
        model_path=data.model_path / 'predict-vae-2.h5',
    )

elif image_generator_type == 'Bicycle':