Global:
  device: gpu
  epoch_num: 20
  log_smooth_window: 20
  print_batch_step: 10
  output_dir: ./output/rec/u14m_filter/resnet45_fpn_dan/
  eval_epoch_step: [0, 1]
  eval_batch_step: [0, 500]
  cal_metric_during_train: True
  pretrained_model:
  checkpoints:
  use_tensorboard: false
  infer_img:
  # for data or label process
  character_dict_path: ./tools/utils/EN_symbol_dict.txt
  max_text_length: 25
  use_space_char: False
  save_res_path: ./output/rec/u14m_filter/predicts_resnet45_fpn_dan.txt
  use_amp: True
  grad_clip_val: 20

Optimizer:
  name: Adam
  lr: 0.00065 # for 4gpus bs256/gpu
  weight_decay: 0.0
  filter_bias_and_bn: False

LRScheduler:
  name: OneCycleLR
  warmup_epoch: 1.5 # pct_start 0.075*20 = 1.5ep
  cycle_momentum: False

Architecture:
  model_type: rec
  algorithm: DAN
  Transform:
  Encoder:
    name: ResNet45
    in_channels: 3
    strides: [2, 1, 2, 1, 1]
    return_list: True
  Decoder:
    name: DANDecoder
    max_len: 25
    channels_list: [64, 128, 256, 512]
    strides_list: [[2, 2], [1, 1], [1, 1]]
    in_shape: [8, 32]
    depth: 4

Loss:
  name: ARLoss

PostProcess:
  name: ARLabelDecode

Metric:
  name: RecMetric
  main_indicator: acc
  is_filter: True

Train:
  dataset:
    name: LMDBDataSet
    data_dir: ../Union14M-L-LMDB-Filtered
    transforms:
      - DecodeImagePIL: # load image
          img_mode: RGB
      - PARSeqAugPIL:
      - ARLabelEncode:
      - RecTVResize:
          image_shape: [32, 128]
          padding: False
      - KeepKeys:
          keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order
  loader:
    shuffle: True
    batch_size_per_card: 256
    drop_last: True
    num_workers: 4

Eval:
  dataset:
    name: LMDBDataSet
    data_dir: ../evaluation
    transforms:
      - DecodeImagePIL: # load image
          img_mode: RGB
      - ARLabelEncode:
      - RecTVResize:
          image_shape: [32, 128]
          padding: False
      - KeepKeys:
          keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order
  loader:
    shuffle: False
    drop_last: False
    batch_size_per_card: 256
    num_workers: 2