diff --git a/configs/_base_/recog_datasets/MJ_train.py b/configs/_base_/recog_datasets/MJ_train.py deleted file mode 100644 index 81199ae7..00000000 --- a/configs/_base_/recog_datasets/MJ_train.py +++ /dev/null @@ -1,12 +0,0 @@ -# Text Recognition Training set, including: -# Synthetic Datasets: Syn90k - -mj_rec_train = dict( - type='OCRDataset', - data_root='data/rec', - data_prefix=dict(img_path='Syn90k/mnt/ramdisk/max/90kDICT32px'), - ann_file='Syn90k/train_labels.json', - test_mode=False, - pipeline=None) - -train_list = [mj_rec_train] diff --git a/configs/_base_/recog_datasets/ST_MJ_alphanumeric_train.py b/configs/_base_/recog_datasets/ST_MJ_alphanumeric_train.py deleted file mode 100644 index 113d3638..00000000 --- a/configs/_base_/recog_datasets/ST_MJ_alphanumeric_train.py +++ /dev/null @@ -1,24 +0,0 @@ -# Text Recognition Training set, including: -# Synthetic Datasets: SynthText, Syn90k -# Both annotations are filtered so that -# only alphanumeric terms are left -data_root = 'data/rec' - -mj_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path='Syn90k/mnt/ramdisk/max/90kDICT32px'), - ann_file='Syn90k/train_labels.json', - test_mode=False, - pipeline=None) - -st_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict( - img_path='SynthText/synthtext/SynthText_patch_horizontal'), - ann_file='SynthText/alphanumeric_train_labels.json', - test_mode=False, - pipeline=None) - -train_list = [mj_rec_train, st_rec_train] diff --git a/configs/_base_/recog_datasets/ST_MJ_train.py b/configs/_base_/recog_datasets/ST_MJ_train.py deleted file mode 100644 index 8aabd7aa..00000000 --- a/configs/_base_/recog_datasets/ST_MJ_train.py +++ /dev/null @@ -1,23 +0,0 @@ -# Text Recognition Training set, including: -# Synthetic Datasets: SynthText, Syn90k - -data_root = 'data/rec' - -mj_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path='Syn90k/mnt/ramdisk/max/90kDICT32px'), - ann_file='Syn90k/train_labels.json', - test_mode=False, - pipeline=None) - -st_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict( - img_path='SynthText/synthtext/SynthText_patch_horizontal'), - ann_file='SynthText/train_labels.json', - test_mode=False, - pipeline=None) - -train_list = [mj_rec_train, st_rec_train] diff --git a/configs/_base_/recog_datasets/ST_SA_MJ_real_train.py b/configs/_base_/recog_datasets/ST_SA_MJ_real_train.py deleted file mode 100644 index 9a4ecdbc..00000000 --- a/configs/_base_/recog_datasets/ST_SA_MJ_real_train.py +++ /dev/null @@ -1,91 +0,0 @@ -# Text Recognition Training set, including: -# Synthetic Datasets: SynthText, SynthAdd, Syn90k -# Real Dataset: IC11, IC13, IC15, COCO-Test, IIIT5k -data_root = 'data/rec' - -train_img_prefix1 = 'icdar_2011' -train_img_prefix2 = 'icdar_2013' -train_img_prefix3 = 'icdar_2015' -train_img_prefix4 = 'coco_text_v1' -train_img_prefix5 = 'IIIT5K' -train_img_prefix6 = 'synthtext_add' -train_img_prefix7 = 'SynthText/synthtext/SynthText_patch_horizontal' -train_img_prefix8 = 'Syn90k/mnt/ramdisk/max/90kDICT32px' - -train_ann_file1 = 'icdar_2011/train_labels.json' -train_ann_file2 = 'icdar_2013/train_labels.json' -train_ann_file3 = 'icdar_2015/train_labels.json' -train_ann_file4 = 'coco_text_v1/train_labels.json' -train_ann_file5 = 'IIIT5K/train_labels.json' -train_ann_file6 = 'synthtext_add/train_labels.json' -train_ann_file7 = 'SynthText/shuffle_train_labels.json' -train_ann_file8 = 'Syn90k/shuffle_train_labels.json' - -ic11_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path=train_img_prefix1), - ann_file=train_ann_file1, - test_mode=False, - pipeline=None) - -ic13_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path=train_img_prefix2), - ann_file=train_ann_file2, - test_mode=False, - pipeline=None) - -ic15_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path=train_img_prefix3), - ann_file=train_ann_file3, - test_mode=False, - pipeline=None) - -cocov1_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path=train_img_prefix4), - ann_file=train_ann_file4, - test_mode=False, - pipeline=None) - -iiit5k_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path=train_img_prefix5), - ann_file=train_ann_file5, - test_mode=False, - pipeline=None) - -st_add_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path=train_img_prefix6), - ann_file=train_ann_file6, - test_mode=False, - pipeline=None) - -st_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path=train_img_prefix7), - ann_file=train_ann_file7, - test_mode=False, - pipeline=None) - -mj_rec_trian = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path=train_img_prefix8), - ann_file=train_ann_file8, - test_mode=False, - pipeline=None) - -train_list = [ - ic13_rec_train, ic11_rec_train, ic15_rec_train, cocov1_rec_train, - iiit5k_rec_train, st_add_rec_train, st_rec_train, mj_rec_trian -] diff --git a/configs/_base_/recog_datasets/ST_SA_MJ_train.py b/configs/_base_/recog_datasets/ST_SA_MJ_train.py deleted file mode 100644 index 2173ac12..00000000 --- a/configs/_base_/recog_datasets/ST_SA_MJ_train.py +++ /dev/null @@ -1,30 +0,0 @@ -# Text Recognition Training set, including: -# Synthetic Datasets: SynthText, Syn90k -data_root = 'data/rec' - -mj_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path='Syn90k/mnt/ramdisk/max/90kDICT32px'), - ann_file='Syn90k/train_labels.json', - test_mode=False, - pipeline=None) - -st_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict( - img_path='SynthText/synthtext/SynthText_patch_horizontal'), - ann_file='SynthText/train_labels.json', - test_mode=False, - pipeline=None) - -st_add_rec_train = dict( - type='OCRDataset', - data_root=data_root, - data_prefix=dict(img_path='synthtext_add'), - ann_file='synthtext_add/train_labels.json', - test_mode=False, - pipeline=None) - -train_list = [mj_rec_train, st_rec_train, st_add_rec_train] diff --git a/configs/_base_/recog_datasets/academic_test.py b/configs/_base_/recog_datasets/academic_test.py deleted file mode 100644 index 6c025095..00000000 --- a/configs/_base_/recog_datasets/academic_test.py +++ /dev/null @@ -1,170 +0,0 @@ -# Text Recognition Testing set, including: -# Regular Datasets: IIIT5K, SVT, IC13 -# Irregular Datasets: IC15, SVTP, CT80 - -test_root = 'data/rec' - -test_img_prefix1 = 'IIIT5K/' -test_img_prefix2 = 'svt/' -test_img_prefix3 = 'icdar_2013/Challenge2_Test_Task3_Images/' -test_img_prefix4 = 'icdar_2015/ch4_test_word_images_gt' -test_img_prefix5 = 'svtp/' -test_img_prefix6 = 'ct80/' - -test_ann_file1 = 'IIIT5K/test_labels.json' -test_ann_file2 = 'svt/test_labels.json' -test_ann_file3 = 'icdar_2013/test_labels.json' -test_ann_file4 = 'icdar_2015/test_labels.json' -test_ann_file5 = 'svtp/test_labels.json' -test_ann_file6 = 'ct80/test_labels.json' - -iiit5k_rec_test = dict( - type='OCRDataset', - data_root=test_root, - data_prefix=dict(img_path=test_img_prefix1), - ann_file=test_ann_file1, - test_mode=True, - pipeline=None) - -svt_rec_test = dict( - type='OCRDataset', - data_root=test_root, - data_prefix=dict(img_path=test_img_prefix2), - ann_file=test_ann_file2, - test_mode=True, - pipeline=None) - -ic13_rec_test = dict( - type='OCRDataset', - data_root=test_root, - data_prefix=dict(img_path=test_img_prefix3), - ann_file=test_ann_file3, - test_mode=True, - pipeline=None) - -ic15_rec_test = dict( - type='OCRDataset', - data_root=test_root, - data_prefix=dict(img_path=test_img_prefix4), - ann_file=test_ann_file4, - test_mode=True, - pipeline=None) - -svtp_rec_test = dict( - type='OCRDataset', - data_root=test_root, - data_prefix=dict(img_path=test_img_prefix5), - ann_file=test_ann_file5, - test_mode=True, - pipeline=None) - -cute80_rec_test = dict( - type='OCRDataset', - data_root=test_root, - data_prefix=dict(img_path=test_img_prefix6), - ann_file=test_ann_file6, - test_mode=True, - pipeline=None) - -iiit5k_val_dataloader = dict( - batch_size=1, - num_workers=4, - persistent_workers=True, - drop_last=False, - sampler=dict(type='DefaultSampler', shuffle=False), - dataset=iiit5k_rec_test) - -svt_val_dataloader = dict( - batch_size=1, - num_workers=4, - persistent_workers=True, - drop_last=False, - sampler=dict(type='DefaultSampler', shuffle=False), - dataset=svt_rec_test) - -ic13_val_dataloader = dict( - batch_size=1, - num_workers=4, - persistent_workers=True, - drop_last=False, - sampler=dict(type='DefaultSampler', shuffle=False), - dataset=ic13_rec_test) - -ic15_val_dataloader = dict( - batch_size=1, - num_workers=4, - persistent_workers=True, - drop_last=False, - sampler=dict(type='DefaultSampler', shuffle=False), - dataset=ic15_rec_test) - -svtp_val_dataloader = dict( - batch_size=1, - num_workers=4, - persistent_workers=True, - drop_last=False, - sampler=dict(type='DefaultSampler', shuffle=False), - dataset=svtp_rec_test) - -cute80_val_dataloader = dict( - batch_size=1, - num_workers=4, - persistent_workers=True, - drop_last=False, - sampler=dict(type='DefaultSampler', shuffle=False), - dataset=cute80_rec_test) - -val_dataloader = [ - iiit5k_val_dataloader, svt_val_dataloader, ic13_val_dataloader, - ic15_val_dataloader, svtp_val_dataloader, cute80_val_dataloader -] - -test_dataloader = val_dataloader - -val_evaluator = [[ - dict( - type='WordMetric', - mode=['exact', 'ignore_case', 'ignore_case_symbol'], - prefix='IIIT5K'), - dict(type='CharMetric', prefix='IIIT5K') -], - [ - dict( - type='WordMetric', - mode=['exact', 'ignore_case', 'ignore_case_symbol'], - prefix='svt'), - dict(type='CharMetric', prefix='svt') - ], - [ - dict( - type='WordMetric', - mode=['exact', 'ignore_case', 'ignore_case_symbol'], - prefix='icdar_2013'), - dict(type='CharMetric', prefix='icdar_2013') - ], - [ - dict( - type='WordMetric', - mode=['exact', 'ignore_case', 'ignore_case_symbol'], - prefix='icdar_2015'), - dict(type='CharMetric', prefix='icdar_2015') - ], - [ - dict( - type='WordMetric', - mode=['exact', 'ignore_case', 'ignore_case_symbol'], - prefix='svtp'), - dict(type='CharMetric', prefix='svtp') - ], - [ - dict( - type='WordMetric', - mode=['exact', 'ignore_case', 'ignore_case_symbol'], - prefix='ct80'), - dict(type='CharMetric', prefix='ct80') - ]] -test_evaluator = val_evaluator -test_list = [ - iiit5k_rec_test, svt_rec_test, ic13_rec_test, ic15_rec_test, svtp_rec_test, - cute80_rec_test -] diff --git a/configs/_base_/recog_datasets/coco_text_v1.py b/configs/_base_/recog_datasets/coco_text_v1.py new file mode 100644 index 00000000..db73e441 --- /dev/null +++ b/configs/_base_/recog_datasets/coco_text_v1.py @@ -0,0 +1,8 @@ +cocov1_rec_train_data_root = 'data/rec/coco_text_v1' + +cocov1_rec_train = dict( + type='OCRDataset', + data_root=cocov1_rec_train_data_root, + ann_file='train_labels.json', + test_mode=False, + pipeline=None) diff --git a/configs/_base_/recog_datasets/cute80.py b/configs/_base_/recog_datasets/cute80.py new file mode 100644 index 00000000..21411079 --- /dev/null +++ b/configs/_base_/recog_datasets/cute80.py @@ -0,0 +1,8 @@ +cute80_rec_data_root = 'data/rec/ct80/' + +cute80_rec_test = dict( + type='OCRDataset', + data_root=cute80_rec_data_root, + ann_file='test_labels.json', + test_mode=True, + pipeline=None) diff --git a/configs/_base_/recog_datasets/icdar2011.py b/configs/_base_/recog_datasets/icdar2011.py new file mode 100644 index 00000000..cc6e9051 --- /dev/null +++ b/configs/_base_/recog_datasets/icdar2011.py @@ -0,0 +1,8 @@ +ic11_rec_data_root = 'data/rec/icdar_2011/' + +ic11_rec_train = dict( + type='OCRDataset', + data_root=ic11_rec_data_root, + ann_file='train_labels.json', + test_mode=False, + pipeline=None) diff --git a/configs/_base_/recog_datasets/icdar2013.py b/configs/_base_/recog_datasets/icdar2013.py new file mode 100644 index 00000000..0c9bb6e2 --- /dev/null +++ b/configs/_base_/recog_datasets/icdar2013.py @@ -0,0 +1,16 @@ +ic13_rec_data_root = 'data/rec/icdar_2013/' + +ic13_rec_train = dict( + type='OCRDataset', + data_root=ic13_rec_data_root, + ann_file='train_labels.json', + test_mode=False, + pipeline=None) + +ic13_rec_test = dict( + type='OCRDataset', + data_root=ic13_rec_data_root, + data_prefix=dict(img_path='Challenge2_Test_Task3_Images/'), + ann_file='test_labels.json', + test_mode=True, + pipeline=None) diff --git a/configs/_base_/recog_datasets/icdar2015.py b/configs/_base_/recog_datasets/icdar2015.py new file mode 100644 index 00000000..81bb83c3 --- /dev/null +++ b/configs/_base_/recog_datasets/icdar2015.py @@ -0,0 +1,16 @@ +ic15_rec_data_root = 'data/rec/icdar_2015/' + +ic15_rec_train = dict( + type='OCRDataset', + data_root=ic15_rec_data_root, + ann_file='train_labels.json', + test_mode=False, + pipeline=None) + +ic15_rec_test = dict( + type='OCRDataset', + data_root=ic15_rec_data_root, + data_prefix=dict(img_path='ch4_test_word_images_gt/'), + ann_file='test_labels.json', + test_mode=True, + pipeline=None) diff --git a/configs/_base_/recog_datasets/iiit5k.py b/configs/_base_/recog_datasets/iiit5k.py new file mode 100644 index 00000000..34a0e5a9 --- /dev/null +++ b/configs/_base_/recog_datasets/iiit5k.py @@ -0,0 +1,15 @@ +iiit5k_rec_data_root = 'data/rec/IIIT5K/' + +iiit5k_rec_train = dict( + type='OCRDataset', + data_root=iiit5k_rec_data_root, + ann_file='train_labels.json', + test_mode=False, + pipeline=None) + +iiit5k_rec_test = dict( + type='OCRDataset', + data_root=iiit5k_rec_data_root, + ann_file='test_labels.json', + test_mode=True, + pipeline=None) diff --git a/configs/_base_/recog_datasets/mjsynth.py b/configs/_base_/recog_datasets/mjsynth.py new file mode 100644 index 00000000..3f6338ae --- /dev/null +++ b/configs/_base_/recog_datasets/mjsynth.py @@ -0,0 +1,17 @@ +mj_rec_data_root = 'data/rec/' + +mj_rec_train = dict( + type='OCRDataset', + data_root=mj_rec_data_root, + data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'), + ann_file='train_labels.json', + test_mode=False, + pipeline=None) + +mj_sub_rec_train = dict( + type='OCRDataset', + data_root=mj_rec_data_root, + data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'), + ann_file='subset_train_labels.json', + test_mode=False, + pipeline=None) diff --git a/configs/_base_/recog_datasets/svt.py b/configs/_base_/recog_datasets/svt.py new file mode 100644 index 00000000..196d7658 --- /dev/null +++ b/configs/_base_/recog_datasets/svt.py @@ -0,0 +1,8 @@ +svt_rec_data_root = 'data/rec/svt/' + +svt_rec_test = dict( + type='OCRDataset', + data_root=svt_rec_data_root, + ann_file='test_labels.json', + test_mode=True, + pipeline=None) diff --git a/configs/_base_/recog_datasets/svtp.py b/configs/_base_/recog_datasets/svtp.py new file mode 100644 index 00000000..2c52175e --- /dev/null +++ b/configs/_base_/recog_datasets/svtp.py @@ -0,0 +1,8 @@ +svtp_rec_data_root = 'data/rec/svtp/' + +svtp_rec_test = dict( + type='OCRDataset', + data_root=svtp_rec_data_root, + ann_file='test_labels.json', + test_mode=True, + pipeline=None) diff --git a/configs/_base_/recog_datasets/synthtext.py b/configs/_base_/recog_datasets/synthtext.py new file mode 100644 index 00000000..8b474b46 --- /dev/null +++ b/configs/_base_/recog_datasets/synthtext.py @@ -0,0 +1,25 @@ +st_data_root = 'data/rec/SynthText/' + +st_rec_train = dict( + type='OCRDataset', + data_root=st_data_root, + data_prefix=dict(img_path='synthtext/SynthText_patch_horizontal'), + ann_file='train_labels.json', + test_mode=False, + pipeline=None) + +st_an_rec_train = dict( + type='OCRDataset', + data_root=st_data_root, + data_prefix=dict(img_path='synthtext/SynthText_patch_horizontal'), + ann_file='alphanumeric_train_labels.json', + test_mode=False, + pipeline=None) + +st_sub_rec_train = dict( + type='OCRDataset', + data_root=st_data_root, + data_prefix=dict(img_path='synthtext/SynthText_patch_horizontal'), + ann_file='subset_train_labels.json', + test_mode=False, + pipeline=None) diff --git a/configs/_base_/recog_datasets/synthtext_add.py b/configs/_base_/recog_datasets/synthtext_add.py new file mode 100644 index 00000000..f61dddda --- /dev/null +++ b/configs/_base_/recog_datasets/synthtext_add.py @@ -0,0 +1,8 @@ +st_add_rec_data_root = 'data/rec/st_add/' + +st_add_rec_train = dict( + type='OCRDataset', + data_root=st_add_rec_data_root, + ann_file='train_labels.json', + test_mode=False, + pipeline=None) diff --git a/configs/textrecog/abinet/base.py b/configs/textrecog/abinet/base.py index c6290813..b4b442e9 100644 --- a/configs/textrecog/abinet/base.py +++ b/configs/textrecog/abinet/base.py @@ -1,12 +1,22 @@ _base_ = [ - '../../_base_/recog_datasets/ST_MJ_alphanumeric_train.py', - '../../_base_/recog_datasets/academic_test.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/synthtext.py', + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', '../../_base_/schedules/schedule_adam_step_20e.py', ] # dataset settings -train_list = {{_base_.train_list}} +train_list = [_base_.mj_rec_train, _base_.st_an_rec_train] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] file_client_args = dict(backend='disk') default_hooks = dict(logger=dict(type='LoggerHook', interval=100)) @@ -93,13 +103,25 @@ train_dataloader = dict( dataset=dict( type='ConcatDataset', datasets=train_list, pipeline=train_pipeline)) -visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator + +visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') diff --git a/configs/textrecog/crnn/crnn_academic_dataset.py b/configs/textrecog/crnn/crnn_academic_dataset.py index d2fc10d4..3eda99f2 100644 --- a/configs/textrecog/crnn/crnn_academic_dataset.py +++ b/configs/textrecog/crnn/crnn_academic_dataset.py @@ -1,15 +1,23 @@ # training schedule for 1x _base_ = [ - 'crnn.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', - '../../_base_/recog_datasets/MJ_train.py', - '../../_base_/recog_datasets/academic_test.py', '../../_base_/schedules/schedule_adadelta_5e.py', + 'crnn.py', ] # dataset settings -train_list = {{_base_.train_list}} - +train_list = [_base_.mj_rec_train] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] file_client_args = dict(backend='disk') default_hooks = dict(logger=dict(type='LoggerHook', interval=50), ) @@ -53,14 +61,25 @@ train_dataloader = dict( sampler=dict(type='DefaultSampler', shuffle=True), dataset=dict( type='ConcatDataset', datasets=train_list, pipeline=train_pipeline)) +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') diff --git a/configs/textrecog/master/master_r31_12e_ST_MJ_SA.py b/configs/textrecog/master/master_r31_12e_ST_MJ_SA.py index e33f7041..4bf15c6a 100644 --- a/configs/textrecog/master/master_r31_12e_ST_MJ_SA.py +++ b/configs/textrecog/master/master_r31_12e_ST_MJ_SA.py @@ -1,13 +1,26 @@ _base_ = [ - 'master.py', - '../../_base_/recog_datasets/ST_SA_MJ_train.py', - '../../_base_/recog_datasets/academic_test.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/synthtext.py', + '../../_base_/recog_datasets/synthtext_add.py', + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', '../../_base_/schedules/schedule_adam_step_12e.py', + 'master.py', ] # dataset settings -train_list = {{_base_.train_list}} +train_list = [ + _base_.mj_rec_train, _base_.st_rec_train, _base_.st_add_rec_train +] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] file_client_args = dict(backend='disk') default_hooks = dict(logger=dict(type='LoggerHook', interval=50), ) @@ -54,14 +67,25 @@ train_dataloader = dict( sampler=dict(type='DefaultSampler', shuffle=True), dataset=dict( type='ConcatDataset', datasets=train_list, pipeline=train_pipeline)) +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') diff --git a/configs/textrecog/nrtr/nrtr_modality_transform_academic.py b/configs/textrecog/nrtr/nrtr_modality_transform_academic.py index 0f87c317..68b83dd6 100644 --- a/configs/textrecog/nrtr/nrtr_modality_transform_academic.py +++ b/configs/textrecog/nrtr/nrtr_modality_transform_academic.py @@ -1,15 +1,26 @@ _base_ = [ - 'nrtr_modality_transform.py', '../../_base_/recog_datasets/ST_MJ_train.py', - '../../_base_/recog_datasets/academic_test.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/synthtext.py', + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', - '../../_base_/schedules/schedule_adam_step_6e.py' + '../../_base_/schedules/schedule_adam_step_6e.py', + 'nrtr_modality_transform.py', ] # optimizer settings optim_wrapper = dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=3e-4)) # dataset settings -train_list = {{_base_.train_list}} +train_list = [_base_.mj_rec_train, _base_.st_rec_train] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] file_client_args = dict(backend='disk') default_hooks = dict(logger=dict(type='LoggerHook', interval=50), ) @@ -58,13 +69,25 @@ train_dataloader = dict( dataset=dict( type='ConcatDataset', datasets=train_list, pipeline=train_pipeline)) -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader + +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') diff --git a/configs/textrecog/nrtr/nrtr_modality_transform_toy_dataset.py b/configs/textrecog/nrtr/nrtr_modality_transform_toy_dataset.py index b4106b2b..101bb4f7 100644 --- a/configs/textrecog/nrtr/nrtr_modality_transform_toy_dataset.py +++ b/configs/textrecog/nrtr/nrtr_modality_transform_toy_dataset.py @@ -1,7 +1,8 @@ _base_ = [ - 'nrtr_modality_transform.py', '../../_base_/default_runtime.py', '../../_base_/recog_datasets/toy_data.py', - '../../_base_/schedules/schedule_adam_step_6e.py' + '../../_base_/default_runtime.py', + '../../_base_/schedules/schedule_adam_step_6e.py', + 'nrtr_modality_transform.py', ] # dataset settings diff --git a/configs/textrecog/nrtr/nrtr_r31_1by16_1by8_academic.py b/configs/textrecog/nrtr/nrtr_r31_1by16_1by8_academic.py index ed76d29c..7c869baa 100644 --- a/configs/textrecog/nrtr/nrtr_r31_1by16_1by8_academic.py +++ b/configs/textrecog/nrtr/nrtr_r31_1by16_1by8_academic.py @@ -1,15 +1,26 @@ _base_ = [ - 'nrtr_r31.py', '../../_base_/recog_datasets/ST_MJ_train.py', - '../../_base_/recog_datasets/academic_test.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/synthtext.py', + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', - '../../_base_/schedules/schedule_adam_step_6e.py' + '../../_base_/schedules/schedule_adam_step_6e.py', + 'nrtr_r31.py', ] # optimizer settings optim_wrapper = dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=3e-4)) # dataset settings -train_list = {{_base_.train_list}} +train_list = [_base_.mj_rec_train, _base_.st_rec_train] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] file_client_args = dict(backend='disk') default_hooks = dict(logger=dict(type='LoggerHook', interval=50)) @@ -58,13 +69,25 @@ train_dataloader = dict( dataset=dict( type='ConcatDataset', datasets=train_list, pipeline=train_pipeline)) -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader + +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') diff --git a/configs/textrecog/nrtr/nrtr_r31_1by8_1by4_academic.py b/configs/textrecog/nrtr/nrtr_r31_1by8_1by4_academic.py index 67c80804..2b9a7c3e 100644 --- a/configs/textrecog/nrtr/nrtr_r31_1by8_1by4_academic.py +++ b/configs/textrecog/nrtr/nrtr_r31_1by8_1by4_academic.py @@ -1,15 +1,26 @@ _base_ = [ - 'nrtr_r31.py', '../../_base_/recog_datasets/ST_MJ_train.py', - '../../_base_/recog_datasets/academic_test.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/synthtext.py', + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', - '../../_base_/schedules/schedule_adam_step_6e.py' + '../../_base_/schedules/schedule_adam_step_6e.py', + 'nrtr_r31.py', ] # optimizer settings optim_wrapper = dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=3e-4)) # dataset settings -train_list = {{_base_.train_list}} +train_list = [_base_.mj_rec_train, _base_.st_rec_train] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] file_client_args = dict(backend='disk') default_hooks = dict(logger=dict(type='LoggerHook', interval=50), ) @@ -60,13 +71,25 @@ train_dataloader = dict( dataset=dict( type='ConcatDataset', datasets=train_list, pipeline=train_pipeline)) -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader + +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') diff --git a/configs/textrecog/robust_scanner/robustscanner_r31_academic.py b/configs/textrecog/robust_scanner/robustscanner_r31_academic.py index 6560d81b..ff680fe1 100644 --- a/configs/textrecog/robust_scanner/robustscanner_r31_academic.py +++ b/configs/textrecog/robust_scanner/robustscanner_r31_academic.py @@ -1,8 +1,16 @@ _base_ = [ - 'robust_scanner.py', '../../_base_/recog_datasets/ST_SA_MJ_real_train.py', - '../../_base_/recog_datasets/academic_test.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/synthtext.py', + '../../_base_/recog_datasets/coco_text_v1.py' + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', - '../../_base_/schedules/schedule_adam_step_5e.py' + '../../_base_/schedules/schedule_adam_step_5e.py', + 'robust_scanner.py', ] file_client_args = dict(backend='disk') @@ -45,47 +53,55 @@ test_pipeline = [ ] # dataset settings -ic11_rec_train = _base_.ic11_rec_train -ic13_rec_train = _base_.ic13_rec_train -ic15_rec_train = _base_.ic15_rec_train -cocov1_rec_train = _base_.cocov1_rec_train -iiit5k_rec_train = _base_.iiit5k_rec_train -st_add_rec_train = _base_.st_add_rec_train -st_rec_train = _base_.st_rec_train -mj_rec_trian = _base_.mj_rec_trian +train_list = [ + _base_.ic11_rec_train, _base_.ic13_rec_train, _base_.ic15_rec_train, + _base_.cocov1_rec_train, _base_.iiit5k_rec_train, _base_.mj_sub_rec_train, + _base_.st_sub_rec_train, _base_.st_add_rec_train +] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] -ic11_rec_train.pipeline = test_pipeline -ic13_rec_train.pipeline = test_pipeline -ic15_rec_train.pipeline = test_pipeline -cocov1_rec_train.pipeline = test_pipeline -iiit5k_rec_train.pipeline = test_pipeline -st_add_rec_train.pipeline = test_pipeline -st_rec_train.pipeline = test_pipeline -mj_rec_trian.pipeline = test_pipeline -repeat_ic11 = dict(type='RepeatDataset', dataset=ic11_rec_train, times=20) -repeat_ic13 = dict(type='RepeatDataset', dataset=ic13_rec_train, times=20) -repeat_ic15 = dict(type='RepeatDataset', dataset=ic15_rec_train, times=20) -repeat_cocov1 = dict(type='RepeatDataset', dataset=cocov1_rec_train, times=20) -repeat_iiit5k = dict(type='RepeatDataset', dataset=iiit5k_rec_train, times=20) +train_list = [ + dict( + type='RepeatDataset', + dataset=dict( + type='ConcatDataset', + datasets=train_list[:5], + pipeline=train_pipeline), + times=20), + dict( + type='ConcatDataset', datasets=train_list[5:], + pipeline=train_pipeline), +] train_dataloader = dict( batch_size=64, num_workers=8, persistent_workers=True, sampler=dict(type='DefaultSampler', shuffle=True), - dataset=dict( - type='ConcatDataset', - datasets=[ - repeat_ic11, repeat_ic13, repeat_ic15, repeat_cocov1, - repeat_iiit5k, st_add_rec_train, st_rec_train, mj_rec_trian - ])) + dataset=dict(type='ConcatDataset', datasets=train_list)) + +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader + +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') diff --git a/configs/textrecog/sar/sar_r31_parallel_decoder_academic.py b/configs/textrecog/sar/sar_r31_parallel_decoder_academic.py index 6f4f89bb..12154a0b 100644 --- a/configs/textrecog/sar/sar_r31_parallel_decoder_academic.py +++ b/configs/textrecog/sar/sar_r31_parallel_decoder_academic.py @@ -1,12 +1,18 @@ _base_ = [ - 'sar.py', - '../../_base_/recog_datasets/ST_SA_MJ_real_train.py', - '../../_base_/recog_datasets/academic_test.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/synthtext.py', + '../../_base_/recog_datasets/coco_text_v1.py' + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', '../../_base_/schedules/schedule_adam_step_5e.py', + 'sar.py', ] -# dataset settings file_client_args = dict(backend='disk') default_hooks = dict(logger=dict(type='LoggerHook', interval=100)) @@ -47,47 +53,54 @@ test_pipeline = [ ] # dataset settings -ic11_rec_train = _base_.ic11_rec_train -ic13_rec_train = _base_.ic13_rec_train -ic15_rec_train = _base_.ic15_rec_train -cocov1_rec_train = _base_.cocov1_rec_train -iiit5k_rec_train = _base_.iiit5k_rec_train -st_add_rec_train = _base_.st_add_rec_train -st_rec_train = _base_.st_rec_train -mj_rec_trian = _base_.mj_rec_trian +train_list = [ + _base_.ic11_rec_train, _base_.ic13_rec_train, _base_.ic15_rec_train, + _base_.cocov1_rec_train, _base_.iiit5k_rec_train, _base_.mj_sub_rec_train, + _base_.st_sub_rec_train, _base_.st_add_rec_train +] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] -ic11_rec_train.pipeline = test_pipeline -ic13_rec_train.pipeline = test_pipeline -ic15_rec_train.pipeline = test_pipeline -cocov1_rec_train.pipeline = test_pipeline -iiit5k_rec_train.pipeline = test_pipeline -st_add_rec_train.pipeline = test_pipeline -st_rec_train.pipeline = test_pipeline -mj_rec_trian.pipeline = test_pipeline -repeat_ic11 = dict(type='RepeatDataset', dataset=ic11_rec_train, times=20) -repeat_ic13 = dict(type='RepeatDataset', dataset=ic13_rec_train, times=20) -repeat_ic15 = dict(type='RepeatDataset', dataset=ic15_rec_train, times=20) -repeat_cocov1 = dict(type='RepeatDataset', dataset=cocov1_rec_train, times=20) -repeat_iiit5k = dict(type='RepeatDataset', dataset=iiit5k_rec_train, times=20) +train_list = [ + dict( + type='RepeatDataset', + dataset=dict( + type='ConcatDataset', + datasets=train_list[:5], + pipeline=train_pipeline), + times=20), + dict( + type='ConcatDataset', datasets=train_list[5:], + pipeline=train_pipeline), +] train_dataloader = dict( batch_size=64, num_workers=8, persistent_workers=True, sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict(type='ConcatDataset', datasets=train_list)) +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), dataset=dict( - type='ConcatDataset', - datasets=[ - repeat_ic11, repeat_ic13, repeat_ic15, repeat_cocov1, - repeat_iiit5k, st_add_rec_train, st_rec_train, mj_rec_trian - ])) + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader + +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') diff --git a/configs/textrecog/sar/sar_r31_sequential_decoder_academic.py b/configs/textrecog/sar/sar_r31_sequential_decoder_academic.py index 69cc7672..a67a3122 100644 --- a/configs/textrecog/sar/sar_r31_sequential_decoder_academic.py +++ b/configs/textrecog/sar/sar_r31_sequential_decoder_academic.py @@ -1,12 +1,18 @@ _base_ = [ - 'sar.py', - '../../_base_/recog_datasets/ST_SA_MJ_real_train.py', - '../../_base_/recog_datasets/academic_test.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/synthtext.py', + '../../_base_/recog_datasets/coco_text_v1.py' + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', '../../_base_/schedules/schedule_adam_step_5e.py', + 'sar.py', ] -# dataset settings file_client_args = dict(backend='disk') default_hooks = dict(logger=dict(type='LoggerHook', interval=100)) @@ -47,79 +53,56 @@ test_pipeline = [ ] # dataset settings -ic11_rec_train = _base_.ic11_rec_train -ic13_rec_train = _base_.ic13_rec_train -ic15_rec_train = _base_.ic15_rec_train -cocov1_rec_train = _base_.cocov1_rec_train -iiit5k_rec_train = _base_.iiit5k_rec_train -st_add_rec_train = _base_.st_add_rec_train -st_rec_train = _base_.st_rec_train -mj_rec_trian = _base_.mj_rec_trian +train_list = [ + _base_.ic11_rec_train, _base_.ic13_rec_train, _base_.ic15_rec_train, + _base_.cocov1_rec_train, _base_.iiit5k_rec_train, _base_.mj_sub_rec_train, + _base_.st_sub_rec_train, _base_.st_add_rec_train +] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] -ic11_rec_train.pipeline = train_pipeline -ic13_rec_train.pipeline = train_pipeline -ic15_rec_train.pipeline = train_pipeline -cocov1_rec_train.pipeline = train_pipeline -iiit5k_rec_train.pipeline = train_pipeline -st_add_rec_train.pipeline = train_pipeline -st_rec_train.pipeline = train_pipeline -mj_rec_trian.pipeline = train_pipeline -repeat_ic11 = dict(type='RepeatDataset', dataset=ic11_rec_train, times=20) -repeat_ic13 = dict(type='RepeatDataset', dataset=ic13_rec_train, times=20) -repeat_ic15 = dict(type='RepeatDataset', dataset=ic15_rec_train, times=20) -repeat_cocov1 = dict(type='RepeatDataset', dataset=cocov1_rec_train, times=20) -repeat_iiit5k = dict(type='RepeatDataset', dataset=iiit5k_rec_train, times=20) +train_list = [ + dict( + type='RepeatDataset', + dataset=dict( + type='ConcatDataset', + datasets=train_list[:5], + pipeline=train_pipeline), + times=20), + dict( + type='ConcatDataset', datasets=train_list[5:], + pipeline=train_pipeline), +] train_dataloader = dict( batch_size=64, num_workers=16, persistent_workers=True, sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict(type='ConcatDataset', datasets=train_list)) +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), dataset=dict( - type='ConcatDataset', - datasets=[ - repeat_ic11, repeat_ic13, repeat_ic15, repeat_cocov1, - repeat_iiit5k, st_add_rec_train, st_rec_train, mj_rec_trian - ])) + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader + +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer') -dictionary = dict( - type='Dictionary', - dict_file='dicts/english_digits_symbols.txt', - with_start=True, - with_end=True, - same_start_end=True, - with_padding=True, - with_unknown=True) -model = dict( - type='SARNet', - backbone=dict(type='ResNet31OCR'), - encoder=dict( - type='SAREncoder', - enc_bi_rnn=False, - enc_do_rnn=0.1, - enc_gru=False, - ), - decoder=dict( - type='SequentialSARDecoder', - enc_bi_rnn=False, - dec_bi_rnn=False, - dec_do_rnn=0, - dec_gru=False, - pred_dropout=0.1, - d_k=512, - pred_concat=True, - postprocessor=dict(type='AttentionPostprocessor'), - module_loss=dict( - type='CEModuleLoss', ignore_first_char=True, reduction='mean'), - dictionary=dictionary, - max_seq_len=30)) +model = dict(decoder=dict(type='SequentialSARDecoder')) diff --git a/configs/textrecog/satrn/satrn_academic.py b/configs/textrecog/satrn/satrn_academic.py index 30a95b1b..d90f1013 100644 --- a/configs/textrecog/satrn/satrn_academic.py +++ b/configs/textrecog/satrn/satrn_academic.py @@ -1,13 +1,23 @@ _base_ = [ - 'satrn.py', - '../../_base_/recog_datasets/ST_MJ_train.py', - '../../_base_/recog_datasets/academic_test.py', + '../../_base_/recog_datasets/mjsynth.py', + '../../_base_/recog_datasets/synthtext.py', + '../../_base_/recog_datasets/cute80.py', + '../../_base_/recog_datasets/iiit5k.py', + '../../_base_/recog_datasets/svt.py', + '../../_base_/recog_datasets/svtp.py', + '../../_base_/recog_datasets/icdar2013.py', + '../../_base_/recog_datasets/icdar2015.py', '../../_base_/default_runtime.py', '../../_base_/schedules/schedule_adam_step_5e.py', + 'satrn.py', ] # dataset settings -train_list = {{_base_.train_list}} +train_list = [_base_.mj_rec_train, _base_.st_rec_train] +test_list = [ + _base_.cute80_rec_test, _base_.iiit5k_rec_test, _base_.svt_rec_test, + _base_.svtp_rec_test, _base_.ic13_rec_test, _base_.ic15_rec_test +] file_client_args = dict(backend='disk') default_hooks = dict(logger=dict(type='LoggerHook', interval=50)) @@ -73,13 +83,25 @@ train_dataloader = dict( sampler=dict(type='DefaultSampler', shuffle=True), dataset=dict( type='ConcatDataset', datasets=train_list, pipeline=train_pipeline)) +test_dataloader = dict( + batch_size=1, + num_workers=4, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='ConcatDataset', datasets=test_list, pipeline=test_pipeline)) +val_dataloader = test_dataloader + +val_evaluator = dict( + type='MultiDatasetsEvaluator', + metrics=[ + dict( + type='WordMetric', + mode=['exact', 'ignore_case', 'ignore_case_symbol']), + dict(type='CharMetric') + ], + datasets_prefix=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15']) +test_evaluator = val_evaluator -test_cfg = dict(type='MultiTestLoop') -val_cfg = dict(type='MultiValLoop') -val_dataloader = _base_.val_dataloader -test_dataloader = _base_.test_dataloader -for dataloader in test_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline -for dataloader in val_dataloader: - dataloader['dataset']['pipeline'] = test_pipeline visualizer = dict(type='TextRecogLocalVisualizer', name='visualizer')