2023-03-09 15:11:27 +08:00
|
|
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
|
|
|
|
import glob
|
|
|
|
|
import os
|
|
|
|
|
import shutil
|
|
|
|
|
import tempfile
|
|
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
import torch
|
|
|
|
|
|
|
|
|
|
from modelscope.hub.snapshot_download import snapshot_download
|
|
|
|
|
from modelscope.metainfo import Trainers
|
|
|
|
|
from modelscope.pipelines import pipeline
|
|
|
|
|
from modelscope.trainers import build_trainer
|
|
|
|
|
from modelscope.utils.config import Config
|
|
|
|
|
from modelscope.utils.constant import ModelFile, Tasks
|
|
|
|
|
from modelscope.utils.test_utils import DistributedTestCase, test_level
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _setup():
|
|
|
|
|
model_id = 'damo/cv_resnet18_ocr-detection-db-line-level_damo'
|
|
|
|
|
cache_path = snapshot_download(model_id)
|
|
|
|
|
return cache_path
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestOCRDetectionDBTrainerSingleGPU(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
|
self.model_id = 'damo/cv_resnet18_ocr-detection-db-line-level_damo'
|
|
|
|
|
self.test_image = 'data/test/images/ocr_detection/test_images/X51007339105.jpg'
|
|
|
|
|
self.cache_path = _setup()
|
|
|
|
|
self.config_file = os.path.join(self.cache_path, 'configuration.json')
|
|
|
|
|
self.pretrained_model = os.path.join(
|
|
|
|
|
self.cache_path, 'db_resnet18_public_line_640x640.pt')
|
|
|
|
|
self.saved_dir = './workdirs'
|
|
|
|
|
self.saved_finetune_model = os.path.join(self.saved_dir, 'final.pt')
|
|
|
|
|
self.saved_infer_model = os.path.join(self.saved_dir,
|
|
|
|
|
'pytorch_model.pt')
|
|
|
|
|
|
2023-06-28 09:44:44 +08:00
|
|
|
def tearDown(self):
|
|
|
|
|
shutil.rmtree(self.saved_dir)
|
|
|
|
|
super().tearDown()
|
|
|
|
|
|
2023-03-09 15:11:27 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
|
|
|
|
def test_trainer_finetune_singleGPU(self):
|
|
|
|
|
|
|
|
|
|
kwargs = dict(
|
|
|
|
|
cfg_file=self.config_file,
|
|
|
|
|
gpu_ids=[
|
|
|
|
|
0,
|
|
|
|
|
],
|
|
|
|
|
batch_size=8,
|
|
|
|
|
max_epochs=5,
|
|
|
|
|
base_lr=0.007,
|
|
|
|
|
load_pretrain=True,
|
|
|
|
|
pretrain_model=self.pretrained_model,
|
|
|
|
|
cache_path=self.cache_path,
|
|
|
|
|
train_data_dir=['./data/test/images/ocr_detection/'],
|
|
|
|
|
train_data_list=[
|
|
|
|
|
'./data/test/images/ocr_detection/train_list.txt'
|
|
|
|
|
],
|
|
|
|
|
val_data_dir=['./data/test/images/ocr_detection/'],
|
|
|
|
|
val_data_list=['./data/test/images/ocr_detection/test_list.txt'])
|
|
|
|
|
trainer = build_trainer(
|
|
|
|
|
name=Trainers.ocr_detection_db, default_args=kwargs)
|
|
|
|
|
trainer.train()
|
|
|
|
|
trainer.evaluate(checkpoint_path=self.saved_finetune_model)
|
|
|
|
|
|
|
|
|
|
# inference with pipeline using saved inference model
|
|
|
|
|
cmd = 'cp {} {}'.format(self.config_file, self.saved_dir)
|
|
|
|
|
os.system(cmd)
|
|
|
|
|
ocr_detection = pipeline(Tasks.ocr_detection, model=self.saved_dir)
|
|
|
|
|
result = ocr_detection(self.test_image)
|
|
|
|
|
print('ocr detection results: ')
|
|
|
|
|
print(result)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
unittest.main()
|