def __init__(self, cfg_file='/root/tzl/text_renderer/configs/default_test.yaml'): """ handle exist image """ self.debug = True cfg = load_config(cfg_file) self.cfg = cfg self.liner = Liner(cfg) self.noiser = Noiser(cfg) self.remaper = Remaper(cfg) self.create_kernals()
def __init__(self, cfg_name): self.cfg = load_config(cfg_name) self.cfg.lr_boundaries = [10000] self.cfg.lr_values = [ self.cfg.lr * (self.cfg.lr_decay_rate**i) for i in range(len(self.cfg.lr_boundaries) + 1) ] self.sess = None self.graph = None self.converter = None self.dataset = None self.input = None self.output = None self.global_step = None
def __init__(self, model_path): os.environ['CUDA_VISIBLE_DEVICES'] = '2' self.cfg = load_config('resnet') self.label_converter = LabelConverter(lexicon) config = tf.ConfigProto(allow_soft_placement=True) config.gpu_options.allow_growth = True config.gpu_options.per_process_gpu_memory_fraction = 0.5 self.graph = tf.Graph() self.session = tf.Session(graph=self.graph, config=config) with self.session.as_default(): with self.graph.as_default(): self.net = CRNN(self.cfg, num_classes=self.label_converter.num_classes) saver = tf.train.Saver() saver.restore(self.session, model_path) logging.info('CRNN model initialized.')
def __init__(self, args): self.args = args self.cfg = load_config(args.cfg_name) self.converter = LabelConverter(chars_file=args.chars_file) self.tr_ds = ImgDataset(args.train_dir, self.converter, self.cfg.batch_size) self.cfg.lr_boundaries = [ self.tr_ds.num_batches * epoch for epoch in self.cfg.lr_decay_epochs ] self.cfg.lr_values = [ self.cfg.lr * (self.cfg.lr_decay_rate**i) for i in range(len(self.cfg.lr_boundaries) + 1) ] if args.val_dir is None: self.val_ds = None else: self.val_ds = ImgDataset(args.val_dir, self.converter, self.cfg.batch_size, shuffle=False) if args.test_dir is None: self.test_ds = None else: # Test images often have different size, so set batch_size to 1 self.test_ds = ImgDataset(args.test_dir, self.converter, shuffle=False, batch_size=1) self.model = CRNN(self.cfg, num_classes=self.converter.num_classes) self.sess = tf.Session(config=tf.ConfigProto( allow_soft_placement=True)) self.epoch_start_index = 0 self.batch_start_index = 0
from libs.config import load_config from libs.timer import Timer from parse_args import parse_args import libs.utils as utils import libs.font_utils as font_utils from textrenderer.corpus.corpus_utils import corpus_factory from textrenderer.renderer import Renderer from tenacity import retry lock = mp.Lock() counter = mp.Value('i', 0) STOP_TOKEN = 'kill' flags = parse_args() cfg = load_config(flags.config_file) fonts = font_utils.get_font_paths_from_list(flags.fonts_list) bgs = utils.load_bgs(flags.bg_dir) corpus = corpus_factory(flags.corpus_mode, flags.chars_file, flags.corpus_dir, flags.length) renderer = Renderer(corpus, fonts, bgs, cfg, height=flags.img_height, width=flags.img_width, clip_max_chars=flags.clip_max_chars, debug=flags.debug,
def train(self, log_dir, restore, log_step, ckpt_dir, val_step, cfg_name, chars_file, train_txt, val_txt, test_txt, result_dir): cfg = load_config(cfg_name) converter = LabelConverter(chars_file=chars_file) tr_ds = ImgDataset(train_txt, converter, cfg.batch_size) cfg.lr_boundaries = [10000] cfg.lr_values = [cfg.lr * (cfg.lr_decay_rate ** i) for i in range(len(cfg.lr_boundaries) + 1)] if val_txt is None: val_ds = None else: val_ds = ImgDataset(val_txt, converter, cfg.batch_size, shuffle=False) if test_txt is None: test_ds = None else: # Test images often have different size, so set batch_size to 1 test_ds = ImgDataset(test_txt, converter, shuffle=False, batch_size=1) model = CRNN(cfg, num_classes=converter.num_classes) epoch_start_index = 0 batch_start_index = 0 config=tf.ConfigProto(allow_soft_placement=True) config.gpu_options.allow_growth = True config.gpu_options.per_process_gpu_memory_fraction = 0.8 sess = tf.Session(config=config) sess.run(tf.global_variables_initializer()) saver = tf.train.Saver(tf.global_variables(), max_to_keep=8) train_writer = tf.summary.FileWriter(log_dir, sess.graph) if restore: self._restore(sess, saver, model,tr_ds, ckpt_dir) print('Begin training...') for epoch in range(epoch_start_index, cfg.epochs): sess.run(tr_ds.init_op) for batch in range(batch_start_index, tr_ds.num_batches): batch_start_time = time.time() if batch != 0 and (batch % log_step == 0): batch_cost, global_step, lr = self._train_with_summary( model, tr_ds, sess, train_writer, converter) else: batch_cost, global_step, lr = self._train(model, tr_ds, sess) print("epoch: {}, batch: {}/{}, step: {}, time: {:.02f}s, loss: {:.05}, lr: {:.05}" .format(epoch, batch, tr_ds.num_batches, global_step, time.time() - batch_start_time, batch_cost, lr)) if global_step != 0 and (global_step % val_step == 0): val_acc = self._do_val(val_ds, epoch, global_step, "val", sess, model, converter, train_writer, cfg, result_dir) test_acc = self._do_val(test_ds, epoch, global_step, "test", sess, model, converter, train_writer, cfg, result_dir) self._save_checkpoint(ckpt_dir, global_step, saver, sess, val_acc, test_acc) batch_start_index = 0
self.embedding: embedding features self.char_label: 和 embedding features 对应的标签 self.char_pos: 和 embedding features 对应的字符位置 """ with tf.variable_scope('pos'): # 判断是否为预测的字符 is_char = tf.less(raw_pred, self.num_classes - 1) # 错位比较法,找到重复字符 char_rep = tf.equal(raw_pred[:, :-1], raw_pred[:, 1:]) tail = tf.greater(raw_pred[:, :1], self.num_classes - 1) char_rep = tf.concat([char_rep, tail], axis=1) # 去掉重复字符之后的字符位置,重复字符取其 最后一次 出现的位置 char_no_rep = tf.math.logical_and(is_char, tf.math.logical_not(char_rep)) # 得到字符位置 和 相应的标签,如果某张图片 预测出来的字符数量 和gt不一致则跳过 self.char_pos, self.char_label = self.get_char_pos_and_label( preds=char_no_rep, label=label, char_num=char_num, poses=poses) # 根据字符位置得到字符的 embedding self.embedding = self.get_features(self.char_pos, embedding) if __name__ == '__main__': from libs.label_converter import LabelConverter cfg = load_config('raw') converter = LabelConverter(chars_file='./data/chars/lexicon.txt') model = CRNN(cfg, num_classes=converter.num_classes)
async def on_ready(self): print(f'We have logged in as {self.bot.user}') await self.bot.change_presence(activity=discord.Game(name=config.special_event)) config.load_config(self.bot) print("Session started.")