File size: 3,285 Bytes
29f689c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Global:
  device: gpu
  epoch_num: 100
  log_smooth_window: 20
  print_batch_step: 10
  output_dir: ./output/rec/ch/svtr_base_cppd/
  save_epoch_step: 1
  # evaluation is run every 2000 iterations
  eval_batch_step: [0, 2000]
  eval_epoch_step: [0, 1]
  cal_metric_during_train: False
  pretrained_model:
  checkpoints:
  use_tensorboard: false
  infer_img:
  # for data or label process
  character_dict_path: &character_dict_path ./tools/utils/ppocr_keys_v1.txt
  # ./tools/utils/EN_symbol_dict.txt # 96en
  # ./tools/utils/ppocr_keys_v1.txt  # ch
  max_text_length: &max_text_length 25
  use_space_char: &use_space_char False
  save_res_path: ./output/rec/ch/predicts_svtr_base_cppd.txt
  use_amp: True

Optimizer:
  name: AdamW
  lr: 0.0005 # for 4gpus bs128/gpu
  weight_decay: 0.05
  filter_bias_and_bn: True

LRScheduler:
  name: CosineAnnealingLR
  warmup_epoch: 5

Architecture:
  model_type: rec
  algorithm: CPPD
  in_channels: 3
  Transform:
  Encoder:
    name: SVTRNet
    img_size: [32, 256]
    patch_merging: 'Conv'
    embed_dim: [128, 256, 384]
    depth: [6, 6, 4]
    num_heads: [4, 8, 12]
    mixer: ['Conv','Conv','Conv','Conv','Conv','Conv', 'Conv','Conv', 'Global','Global','Global','Global','Global','Global','Global','Global','Global','Global']
    local_mixer: [[5, 5], [5, 5], [5, 5]]
    last_stage: False
    prenorm: True
  Decoder:
    name: CPPDDecoder
    vis_seq: 128
    num_layer: 3
    pos_len: False
    rec_layer: 1
    ch: True


Loss:
  name: CPPDLoss
  ignore_index: 7000
  smoothing: True
  pos_len: False
  sideloss_weight: 1.0

PostProcess:
  name: CPPDLabelDecode
  character_dict_path: *character_dict_path
  use_space_char: *use_space_char

Metric:
  name: RecMetric
  main_indicator: acc

Train:
  dataset:
    name: LMDBDataSet
    data_dir: ../benchmark_bctr/benchmark_bctr_train
    transforms:
      - DecodeImage: # load image
          img_mode: BGR
          channel_first: False
      - CPPDLabelEncode: # Class handling label
          pos_len: False
          ch: True
          ignore_index: 7000
          character_dict_path: *character_dict_path
          use_space_char: *use_space_char
          max_text_length: *max_text_length
      - SVTRResize:
          image_shape: [3, 32, 256]
          padding: True
      - KeepKeys:
          keep_keys: ['image', 'label', 'label_node', 'label_index', 'length'] # dataloader will return list in this order
  loader:
    shuffle: True
    batch_size_per_card: 128
    drop_last: True
    num_workers: 8

Eval:
  dataset:
    name: LMDBDataSet
    data_dir: ../benchmark_bctr/benchmark_bctr_test/scene_test
    transforms:
      - DecodeImage: # load image
          img_mode: BGR
          channel_first: False
      - CPPDLabelEncode: # Class handling label
          pos_len: False
          ch: True
          ignore_index: 7000
          character_dict_path: *character_dict_path
          use_space_char: *use_space_char
          max_text_length: *max_text_length
      - SVTRResize:
          image_shape: [3, 32, 256]
          padding: True
      - KeepKeys:
          keep_keys: ['image', 'label', 'label_node', 'length'] # dataloader will return list in this order
  loader:
    shuffle: False
    drop_last: False
    batch_size_per_card: 256
    num_workers: 4