Skip to content

Commit

Permalink
[Dataset Preparer] MJSynth (#1791)
Browse files Browse the repository at this point in the history
* finialize

* finialize
  • Loading branch information
gaotongxiao authored Mar 22, 2023
1 parent 6d9582b commit d0dc902
Show file tree
Hide file tree
Showing 21 changed files with 109 additions and 41 deletions.
16 changes: 3 additions & 13 deletions configs/textrecog/_base_/datasets/mjsynth.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,7 @@
mjsynth_textrecog_data_root = 'data/rec/Syn90k/'
mjsynth_textrecog_data_root = 'data/mjsynth'

mjsynth_textrecog_test = dict(
mjsynth_textrecog_train = dict(
type='OCRDataset',
data_root=mjsynth_textrecog_data_root,
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
ann_file='train_labels.json',
test_mode=False,
pipeline=None)

mjsynth_sub_textrecog_train = dict(
type='OCRDataset',
data_root=mjsynth_textrecog_data_root,
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
ann_file='subset_train_labels.json',
test_mode=False,
ann_file='textrecog_train.json',
pipeline=None)
2 changes: 1 addition & 1 deletion configs/textrecog/abinet/abinet-vision_20e_st-an_mj.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

# dataset settings
train_list = [
_base_.mjsynth_textrecog_test, _base_.synthtext_an_textrecog_train
_base_.mjsynth_textrecog_train, _base_.synthtext_an_textrecog_train
]
test_list = [
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
Expand Down
2 changes: 1 addition & 1 deletion configs/textrecog/abinet/abinet_20e_st-an_mj.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

# dataset settings
train_list = [
_base_.mjsynth_textrecog_test, _base_.synthtext_an_textrecog_train
_base_.mjsynth_textrecog_train, _base_.synthtext_an_textrecog_train
]
test_list = [
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
Expand Down
2 changes: 1 addition & 1 deletion configs/textrecog/aster/aster_resnet45_6e_st_mj.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

# dataset settings
train_list = [
_base_.mjsynth_textrecog_test,
_base_.mjsynth_textrecog_train,
_base_.synthtext_textrecog_train,
]
test_list = [
Expand Down
2 changes: 1 addition & 1 deletion configs/textrecog/crnn/crnn_mini-vgg_5e_mj.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
'_base_crnn_mini-vgg.py',
]
# dataset settings
train_list = [_base_.mjsynth_textrecog_test]
train_list = [_base_.mjsynth_textrecog_train]
test_list = [
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
Expand Down
2 changes: 1 addition & 1 deletion configs/textrecog/master/master_resnet31_12e_st_mj_sa.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

# dataset settings
train_list = [
_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train,
_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train,
_base_.synthtext_add_textrecog_train
]
test_list = [
Expand Down
2 changes: 1 addition & 1 deletion configs/textrecog/nrtr/nrtr_modality-transform_6e_st_mj.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
]

# dataset settings
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
test_list = [
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
]

# dataset settings
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
test_list = [
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
Expand Down
2 changes: 1 addition & 1 deletion configs/textrecog/satrn/satrn_shallow_5e_st_mj.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
]

# dataset settings
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
test_list = [
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
Expand Down
2 changes: 1 addition & 1 deletion configs/textrecog/svtr/svtr-tiny_20e_st_mj.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
]

# dataset settings
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
test_list = [
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
Expand Down
37 changes: 37 additions & 0 deletions dataset_zoo/mjsynth/metafile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
Name: 'Synthetic Word Dataset (MJSynth/Syn90k)'
Paper:
Title: Reading Text in the Wild with Convolutional Neural Networks
URL: https://arxiv.org/pdf/1412.1842.pdf
Venue: International Journal of Computer Vision
Year: '2016'
BibTeX: '@InProceedings{Jaderberg14c,
author = "Max Jaderberg and Karen Simonyan and Andrea Vedaldi and Andrew Zisserman",
title = "Synthetic Data and Artificial Neural Networks for Natural Scene Text Recognition",
booktitle = "Workshop on Deep Learning, NIPS",
year = "2014",
}
@Article{Jaderberg16,
author = "Max Jaderberg and Karen Simonyan and Andrea Vedaldi and Andrew Zisserman",
title = "Reading Text in the Wild with Convolutional Neural Networks",
journal = "International Journal of Computer Vision",
number = "1",
volume = "116",
pages = "1--20",
month = "jan",
year = "2016",
}'
Data:
Website: https://www.robots.ox.ac.uk/~vgg/data/text/
Language:
- English
Scene:
- Synthesis
Granularity:
- Word
Tasks:
- textrecog
License:
Type: N/A
Link: N/A
Format: .txt
6 changes: 6 additions & 0 deletions dataset_zoo/mjsynth/sample_anno.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
**Text Recognition**

```txt
./3000/7/182_slinking_71711.jpg 71711
./3000/7/182_REMODELERS_64541.jpg 64541
```
40 changes: 40 additions & 0 deletions dataset_zoo/mjsynth/textrecog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
data_root = 'data/mjsynth'
cache_path = 'data/cache'

train_preparer = dict(
obtainer=dict(
type='NaiveDataObtainer',
cache_path=cache_path,
files=[
dict(
url='https://thor.robots.ox.ac.uk/~vgg/data/text/'
'mjsynth.tar.gz',
save_name='mjsynth.tar.gz',
md5='7bf2b60ad935eaf64e5b606f782d68e5',
split=['train'],
content=['image', 'annotation'],
mapping=[
[
'mjsynth/mnt/ramdisk/max/90kDICT32px/*/',
'textrecog_imgs/train/'
],
[
'mjsynth/mnt/ramdisk/max/90kDICT32px/annotation.txt',
'annotations/annotation.txt'
]
]),
]),
gatherer=dict(type='MonoGatherer', ann_name='annotation.txt'),
parser=dict(
type='ICDARTxtTextRecogAnnParser',
separator=' ',
format='img text',
remove_strs=None),
packer=dict(type='TextRecogPacker'),
dumper=dict(type='JsonDumper'),
)

delete = ['mjsynth', 'annotations']

config_generator = dict(
type='TextRecogConfigGenerator', data_root=data_root, test_anns=None)
4 changes: 2 additions & 2 deletions docs/en/user_guides/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ For example, for text recognition tasks, Syn90k is used as the training set, whi

```Python
# text recognition dataset configuration
mjsynth_textrecog_test = dict(
mjsynth_textrecog_train = dict(
type='OCRDataset',
data_root='data/rec/Syn90k/',
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
Expand Down Expand Up @@ -374,7 +374,7 @@ train_dataloader = dict(
sampler=dict(type='DefaultSampler', shuffle=True),
dataset=dict(
type='ConcatDataset',
datasets=[mjsynth_textrecog_test],
datasets=[mjsynth_textrecog_train],
pipeline=train_pipeline))
val_dataloader = dict(
batch_size=1,
Expand Down
2 changes: 1 addition & 1 deletion docs/en/user_guides/dataset_prepare.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ _base_ = [ # Import all dataset configurations you want to use
]

# List of training datasets
train_list = [_base_.mjsynth_textrecog_test]
train_list = [_base_.mjsynth_textrecog_train]
# List of testing datasets
test_list = [
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test, _base_.svt_textrecog_test,
Expand Down
4 changes: 2 additions & 2 deletions docs/zh_cn/user_guides/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ test_cfg = dict(type='TestLoop')

```Python
# 识别数据集配置
mjsynth_textrecog_test = dict(
mjsynth_textrecog_train = dict(
type='OCRDataset',
data_root='data/rec/Syn90k/',
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
Expand Down Expand Up @@ -373,7 +373,7 @@ train_dataloader = dict(
sampler=dict(type='DefaultSampler', shuffle=True),
dataset=dict(
type='ConcatDataset',
datasets=[mjsynth_textrecog_test],
datasets=[mjsynth_textrecog_train],
pipeline=train_pipeline))
val_dataloader = dict(
batch_size=1,
Expand Down
2 changes: 1 addition & 1 deletion docs/zh_cn/user_guides/dataset_prepare.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ _base_ = [ # 导入所有需要使用的数据集配置
]

# 训练集列表
train_list = [_base_.mjsynth_textrecog_test]
train_list = [_base_.mjsynth_textrecog_train]
# 测试集列表
test_list = [
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test, _base_.svt_textrecog_test,
Expand Down
3 changes: 2 additions & 1 deletion mmocr/datasets/preparers/obtainers/naive_data_obtainer.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,8 @@ def move(self, mapping: List[Tuple[str, str]]) -> None:
if '*' in src:
mkdir_or_exist(dst)
for f in glob.glob(src):
if not osp.exists(osp.join(dst, osp.basename(f))):
if not osp.exists(
osp.join(dst, osp.relpath(f, self.data_root))):
shutil.move(f, dst)

elif osp.exists(src) and not osp.exists(dst):
Expand Down
7 changes: 2 additions & 5 deletions mmocr/datasets/preparers/packers/textrecog_packer.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,8 @@ def pack_instance(self, sample: Tuple) -> Dict:
"""

img_name, text = sample
# TODO: remove hard code
packed_instance = dict(
instances=[dict(text=text)],
img_path=osp.join('textrecog_imgs', self.split,
osp.basename(img_name)))
img_name = osp.relpath(img_name, self.data_root)
packed_instance = dict(instances=[dict(text=text)], img_path=img_name)

return packed_instance

Expand Down
2 changes: 1 addition & 1 deletion mmocr/datasets/preparers/parsers/icdar_txt_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,6 @@ def parse_files(self, img_dir: str, ann_path: str) -> List:
if text == self.ignore:
continue
img_name = anno['img']
samples.append((osp.join(img_dir, osp.basename(img_name)), text))
samples.append((osp.join(img_dir, img_name), text))

return samples
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,11 @@ class TestTextRecogPacker(unittest.TestCase):

def test_pack_instance(self):

packer = TextRecogPacker(data_root='', split='test')
sample = ('test.jpg', 'text')
packer = TextRecogPacker(data_root='data/test/', split='test')
sample = ('data/test/test.jpg', 'text')
results = packer.pack_instance(sample)
self.assertDictEqual(
results,
dict(
img_path=osp.join('textrecog_imgs', 'test', 'test.jpg'),
instances=[dict(text='text')]))
results, dict(img_path='test.jpg', instances=[dict(text='text')]))

def test_add_meta(self):
packer = TextRecogPacker(data_root='', split='test')
Expand Down

0 comments on commit d0dc902

Please sign in to comment.