//
Search
🔨

[1_2_1.1.1.1] MMOCR 에서 제공되는 임의의 recognition 모델을 ICDAR 2015 데이터셋으로 학습한다.

상태
Done
담당
마감일
2022/11/14
요약
학습된 모델 평가가 가능하면 끝
선행 태스크
선행 태스크 상태
후행 태스크
관련 마일스톤
2 more properties
학습
파일 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
복사
학습(에폭 수 바꾸기)
파이프라인이 정상적으로 작동하는 것을 확인했다면 에폭수를 늘릴 차례이다.
최적화 스케줄러를 다시 정의한다.
최적화 스케줄러를 수정한 뒤 파일 이름을 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 만으로 학습 절대안됨