•
[1_1]
MMOCR 에서 제공되는 임의의 detection 모델을 샘플 데이터(MINI-ICDAR2015)로 학습한다. → 이때 사용했던 커맨드를 참고한다.
학습
파일 crnn_mini-vgg_5e_icdar2015.py 을 생성한다.
_base_ = [
'_base_crnn_mini-vgg.py',
'../_base_/datasets/icdar2015.py',
'../_base_/default_runtime.py',
'../_base_/schedules/schedule_adadelta_5e.py',
]
# dataset settings
train_list = [_base_.ic15_rec_train]
test_list = [_base_.ic15_rec_test]
default_hooks = dict(logger=dict(type='LoggerHook', interval=50), )
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,
pipeline=_base_.train_pipeline))
val_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=_base_.train_pipeline))
val_evaluator = dict(dataset_prefixes=['IC15'])
test_dataloader = val_dataloader
test_evaluator = val_evaluator
model = dict(decoder=dict(dictionary=dict(with_unknown=True)))
Bash
복사
ICDAR 2015 text recognition 데이터로 학습
학습(에폭 수 바꾸기)
•
파이프라인이 정상적으로 작동하는 것을 확인했다면 에폭수를 늘릴 차례이다.
최적화 스케줄러를 다시 정의한다.
최적화 스케줄러를 수정한 뒤 파일 이름을 crnn_mini-vgg_5e_icdar2015.py 에서 crnn_mini-vgg_1200e_icdar2015 로 변경한다. 1200e 는 1200에폭을 의미한다.
# optimizer
optim_wrapper = dict(
type='OptimWrapper',
optimizer=dict(type='SGD', lr=0.007, momentum=0.9, weight_decay=0.0001))
train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=1200, val_interval=20)
val_cfg = dict(type='ValLoop')
test_cfg = dict(type='TestLoop')
# learning policy
param_scheduler = [
dict(type='PolyLR', power=0.9, eta_min=1e-7, end=1200),
]
Bash
복사
모델이 사용하는 스케줄러 바꾸기
_base_ = [
'_base_crnn_mini-vgg.py',
'../_base_/datasets/icdar2015.py',
'../_base_/default_runtime.py',
'../_base_/schedules/schedule_sgd_1200e.py',
]
Bash
복사
에폭 수가 늘어났으므로 매 에폭마다 모델 가중치를 저장하지 않도록 하단에 다음과 같은 내용을 추가함.
# override: ../_base_/schedules/schedule_sgd_1200e.py
# Save checkpoints every 10 epochs
default_hooks = dict(checkpoint=dict(type='CheckpointHook', interval=10), )
Bash
복사
훈련 시작
# command
# single gpu
python3 -m tools.train configs/textrecog/crnn/crnn_mini-vgg_1200e_icdar2015.py
# multi gpu
tools/dist_train.sh configs/textrecog/crnn/crnn_mini-vgg_1200e_icdar2015.py 2
Bash
복사
평가
11/16 12:30:12 - mmengine - INFO - Epoch(test) [1039/1039] IC15/recog/word_acc: 0.0520 IC15/recog/word_acc_ignore_case: 0.0587 IC15/recog/word_acc_ignore_case_symbol: 0.0602 IC15/recog/char_recall: 0.2767 IC15/recog/char_precision: 0.2925
Bash
복사
•
알게 된 점
◦
ocr 모델 ICDAR 만으로 학습 절대안됨
▪