mirror of https://github.com/open-mmlab/mmocr.git
[MODEL] Add Union14M trained models (#1960)
* [Update] Add ABINet * [Update] Add NRTR * [Update] Add SATRN * [Update] Add configspull/1983/head
parent
1dcd6fa695
commit
e50c5fd9d2
|
@ -47,6 +47,22 @@ Linguistic knowledge is of great benefit to scene text recognition. However, how
|
|||
2. Facts about the pretrained model: MMOCR does not have a systematic pipeline to pretrain the language model (LM) yet, thus the weights of LM are converted from [the official pretrained model](https://github.com/FangShancheng/ABINet). The weights of ABINet-Vision are directly used as the vision model of ABINet.
|
||||
```
|
||||
|
||||
We also provide ABINet trained on [Union14M](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
- Evaluated on six common benchmarks
|
||||
|
||||
| methods | pretrained | | Regular Text | | | | Irregular Text | | download |
|
||||
| :---------------------------------------------------------------: | :--------: | :----: | :----------: | :-------: | :-: | :-------: | :------------: | :----: | :----------------------------------------------------------------- |
|
||||
| | | IIIT5K | SVT | IC13-1015 | | IC15-2077 | SVTP | CT80 | |
|
||||
| [ABINet-Vision](configs/textrecog/abinet/abinet-vision_10e_union14m.py) | - | 0.9730 | 0.9645 | 0.9552 | | 0.8536 | 0.8977 | 0.9479 | [model](https://download.openmmlab.com/mmocr/textrecog/abinet/abinet_union14m-cbf19742.pth) |
|
||||
|
||||
- Evaluated on [Union14M-Benchmark](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
| Methods | | Unsolved Challenges | | | | | Additional Challenges | | General | download |
|
||||
| ------------------------------------------------------ | ----- | ------------------- | -------- | ----------- | --- | ------- | --------------------- | ---------- | ------- | ------------------------------------------------------- |
|
||||
| | Curve | Multi-Oriented | Artistic | Contextless | | Salient | Multi-Words | Incomplete | General | |
|
||||
| [ABINet-Vision](configs/textrecog/abinet/abinet-vision_10e_union14m.py) | 0.750 | 0.615 | 0.653 | 0.711 | | 0.729 | 0.591 | 0.026 | 0.794 | [model](https://download.openmmlab.com/mmocr/textrecog/abinet/abinet_union14m-cbf19742.pth) |
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
_base_ = [
|
||||
'../_base_/datasets/union14m_train.py',
|
||||
'../_base_/datasets/union14m_benchmark.py',
|
||||
'../_base_/datasets/cute80.py',
|
||||
'../_base_/datasets/iiit5k.py',
|
||||
'../_base_/datasets/svt.py',
|
||||
'../_base_/datasets/svtp.py',
|
||||
'../_base_/datasets/icdar2013.py',
|
||||
'../_base_/datasets/icdar2015.py',
|
||||
'../_base_/default_runtime.py',
|
||||
'../_base_/schedules/schedule_adamw_cos_10e.py',
|
||||
'_base_abinet.py',
|
||||
]
|
||||
|
||||
load_from = 'https://download.openmmlab.com/mmocr/textrecog/abinet/abinet_pretrain-45deac15.pth' # noqa
|
||||
|
||||
_base_.pop('model')
|
||||
dictionary = dict(
|
||||
type='Dictionary',
|
||||
dict_file= # noqa
|
||||
'{{ fileDirname }}/../../../dicts/english_digits_symbols_space.txt',
|
||||
with_padding=True,
|
||||
with_unknown=True,
|
||||
same_start_end=True,
|
||||
with_start=True,
|
||||
with_end=True)
|
||||
|
||||
model = dict(
|
||||
type='ABINet',
|
||||
backbone=dict(type='ResNetABI'),
|
||||
encoder=dict(
|
||||
type='ABIEncoder',
|
||||
n_layers=3,
|
||||
n_head=8,
|
||||
d_model=512,
|
||||
d_inner=2048,
|
||||
dropout=0.1,
|
||||
max_len=8 * 32,
|
||||
),
|
||||
decoder=dict(
|
||||
type='ABIFuser',
|
||||
vision_decoder=dict(
|
||||
type='ABIVisionDecoder',
|
||||
in_channels=512,
|
||||
num_channels=64,
|
||||
attn_height=8,
|
||||
attn_width=32,
|
||||
attn_mode='nearest',
|
||||
init_cfg=dict(type='Xavier', layer='Conv2d')),
|
||||
module_loss=dict(type='ABIModuleLoss'),
|
||||
postprocessor=dict(type='AttentionPostprocessor'),
|
||||
dictionary=dictionary,
|
||||
max_seq_len=26,
|
||||
),
|
||||
data_preprocessor=dict(
|
||||
type='TextRecogDataPreprocessor',
|
||||
mean=[123.675, 116.28, 103.53],
|
||||
std=[58.395, 57.12, 57.375]))
|
||||
|
||||
# dataset settings
|
||||
train_list = [
|
||||
_base_.union14m_challenging, _base_.union14m_hard, _base_.union14m_medium,
|
||||
_base_.union14m_normal, _base_.union14m_easy
|
||||
]
|
||||
val_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
_base_.icdar2013_textrecog_test, _base_.icdar2015_textrecog_test
|
||||
]
|
||||
test_list = [
|
||||
_base_.union14m_benchmark_artistic,
|
||||
_base_.union14m_benchmark_multi_oriented,
|
||||
_base_.union14m_benchmark_contextless,
|
||||
_base_.union14m_benchmark_curve,
|
||||
_base_.union14m_benchmark_incomplete,
|
||||
_base_.union14m_benchmark_incomplete_ori,
|
||||
_base_.union14m_benchmark_multi_words,
|
||||
_base_.union14m_benchmark_salient,
|
||||
_base_.union14m_benchmark_general,
|
||||
]
|
||||
|
||||
train_dataset = dict(
|
||||
type='ConcatDataset', datasets=train_list, pipeline=_base_.train_pipeline)
|
||||
test_dataset = dict(
|
||||
type='ConcatDataset', datasets=test_list, pipeline=_base_.test_pipeline)
|
||||
val_dataset = dict(
|
||||
type='ConcatDataset', datasets=val_list, pipeline=_base_.test_pipeline)
|
||||
|
||||
train_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=24,
|
||||
persistent_workers=True,
|
||||
sampler=dict(type='DefaultSampler', shuffle=True),
|
||||
dataset=train_dataset)
|
||||
|
||||
test_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=test_dataset)
|
||||
|
||||
val_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
pin_memory=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=val_dataset)
|
||||
|
||||
val_evaluator = dict(
|
||||
dataset_prefixes=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15'])
|
||||
test_evaluator = dict(dataset_prefixes=[
|
||||
'artistic', 'multi-oriented', 'contextless', 'curve', 'incomplete',
|
||||
'incomplete-ori', 'multi-words', 'salient', 'general'
|
||||
])
|
|
@ -40,6 +40,22 @@ A challenging aspect of scene text recognition is to handle text with distortion
|
|||
| [ASTER](/configs/textrecog/aster/aster_resnet45_6e_st_mj.py) | ResNet45 | 0.9357 | 0.8949 | 0.9281 | | 0.7665 | 0.8062 | 0.8507 | [model](https://download.openmmlab.com/mmocr/textrecog/aster/aster_resnet45_6e_st_mj/aster_resnet45_6e_st_mj-cc56eca4.pth) \| [log](https://download.openmmlab.com/mmocr/textrecog/aster/aster_resnet45_6e_st_mj/20221214_232605.log) |
|
||||
| [ASTER-TTA](/configs/textrecog/aster/aster_resnet45_6e_st_mj.py) | ResNet45 | 0.9337 | 0.8949 | 0.9251 | | 0.7925 | 0.8109 | 0.8507 | |
|
||||
|
||||
We also provide ASTER trained on [Union14M](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
- Evaluated on six common benchmarks
|
||||
|
||||
| Methods | pretrained | | Regular Text | | | | Irregular Text | | download |
|
||||
| :------------------------------------------------------------: | :--------: | :----: | :----------: | :-------: | :-: | :-------: | :------------: | :----: | :-------------------------------------------------------------------- |
|
||||
| | | IIIT5K | SVT | IC13-1015 | | IC15-2077 | SVTP | CT80 | |
|
||||
| [ASTER](configs/textrecog/aster/aster_resnet45_6e_union14m.py) | - | 0.9437 | 0.8903 | 0.9360 | | 0.7857 | 0.8093 | 0.9097 | [model](https://download.openmmlab.com/mmocr/textrecog/aster/aster_union14m/aster_union14m-230eb471.pth) |
|
||||
|
||||
- Evaluated on [Union14M-Benchmark](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
| Methods | | Unsolved Challenges | | | | | Additional Challenges | | General | download |
|
||||
| ------------------------------------------------------ | ----- | ------------------- | -------- | ----------- | --- | ------- | --------------------- | ---------- | ------- | ------------------------------------------------------- |
|
||||
| | Curve | Multi-Oriented | Artistic | Contextless | | Salient | Multi-Words | Incomplete | General | |
|
||||
| [ASTER](configs/textrecog/aster/aster_resnet45_6e_union14m.py) | 0.384 | 0.130 | 0.418 | 0.529 | | 0.319 | 0.498 | 0.013 | 0.667 | [model](https://download.openmmlab.com/mmocr/textrecog/aster/aster_union14m/aster_union14m-230eb471.pth) |
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
# training schedule for 1x
|
||||
_base_ = [
|
||||
'_base_aster.py',
|
||||
'../_base_/datasets/union14m_train.py',
|
||||
'../_base_/datasets/union14m_benchmark.py',
|
||||
'../_base_/datasets/cute80.py',
|
||||
'../_base_/datasets/iiit5k.py',
|
||||
'../_base_/datasets/svt.py',
|
||||
'../_base_/datasets/svtp.py',
|
||||
'../_base_/datasets/icdar2013.py',
|
||||
'../_base_/datasets/icdar2015.py',
|
||||
'../_base_/default_runtime.py',
|
||||
'../_base_/schedules/schedule_adamw_cos_6e.py',
|
||||
]
|
||||
|
||||
dictionary = dict(
|
||||
type='Dictionary',
|
||||
dict_file= # noqa
|
||||
'{{ fileDirname }}/../../../dicts/english_digits_symbols_space.txt',
|
||||
with_padding=True,
|
||||
with_unknown=True,
|
||||
same_start_end=True,
|
||||
with_start=True,
|
||||
with_end=True)
|
||||
|
||||
# dataset settings
|
||||
train_list = [
|
||||
_base_.union14m_challenging, _base_.union14m_hard, _base_.union14m_medium,
|
||||
_base_.union14m_normal, _base_.union14m_easy
|
||||
]
|
||||
val_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
_base_.icdar2013_textrecog_test, _base_.icdar2015_textrecog_test
|
||||
]
|
||||
test_list = [
|
||||
_base_.union14m_benchmark_artistic,
|
||||
_base_.union14m_benchmark_multi_oriented,
|
||||
_base_.union14m_benchmark_contextless,
|
||||
_base_.union14m_benchmark_curve,
|
||||
_base_.union14m_benchmark_incomplete,
|
||||
_base_.union14m_benchmark_incomplete_ori,
|
||||
_base_.union14m_benchmark_multi_words,
|
||||
_base_.union14m_benchmark_salient,
|
||||
_base_.union14m_benchmark_general,
|
||||
]
|
||||
|
||||
default_hooks = dict(logger=dict(type='LoggerHook', interval=50))
|
||||
|
||||
auto_scale_lr = dict(base_batch_size=512)
|
||||
|
||||
train_dataset = dict(
|
||||
type='ConcatDataset', datasets=train_list, pipeline=_base_.train_pipeline)
|
||||
test_dataset = dict(
|
||||
type='ConcatDataset', datasets=test_list, pipeline=_base_.test_pipeline)
|
||||
val_dataset = dict(
|
||||
type='ConcatDataset', datasets=val_list, pipeline=_base_.test_pipeline)
|
||||
|
||||
train_dataloader = dict(
|
||||
batch_size=512,
|
||||
num_workers=12,
|
||||
persistent_workers=True,
|
||||
pin_memory=True,
|
||||
sampler=dict(type='DefaultSampler', shuffle=True),
|
||||
dataset=train_dataset)
|
||||
|
||||
test_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
pin_memory=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=test_dataset)
|
||||
|
||||
val_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
pin_memory=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=val_dataset)
|
||||
|
||||
val_evaluator = dict(
|
||||
dataset_prefixes=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15'])
|
||||
|
||||
test_evaluator = dict(dataset_prefixes=[
|
||||
'artistic', 'multi-oriented', 'contextless', 'curve', 'incomplete',
|
||||
'incomplete-ori', 'multi-words', 'salient', 'general'
|
||||
])
|
|
@ -44,6 +44,22 @@ Scene text recognition has attracted a great many researches due to its importan
|
|||
| [NRTR](/configs/textrecog/nrtr/nrtr_resnet31-1by16-1by8_6e_st_mj.py) | R31-1/16-1/8 | 0.9470 | 0.8918 | 0.9399 | | 0.7376 | 0.7969 | 0.8854 | [model](https://download.openmmlab.com/mmocr/textrecog/nrtr/nrtr_resnet31-1by16-1by8_6e_st_mj/nrtr_resnet31-1by16-1by8_6e_st_mj_20220920_143358-43767036.pth) \| [log](https://download.openmmlab.com/mmocr/textrecog/nrtr/nrtr_resnet31-1by16-1by8_6e_st_mj/20220920_143358.log) |
|
||||
| [NRTR-TTA](/configs/textrecog/nrtr/nrtr_resnet31-1by16-1by8_6e_st_mj.py) | R31-1/16-1/8 | 0.9423 | 0.8903 | 0.9360 | | 0.7641 | 0.8016 | 0.8854 | |
|
||||
|
||||
We also provide NRTR trained on [Union14M](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
- Evaluated on six common benchmarks
|
||||
|
||||
| Methods | Backbone | | Regular Text | | | | Irregular Text | | download |
|
||||
| :--------------------------------------------------------------: | :---------: | :----: | :----------: | :-------: | :-: | :-------: | :------------: | :----: | :----------------------------------------------------------------- |
|
||||
| | | IIIT5K | SVT | IC13-1015 | | IC15-2077 | SVTP | CT80 | |
|
||||
| [NRTR](configs/textrecog/nrtr/nrtr_resnet31-1by8-1by4_union14m.py) | R31-1/8-1/4 | 0.9673 | 0.9320 | 0.9557 | | 0.8074 | 0.8357 | 0.9201 | [model](https://download.openmmlab.com/mmocr/textrecog/nrtr/nrtr_union14m/nrtr_union14m-606b6cba.pth) |
|
||||
|
||||
- Evaluated on [Union14M-Benchmark](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
| Methods | Backbone | | Unsolved Challenges | | | | | Additional Challenges | | General | download |
|
||||
| ------------------------------------------------ | :---------: | ----- | ------------------- | -------- | ----------- | --- | ------- | --------------------- | ---------- | ------- | -------------------------------------------------- |
|
||||
| | | Curve | Multi-Oriented | Artistic | Contextless | | Salient | Multi-Words | Incomplete | General | |
|
||||
| [NRTR](configs/textrecog/aster/aster_resnet45_6e_union14m.py) | R31-1/8-1/4 | 0.493 | 0.406 | 0.543 | 0.696 | | 0.429 | 0.755 | 0.015 | 0.752 | [model](https://download.openmmlab.com/mmocr/textrecog/nrtr/nrtr_union14m/nrtr_union14m-606b6cba.pth) |
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
|
|
|
@ -0,0 +1,114 @@
|
|||
_base_ = [
|
||||
'../_base_/datasets/union14m_train.py',
|
||||
'../_base_/datasets/union14m_benchmark.py',
|
||||
'../_base_/datasets/cute80.py',
|
||||
'../_base_/datasets/iiit5k.py',
|
||||
'../_base_/datasets/svt.py',
|
||||
'../_base_/datasets/svtp.py',
|
||||
'../_base_/datasets/icdar2013.py',
|
||||
'../_base_/datasets/icdar2015.py',
|
||||
'../_base_/default_runtime.py',
|
||||
'../_base_/schedules/schedule_adam_base.py',
|
||||
'_base_nrtr_resnet31.py',
|
||||
]
|
||||
|
||||
# optimizer settings
|
||||
train_cfg = dict(max_epochs=6)
|
||||
# learning policy
|
||||
param_scheduler = [
|
||||
dict(type='MultiStepLR', milestones=[3, 4], end=6),
|
||||
]
|
||||
|
||||
_base_.pop('model')
|
||||
dictionary = dict(
|
||||
type='Dictionary',
|
||||
dict_file= # noqa
|
||||
'{{ fileDirname }}/../../../dicts/english_digits_symbols_space.txt',
|
||||
with_padding=True,
|
||||
with_unknown=True,
|
||||
same_start_end=True,
|
||||
with_start=True,
|
||||
with_end=True)
|
||||
|
||||
model = dict(
|
||||
type='NRTR',
|
||||
backbone=dict(
|
||||
type='ResNet31OCR',
|
||||
layers=[1, 2, 5, 3],
|
||||
channels=[32, 64, 128, 256, 512, 512],
|
||||
stage4_pool_cfg=dict(kernel_size=(2, 1), stride=(2, 1)),
|
||||
last_stage_pool=False),
|
||||
encoder=dict(type='NRTREncoder'),
|
||||
decoder=dict(
|
||||
type='NRTRDecoder',
|
||||
module_loss=dict(
|
||||
type='CEModuleLoss', ignore_first_char=True, flatten=True),
|
||||
postprocessor=dict(type='AttentionPostprocessor'),
|
||||
dictionary=dictionary,
|
||||
max_seq_len=30,
|
||||
),
|
||||
data_preprocessor=dict(
|
||||
type='TextRecogDataPreprocessor',
|
||||
mean=[123.675, 116.28, 103.53],
|
||||
std=[58.395, 57.12, 57.375]))
|
||||
|
||||
# dataset settings
|
||||
train_list = [
|
||||
_base_.union14m_challenging, _base_.union14m_hard, _base_.union14m_medium,
|
||||
_base_.union14m_normal, _base_.union14m_easy
|
||||
]
|
||||
val_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
_base_.icdar2013_textrecog_test, _base_.icdar2015_textrecog_test
|
||||
]
|
||||
test_list = [
|
||||
_base_.union14m_benchmark_artistic,
|
||||
_base_.union14m_benchmark_multi_oriented,
|
||||
_base_.union14m_benchmark_contextless,
|
||||
_base_.union14m_benchmark_curve,
|
||||
_base_.union14m_benchmark_incomplete,
|
||||
_base_.union14m_benchmark_incomplete_ori,
|
||||
_base_.union14m_benchmark_multi_words,
|
||||
_base_.union14m_benchmark_salient,
|
||||
_base_.union14m_benchmark_general,
|
||||
]
|
||||
|
||||
train_dataset = dict(
|
||||
type='ConcatDataset', datasets=train_list, pipeline=_base_.train_pipeline)
|
||||
test_dataset = dict(
|
||||
type='ConcatDataset', datasets=test_list, pipeline=_base_.test_pipeline)
|
||||
val_dataset = dict(
|
||||
type='ConcatDataset', datasets=val_list, pipeline=_base_.test_pipeline)
|
||||
|
||||
train_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=24,
|
||||
persistent_workers=True,
|
||||
sampler=dict(type='DefaultSampler', shuffle=True),
|
||||
dataset=train_dataset)
|
||||
|
||||
test_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=test_dataset)
|
||||
|
||||
val_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
pin_memory=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=val_dataset)
|
||||
|
||||
val_evaluator = dict(
|
||||
dataset_prefixes=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15'])
|
||||
|
||||
test_evaluator = dict(dataset_prefixes=[
|
||||
'artistic', 'multi-oriented', 'contextless', 'curve', 'incomplete',
|
||||
'incomplete-ori', 'multi-words', 'salient', 'general'
|
||||
])
|
|
@ -48,6 +48,22 @@ Recognizing irregular text in natural scene images is challenging due to the lar
|
|||
| [SAR](/configs/textrecog/sar/sar_r31_sequential_decoder_academic.py) | R31-1/8-1/4 | SequentialSARDecoder | 0.9553 | 0.9073 | 0.9409 | | 0.7761 | 0.8093 | 0.8958 | [model](https://download.openmmlab.com/mmocr/textrecog/sar/sar_resnet31_sequential-decoder_5e_st-sub_mj-sub_sa_real/sar_resnet31_sequential-decoder_5e_st-sub_mj-sub_sa_real_20220915_185451-1fd6b1fc.pth) \| [log](https://download.openmmlab.com/mmocr/textrecog/sar/sar_resnet31_sequential-decoder_5e_st-sub_mj-sub_sa_real/20220915_185451.log) |
|
||||
| [SAR-TTA](/configs/textrecog/sar/sar_r31_sequential_decoder_academic.py) | R31-1/8-1/4 | SequentialSARDecoder | 0.9530 | 0.9073 | 0.9389 | | 0.8002 | 0.8124 | 0.9028 | |
|
||||
|
||||
We also provide ASTER trained on [Union14M](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
- Evaluated on six common benchmarks
|
||||
|
||||
| Methods | Backbone | Decoder | | Regular Text | | | | Irregular Text | | download |
|
||||
| :----------------------------------------------------: | :---------: | :------------------: | :----: | :----------: | :-------: | :-: | :-------: | :------------: | :----: | :------------------------------------------------------- |
|
||||
| | | | IIIT5K | SVT | IC13-1015 | | IC15-2077 | SVTP | CT80 | |
|
||||
| [SAR](configs/textrecog/sar/sar_resnet31_sequential-decoder_5e_union14m.py) | R31-1/8-1/4 | SequentialSARDecoder | 0.9707 | 0.9366 | 0.9576 | | 0.8219 | 0.8698 | 0.9201 | [model](https://download.openmmlab.com/mmocr/textrecog/sar/sar_union14m/sar_union14m-a7ad75a6.pth) |
|
||||
|
||||
- Evaluated on [Union14M-Benchmark](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
| Methods | Backbone | Decoder | | | Unsolved Challenges | | | | Additional Challenges | | General | download |
|
||||
| ----------------------------------- | ----------- | -------------------- | ----- | -------------- | ------------------- | ----------- | --- | ------- | --------------------- | ---------- | ------- | ------------------------------------- |
|
||||
| | | | Curve | Multi-Oriented | Artistic | Contextless | | Salient | Multi-Words | Incomplete | General | |
|
||||
| [SAR](configs/textrecog/sar/sar_resnet31_sequential-decoder_5e_union14m.py) | R31-1/8-1/4 | SequentialSARDecoder | 0.689 | 0.569 | 0.606 | 0.733 | | 0.601 | 0.746 | 0.021 | 0.760 | [model](https://download.openmmlab.com/mmocr/textrecog/sar/sar_union14m/sar_union14m-a7ad75a6.pth) |
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
_base_ = [
|
||||
'../_base_/datasets/union14m_train.py',
|
||||
'../_base_/datasets/union14m_benchmark.py',
|
||||
'../_base_/datasets/cute80.py',
|
||||
'../_base_/datasets/iiit5k.py',
|
||||
'../_base_/datasets/svt.py',
|
||||
'../_base_/datasets/svtp.py',
|
||||
'../_base_/datasets/icdar2013.py',
|
||||
'../_base_/datasets/icdar2015.py',
|
||||
'../_base_/default_runtime.py',
|
||||
'../_base_/schedules/schedule_adam_step_5e.py',
|
||||
'_base_sar_resnet31_parallel-decoder.py',
|
||||
]
|
||||
|
||||
_base_.pop('model')
|
||||
dictionary = dict(
|
||||
type='Dictionary',
|
||||
dict_file= # noqa
|
||||
'{{ fileDirname }}/../../../dicts/english_digits_symbols_space.txt',
|
||||
with_padding=True,
|
||||
with_unknown=True,
|
||||
same_start_end=True,
|
||||
with_start=True,
|
||||
with_end=True)
|
||||
|
||||
model = dict(
|
||||
type='SARNet',
|
||||
data_preprocessor=dict(
|
||||
type='TextRecogDataPreprocessor',
|
||||
mean=[127, 127, 127],
|
||||
std=[127, 127, 127]),
|
||||
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))
|
||||
# dataset settings
|
||||
train_list = [
|
||||
_base_.union14m_challenging, _base_.union14m_hard, _base_.union14m_medium,
|
||||
_base_.union14m_normal, _base_.union14m_easy
|
||||
]
|
||||
val_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
_base_.icdar2013_textrecog_test, _base_.icdar2015_textrecog_test
|
||||
]
|
||||
test_list = [
|
||||
_base_.union14m_benchmark_artistic,
|
||||
_base_.union14m_benchmark_multi_oriented,
|
||||
_base_.union14m_benchmark_contextless,
|
||||
_base_.union14m_benchmark_curve,
|
||||
_base_.union14m_benchmark_incomplete,
|
||||
_base_.union14m_benchmark_incomplete_ori,
|
||||
_base_.union14m_benchmark_multi_words,
|
||||
_base_.union14m_benchmark_salient,
|
||||
_base_.union14m_benchmark_general,
|
||||
]
|
||||
|
||||
train_dataset = dict(
|
||||
type='ConcatDataset', datasets=train_list, pipeline=_base_.train_pipeline)
|
||||
test_dataset = dict(
|
||||
type='ConcatDataset', datasets=test_list, pipeline=_base_.test_pipeline)
|
||||
val_dataset = dict(
|
||||
type='ConcatDataset', datasets=val_list, pipeline=_base_.test_pipeline)
|
||||
|
||||
train_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=24,
|
||||
persistent_workers=True,
|
||||
sampler=dict(type='DefaultSampler', shuffle=True),
|
||||
dataset=train_dataset)
|
||||
|
||||
test_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=test_dataset)
|
||||
|
||||
val_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
pin_memory=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=val_dataset)
|
||||
|
||||
val_evaluator = dict(
|
||||
dataset_prefixes=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15'])
|
||||
test_evaluator = dict(dataset_prefixes=[
|
||||
'artistic', 'multi-oriented', 'contextless', 'curve', 'incomplete',
|
||||
'incomplete-ori', 'multi-words', 'salient', 'general'
|
||||
])
|
|
@ -42,6 +42,22 @@ Scene text recognition (STR) is the task of recognizing character sequences in n
|
|||
| [Satrn_small](/configs/textrecog/satrn/satrn_shallow-small_5e_st_mj.py) | 0.9423 | 0.9011 | 0.9567 | | 0.7886 | 0.8574 | 0.8472 | [model](https://download.openmmlab.com/mmocr/textrecog/satrn/satrn_shallow-small_5e_st_mj/satrn_shallow-small_5e_st_mj_20220915_152442-5591bf27.pth) \| [log](https://download.openmmlab.com/mmocr/textrecog/satrn/satrn_shallow-small_5e_st_mj/20220915_152442.log) |
|
||||
| [Satrn_small-TTA](/configs/textrecog/satrn/satrn_shallow-small_5e_st_mj.py) | 0.9380 | 0.8995 | 0.9488 | | 0.8122 | 0.8620 | 0.8507 | |
|
||||
|
||||
We also provide SATRN trained on [Union14M](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
- Evaluated on six common benchmarks
|
||||
|
||||
| Methods | | Regular Text | | | | Irregular Text | | download |
|
||||
| :-----------------------------------------------------------: | :----: | :----------: | :-------: | :-: | :-------: | :------------: | :----: | :------------------------------------------------------------------------------- |
|
||||
| | IIIT5K | SVT | IC13-1015 | | IC15-2077 | SVTP | CT80 | |
|
||||
| [SATRN](configs/textrecog/satrn/satrn_shallow_5e_union14m.py) | 0.9727 | 0.9536 | 0.9685 | | 0.8714 | 0.9039 | 0.9618 | [model](https://download.openmmlab.com/mmocr/textrecog/satrn/satrn_union14m/satrn_union14m-6ac4114e.pth) |
|
||||
|
||||
- Evaluated on [Union14M-Benchmark](https://github.com/Mountchicken/Union14M)
|
||||
|
||||
| Methods | | Unsolved Challenges | | | | | Additional Challenges | | General | download |
|
||||
| ------------------------------------------------------ | ----- | ------------------- | -------- | ----------- | --- | ------- | --------------------- | ---------- | ------- | ------------------------------------------------------- |
|
||||
| | Curve | Multi-Oriented | Artistic | Contextless | | Salient | Multi-Words | Incomplete | General | |
|
||||
| [SATRN](configs/textrecog/satrn/satrn_shallow_5e_union14m.py) | 0.748 | 0.647 | 0.671 | 0.761 | | 0.722 | 0.741 | 0.009 | 0.758 | [model](https://download.openmmlab.com/mmocr/textrecog/satrn/satrn_union14m/satrn_union14m-6ac4114e.pth) |
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
_base_ = [
|
||||
'../_base_/datasets/union14m_train.py',
|
||||
'../_base_/datasets/union14m_benchmark.py',
|
||||
'../_base_/datasets/cute80.py',
|
||||
'../_base_/datasets/iiit5k.py',
|
||||
'../_base_/datasets/svt.py',
|
||||
'../_base_/datasets/svtp.py',
|
||||
'../_base_/datasets/icdar2013.py',
|
||||
'../_base_/datasets/icdar2015.py',
|
||||
'../_base_/default_runtime.py',
|
||||
'../_base_/schedules/schedule_adam_step_5e.py',
|
||||
'_base_satrn_shallow.py',
|
||||
]
|
||||
|
||||
dictionary = dict(
|
||||
type='Dictionary',
|
||||
dict_file= # noqa
|
||||
'{{ fileDirname }}/../../../dicts/english_digits_symbols_space.txt',
|
||||
with_padding=True,
|
||||
with_unknown=True,
|
||||
same_start_end=True,
|
||||
with_start=True,
|
||||
with_end=True)
|
||||
|
||||
# dataset settings
|
||||
train_list = [
|
||||
_base_.union14m_challenging, _base_.union14m_hard, _base_.union14m_medium,
|
||||
_base_.union14m_normal, _base_.union14m_easy
|
||||
]
|
||||
val_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
_base_.icdar2013_textrecog_test, _base_.icdar2015_textrecog_test
|
||||
]
|
||||
test_list = [
|
||||
_base_.union14m_benchmark_artistic,
|
||||
_base_.union14m_benchmark_multi_oriented,
|
||||
_base_.union14m_benchmark_contextless,
|
||||
_base_.union14m_benchmark_curve,
|
||||
_base_.union14m_benchmark_incomplete,
|
||||
_base_.union14m_benchmark_incomplete_ori,
|
||||
_base_.union14m_benchmark_multi_words,
|
||||
_base_.union14m_benchmark_salient,
|
||||
_base_.union14m_benchmark_general,
|
||||
]
|
||||
|
||||
train_dataset = dict(
|
||||
type='ConcatDataset', datasets=train_list, pipeline=_base_.train_pipeline)
|
||||
test_dataset = dict(
|
||||
type='ConcatDataset', datasets=test_list, pipeline=_base_.test_pipeline)
|
||||
val_dataset = dict(
|
||||
type='ConcatDataset', datasets=val_list, pipeline=_base_.test_pipeline)
|
||||
|
||||
# optimizer
|
||||
optim_wrapper = dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=3e-4))
|
||||
|
||||
train_dataloader = dict(
|
||||
batch_size=64,
|
||||
num_workers=24,
|
||||
persistent_workers=True,
|
||||
sampler=dict(type='DefaultSampler', shuffle=True),
|
||||
dataset=train_dataset)
|
||||
|
||||
test_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=test_dataset)
|
||||
|
||||
val_dataloader = dict(
|
||||
batch_size=128,
|
||||
num_workers=4,
|
||||
persistent_workers=True,
|
||||
pin_memory=True,
|
||||
drop_last=False,
|
||||
sampler=dict(type='DefaultSampler', shuffle=False),
|
||||
dataset=val_dataset)
|
||||
|
||||
val_evaluator = dict(
|
||||
dataset_prefixes=['CUTE80', 'IIIT5K', 'SVT', 'SVTP', 'IC13', 'IC15'])
|
||||
|
||||
test_evaluator = dict(dataset_prefixes=[
|
||||
'artistic', 'multi-oriented', 'contextless', 'curve', 'incomplete',
|
||||
'incomplete-ori', 'multi-words', 'salient', 'general'
|
||||
])
|
Loading…
Reference in New Issue