Files
modelscope/tests/trainers/test_action_detection_trainer.py
lllcho.lc 38bcd54ee4 fix bug for install detecron2
从github安装库有时会因为网络问题导致失败,故改成gitee
        Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11945563
2023-03-10 15:14:21 +08:00

80 lines
2.6 KiB
Python

# Copyright (c) Alibaba, Inc. and its affiliates.
import os
import shutil
import subprocess
import sys
import tempfile
import unittest
from modelscope.metainfo import Trainers
from modelscope.msdatasets import MsDataset
from modelscope.trainers import build_trainer
from modelscope.utils.constant import DownloadMode
from modelscope.utils.test_utils import test_level
class TestActionDetectionTrainer(unittest.TestCase):
def setUp(self):
os.environ['OMP_NUM_THREADS'] = '1'
print(('Testing %s.%s' % (type(self).__name__, self._testMethodName)))
cmd_uninstall = ['pip', 'uninstall', '-y', 'detectron2']
cmd = [
'pip', 'install', '--upgrade',
'git+https://gitee.com/lllcho/detectron2.git'
]
subprocess.run(cmd_uninstall)
subprocess.run(cmd)
import detectron2
print(f'Install detectron2 done, version {detectron2.__version__}')
self.model_id = 'damo/cv_ResNetC3D_action-detection_detection2d'
self.train_dataset = MsDataset.load(
'lllcho/ivi_action',
subset_name='default',
split='train',
download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS)
self.tmp_dir = tempfile.TemporaryDirectory().name
if not os.path.exists(self.tmp_dir):
os.makedirs(self.tmp_dir)
def tearDown(self):
shutil.rmtree(self.tmp_dir)
super().tearDown()
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
def test_trainer(self):
def cfg_modify_fn(cfg):
cfg.train.max_iter = 5
cfg.train.dataloader.batch_size_per_gpu = 1
cfg.train.dataloader.workers_per_gpu = 1
cfg.train.optimizer.lr = 1e-4
cfg.train.lr_scheduler.warmup_step = 1
cfg.train.checkpoint_interval = 5000
cfg.evaluation.interval = 5000
cfg.evaluation.dataloader.batch_size_per_gpu = 1
cfg.evaluation.dataloader.workers_per_gpu = 1
cfg.train.work_dir = self.tmp_dir
cfg.train.num_gpus = 0
return cfg
trainer = build_trainer(
Trainers.action_detection,
dict(
model_id=self.model_id,
train_dataset=self.train_dataset,
test_dataset=self.train_dataset,
cfg_modify_fn=cfg_modify_fn))
trainer.train()
results_files = os.listdir(self.tmp_dir)
self.assertIn('config.py', results_files)
self.assertIn('model_final.pth', results_files)
if __name__ == '__main__':
unittest.main()