[Dataset Preparer] MJSynth (#1791)

* finialize

* finialize
pull/1798/head
Tong Gao 2023-03-22 10:10:46 +08:00 committed by GitHub
parent 6d9582b6c7
commit d0dc90253a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 109 additions and 41 deletions

View File

@ -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)

View File

@ -24,7 +24,7 @@ param_scheduler = [
# 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,

View File

@ -26,7 +26,7 @@ param_scheduler = [
# 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,

View File

@ -15,7 +15,7 @@ _base_ = [
# dataset settings
train_list = [
_base_.mjsynth_textrecog_test,
_base_.mjsynth_textrecog_train,
_base_.synthtext_textrecog_train,
]
test_list = [

View File

@ -12,7 +12,7 @@ _base_ = [
'_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,

View File

@ -23,7 +23,7 @@ param_scheduler = [
# 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 = [

View File

@ -20,7 +20,7 @@ param_scheduler = [
]
# 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,

View File

@ -20,7 +20,7 @@ param_scheduler = [
]
# 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,

View File

@ -13,7 +13,7 @@ _base_ = [
]
# 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,

View File

@ -41,7 +41,7 @@ param_scheduler = [
]
# 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,

View File

@ -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

View File

@ -0,0 +1,6 @@
**Text Recognition**
```txt
./3000/7/182_slinking_71711.jpg 71711
./3000/7/182_REMODELERS_64541.jpg 64541
```

View File

@ -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)

View File

@ -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'),
@ -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,

View File

@ -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,

View File

@ -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'),
@ -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,

View File

@ -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,

View File

@ -186,7 +186,8 @@ class NaiveDataObtainer:
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):

View File

@ -50,11 +50,8 @@ class TextRecogPacker(BasePacker):
"""
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

View File

@ -122,6 +122,6 @@ class ICDARTxtTextRecogAnnParser(BaseParser):
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

View File

@ -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')