| @@ -4,6 +4,7 @@ from modelscope.hub.constants import (DEFAULT_MODELSCOPE_DOMAIN, | |||||
| DEFAULT_MODELSCOPE_GROUP, | DEFAULT_MODELSCOPE_GROUP, | ||||
| MODEL_ID_SEPARATOR, | MODEL_ID_SEPARATOR, | ||||
| MODELSCOPE_URL_SCHEME) | MODELSCOPE_URL_SCHEME) | ||||
| from modelscope.utils.utils import get_default_cache_dir | |||||
| def model_id_to_group_owner_name(model_id): | def model_id_to_group_owner_name(model_id): | ||||
| @@ -21,8 +22,7 @@ def get_cache_dir(): | |||||
| cache dir precedence: | cache dir precedence: | ||||
| function parameter > enviroment > ~/.cache/modelscope/hub | function parameter > enviroment > ~/.cache/modelscope/hub | ||||
| """ | """ | ||||
| default_cache_dir = os.path.expanduser( | |||||
| os.path.join('~/.cache', 'modelscope')) | |||||
| default_cache_dir = get_default_cache_dir() | |||||
| return os.getenv('MODELSCOPE_CACHE', os.path.join(default_cache_dir, | return os.getenv('MODELSCOPE_CACHE', os.path.join(default_cache_dir, | ||||
| 'hub')) | 'hub')) | ||||
| @@ -1,8 +1,36 @@ | |||||
| from .base import Metric | |||||
| from .builder import METRICS, build_metric, task_default_metrics | |||||
| from .image_color_enhance_metric import ImageColorEnhanceMetric | |||||
| from .image_denoise_metric import ImageDenoiseMetric | |||||
| from .image_instance_segmentation_metric import \ | |||||
| ImageInstanceSegmentationCOCOMetric | |||||
| from .sequence_classification_metric import SequenceClassificationMetric | |||||
| from .text_generation_metric import TextGenerationMetric | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .base import Metric | |||||
| from .builder import METRICS, build_metric, task_default_metrics | |||||
| from .image_color_enhance_metric import ImageColorEnhanceMetric | |||||
| from .image_denoise_metric import ImageDenoiseMetric | |||||
| from .image_instance_segmentation_metric import \ | |||||
| ImageInstanceSegmentationCOCOMetric | |||||
| from .sequence_classification_metric import SequenceClassificationMetric | |||||
| from .text_generation_metric import TextGenerationMetric | |||||
| else: | |||||
| _import_structure = { | |||||
| 'base': ['Metric'], | |||||
| 'builder': ['METRICS', 'build_metric', 'task_default_metrics'], | |||||
| 'image_color_enhance_metric': ['ImageColorEnhanceMetric'], | |||||
| 'image_denoise_metric': ['ImageDenoiseMetric'], | |||||
| 'image_instance_segmentation_metric': | |||||
| ['ImageInstanceSegmentationCOCOMetric'], | |||||
| 'sequence_classification_metric': ['SequenceClassificationMetric'], | |||||
| 'text_generation_metric': ['TextGenerationMetric'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1,39 +1,12 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | # Copyright (c) Alibaba, Inc. and its affiliates. | ||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.error import (AUDIO_IMPORT_ERROR, | from modelscope.utils.error import (AUDIO_IMPORT_ERROR, | ||||
| TENSORFLOW_IMPORT_WARNING) | TENSORFLOW_IMPORT_WARNING) | ||||
| from .base import Model | |||||
| from .builder import MODELS, build_model | |||||
| try: | |||||
| from .audio.ans.frcrn import FRCRNModel | |||||
| from .audio.asr import GenericAutomaticSpeechRecognition | |||||
| from .audio.kws import GenericKeyWordSpotting | |||||
| from .audio.tts import SambertHifigan | |||||
| except ModuleNotFoundError as e: | |||||
| print(AUDIO_IMPORT_ERROR.format(e)) | |||||
| try: | |||||
| from .nlp.csanmt_for_translation import CsanmtForTranslation | |||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'tensorflow'": | |||||
| print(TENSORFLOW_IMPORT_WARNING.format('CsanmtForTranslation')) | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| from modelscope.utils.import_utils import is_torch_available | |||||
| from . import audio, cv, multi_modal, nlp | |||||
| from .base import Head, Model | |||||
| from .builder import BACKBONES, HEADS, MODELS, build_model | |||||
| try: | |||||
| from .multi_modal import OfaForImageCaptioning | |||||
| from .cv import NAFNetForImageDenoise | |||||
| from .nlp import (BertForMaskedLM, BertForSequenceClassification, | |||||
| SbertForNLI, SbertForSentenceSimilarity, | |||||
| SbertForSentimentClassification, | |||||
| SbertForTokenClassification, | |||||
| SbertForZeroShotClassification, SpaceForDialogIntent, | |||||
| SpaceForDialogModeling, SpaceForDialogStateTracking, | |||||
| StructBertForMaskedLM, VecoForMaskedLM) | |||||
| from .nlp.backbones import SbertModel | |||||
| from .nlp.heads import SequenceClassificationHead | |||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'pytorch'": | |||||
| pass | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| if is_torch_available(): | |||||
| from .base import TorchModel, TorchHead | |||||
| @@ -0,0 +1,3 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from . import ans, asr, kws, tts | |||||
| @@ -0,0 +1,22 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .frcrn import FRCRNModel | |||||
| else: | |||||
| _import_structure = { | |||||
| 'frcrn': ['FRCRNModel'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1 +1,23 @@ | |||||
| from .generic_automatic_speech_recognition import * # noqa F403 | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .generic_automatic_speech_recognition import GenericAutomaticSpeechRecognition | |||||
| else: | |||||
| _import_structure = { | |||||
| 'generic_automatic_speech_recognition': | |||||
| ['GenericAutomaticSpeechRecognition'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1 +1,22 @@ | |||||
| from .generic_key_word_spotting import * # noqa F403 | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .generic_key_word_spotting import GenericKeyWordSpotting | |||||
| else: | |||||
| _import_structure = { | |||||
| 'generic_key_word_spotting': ['GenericKeyWordSpotting'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1 +1,22 @@ | |||||
| from .sambert_hifi import * # noqa F403 | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .sambert_hifi import SambertHifigan | |||||
| else: | |||||
| _import_structure = { | |||||
| 'sambert_hifi': ['SambertHifigan'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -6,7 +6,6 @@ import torch | |||||
| from torch import nn | from torch import nn | ||||
| from modelscope.utils.logger import get_logger | from modelscope.utils.logger import get_logger | ||||
| from modelscope.utils.torch_utils import create_device | |||||
| from .base_model import Model | from .base_model import Model | ||||
| logger = get_logger(__name__) | logger = get_logger(__name__) | ||||
| @@ -1,3 +1,5 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | # Copyright (c) Alibaba, Inc. and its affiliates. | ||||
| from .image_color_enhance.image_color_enhance import ImageColorEnhance | |||||
| from .image_denoise.nafnet_for_image_denoise import * # noqa F403 | |||||
| from . import (action_recognition, animal_recognition, cartoon, | |||||
| cmdssl_video_embedding, face_generation, image_color_enhance, | |||||
| image_colorization, image_denoise, image_instance_segmentation, | |||||
| super_resolution, virual_tryon) | |||||
| @@ -0,0 +1,25 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .models import BaseVideoModel | |||||
| from .tada_convnext import TadaConvNeXt | |||||
| else: | |||||
| _import_structure = { | |||||
| 'models': ['BaseVideoModel'], | |||||
| 'tada_convnext': ['TadaConvNeXt'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,25 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .resnet import ResNet, Bottleneck | |||||
| from .splat import SplAtConv2d | |||||
| else: | |||||
| _import_structure = { | |||||
| 'resnet': ['ResNet', 'Bottleneck'], | |||||
| 'splat': ['SplAtConv2d'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,28 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .facelib.facer import FaceAna | |||||
| from .mtcnn_pytorch.src.align_trans import (get_reference_facial_points, | |||||
| warp_and_crop_face) | |||||
| from .utils import (get_f5p, padTo16x, resize_size) | |||||
| else: | |||||
| _import_structure = { | |||||
| 'facelib.facer': ['FaceAna'], | |||||
| 'mtcnn_pytorch.src.align_trans': | |||||
| ['get_reference_facial_points', 'warp_and_crop_face'], | |||||
| 'utils': ['get_f5p', 'padTo16x', 'resize_size'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1,3 +1,26 @@ | |||||
| from .c3d import C3D | |||||
| from .resnet2p1d import resnet26_2p1d | |||||
| from .resnet3d import resnet26_3d | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .c3d import C3D | |||||
| from .resnet2p1d import resnet26_2p1d | |||||
| from .resnet3d import resnet26_3d | |||||
| else: | |||||
| _import_structure = { | |||||
| 'c3d': ['C3D'], | |||||
| 'resnet2p1d': ['resnet26_2p1d'], | |||||
| 'resnet3d': ['resnet26_3d'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,22 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .stylegan2 import Generator | |||||
| else: | |||||
| _import_structure = { | |||||
| 'stylegan2': ['Generator'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,22 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .image_color_enhance import ImageColorEnhance | |||||
| else: | |||||
| _import_structure = { | |||||
| 'image_color_enhance': ['ImageColorEnhance'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,24 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .unet import DynamicUnetWide, DynamicUnetDeep | |||||
| from .utils import NormType | |||||
| else: | |||||
| _import_structure = { | |||||
| 'unet': ['DynamicUnetWide', 'DynamicUnetDeep'], | |||||
| 'utils': ['NormType'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,20 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .nafnet_for_image_denoise import NAFNetForImageDenoise | |||||
| else: | |||||
| _import_structure = {'nafnet_for_image_denoise': ['NAFNetForImageDenoise']} | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1,2 +1,27 @@ | |||||
| from .cascade_mask_rcnn_swin import CascadeMaskRCNNSwin | |||||
| from .model import CascadeMaskRCNNSwinModel | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .cascade_mask_rcnn_swin import CascadeMaskRCNNSwin | |||||
| from .model import CascadeMaskRCNNSwinModel | |||||
| from .postprocess_utils import get_img_ins_seg_result | |||||
| from .datasets import ImageInstanceSegmentationCocoDataset | |||||
| else: | |||||
| _import_structure = { | |||||
| 'cascade_mask_rcnn_swin': ['CascadeMaskRCNNSwin'], | |||||
| 'model': ['CascadeMaskRCNNSwinModel'], | |||||
| 'postprocess_utils': ['get_img_ins_seg_result'], | |||||
| 'datasets': ['ImageInstanceSegmentationCocoDataset'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1 +1,22 @@ | |||||
| from .swin_transformer import SwinTransformer | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .swin_transformer import SwinTransformer | |||||
| else: | |||||
| _import_structure = { | |||||
| 'swin_transformer': ['SwinTransformer'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,20 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .rrdbnet_arch import RRDBNet | |||||
| else: | |||||
| _import_structure = {'rrdbnet_arch': ['RRDBNet']} | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,20 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .sdafnet import SDAFNet_Tryon | |||||
| else: | |||||
| _import_structure = {'sdafnet': ['SDAFNet_Tryon']} | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1,8 +1,35 @@ | |||||
| from .clip.clip_model import CLIPForMultiModalEmbedding | |||||
| from .gemm.gemm_model import GEMMForMultiModalEmbedding | |||||
| from .imagen.imagen_model import ImagenForTextToImageSynthesis | |||||
| from .mmr.models.clip_for_multi_model_video_embedding import \ | |||||
| VideoCLIPForMultiModalEmbedding | |||||
| from .mplug_for_visual_question_answering import \ | |||||
| MPlugForVisualQuestionAnswering | |||||
| from .ofa_for_image_captioning_model import OfaForImageCaptioning | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .clip import CLIPForMultiModalEmbedding | |||||
| from .gemm import GEMMForMultiModalEmbedding | |||||
| from .imagen import ImagenForTextToImageSynthesis | |||||
| from .mmr import VideoCLIPForMultiModalEmbedding | |||||
| from .mplug_for_visual_question_answering import \ | |||||
| MPlugForVisualQuestionAnswering | |||||
| from .ofa_for_image_captioning_model import OfaForImageCaptioning | |||||
| else: | |||||
| _import_structure = { | |||||
| 'clip': ['CLIPForMultiModalEmbedding'], | |||||
| 'imagen': ['ImagenForTextToImageSynthesis'], | |||||
| 'gemm': ['GEMMForMultiModalEmbedding'], | |||||
| 'mmr': ['VideoCLIPForMultiModalEmbedding'], | |||||
| 'mplug_for_visual_question_answering': | |||||
| ['MPlugForVisualQuestionAnswering'], | |||||
| 'ofa_for_image_captioning_model': ['OfaForImageCaptioning'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1 @@ | |||||
| from .clip_model import CLIPForMultiModalEmbedding | |||||
| @@ -0,0 +1 @@ | |||||
| from .gemm_model import GEMMForMultiModalEmbedding | |||||
| @@ -0,0 +1 @@ | |||||
| from .imagen_model import ImagenForTextToImageSynthesis | |||||
| @@ -0,0 +1 @@ | |||||
| from .models import VideoCLIPForMultiModalEmbedding | |||||
| @@ -0,0 +1 @@ | |||||
| from .clip_for_mm_video_embedding import VideoCLIPForMultiModalEmbedding | |||||
| @@ -11,13 +11,11 @@ from PIL import Image | |||||
| from modelscope.metainfo import Models | from modelscope.metainfo import Models | ||||
| from modelscope.models.base import Model | from modelscope.models.base import Model | ||||
| from modelscope.models.builder import MODELS | from modelscope.models.builder import MODELS | ||||
| from modelscope.models.multi_modal.mmr.dataloaders.rawvideo_util import \ | |||||
| RawVideoExtractor | |||||
| from modelscope.models.multi_modal.mmr.models.modeling import CLIP4Clip | |||||
| from modelscope.models.multi_modal.mmr.models.tokenization_clip import \ | |||||
| SimpleTokenizer as ClipTokenizer | |||||
| from modelscope.utils.constant import ModelFile, Tasks | from modelscope.utils.constant import ModelFile, Tasks | ||||
| from modelscope.utils.logger import get_logger | from modelscope.utils.logger import get_logger | ||||
| from ..dataloaders.rawvideo_util import RawVideoExtractor | |||||
| from .modeling import CLIP4Clip | |||||
| from .tokenization_clip import SimpleTokenizer as ClipTokenizer | |||||
| logger = get_logger() | logger = get_logger() | ||||
| @@ -1,25 +1,59 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | # Copyright (c) Alibaba, Inc. and its affiliates. | ||||
| from modelscope.utils.error import TENSORFLOW_IMPORT_WARNING | |||||
| from .backbones import * # noqa F403 | |||||
| from .bert_for_sequence_classification import * # noqa F403 | |||||
| from .heads import * # noqa F403 | |||||
| from .masked_language import * # noqa F403 | |||||
| from .nncrf_for_named_entity_recognition import * # noqa F403 | |||||
| from .palm_for_text_generation import * # noqa F403 | |||||
| from .sbert_for_nli import * # noqa F403 | |||||
| from .sbert_for_sentence_similarity import * # noqa F403 | |||||
| from .sbert_for_sentiment_classification import * # noqa F403 | |||||
| from .sbert_for_token_classification import * # noqa F403 | |||||
| from .sbert_for_zero_shot_classification import * # noqa F403 | |||||
| from .sequence_classification import * # noqa F403 | |||||
| from .space_for_dialog_intent_prediction import * # noqa F403 | |||||
| from .space_for_dialog_modeling import * # noqa F403 | |||||
| from .space_for_dialog_state_tracking import * # noqa F403 | |||||
| from typing import TYPE_CHECKING | |||||
| try: | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .backbones import (SbertModel, SpaceGenerator, SpaceModelBase) | |||||
| from .heads import SequenceClassificationHead | |||||
| from .bert_for_sequence_classification import BertForSequenceClassification | |||||
| from .csanmt_for_translation import CsanmtForTranslation | from .csanmt_for_translation import CsanmtForTranslation | ||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'tensorflow'": | |||||
| print(TENSORFLOW_IMPORT_WARNING.format('CsanmtForTranslation')) | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| from .masked_language import (StructBertForMaskedLM, VecoForMaskedLM, | |||||
| BertForMaskedLM) | |||||
| from .nncrf_for_named_entity_recognition import TransformerCRFForNamedEntityRecognition | |||||
| from .palm_for_text_generation import PalmForTextGeneration | |||||
| from .sbert_for_nli import SbertForNLI | |||||
| from .sbert_for_sentence_similarity import SbertForSentenceSimilarity | |||||
| from .sbert_for_sentiment_classification import SbertForSentimentClassification | |||||
| from .sbert_for_token_classification import SbertForTokenClassification | |||||
| from .sbert_for_zero_shot_classification import SbertForZeroShotClassification | |||||
| from .sequence_classification import SequenceClassificationModel | |||||
| from .space_for_dialog_intent_prediction import SpaceForDialogIntent | |||||
| from .space_for_dialog_modeling import SpaceForDialogModeling | |||||
| from .space_for_dialog_state_tracking import SpaceForDialogStateTracking | |||||
| from .task_model import SingleBackboneTaskModelBase | |||||
| else: | |||||
| _import_structure = { | |||||
| 'backbones': ['SbertModel', 'SpaceGenerator', 'SpaceModelBase'], | |||||
| 'heads': ['SequenceClassificationHead'], | |||||
| 'csanmt_for_translation': ['CsanmtForTranslation'], | |||||
| 'bert_for_sequence_classification': ['BertForSequenceClassification'], | |||||
| 'masked_language': | |||||
| ['StructBertForMaskedLM', 'VecoForMaskedLM', 'BertForMaskedLM'], | |||||
| 'nncrf_for_named_entity_recognition': | |||||
| ['TransformerCRFForNamedEntityRecognition'], | |||||
| 'palm_for_text_generation': ['PalmForTextGeneration'], | |||||
| 'sbert_for_nli': ['SbertForNLI'], | |||||
| 'sbert_for_sentence_similarity': ['SbertForSentenceSimilarity'], | |||||
| 'sbert_for_sentiment_classification': | |||||
| ['SbertForSentimentClassification'], | |||||
| 'sbert_for_token_classification': ['SbertForTokenClassification'], | |||||
| 'sbert_for_zero_shot_classification': | |||||
| ['SbertForZeroShotClassification'], | |||||
| 'sequence_classification': ['SequenceClassificationModel'], | |||||
| 'space_for_dialog_intent_prediction': ['SpaceForDialogIntent'], | |||||
| 'space_for_dialog_modeling': ['SpaceForDialogModeling'], | |||||
| 'space_for_dialog_state_tracking': ['SpaceForDialogStateTracking'], | |||||
| 'task_model': ['SingleBackboneTaskModelBase'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1,4 +1,23 @@ | |||||
| from .space import SpaceGenerator, SpaceModelBase | |||||
| from .structbert import SbertModel | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| __all__ = ['SbertModel', 'SpaceGenerator', 'SpaceModelBase'] | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .space import SpaceGenerator, SpaceModelBase | |||||
| from .structbert import SbertModel | |||||
| else: | |||||
| _import_structure = { | |||||
| 'space': ['SpaceGenerator', 'SpaceModelBase'], | |||||
| 'structbert': ['SbertModel'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1,3 +1,21 @@ | |||||
| from .sequence_classification_head import SequenceClassificationHead | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| __all__ = ['SequenceClassificationHead'] | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .sequence_classification_head import SequenceClassificationHead | |||||
| else: | |||||
| _import_structure = { | |||||
| 'sequence_classification_head': ['SequenceClassificationHead'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -6,11 +6,10 @@ from typing import Any, Dict | |||||
| from modelscope.metainfo import Models | from modelscope.metainfo import Models | ||||
| from modelscope.models.base import Model, Tensor | from modelscope.models.base import Model, Tensor | ||||
| from modelscope.models.builder import MODELS | from modelscope.models.builder import MODELS | ||||
| from modelscope.preprocessors.space.fields.intent_field import \ | |||||
| IntentBPETextField | |||||
| from modelscope.models.nlp.backbones import SpaceGenerator, SpaceModelBase | |||||
| from modelscope.preprocessors.space import IntentBPETextField | |||||
| from modelscope.utils.config import Config | from modelscope.utils.config import Config | ||||
| from modelscope.utils.constant import ModelFile, Tasks | from modelscope.utils.constant import ModelFile, Tasks | ||||
| from .backbones import SpaceGenerator, SpaceModelBase | |||||
| __all__ = ['SpaceForDialogIntent'] | __all__ = ['SpaceForDialogIntent'] | ||||
| @@ -6,11 +6,10 @@ from typing import Any, Dict, Optional | |||||
| from modelscope.metainfo import Models | from modelscope.metainfo import Models | ||||
| from modelscope.models.base import Model, Tensor | from modelscope.models.base import Model, Tensor | ||||
| from modelscope.models.builder import MODELS | from modelscope.models.builder import MODELS | ||||
| from modelscope.preprocessors.space.fields.gen_field import \ | |||||
| MultiWOZBPETextField | |||||
| from modelscope.models.nlp.backbones import SpaceGenerator, SpaceModelBase | |||||
| from modelscope.preprocessors.space import MultiWOZBPETextField | |||||
| from modelscope.utils.config import Config | from modelscope.utils.config import Config | ||||
| from modelscope.utils.constant import ModelFile, Tasks | from modelscope.utils.constant import ModelFile, Tasks | ||||
| from .backbones import SpaceGenerator, SpaceModelBase | |||||
| __all__ = ['SpaceForDialogModeling'] | __all__ = ['SpaceForDialogModeling'] | ||||
| @@ -0,0 +1,22 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .image_denoise_dataset import PairedImageDataset | |||||
| else: | |||||
| _import_structure = { | |||||
| 'image_denoise_dataset': ['PairedImageDataset'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1,12 +1,7 @@ | |||||
| from modelscope.utils.error import AUDIO_IMPORT_ERROR | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| from . import audio, cv, multi_modal, nlp | |||||
| from .base import Pipeline | from .base import Pipeline | ||||
| from .builder import pipeline | from .builder import pipeline | ||||
| from .cv import * # noqa F403 | |||||
| from .multi_modal import * # noqa F403 | |||||
| from .nlp import * # noqa F403 | |||||
| try: | |||||
| from .audio import LinearAECPipeline | |||||
| from .audio.ans_pipeline import ANSPipeline | |||||
| except ModuleNotFoundError as e: | |||||
| print(AUDIO_IMPORT_ERROR.format(e)) | |||||
| @@ -1,21 +1,30 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | # Copyright (c) Alibaba, Inc. and its affiliates. | ||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.error import TENSORFLOW_IMPORT_ERROR | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| try: | |||||
| if TYPE_CHECKING: | |||||
| from .ans_pipeline import ANSPipeline | |||||
| from .asr_inference_pipeline import AutomaticSpeechRecognitionPipeline | from .asr_inference_pipeline import AutomaticSpeechRecognitionPipeline | ||||
| from .kws_kwsbp_pipeline import * # noqa F403 | |||||
| from .kws_kwsbp_pipeline import KeyWordSpottingKwsbpPipeline | |||||
| from .linear_aec_pipeline import LinearAECPipeline | from .linear_aec_pipeline import LinearAECPipeline | ||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'torch'": | |||||
| pass | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| from .text_to_speech_pipeline import TextToSpeechSambertHifiganPipeline | |||||
| try: | |||||
| from .text_to_speech_pipeline import * # noqa F403 | |||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'tensorflow'": | |||||
| print(TENSORFLOW_IMPORT_ERROR.format('tts')) | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| else: | |||||
| _import_structure = { | |||||
| 'ans_pipeline': ['ANSPipeline'], | |||||
| 'asr_inference_pipeline': ['AutomaticSpeechRecognitionPipeline'], | |||||
| 'kws_kwsbp_pipeline': ['KeyWordSpottingKwsbpPipeline'], | |||||
| 'linear_aec_pipeline': ['LinearAECPipeline'], | |||||
| 'text_to_speech_pipeline': ['TextToSpeechSambertHifiganPipeline'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -11,6 +11,7 @@ from modelscope.outputs import OutputKeys | |||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.torch_utils import create_device | |||||
| def audio_norm(x): | def audio_norm(x): | ||||
| @@ -12,7 +12,7 @@ from modelscope.metainfo import Pipelines | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Pipeline | from modelscope.pipelines.base import Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| from modelscope.preprocessors.audio import LinearAECAndFbank | |||||
| from modelscope.preprocessors import LinearAECAndFbank | |||||
| from modelscope.utils.constant import ModelFile, Tasks | from modelscope.utils.constant import ModelFile, Tasks | ||||
| from modelscope.utils.logger import get_logger | from modelscope.utils.logger import get_logger | ||||
| @@ -26,7 +26,7 @@ if is_tf_available(): | |||||
| import tensorflow as tf | import tensorflow as tf | ||||
| Tensor = Union['torch.Tensor', 'tf.Tensor'] | Tensor = Union['torch.Tensor', 'tf.Tensor'] | ||||
| Input = Union[str, tuple, MsDataset, 'PIL.Image.Image', 'numpy.ndarray'] | |||||
| Input = Union[str, tuple, MsDataset, 'Image.Image', 'numpy.ndarray'] | |||||
| InputModel = Union[str, Model] | InputModel = Union[str, Model] | ||||
| logger = get_logger() | logger = get_logger() | ||||
| @@ -233,7 +233,7 @@ class Pipeline(ABC): | |||||
| """ | """ | ||||
| from torch.utils.data.dataloader import default_collate | from torch.utils.data.dataloader import default_collate | ||||
| from modelscope.preprocessors.space.dst_processors import InputFeatures | |||||
| from modelscope.preprocessors import InputFeatures | |||||
| if isinstance(data, dict) or isinstance(data, Mapping): | if isinstance(data, dict) or isinstance(data, Mapping): | ||||
| return type(data)( | return type(data)( | ||||
| {k: self._collate_fn(v) | {k: self._collate_fn(v) | ||||
| @@ -1,33 +1,48 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | # Copyright (c) Alibaba, Inc. and its affiliates. | ||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.error import TENSORFLOW_IMPORT_ERROR | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| try: | |||||
| if TYPE_CHECKING: | |||||
| from .action_recognition_pipeline import ActionRecognitionPipeline | from .action_recognition_pipeline import ActionRecognitionPipeline | ||||
| from .animal_recog_pipeline import AnimalRecogPipeline | from .animal_recog_pipeline import AnimalRecogPipeline | ||||
| from .cmdssl_video_embedding_pipleline import CMDSSLVideoEmbeddingPipeline | from .cmdssl_video_embedding_pipleline import CMDSSLVideoEmbeddingPipeline | ||||
| from .face_image_generation_pipeline import FaceImageGenerationPipeline | |||||
| from .image_cartoon_pipeline import ImageCartoonPipeline | |||||
| from .image_denoise_pipeline import ImageDenoisePipeline | from .image_denoise_pipeline import ImageDenoisePipeline | ||||
| from .image_color_enhance_pipeline import ImageColorEnhancePipeline | from .image_color_enhance_pipeline import ImageColorEnhancePipeline | ||||
| from .virtual_tryon_pipeline import VirtualTryonPipeline | |||||
| from .image_colorization_pipeline import ImageColorizationPipeline | from .image_colorization_pipeline import ImageColorizationPipeline | ||||
| from .image_super_resolution_pipeline import ImageSuperResolutionPipeline | |||||
| from .face_image_generation_pipeline import FaceImageGenerationPipeline | |||||
| from .image_instance_segmentation_pipeline import ImageInstanceSegmentationPipeline | from .image_instance_segmentation_pipeline import ImageInstanceSegmentationPipeline | ||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'torch'": | |||||
| pass | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| try: | |||||
| from .image_cartoon_pipeline import ImageCartoonPipeline | |||||
| from .image_matting_pipeline import ImageMattingPipeline | from .image_matting_pipeline import ImageMattingPipeline | ||||
| from .image_super_resolution_pipeline import ImageSuperResolutionPipeline | |||||
| from .style_transfer_pipeline import StyleTransferPipeline | from .style_transfer_pipeline import StyleTransferPipeline | ||||
| from .ocr_detection_pipeline import OCRDetectionPipeline | from .ocr_detection_pipeline import OCRDetectionPipeline | ||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'tensorflow'": | |||||
| print( | |||||
| TENSORFLOW_IMPORT_ERROR.format( | |||||
| 'image-cartoon image-matting ocr-detection style-transfer')) | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| from .virtual_tryon_pipeline import VirtualTryonPipeline | |||||
| else: | |||||
| _import_structure = { | |||||
| 'action_recognition_pipeline': ['ActionRecognitionPipeline'], | |||||
| 'animal_recog_pipeline': ['AnimalRecogPipeline'], | |||||
| 'cmdssl_video_embedding_pipleline': ['CMDSSLVideoEmbeddingPipeline'], | |||||
| 'image_color_enhance_pipeline': ['ImageColorEnhancePipeline'], | |||||
| 'virtual_tryon_pipeline': ['VirtualTryonPipeline'], | |||||
| 'image_colorization_pipeline': ['ImageColorizationPipeline'], | |||||
| 'image_super_resolution_pipeline': ['ImageSuperResolutionPipeline'], | |||||
| 'image_denoise_pipeline': ['ImageDenoisePipeline'], | |||||
| 'face_image_generation_pipeline': ['FaceImageGenerationPipeline'], | |||||
| 'image_cartoon_pipeline': ['ImageCartoonPipeline'], | |||||
| 'image_matting_pipeline': ['ImageMattingPipeline'], | |||||
| 'style_transfer_pipeline': ['StyleTransferPipeline'], | |||||
| 'ocr_detection_pipeline': ['OCRDetectionPipeline'], | |||||
| 'image_instance_segmentation_pipeline': | |||||
| ['ImageInstanceSegmentationPipeline'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -5,11 +5,11 @@ from typing import Any, Dict | |||||
| import torch | import torch | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.cv.action_recognition.models import BaseVideoModel | |||||
| from modelscope.models.cv.action_recognition import BaseVideoModel | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| from modelscope.preprocessors.video import ReadVideoData | |||||
| from modelscope.preprocessors import ReadVideoData | |||||
| from modelscope.utils.config import Config | from modelscope.utils.config import Config | ||||
| from modelscope.utils.constant import ModelFile, Tasks | from modelscope.utils.constant import ModelFile, Tasks | ||||
| from modelscope.utils.logger import get_logger | from modelscope.utils.logger import get_logger | ||||
| @@ -9,11 +9,11 @@ from torchvision import transforms | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.cv.animal_recognition import resnet | |||||
| from modelscope.models.cv.animal_recognition import Bottleneck, ResNet | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| from modelscope.preprocessors import LoadImage, load_image | |||||
| from modelscope.preprocessors import LoadImage | |||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.logger import get_logger | from modelscope.utils.logger import get_logger | ||||
| @@ -34,8 +34,8 @@ class AnimalRecogPipeline(Pipeline): | |||||
| import torch | import torch | ||||
| def resnest101(**kwargs): | def resnest101(**kwargs): | ||||
| model = resnet.ResNet( | |||||
| resnet.Bottleneck, [3, 4, 23, 3], | |||||
| model = ResNet( | |||||
| Bottleneck, [3, 4, 23, 3], | |||||
| radix=2, | radix=2, | ||||
| groups=1, | groups=1, | ||||
| bottleneck_width=64, | bottleneck_width=64, | ||||
| @@ -7,8 +7,7 @@ import torchvision.transforms.functional as TF | |||||
| from PIL import Image | from PIL import Image | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.cv.cmdssl_video_embedding.resnet2p1d import \ | |||||
| resnet26_2p1d | |||||
| from modelscope.models.cv.cmdssl_video_embedding import resnet26_2p1d | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| @@ -7,7 +7,7 @@ import PIL | |||||
| import torch | import torch | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.cv.face_generation import stylegan2 | |||||
| from modelscope.models.cv.face_generation import Generator | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| @@ -36,7 +36,7 @@ class FaceImageGenerationPipeline(Pipeline): | |||||
| self.channel_multiplier = 2 | self.channel_multiplier = 2 | ||||
| self.truncation = 0.7 | self.truncation = 0.7 | ||||
| self.truncation_mean = 4096 | self.truncation_mean = 4096 | ||||
| self.generator = stylegan2.Generator( | |||||
| self.generator = Generator( | |||||
| self.size, | self.size, | ||||
| self.latent, | self.latent, | ||||
| self.n_mlp, | self.n_mlp, | ||||
| @@ -6,10 +6,10 @@ import numpy as np | |||||
| import tensorflow as tf | import tensorflow as tf | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.cv.cartoon.facelib.facer import FaceAna | |||||
| from modelscope.models.cv.cartoon.mtcnn_pytorch.src.align_trans import ( | |||||
| get_reference_facial_points, warp_and_crop_face) | |||||
| from modelscope.models.cv.cartoon.utils import get_f5p, padTo16x, resize_size | |||||
| from modelscope.models.cv.cartoon import (FaceAna, get_f5p, | |||||
| get_reference_facial_points, | |||||
| padTo16x, resize_size, | |||||
| warp_and_crop_face) | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| @@ -5,8 +5,7 @@ from torchvision import transforms | |||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.base import Model | from modelscope.models.base import Model | ||||
| from modelscope.models.cv.image_color_enhance.image_color_enhance import \ | |||||
| ImageColorEnhance | |||||
| from modelscope.models.cv.image_color_enhance import ImageColorEnhance | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| @@ -7,8 +7,8 @@ import torch | |||||
| from torchvision import models, transforms | from torchvision import models, transforms | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.cv.image_colorization import unet | |||||
| from modelscope.models.cv.image_colorization.utils import NormType | |||||
| from modelscope.models.cv.image_colorization import (DynamicUnetDeep, | |||||
| DynamicUnetWide, NormType) | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| @@ -46,7 +46,7 @@ class ImageColorizationPipeline(Pipeline): | |||||
| if self.model_type == 'stable': | if self.model_type == 'stable': | ||||
| body = models.resnet101(pretrained=True) | body = models.resnet101(pretrained=True) | ||||
| body = torch.nn.Sequential(*list(body.children())[:self.cut]) | body = torch.nn.Sequential(*list(body.children())[:self.cut]) | ||||
| self.model = unet.DynamicUnetWide( | |||||
| self.model = DynamicUnetWide( | |||||
| body, | body, | ||||
| n_classes=3, | n_classes=3, | ||||
| blur=True, | blur=True, | ||||
| @@ -61,7 +61,7 @@ class ImageColorizationPipeline(Pipeline): | |||||
| else: | else: | ||||
| body = models.resnet34(pretrained=True) | body = models.resnet34(pretrained=True) | ||||
| body = torch.nn.Sequential(*list(body.children())[:cut]) | body = torch.nn.Sequential(*list(body.children())[:cut]) | ||||
| model = unet.DynamicUnetDeep( | |||||
| model = DynamicUnetDeep( | |||||
| body, | body, | ||||
| n_classes=3, | n_classes=3, | ||||
| blur=True, | blur=True, | ||||
| @@ -84,7 +84,7 @@ class ImageColorizationPipeline(Pipeline): | |||||
| def preprocess(self, input: Input) -> Dict[str, Any]: | def preprocess(self, input: Input) -> Dict[str, Any]: | ||||
| if isinstance(input, str): | if isinstance(input, str): | ||||
| img = load_image(input).convert('LA').convert('RGB') | img = load_image(input).convert('LA').convert('RGB') | ||||
| elif isinstance(input, PIL.Image.Image): | |||||
| elif isinstance(input, Image.Image): | |||||
| img = input.convert('LA').convert('RGB') | img = input.convert('LA').convert('RGB') | ||||
| elif isinstance(input, np.ndarray): | elif isinstance(input, np.ndarray): | ||||
| if len(input.shape) == 2: | if len(input.shape) == 2: | ||||
| @@ -5,7 +5,7 @@ from torchvision import transforms | |||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.cv import NAFNetForImageDenoise | |||||
| from modelscope.models.cv.image_denoise import NAFNetForImageDenoise | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| @@ -7,10 +7,8 @@ import torch | |||||
| from PIL import Image | from PIL import Image | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.cv.image_instance_segmentation.model import \ | |||||
| CascadeMaskRCNNSwinModel | |||||
| from modelscope.models.cv.image_instance_segmentation.postprocess_utils import \ | |||||
| get_img_ins_seg_result | |||||
| from modelscope.models.cv.image_instance_segmentation import ( | |||||
| CascadeMaskRCNNSwinModel, get_img_ins_seg_result) | |||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| from modelscope.preprocessors import (ImageInstanceSegmentationPreprocessor, | from modelscope.preprocessors import (ImageInstanceSegmentationPreprocessor, | ||||
| @@ -6,11 +6,11 @@ import PIL | |||||
| import torch | import torch | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.cv.super_resolution import rrdbnet_arch | |||||
| from modelscope.models.cv.super_resolution import RRDBNet | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Input, Pipeline | from modelscope.pipelines.base import Input, Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| from modelscope.preprocessors import LoadImage, load_image | |||||
| from modelscope.preprocessors import LoadImage | |||||
| from modelscope.utils.constant import ModelFile, Tasks | from modelscope.utils.constant import ModelFile, Tasks | ||||
| from modelscope.utils.logger import get_logger | from modelscope.utils.logger import get_logger | ||||
| @@ -32,7 +32,7 @@ class ImageSuperResolutionPipeline(Pipeline): | |||||
| self.num_feat = 64 | self.num_feat = 64 | ||||
| self.num_block = 23 | self.num_block = 23 | ||||
| self.scale = 4 | self.scale = 4 | ||||
| self.sr_model = rrdbnet_arch.RRDBNet( | |||||
| self.sr_model = RRDBNet( | |||||
| num_in_ch=3, | num_in_ch=3, | ||||
| num_out_ch=3, | num_out_ch=3, | ||||
| num_feat=self.num_feat, | num_feat=self.num_feat, | ||||
| @@ -12,7 +12,9 @@ from modelscope.pipelines.builder import PIPELINES | |||||
| from modelscope.preprocessors import LoadImage | from modelscope.preprocessors import LoadImage | ||||
| from modelscope.utils.constant import ModelFile, Tasks | from modelscope.utils.constant import ModelFile, Tasks | ||||
| from modelscope.utils.logger import get_logger | from modelscope.utils.logger import get_logger | ||||
| from .ocr_utils import model_resnet_mutex_v4_linewithchar, ops, utils | |||||
| from .ocr_utils import (SegLinkDetector, cal_width, combine_segments_python, | |||||
| decode_segments_links_python, nms_python, | |||||
| rboxes_to_polygons) | |||||
| if tf.__version__ >= '2.0': | if tf.__version__ >= '2.0': | ||||
| tf = tf.compat.v1 | tf = tf.compat.v1 | ||||
| @@ -66,7 +68,7 @@ class OCRDetectionPipeline(Pipeline): | |||||
| 0.997, global_step) | 0.997, global_step) | ||||
| # detector | # detector | ||||
| detector = model_resnet_mutex_v4_linewithchar.SegLinkDetector() | |||||
| detector = SegLinkDetector() | |||||
| all_maps = detector.build_model( | all_maps = detector.build_model( | ||||
| self.input_images, is_training=False) | self.input_images, is_training=False) | ||||
| @@ -90,7 +92,7 @@ class OCRDetectionPipeline(Pipeline): | |||||
| # decode segments and links | # decode segments and links | ||||
| image_size = tf.shape(self.input_images)[1:3] | image_size = tf.shape(self.input_images)[1:3] | ||||
| segments, group_indices, segment_counts, _ = ops.decode_segments_links_python( | |||||
| segments, group_indices, segment_counts, _ = decode_segments_links_python( | |||||
| image_size, | image_size, | ||||
| all_nodes, | all_nodes, | ||||
| all_links, | all_links, | ||||
| @@ -98,7 +100,7 @@ class OCRDetectionPipeline(Pipeline): | |||||
| anchor_sizes=list(detector.anchor_sizes)) | anchor_sizes=list(detector.anchor_sizes)) | ||||
| # combine segments | # combine segments | ||||
| combined_rboxes, combined_counts = ops.combine_segments_python( | |||||
| combined_rboxes, combined_counts = combine_segments_python( | |||||
| segments, group_indices, segment_counts) | segments, group_indices, segment_counts) | ||||
| self.output['combined_rboxes'] = combined_rboxes | self.output['combined_rboxes'] = combined_rboxes | ||||
| self.output['combined_counts'] = combined_counts | self.output['combined_counts'] = combined_counts | ||||
| @@ -145,7 +147,7 @@ class OCRDetectionPipeline(Pipeline): | |||||
| # convert rboxes to polygons and find its coordinates on the original image | # convert rboxes to polygons and find its coordinates on the original image | ||||
| orig_h, orig_w = inputs['orig_size'] | orig_h, orig_w = inputs['orig_size'] | ||||
| resize_h, resize_w = inputs['resize_size'] | resize_h, resize_w = inputs['resize_size'] | ||||
| polygons = utils.rboxes_to_polygons(rboxes) | |||||
| polygons = rboxes_to_polygons(rboxes) | |||||
| scale_y = float(orig_h) / float(resize_h) | scale_y = float(orig_h) / float(resize_h) | ||||
| scale_x = float(orig_w) / float(resize_w) | scale_x = float(orig_w) / float(resize_w) | ||||
| @@ -157,8 +159,8 @@ class OCRDetectionPipeline(Pipeline): | |||||
| polygons = np.round(polygons).astype(np.int32) | polygons = np.round(polygons).astype(np.int32) | ||||
| # nms | # nms | ||||
| dt_n9 = [o + [utils.cal_width(o)] for o in polygons.tolist()] | |||||
| dt_nms = utils.nms_python(dt_n9) | |||||
| dt_n9 = [o + [cal_width(o)] for o in polygons.tolist()] | |||||
| dt_nms = nms_python(dt_n9) | |||||
| dt_polygons = np.array([o[:8] for o in dt_nms]) | dt_polygons = np.array([o[:8] for o in dt_nms]) | ||||
| result = {OutputKeys.POLYGONS: dt_polygons} | result = {OutputKeys.POLYGONS: dt_polygons} | ||||
| @@ -0,0 +1,25 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .model_resnet_mutex_v4_linewithchar import SegLinkDetector | |||||
| from .ops import decode_segments_links_python, combine_segments_python | |||||
| from .utils import rboxes_to_polygons, cal_width, nms_python | |||||
| else: | |||||
| _import_structure = { | |||||
| 'model_resnet_mutex_v4_linewithchar': ['SegLinkDetector'], | |||||
| 'ops': ['decode_segments_links_python', 'combine_segments_python'], | |||||
| 'utils': ['rboxes_to_polygons', 'cal_width', 'nms_python'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -11,7 +11,7 @@ from PIL import Image | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models.cv.virual_tryon.sdafnet import SDAFNet_Tryon | |||||
| from modelscope.models.cv.virual_tryon import SDAFNet_Tryon | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Pipeline | from modelscope.pipelines.base import Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| @@ -1,14 +1,36 @@ | |||||
| try: | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .generative_multi_modal_embedding_pipeline import GEMMMultiModalEmbeddingPipeline | |||||
| from .image_captioning_pipeline import ImageCaptionPipeline | from .image_captioning_pipeline import ImageCaptionPipeline | ||||
| from .multi_modal_embedding_pipeline import MultiModalEmbeddingPipeline | from .multi_modal_embedding_pipeline import MultiModalEmbeddingPipeline | ||||
| from .generative_multi_modal_embedding_pipeline import GEMMMultiModalEmbeddingPipeline | |||||
| from .text_to_image_synthesis_pipeline import TextToImageSynthesisPipeline | from .text_to_image_synthesis_pipeline import TextToImageSynthesisPipeline | ||||
| from .video_multi_modal_embedding_pipeline import \ | from .video_multi_modal_embedding_pipeline import \ | ||||
| VideoMultiModalEmbeddingPipeline | VideoMultiModalEmbeddingPipeline | ||||
| from .visual_question_answering_pipeline import \ | |||||
| VisualQuestionAnsweringPipeline | |||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'torch'": | |||||
| pass | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| from .visual_question_answering_pipeline import VisualQuestionAnsweringPipeline | |||||
| else: | |||||
| _import_structure = { | |||||
| 'image_captioning_pipeline': ['ImageCaptionPipeline'], | |||||
| 'multi_modal_embedding_pipeline': ['MultiModalEmbeddingPipeline'], | |||||
| 'text_to_image_synthesis_pipeline': ['TextToImageSynthesisPipeline'], | |||||
| 'visual_question_answering_pipeline': | |||||
| ['VisualQuestionAnsweringPipeline'], | |||||
| 'video_multi_modal_embedding_pipeline': | |||||
| ['VideoMultiModalEmbeddingPipeline'], | |||||
| 'generative_multi_modal_embedding_pipeline': | |||||
| ['GEMMMultiModalEmbeddingPipeline'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1,30 +1,50 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | # Copyright (c) Alibaba, Inc. and its affiliates. | ||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.error import TENSORFLOW_IMPORT_WARNING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| try: | |||||
| from .translation_pipeline import * # noqa F403 | |||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'tensorflow'": | |||||
| print(TENSORFLOW_IMPORT_WARNING.format('translation')) | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| if TYPE_CHECKING: | |||||
| from .dialog_intent_prediction_pipeline import DialogIntentPredictionPipeline | |||||
| from .dialog_modeling_pipeline import DialogModelingPipeline | |||||
| from .dialog_state_tracking_pipeline import DialogStateTrackingPipeline | |||||
| from .fill_mask_pipeline import FillMaskPipeline | |||||
| from .named_entity_recognition_pipeline import NamedEntityRecognitionPipeline | |||||
| from .nli_pipeline import NLIPipeline | |||||
| from .sentence_similarity_pipeline import SentenceSimilarityPipeline | |||||
| from .sentiment_classification_pipeline import SentimentClassificationPipeline | |||||
| from .sequence_classification_pipeline import SequenceClassificationPipeline | |||||
| from .text_generation_pipeline import TextGenerationPipeline | |||||
| from .translation_pipeline import TranslationPipeline | |||||
| from .word_segmentation_pipeline import WordSegmentationPipeline | |||||
| from .zero_shot_classification_pipeline import ZeroShotClassificationPipeline | |||||
| try: | |||||
| from .dialog_intent_prediction_pipeline import * # noqa F403 | |||||
| from .dialog_modeling_pipeline import * # noqa F403 | |||||
| from .dialog_state_tracking_pipeline import * # noqa F403 | |||||
| from .fill_mask_pipeline import * # noqa F403 | |||||
| from .named_entity_recognition_pipeline import * # noqa F403 | |||||
| from .nli_pipeline import * # noqa F403 | |||||
| from .sentence_similarity_pipeline import * # noqa F403 | |||||
| from .sentiment_classification_pipeline import * # noqa F403 | |||||
| from .sequence_classification_pipeline import * # noqa F403 | |||||
| from .text_generation_pipeline import * # noqa F403 | |||||
| from .word_segmentation_pipeline import * # noqa F403 | |||||
| from .zero_shot_classification_pipeline import * # noqa F403 | |||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'torch'": | |||||
| pass | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| else: | |||||
| _import_structure = { | |||||
| 'dialog_intent_prediction_pipeline': | |||||
| ['DialogIntentPredictionPipeline'], | |||||
| 'dialog_modeling_pipeline': ['DialogModelingPipeline'], | |||||
| 'dialog_state_tracking_pipeline': ['DialogStateTrackingPipeline'], | |||||
| 'fill_mask_pipeline': ['FillMaskPipeline'], | |||||
| 'nli_pipeline': ['NLIPipeline'], | |||||
| 'sentence_similarity_pipeline': ['SentenceSimilarityPipeline'], | |||||
| 'sentiment_classification_pipeline': | |||||
| ['SentimentClassificationPipeline'], | |||||
| 'sequence_classification_pipeline': ['SequenceClassificationPipeline'], | |||||
| 'text_generation_pipeline': ['TextGenerationPipeline'], | |||||
| 'word_segmentation_pipeline': ['WordSegmentationPipeline'], | |||||
| 'zero_shot_classification_pipeline': | |||||
| ['ZeroShotClassificationPipeline'], | |||||
| 'named_entity_recognition_pipeline': | |||||
| ['NamedEntityRecognitionPipeline'], | |||||
| 'translation_pipeline': ['TranslationPipeline'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -1,7 +1,8 @@ | |||||
| from typing import Any, Dict, Union | from typing import Any, Dict, Union | ||||
| from modelscope.metainfo import Pipelines | from modelscope.metainfo import Pipelines | ||||
| from modelscope.models import Model, SpaceForDialogStateTracking | |||||
| from modelscope.models import Model | |||||
| from modelscope.models.nlp import SpaceForDialogStateTracking | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines.base import Pipeline | from modelscope.pipelines.base import Pipeline | ||||
| from modelscope.pipelines.builder import PIPELINES | from modelscope.pipelines.builder import PIPELINES | ||||
| @@ -1,29 +1,67 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | # Copyright (c) Alibaba, Inc. and its affiliates. | ||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.error import AUDIO_IMPORT_ERROR, TENSORFLOW_IMPORT_ERROR | |||||
| from .asr import WavToScp | |||||
| from .base import Preprocessor | |||||
| from .builder import PREPROCESSORS, build_preprocessor | |||||
| from .common import Compose | |||||
| from .image import LoadImage, load_image | |||||
| from .kws import WavToLists | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| try: | |||||
| if TYPE_CHECKING: | |||||
| from .base import Preprocessor | |||||
| from .builder import PREPROCESSORS, build_preprocessor | |||||
| from .common import Compose | |||||
| from .asr import WavToScp | |||||
| from .audio import LinearAECAndFbank | from .audio import LinearAECAndFbank | ||||
| except ModuleNotFoundError as e: | |||||
| print(AUDIO_IMPORT_ERROR.format(e)) | |||||
| from .image import (LoadImage, load_image, | |||||
| ImageColorEnhanceFinetunePreprocessor, | |||||
| ImageInstanceSegmentationPreprocessor, | |||||
| ImageDenoisePreprocessor) | |||||
| from .kws import WavToLists | |||||
| from .multi_modal import (OfaImageCaptionPreprocessor, | |||||
| MPlugVisualQuestionAnsweringPreprocessor) | |||||
| from .nlp import (Tokenize, SequenceClassificationPreprocessor, | |||||
| TextGenerationPreprocessor, | |||||
| TokenClassificationPreprocessor, NLIPreprocessor, | |||||
| SentimentClassificationPreprocessor, | |||||
| SentenceSimilarityPreprocessor, FillMaskPreprocessor, | |||||
| ZeroShotClassificationPreprocessor, NERPreprocessor) | |||||
| from .space import (DialogIntentPredictionPreprocessor, | |||||
| DialogModelingPreprocessor, | |||||
| DialogStateTrackingPreprocessor) | |||||
| from .video import ReadVideoData | |||||
| try: | |||||
| from .multi_modal import * # noqa F403 | |||||
| from .nlp import * # noqa F403 | |||||
| from .space.dialog_intent_prediction_preprocessor import * # noqa F403 | |||||
| from .space.dialog_modeling_preprocessor import * # noqa F403 | |||||
| from .space.dialog_state_tracking_preprocessor import * # noqa F403 | |||||
| from .image import ImageColorEnhanceFinetunePreprocessor | |||||
| from .image import ImageInstanceSegmentationPreprocessor | |||||
| from .image import ImageDenoisePreprocessor | |||||
| except ModuleNotFoundError as e: | |||||
| if str(e) == "No module named 'tensorflow'": | |||||
| print(TENSORFLOW_IMPORT_ERROR.format('tts')) | |||||
| else: | |||||
| raise ModuleNotFoundError(e) | |||||
| else: | |||||
| _import_structure = { | |||||
| 'base': ['Preprocessor'], | |||||
| 'builder': ['PREPROCESSORS', 'build_preprocessor'], | |||||
| 'common': ['Compose'], | |||||
| 'asr': ['WavToScp'], | |||||
| 'video': ['ReadVideoData'], | |||||
| 'image': [ | |||||
| 'LoadImage', 'load_image', 'ImageColorEnhanceFinetunePreprocessor', | |||||
| 'ImageInstanceSegmentationPreprocessor', 'ImageDenoisePreprocessor' | |||||
| ], | |||||
| 'kws': ['WavToLists'], | |||||
| 'multi_modal': [ | |||||
| 'OfaImageCaptionPreprocessor', | |||||
| 'MPlugVisualQuestionAnsweringPreprocessor' | |||||
| ], | |||||
| 'nlp': [ | |||||
| 'Tokenize', 'SequenceClassificationPreprocessor', | |||||
| 'TextGenerationPreprocessor', 'TokenClassificationPreprocessor', | |||||
| 'NLIPreprocessor', 'SentimentClassificationPreprocessor', | |||||
| 'SentenceSimilarityPreprocessor', 'FillMaskPreprocessor', | |||||
| 'ZeroShotClassificationPreprocessor', 'NERPreprocessor' | |||||
| ], | |||||
| 'space': [ | |||||
| 'DialogIntentPredictionPreprocessor', 'DialogModelingPreprocessor', | |||||
| 'DialogStateTrackingPreprocessor', 'InputFeatures' | |||||
| ], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,33 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| if TYPE_CHECKING: | |||||
| from .dialog_intent_prediction_preprocessor import \ | |||||
| DialogIntentPredictionPreprocessor | |||||
| from .dialog_modeling_preprocessor import DialogModelingPreprocessor | |||||
| from .dialog_state_tracking_preprocessor import DialogStateTrackingPreprocessor | |||||
| from .dst_processors import InputFeatures | |||||
| from .fields import MultiWOZBPETextField, IntentBPETextField | |||||
| else: | |||||
| _import_structure = { | |||||
| 'dialog_intent_prediction_preprocessor': | |||||
| ['DialogIntentPredictionPreprocessor'], | |||||
| 'dialog_modeling_preprocessor': ['DialogModelingPreprocessor'], | |||||
| 'dialog_state_tracking_preprocessor': | |||||
| ['DialogStateTrackingPreprocessor'], | |||||
| 'dst_processors': ['InputFeatures'], | |||||
| 'fields': ['MultiWOZBPETextField', 'IntentBPETextField'] | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,2 @@ | |||||
| from .gen_field import MultiWOZBPETextField | |||||
| from .intent_field import IntentBPETextField | |||||
| @@ -1,3 +1,25 @@ | |||||
| from .base import TaskDataset | |||||
| from .builder import build_task_dataset | |||||
| from .torch_base_dataset import TorchTaskDataset | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from typing import TYPE_CHECKING | |||||
| from modelscope.utils.import_utils import LazyImportModule, is_torch_available | |||||
| if TYPE_CHECKING: | |||||
| from .base import TaskDataset | |||||
| from .builder import TASK_DATASETS, build_task_dataset | |||||
| from .torch_base_dataset import TorchTaskDataset | |||||
| else: | |||||
| _import_structure = { | |||||
| 'base': ['TaskDataset'], | |||||
| 'builder': ['TASK_DATASETS', 'build_task_dataset'], | |||||
| 'torch_base_dataset': ['TorchTaskDataset'], | |||||
| } | |||||
| import sys | |||||
| sys.modules[__name__] = LazyImportModule( | |||||
| __name__, | |||||
| globals()['__file__'], | |||||
| _import_structure, | |||||
| module_spec=__spec__, | |||||
| extra_objects={}, | |||||
| ) | |||||
| @@ -0,0 +1,598 @@ | |||||
| import ast | |||||
| import contextlib | |||||
| import hashlib | |||||
| import importlib | |||||
| import os | |||||
| import os.path as osp | |||||
| import time | |||||
| from functools import reduce | |||||
| from typing import Generator, Union | |||||
| import gast | |||||
| import json | |||||
| from modelscope import __version__ | |||||
| from modelscope.fileio.file import LocalStorage | |||||
| from modelscope.metainfo import (Heads, Metrics, Models, Pipelines, | |||||
| Preprocessors, TaskModels, Trainers) | |||||
| from modelscope.utils.constant import Fields, Tasks | |||||
| from modelscope.utils.logger import get_logger | |||||
| from modelscope.utils.registry import default_group | |||||
| from modelscope.utils.utils import get_default_cache_dir | |||||
| logger = get_logger() | |||||
| storage = LocalStorage() | |||||
| # get the path of package 'modelscope' | |||||
| MODELSCOPE_PATH = '/'.join(os.path.dirname(__file__).split('/')[:-1]) | |||||
| REGISTER_MODULE = 'register_module' | |||||
| IGNORED_PACKAGES = ['modelscope', '.'] | |||||
| SCAN_SUB_FOLDERS = [ | |||||
| 'models', 'metrics', 'pipelines', 'preprocessors', 'task_datasets' | |||||
| ] | |||||
| INDEXER_FILE = 'ast_indexer' | |||||
| DECORATOR_KEY = 'decorators' | |||||
| FROM_IMPORT_KEY = 'from_imports' | |||||
| IMPORT_KEY = 'imports' | |||||
| FILE_NAME_KEY = 'filepath' | |||||
| VERSION_KEY = 'version' | |||||
| MD5_KEY = 'md5' | |||||
| INDEX_KEY = 'index' | |||||
| REQUIREMENT_KEY = 'requirements' | |||||
| MODULE_KEY = 'module' | |||||
| class AstScaning(object): | |||||
| def __init__(self) -> None: | |||||
| self.result_import = dict() | |||||
| self.result_from_import = dict() | |||||
| self.result_decorator = [] | |||||
| def _is_sub_node(self, node: object) -> bool: | |||||
| return isinstance(node, | |||||
| ast.AST) and not isinstance(node, ast.expr_context) | |||||
| def _is_leaf(self, node: ast.AST) -> bool: | |||||
| for field in node._fields: | |||||
| attr = getattr(node, field) | |||||
| if self._is_sub_node(attr): | |||||
| return False | |||||
| elif isinstance(attr, (list, tuple)): | |||||
| for val in attr: | |||||
| if self._is_sub_node(val): | |||||
| return False | |||||
| else: | |||||
| return True | |||||
| def _fields(self, n: ast.AST, show_offsets: bool = True) -> tuple: | |||||
| if show_offsets: | |||||
| return n._attributes + n._fields | |||||
| else: | |||||
| return n._fields | |||||
| def _leaf(self, node: ast.AST, show_offsets: bool = True) -> str: | |||||
| output = dict() | |||||
| local_print = list() | |||||
| if isinstance(node, ast.AST): | |||||
| local_dict = dict() | |||||
| for field in self._fields(node, show_offsets=show_offsets): | |||||
| field_output, field_prints = self._leaf( | |||||
| getattr(node, field), show_offsets=show_offsets) | |||||
| local_dict[field] = field_output | |||||
| local_print.append('{}={}'.format(field, field_prints)) | |||||
| prints = '{}({})'.format( | |||||
| type(node).__name__, | |||||
| ', '.join(local_print), | |||||
| ) | |||||
| output[type(node).__name__] = local_dict | |||||
| return output, prints | |||||
| elif isinstance(node, list): | |||||
| if '_fields' not in node: | |||||
| return node, repr(node) | |||||
| for item in node: | |||||
| item_output, item_prints = self._leaf( | |||||
| getattr(node, item), show_offsets=show_offsets) | |||||
| local_print.append(item_prints) | |||||
| return node, '[{}]'.format(', '.join(local_print), ) | |||||
| else: | |||||
| return node, repr(node) | |||||
| def _refresh(self): | |||||
| self.result_import = dict() | |||||
| self.result_from_import = dict() | |||||
| self.result_decorator = [] | |||||
| def scan_ast(self, node: Union[ast.AST, None, str]): | |||||
| self._setup_global() | |||||
| self.scan_import(node, indent=' ', show_offsets=False) | |||||
| def scan_import( | |||||
| self, | |||||
| node: Union[ast.AST, None, str], | |||||
| indent: Union[str, int] = ' ', | |||||
| show_offsets: bool = True, | |||||
| _indent: int = 0, | |||||
| parent_node_name: str = '', | |||||
| ) -> tuple: | |||||
| if node is None: | |||||
| return node, repr(node) | |||||
| elif self._is_leaf(node): | |||||
| return self._leaf(node, show_offsets=show_offsets) | |||||
| else: | |||||
| if isinstance(indent, int): | |||||
| indent_s = indent * ' ' | |||||
| else: | |||||
| indent_s = indent | |||||
| class state: | |||||
| indent = _indent | |||||
| @contextlib.contextmanager | |||||
| def indented() -> Generator[None, None, None]: | |||||
| state.indent += 1 | |||||
| yield | |||||
| state.indent -= 1 | |||||
| def indentstr() -> str: | |||||
| return state.indent * indent_s | |||||
| def _scan_import(el: Union[ast.AST, None, str], | |||||
| _indent: int = 0, | |||||
| parent_node_name: str = '') -> str: | |||||
| return self.scan_import( | |||||
| el, | |||||
| indent=indent, | |||||
| show_offsets=show_offsets, | |||||
| _indent=_indent, | |||||
| parent_node_name=parent_node_name) | |||||
| out = type(node).__name__ + '(\n' | |||||
| outputs = dict() | |||||
| # add relative path expression | |||||
| if type(node).__name__ == 'ImportFrom': | |||||
| level = getattr(node, 'level') | |||||
| if level >= 1: | |||||
| path_level = ''.join(['.'] * level) | |||||
| setattr(node, 'level', 0) | |||||
| module_name = getattr(node, 'module') | |||||
| if module_name is None: | |||||
| setattr(node, 'module', path_level) | |||||
| else: | |||||
| setattr(node, 'module', path_level + module_name) | |||||
| with indented(): | |||||
| for field in self._fields(node, show_offsets=show_offsets): | |||||
| attr = getattr(node, field) | |||||
| if attr == []: | |||||
| representation = '[]' | |||||
| outputs[field] = [] | |||||
| elif (isinstance(attr, list) and len(attr) == 1 | |||||
| and isinstance(attr[0], ast.AST) | |||||
| and self._is_leaf(attr[0])): | |||||
| local_out, local_print = _scan_import(attr[0]) | |||||
| representation = f'[{local_print}]' | |||||
| outputs[field] = local_out | |||||
| elif isinstance(attr, list): | |||||
| representation = '[\n' | |||||
| el_dict = dict() | |||||
| with indented(): | |||||
| for el in attr: | |||||
| local_out, local_print = _scan_import( | |||||
| el, state.indent, | |||||
| type(el).__name__) | |||||
| representation += '{}{},\n'.format( | |||||
| indentstr(), | |||||
| local_print, | |||||
| ) | |||||
| name = type(el).__name__ | |||||
| if (name == 'Import' or name == 'ImportFrom' | |||||
| or parent_node_name == 'ImportFrom'): | |||||
| if name not in el_dict: | |||||
| el_dict[name] = [] | |||||
| el_dict[name].append(local_out) | |||||
| representation += indentstr() + ']' | |||||
| outputs[field] = el_dict | |||||
| elif isinstance(attr, ast.AST): | |||||
| output, representation = _scan_import( | |||||
| attr, state.indent) | |||||
| outputs[field] = output | |||||
| else: | |||||
| representation = repr(attr) | |||||
| outputs[field] = attr | |||||
| if (type(node).__name__ == 'Import' | |||||
| or type(node).__name__ == 'ImportFrom'): | |||||
| if type(node).__name__ == 'ImportFrom': | |||||
| if field == 'module': | |||||
| self.result_from_import[ | |||||
| outputs[field]] = dict() | |||||
| if field == 'names': | |||||
| if isinstance(outputs[field]['alias'], list): | |||||
| item_name = [] | |||||
| for item in outputs[field]['alias']: | |||||
| local_name = item['alias']['name'] | |||||
| item_name.append(local_name) | |||||
| self.result_from_import[ | |||||
| outputs['module']] = item_name | |||||
| else: | |||||
| local_name = outputs[field]['alias'][ | |||||
| 'name'] | |||||
| self.result_from_import[ | |||||
| outputs['module']] = [local_name] | |||||
| if type(node).__name__ == 'Import': | |||||
| final_dict = outputs[field]['alias'] | |||||
| self.result_import[outputs[field]['alias'] | |||||
| ['name']] = final_dict | |||||
| if 'decorator_list' == field and attr != []: | |||||
| self.result_decorator.extend(attr) | |||||
| out += f'{indentstr()}{field}={representation},\n' | |||||
| out += indentstr() + ')' | |||||
| return { | |||||
| IMPORT_KEY: self.result_import, | |||||
| FROM_IMPORT_KEY: self.result_from_import, | |||||
| DECORATOR_KEY: self.result_decorator | |||||
| }, out | |||||
| def _parse_decorator(self, node: ast.AST) -> tuple: | |||||
| def _get_attribute_item(node: ast.AST) -> tuple: | |||||
| value, id, attr = None, None, None | |||||
| if type(node).__name__ == 'Attribute': | |||||
| value = getattr(node, 'value') | |||||
| id = getattr(value, 'id') | |||||
| attr = getattr(node, 'attr') | |||||
| if type(node).__name__ == 'Name': | |||||
| id = getattr(node, 'id') | |||||
| return id, attr | |||||
| def _get_args_name(nodes: list) -> list: | |||||
| result = [] | |||||
| for node in nodes: | |||||
| result.append(_get_attribute_item(node)) | |||||
| return result | |||||
| def _get_keyword_name(nodes: ast.AST) -> list: | |||||
| result = [] | |||||
| for node in nodes: | |||||
| if type(node).__name__ == 'keyword': | |||||
| attribute_node = getattr(node, 'value') | |||||
| if type(attribute_node).__name__ == 'Str': | |||||
| result.append((attribute_node.s, None)) | |||||
| else: | |||||
| result.append(_get_attribute_item(attribute_node)) | |||||
| return result | |||||
| functions = _get_attribute_item(node.func) | |||||
| args_list = _get_args_name(node.args) | |||||
| keyword_list = _get_keyword_name(node.keywords) | |||||
| return functions, args_list, keyword_list | |||||
| def _get_registry_value(self, key_item): | |||||
| if key_item is None: | |||||
| return None | |||||
| if key_item == 'default_group': | |||||
| return default_group | |||||
| split_list = key_item.split('.') | |||||
| # in the case, the key_item is raw data, not registred | |||||
| if len(split_list) == 1: | |||||
| return key_item | |||||
| else: | |||||
| return getattr(eval(split_list[0]), split_list[1]) | |||||
| def _registry_indexer(self, parsed_input: tuple) -> tuple: | |||||
| """format registry information to a tuple indexer | |||||
| Return: | |||||
| tuple: (MODELS, Tasks.text-classification, Models.structbert) | |||||
| """ | |||||
| functions, args_list, keyword_list = parsed_input | |||||
| # ignore decocators other than register_module | |||||
| if REGISTER_MODULE != functions[1]: | |||||
| return None | |||||
| output = [functions[0]] | |||||
| if len(args_list) == 0 and len(keyword_list) == 0: | |||||
| args_list.append(None) | |||||
| if len(keyword_list) == 0 and len(args_list) == 1: | |||||
| args_list.append(None) | |||||
| args_list.extend(keyword_list) | |||||
| for item in args_list: | |||||
| # the case empty input | |||||
| if item is None: | |||||
| output.append(None) | |||||
| # the case (default_group) | |||||
| elif item[1] is None: | |||||
| output.append(item[0]) | |||||
| else: | |||||
| output.append('.'.join(item)) | |||||
| return (output[0], self._get_registry_value(output[1]), | |||||
| self._get_registry_value(output[2])) | |||||
| def parse_decorators(self, nodes: list) -> list: | |||||
| """parse the AST nodes of decorators object to registry indexer | |||||
| Args: | |||||
| nodes (list): list of AST decorator nodes | |||||
| Returns: | |||||
| list: list of registry indexer | |||||
| """ | |||||
| results = [] | |||||
| for node in nodes: | |||||
| if type(node).__name__ != 'Call': | |||||
| continue | |||||
| parse_output = self._parse_decorator(node) | |||||
| index = self._registry_indexer(parse_output) | |||||
| if None is not index: | |||||
| results.append(index) | |||||
| return results | |||||
| def generate_ast(self, file): | |||||
| self._refresh() | |||||
| with open(file, 'r') as code: | |||||
| data = code.readlines() | |||||
| data = ''.join(data) | |||||
| node = gast.parse(data) | |||||
| output, _ = self.scan_import(node, indent=' ', show_offsets=False) | |||||
| output[DECORATOR_KEY] = self.parse_decorators(output[DECORATOR_KEY]) | |||||
| return output | |||||
| class FilesAstScaning(object): | |||||
| def __init__(self) -> None: | |||||
| self.astScaner = AstScaning() | |||||
| self.file_dirs = [] | |||||
| def _parse_import_path(self, | |||||
| import_package: str, | |||||
| current_path: str = None) -> str: | |||||
| """ | |||||
| Args: | |||||
| import_package (str): relative import or abs import | |||||
| current_path (str): path/to/current/file | |||||
| """ | |||||
| if import_package.startswith(IGNORED_PACKAGES[0]): | |||||
| return MODELSCOPE_PATH + '/' + '/'.join( | |||||
| import_package.split('.')[1:]) + '.py' | |||||
| elif import_package.startswith(IGNORED_PACKAGES[1]): | |||||
| current_path_list = current_path.split('/') | |||||
| import_package_list = import_package.split('.') | |||||
| level = 0 | |||||
| for index, item in enumerate(import_package_list): | |||||
| if item != '': | |||||
| level = index | |||||
| break | |||||
| abs_path_list = current_path_list[0:-level] | |||||
| abs_path_list.extend(import_package_list[index:]) | |||||
| return '/' + '/'.join(abs_path_list) + '.py' | |||||
| else: | |||||
| return current_path | |||||
| def _traversal_import( | |||||
| self, | |||||
| import_abs_path, | |||||
| ): | |||||
| pass | |||||
| def parse_import(self, scan_result: dict) -> list: | |||||
| """parse import and from import dicts to a third party package list | |||||
| Args: | |||||
| scan_result (dict): including the import and from import result | |||||
| Returns: | |||||
| list: a list of package ignored 'modelscope' and relative path import | |||||
| """ | |||||
| output = [] | |||||
| output.extend(list(scan_result[IMPORT_KEY].keys())) | |||||
| output.extend(list(scan_result[FROM_IMPORT_KEY].keys())) | |||||
| # get the package name | |||||
| for index, item in enumerate(output): | |||||
| if '' == item.split('.')[0]: | |||||
| output[index] = '.' | |||||
| else: | |||||
| output[index] = item.split('.')[0] | |||||
| ignored = set() | |||||
| for item in output: | |||||
| for ignored_package in IGNORED_PACKAGES: | |||||
| if item.startswith(ignored_package): | |||||
| ignored.add(item) | |||||
| return list(set(output) - set(ignored)) | |||||
| def traversal_files(self, path, check_sub_dir): | |||||
| self.file_dirs = [] | |||||
| if check_sub_dir is None or len(check_sub_dir) == 0: | |||||
| self._traversal_files(path) | |||||
| for item in check_sub_dir: | |||||
| sub_dir = os.path.join(path, item) | |||||
| if os.path.isdir(sub_dir): | |||||
| self._traversal_files(sub_dir) | |||||
| def _traversal_files(self, path): | |||||
| dir_list = os.scandir(path) | |||||
| for item in dir_list: | |||||
| if item.name.startswith('__'): | |||||
| continue | |||||
| if item.is_dir(): | |||||
| self._traversal_files(item.path) | |||||
| elif item.is_file() and item.name.endswith('.py'): | |||||
| self.file_dirs.append(item.path) | |||||
| def _get_single_file_scan_result(self, file): | |||||
| output = self.astScaner.generate_ast(file) | |||||
| import_list = self.parse_import(output) | |||||
| return output[DECORATOR_KEY], import_list | |||||
| def _inverted_index(self, forward_index): | |||||
| inverted_index = dict() | |||||
| for index in forward_index: | |||||
| for item in forward_index[index][DECORATOR_KEY]: | |||||
| inverted_index[item] = { | |||||
| FILE_NAME_KEY: index, | |||||
| IMPORT_KEY: forward_index[index][IMPORT_KEY], | |||||
| MODULE_KEY: forward_index[index][MODULE_KEY], | |||||
| } | |||||
| return inverted_index | |||||
| def _module_import(self, forward_index): | |||||
| module_import = dict() | |||||
| for index, value_dict in forward_index.items(): | |||||
| module_import[value_dict[MODULE_KEY]] = value_dict[IMPORT_KEY] | |||||
| return module_import | |||||
| def get_files_scan_results(self, | |||||
| target_dir=MODELSCOPE_PATH, | |||||
| target_folders=SCAN_SUB_FOLDERS): | |||||
| """the entry method of the ast scan method | |||||
| Args: | |||||
| target_dir (str, optional): the absolute path of the target directory to be scaned. Defaults to None. | |||||
| target_folder (list, optional): the list of | |||||
| sub-folders to be scaned in the target folder. | |||||
| Defaults to SCAN_SUB_FOLDERS. | |||||
| Returns: | |||||
| dict: indexer of registry | |||||
| """ | |||||
| self.traversal_files(target_dir, target_folders) | |||||
| start = time.time() | |||||
| logger.info( | |||||
| f'AST-Scaning the path "{target_dir}" with the following sub folders {target_folders}' | |||||
| ) | |||||
| result = dict() | |||||
| for file in self.file_dirs: | |||||
| filepath = file[file.find('modelscope'):] | |||||
| module_name = filepath.replace(osp.sep, '.').replace('.py', '') | |||||
| decorator_list, import_list = self._get_single_file_scan_result( | |||||
| file) | |||||
| result[file] = { | |||||
| DECORATOR_KEY: decorator_list, | |||||
| IMPORT_KEY: import_list, | |||||
| MODULE_KEY: module_name | |||||
| } | |||||
| inverted_index_with_results = self._inverted_index(result) | |||||
| module_import = self._module_import(result) | |||||
| index = { | |||||
| INDEX_KEY: inverted_index_with_results, | |||||
| REQUIREMENT_KEY: module_import | |||||
| } | |||||
| logger.info( | |||||
| f'Scaning done! A number of {len(inverted_index_with_results)}' | |||||
| f' files indexed! Time consumed {time.time()-start}s') | |||||
| return index | |||||
| def files_mtime_md5(self, | |||||
| target_path=MODELSCOPE_PATH, | |||||
| target_subfolder=SCAN_SUB_FOLDERS): | |||||
| self.file_dirs = [] | |||||
| self.traversal_files(target_path, target_subfolder) | |||||
| files_mtime = [] | |||||
| for item in self.file_dirs: | |||||
| files_mtime.append(os.path.getmtime(item)) | |||||
| result_str = reduce(lambda x, y: str(x) + str(y), files_mtime, '') | |||||
| md5 = hashlib.md5(result_str.encode()) | |||||
| return md5.hexdigest() | |||||
| fileScaner = FilesAstScaning() | |||||
| def _save_index(index, file_path): | |||||
| # convert tuple key to str key | |||||
| index[INDEX_KEY] = {str(k): v for k, v in index[INDEX_KEY].items()} | |||||
| index[VERSION_KEY] = __version__ | |||||
| index[MD5_KEY] = fileScaner.files_mtime_md5() | |||||
| json_index = json.dumps(index) | |||||
| storage.write(json_index.encode(), file_path) | |||||
| index[INDEX_KEY] = { | |||||
| ast.literal_eval(k): v | |||||
| for k, v in index[INDEX_KEY].items() | |||||
| } | |||||
| def _load_index(file_path): | |||||
| bytes_index = storage.read(file_path) | |||||
| wrapped_index = json.loads(bytes_index) | |||||
| # convert str key to tuple key | |||||
| wrapped_index[INDEX_KEY] = { | |||||
| ast.literal_eval(k): v | |||||
| for k, v in wrapped_index[INDEX_KEY].items() | |||||
| } | |||||
| return wrapped_index | |||||
| def load_index(force_rebuild=False): | |||||
| """get the index from scan results or cache | |||||
| Args: | |||||
| force_rebuild: If set true, rebuild and load index | |||||
| Returns: | |||||
| dict: the index information for all registred modules, including key: | |||||
| index, requirments, version and md5, the detail is shown below example: | |||||
| { | |||||
| 'index': { | |||||
| ('MODELS', 'nlp', 'bert'):{ | |||||
| 'filepath' : 'path/to/the/registered/model', 'imports': | |||||
| ['os', 'torch', 'typeing'] 'module': | |||||
| 'modelscope.models.nlp.bert' | |||||
| }, | |||||
| ... | |||||
| }, 'requirments': { | |||||
| 'modelscope.models.nlp.bert': ['os', 'torch', 'typeing'], | |||||
| 'modelscope.models.nlp.structbert': ['os', 'torch', 'typeing'], | |||||
| ... | |||||
| }, 'version': '0.2.3', 'md5': '8616924970fe6bc119d1562832625612', | |||||
| } | |||||
| """ | |||||
| cache_dir = os.getenv('MODELSCOPE_CACHE', get_default_cache_dir()) | |||||
| file_path = os.path.join(cache_dir, INDEXER_FILE) | |||||
| logger.info(f'Loading ast index from {file_path}') | |||||
| index = None | |||||
| if not force_rebuild and os.path.exists(file_path): | |||||
| wrapped_index = _load_index(file_path) | |||||
| md5 = fileScaner.files_mtime_md5() | |||||
| if (wrapped_index[VERSION_KEY] == __version__ | |||||
| and wrapped_index[MD5_KEY] == md5): | |||||
| index = wrapped_index | |||||
| if index is None: | |||||
| if force_rebuild: | |||||
| logger.info('Force rebuilding ast index') | |||||
| else: | |||||
| logger.info( | |||||
| f'No valid ast index found from {file_path}, rebuilding ast index!' | |||||
| ) | |||||
| index = fileScaner.get_files_scan_results() | |||||
| _save_index(index, file_path) | |||||
| return index | |||||
| def check_import_module_avaliable(module_dicts: dict) -> list: | |||||
| missed_module = [] | |||||
| for module in module_dicts.keys(): | |||||
| loader = importlib.find_loader(module) | |||||
| if loader is None: | |||||
| missed_module.append(module) | |||||
| return missed_module | |||||
| if __name__ == '__main__': | |||||
| index = load_index() | |||||
| print(index) | |||||
| @@ -1,79 +0,0 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| from modelscope.utils.constant import Fields, Requirements | |||||
| from modelscope.utils.import_utils import requires | |||||
| def get_msg(field): | |||||
| msg = f'\n{field} requirements not installed, please execute ' \ | |||||
| f'`pip install requirements/{field}.txt` or ' \ | |||||
| f'`pip install modelscope[{field}]`' | |||||
| return msg | |||||
| class NLPModuleNotFoundError(ModuleNotFoundError): | |||||
| def __init__(self, e: ModuleNotFoundError) -> None: | |||||
| e.msg += get_msg(Fields.nlp) | |||||
| super().__init__(e) | |||||
| class CVModuleNotFoundError(ModuleNotFoundError): | |||||
| def __init__(self, e: ModuleNotFoundError) -> None: | |||||
| e.msg += get_msg(Fields.cv) | |||||
| super().__init__(e) | |||||
| class AudioModuleNotFoundError(ModuleNotFoundError): | |||||
| def __init__(self, e: ModuleNotFoundError) -> None: | |||||
| e.msg += get_msg(Fields.audio) | |||||
| super().__init__(e) | |||||
| class MultiModalModuleNotFoundError(ModuleNotFoundError): | |||||
| def __init__(self, e: ModuleNotFoundError) -> None: | |||||
| e.msg += get_msg(Fields.multi_modal) | |||||
| super().__init__(e) | |||||
| def check_nlp(): | |||||
| try: | |||||
| requires('nlp models', ( | |||||
| Requirements.torch, | |||||
| Requirements.tokenizers, | |||||
| )) | |||||
| except ImportError as e: | |||||
| raise NLPModuleNotFoundError(e) | |||||
| def check_cv(): | |||||
| try: | |||||
| requires('cv models', ( | |||||
| Requirements.torch, | |||||
| Requirements.tokenizers, | |||||
| )) | |||||
| except ImportError as e: | |||||
| raise CVModuleNotFoundError(e) | |||||
| def check_audio(): | |||||
| try: | |||||
| requires('audio models', ( | |||||
| Requirements.torch, | |||||
| Requirements.tf, | |||||
| )) | |||||
| except ImportError as e: | |||||
| raise AudioModuleNotFoundError(e) | |||||
| def check_multi_modal(): | |||||
| try: | |||||
| requires('multi-modal models', ( | |||||
| Requirements.torch, | |||||
| Requirements.tokenizers, | |||||
| )) | |||||
| except ImportError as e: | |||||
| raise MultiModalModuleNotFoundError(e) | |||||
| @@ -75,3 +75,19 @@ SCIPY_IMPORT_ERROR = """ | |||||
| {0} requires the scipy library but it was not found in your environment. You can install it with pip: | {0} requires the scipy library but it was not found in your environment. You can install it with pip: | ||||
| `pip install scipy` | `pip install scipy` | ||||
| """ | """ | ||||
| # docstyle-ignore | |||||
| OPENCV_IMPORT_ERROR = """ | |||||
| {0} requires the opencv library but it was not found in your environment. You can install it with pip: | |||||
| `pip install opencv-python` | |||||
| """ | |||||
| PILLOW_IMPORT_ERROR = """ | |||||
| {0} requires the Pillow library but it was not found in your environment. You can install it with pip: | |||||
| `pip install Pillow` | |||||
| """ | |||||
| GENERAL_IMPORT_ERROR = """ | |||||
| {0} requires the REQ library but it was not found in your environment. You can install it with pip: | |||||
| `pip install REQ` | |||||
| """ | |||||
| @@ -2,11 +2,10 @@ | |||||
| # Part of the implementation is borrowed from huggingface/transformers. | # Part of the implementation is borrowed from huggingface/transformers. | ||||
| import ast | import ast | ||||
| import functools | import functools | ||||
| import importlib.util | |||||
| import importlib | |||||
| import os | import os | ||||
| import os.path as osp | import os.path as osp | ||||
| import sys | import sys | ||||
| import types | |||||
| from collections import OrderedDict | from collections import OrderedDict | ||||
| from functools import wraps | from functools import wraps | ||||
| from importlib import import_module | from importlib import import_module | ||||
| @@ -14,18 +13,15 @@ from itertools import chain | |||||
| from types import ModuleType | from types import ModuleType | ||||
| from typing import Any | from typing import Any | ||||
| import json | |||||
| from packaging import version | from packaging import version | ||||
| from modelscope.utils.constant import Fields | |||||
| from modelscope.utils.error import (PROTOBUF_IMPORT_ERROR, | |||||
| PYTORCH_IMPORT_ERROR, SCIPY_IMPORT_ERROR, | |||||
| SENTENCEPIECE_IMPORT_ERROR, | |||||
| SKLEARN_IMPORT_ERROR, | |||||
| TENSORFLOW_IMPORT_ERROR, TIMM_IMPORT_ERROR, | |||||
| TOKENIZERS_IMPORT_ERROR) | |||||
| from modelscope.utils.ast_utils import (INDEX_KEY, MODULE_KEY, REQUIREMENT_KEY, | |||||
| load_index) | |||||
| from modelscope.utils.error import * # noqa | |||||
| from modelscope.utils.logger import get_logger | from modelscope.utils.logger import get_logger | ||||
| logger = get_logger(__name__) | |||||
| if sys.version_info < (3, 8): | if sys.version_info < (3, 8): | ||||
| import importlib_metadata | import importlib_metadata | ||||
| else: | else: | ||||
| @@ -33,6 +29,8 @@ else: | |||||
| logger = get_logger() | logger = get_logger() | ||||
| AST_INDEX = None | |||||
| def import_modules_from_file(py_file: str): | def import_modules_from_file(py_file: str): | ||||
| """ Import module from a certrain file | """ Import module from a certrain file | ||||
| @@ -250,18 +248,44 @@ def is_tf_available(): | |||||
| return _tf_available | return _tf_available | ||||
| def is_opencv_available(): | |||||
| return importlib.util.find_spec('cv2') is not None | |||||
| def is_pillow_available(): | |||||
| return importlib.util.find_spec('PIL.Image') is not None | |||||
| def is_package_available(pkg_name): | |||||
| return importlib.util.find_spec(pkg_name) is not None | |||||
| def is_espnet_available(pkg_name): | |||||
| return importlib.util.find_spec('espnet2') is not None \ | |||||
| and importlib.util.find_spec('espnet') | |||||
| REQUIREMENTS_MAAPING = OrderedDict([ | REQUIREMENTS_MAAPING = OrderedDict([ | ||||
| ('protobuf', (is_protobuf_available, PROTOBUF_IMPORT_ERROR)), | ('protobuf', (is_protobuf_available, PROTOBUF_IMPORT_ERROR)), | ||||
| ('sentencepiece', (is_sentencepiece_available, | ('sentencepiece', (is_sentencepiece_available, | ||||
| SENTENCEPIECE_IMPORT_ERROR)), | SENTENCEPIECE_IMPORT_ERROR)), | ||||
| ('sklearn', (is_sklearn_available, SKLEARN_IMPORT_ERROR)), | ('sklearn', (is_sklearn_available, SKLEARN_IMPORT_ERROR)), | ||||
| ('tf', (is_tf_available, TENSORFLOW_IMPORT_ERROR)), | ('tf', (is_tf_available, TENSORFLOW_IMPORT_ERROR)), | ||||
| ('tensorflow', (is_tf_available, TENSORFLOW_IMPORT_ERROR)), | |||||
| ('timm', (is_timm_available, TIMM_IMPORT_ERROR)), | ('timm', (is_timm_available, TIMM_IMPORT_ERROR)), | ||||
| ('tokenizers', (is_tokenizers_available, TOKENIZERS_IMPORT_ERROR)), | ('tokenizers', (is_tokenizers_available, TOKENIZERS_IMPORT_ERROR)), | ||||
| ('torch', (is_torch_available, PYTORCH_IMPORT_ERROR)), | ('torch', (is_torch_available, PYTORCH_IMPORT_ERROR)), | ||||
| ('scipy', (is_scipy_available, SCIPY_IMPORT_ERROR)), | ('scipy', (is_scipy_available, SCIPY_IMPORT_ERROR)), | ||||
| ('cv2', (is_opencv_available, OPENCV_IMPORT_ERROR)), | |||||
| ('PIL', (is_pillow_available, PILLOW_IMPORT_ERROR)), | |||||
| ('espnet2', (is_espnet_available, | |||||
| GENERAL_IMPORT_ERROR.replace('REQ', 'espnet'))), | |||||
| ('espnet', (is_espnet_available, | |||||
| GENERAL_IMPORT_ERROR.replace('REQ', 'espnet'))), | |||||
| ]) | ]) | ||||
| SYSTEM_PACKAGE = set(['os', 'sys', 'typing']) | |||||
| def requires(obj, requirements): | def requires(obj, requirements): | ||||
| if not isinstance(requirements, (list, tuple)): | if not isinstance(requirements, (list, tuple)): | ||||
| @@ -271,7 +295,18 @@ def requires(obj, requirements): | |||||
| else: | else: | ||||
| name = obj.__name__ if hasattr(obj, | name = obj.__name__ if hasattr(obj, | ||||
| '__name__') else obj.__class__.__name__ | '__name__') else obj.__class__.__name__ | ||||
| checks = (REQUIREMENTS_MAAPING[req] for req in requirements) | |||||
| checks = [] | |||||
| for req in requirements: | |||||
| if req == '' or req in SYSTEM_PACKAGE: | |||||
| continue | |||||
| if req in REQUIREMENTS_MAAPING: | |||||
| check = REQUIREMENTS_MAAPING[req] | |||||
| else: | |||||
| check_fn = functools.partial(is_package_available, req) | |||||
| err_msg = GENERAL_IMPORT_ERROR.replace('REQ', req) | |||||
| check = (check_fn, err_msg) | |||||
| checks.append(check) | |||||
| failed = [msg.format(name) for available, msg in checks if not available()] | failed = [msg.format(name) for available, msg in checks if not available()] | ||||
| if failed: | if failed: | ||||
| raise ImportError(''.join(failed)) | raise ImportError(''.join(failed)) | ||||
| @@ -299,3 +334,99 @@ def tf_required(func): | |||||
| raise ImportError(f'Method `{func.__name__}` requires TF.') | raise ImportError(f'Method `{func.__name__}` requires TF.') | ||||
| return wrapper | return wrapper | ||||
| class LazyImportModule(ModuleType): | |||||
| AST_INDEX = None | |||||
| if AST_INDEX is None: | |||||
| AST_INDEX = load_index() | |||||
| def __init__(self, | |||||
| name, | |||||
| module_file, | |||||
| import_structure, | |||||
| module_spec=None, | |||||
| extra_objects=None, | |||||
| try_to_pre_import=False): | |||||
| super().__init__(name) | |||||
| self._modules = set(import_structure.keys()) | |||||
| self._class_to_module = {} | |||||
| for key, values in import_structure.items(): | |||||
| for value in values: | |||||
| self._class_to_module[value] = key | |||||
| # Needed for autocompletion in an IDE | |||||
| self.__all__ = list(import_structure.keys()) + list( | |||||
| chain(*import_structure.values())) | |||||
| self.__file__ = module_file | |||||
| self.__spec__ = module_spec | |||||
| self.__path__ = [os.path.dirname(module_file)] | |||||
| self._objects = {} if extra_objects is None else extra_objects | |||||
| self._name = name | |||||
| self._import_structure = import_structure | |||||
| if try_to_pre_import: | |||||
| self._try_to_import() | |||||
| def _try_to_import(self): | |||||
| for sub_module in self._class_to_module.keys(): | |||||
| try: | |||||
| getattr(self, sub_module) | |||||
| except Exception as e: | |||||
| logger.warn( | |||||
| f'pre load module {sub_module} error, please check {e}') | |||||
| # Needed for autocompletion in an IDE | |||||
| def __dir__(self): | |||||
| result = super().__dir__() | |||||
| # The elements of self.__all__ that are submodules may or may not be in the dir already, depending on whether | |||||
| # they have been accessed or not. So we only add the elements of self.__all__ that are not already in the dir. | |||||
| for attr in self.__all__: | |||||
| if attr not in result: | |||||
| result.append(attr) | |||||
| return result | |||||
| def __getattr__(self, name: str) -> Any: | |||||
| if name in self._objects: | |||||
| return self._objects[name] | |||||
| if name in self._modules: | |||||
| value = self._get_module(name) | |||||
| elif name in self._class_to_module.keys(): | |||||
| module = self._get_module(self._class_to_module[name]) | |||||
| value = getattr(module, name) | |||||
| else: | |||||
| raise AttributeError( | |||||
| f'module {self.__name__} has no attribute {name}') | |||||
| setattr(self, name, value) | |||||
| return value | |||||
| def _get_module(self, module_name: str): | |||||
| try: | |||||
| # check requirements before module import | |||||
| module_name_full = self.__name__ + '.' + module_name | |||||
| if module_name_full in LazyImportModule.AST_INDEX[REQUIREMENT_KEY]: | |||||
| requirements = LazyImportModule.AST_INDEX[REQUIREMENT_KEY][ | |||||
| module_name_full] | |||||
| requires(module_name_full, requirements) | |||||
| return importlib.import_module('.' + module_name, self.__name__) | |||||
| except Exception as e: | |||||
| raise RuntimeError( | |||||
| f'Failed to import {self.__name__}.{module_name} because of the following error ' | |||||
| f'(look up to see its traceback):\n{e}') from e | |||||
| def __reduce__(self): | |||||
| return self.__class__, (self._name, self.__file__, | |||||
| self._import_structure) | |||||
| @staticmethod | |||||
| def import_module(signature): | |||||
| """ import a lazy import module using signature | |||||
| Args: | |||||
| signature (tuple): a tuple of str, (registry_name, registry_group_name, module_name) | |||||
| """ | |||||
| if signature in LazyImportModule.AST_INDEX[INDEX_KEY]: | |||||
| mod_index = LazyImportModule.AST_INDEX[INDEX_KEY][signature] | |||||
| module_name = mod_index[MODULE_KEY] | |||||
| importlib.import_module(module_name) | |||||
| else: | |||||
| logger.warning(f'{signature} not found in ast index file') | |||||
| @@ -1,14 +1,15 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | # Copyright (c) Alibaba, Inc. and its affiliates. | ||||
| import importlib | |||||
| import inspect | import inspect | ||||
| from typing import List, Tuple, Union | from typing import List, Tuple, Union | ||||
| from modelscope.utils.import_utils import requires | |||||
| from modelscope.utils.logger import get_logger | from modelscope.utils.logger import get_logger | ||||
| TYPE_NAME = 'type' | TYPE_NAME = 'type' | ||||
| default_group = 'default' | default_group = 'default' | ||||
| logger = get_logger() | logger = get_logger() | ||||
| AST_INDEX = None | |||||
| class Registry(object): | class Registry(object): | ||||
| @@ -55,14 +56,10 @@ class Registry(object): | |||||
| def _register_module(self, | def _register_module(self, | ||||
| group_key=default_group, | group_key=default_group, | ||||
| module_name=None, | module_name=None, | ||||
| module_cls=None, | |||||
| requirements=None): | |||||
| module_cls=None): | |||||
| assert isinstance(group_key, | assert isinstance(group_key, | ||||
| str), 'group_key is required and must be str' | str), 'group_key is required and must be str' | ||||
| if requirements is not None: | |||||
| requires(module_cls, requirements) | |||||
| if group_key not in self._modules: | if group_key not in self._modules: | ||||
| self._modules[group_key] = dict() | self._modules[group_key] = dict() | ||||
| @@ -81,8 +78,7 @@ class Registry(object): | |||||
| def register_module(self, | def register_module(self, | ||||
| group_key: str = default_group, | group_key: str = default_group, | ||||
| module_name: str = None, | module_name: str = None, | ||||
| module_cls: type = None, | |||||
| requirements: Union[List, Tuple] = None): | |||||
| module_cls: type = None): | |||||
| """ Register module | """ Register module | ||||
| Example: | Example: | ||||
| @@ -106,7 +102,6 @@ class Registry(object): | |||||
| default group name is 'default' | default group name is 'default' | ||||
| module_name: Module name | module_name: Module name | ||||
| module_cls: Module class object | module_cls: Module class object | ||||
| requirements: Module necessary requirements | |||||
| """ | """ | ||||
| if not (module_name is None or isinstance(module_name, str)): | if not (module_name is None or isinstance(module_name, str)): | ||||
| @@ -116,8 +111,7 @@ class Registry(object): | |||||
| self._register_module( | self._register_module( | ||||
| group_key=group_key, | group_key=group_key, | ||||
| module_name=module_name, | module_name=module_name, | ||||
| module_cls=module_cls, | |||||
| requirements=requirements) | |||||
| module_cls=module_cls) | |||||
| return module_cls | return module_cls | ||||
| # if module_cls is None, should return a decorator function | # if module_cls is None, should return a decorator function | ||||
| @@ -125,8 +119,7 @@ class Registry(object): | |||||
| self._register_module( | self._register_module( | ||||
| group_key=group_key, | group_key=group_key, | ||||
| module_name=module_name, | module_name=module_name, | ||||
| module_cls=module_cls, | |||||
| requirements=requirements) | |||||
| module_cls=module_cls) | |||||
| return module_cls | return module_cls | ||||
| return _register | return _register | ||||
| @@ -178,6 +171,11 @@ def build_from_cfg(cfg, | |||||
| raise TypeError('default_args must be a dict or None, ' | raise TypeError('default_args must be a dict or None, ' | ||||
| f'but got {type(default_args)}') | f'but got {type(default_args)}') | ||||
| # dynamic load installation reqruiements for this module | |||||
| from modelscope.utils.import_utils import LazyImportModule | |||||
| sig = (registry.name.upper(), group_key, cfg['type']) | |||||
| LazyImportModule.import_module(sig) | |||||
| args = cfg.copy() | args = cfg.copy() | ||||
| if default_args is not None: | if default_args is not None: | ||||
| for name, value in default_args.items(): | for name, value in default_args.items(): | ||||
| @@ -1,6 +1,7 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | # Copyright (c) Alibaba, Inc. and its affiliates. | ||||
| import inspect | import inspect | ||||
| import os | |||||
| def if_func_receive_dict_inputs(func, inputs): | def if_func_receive_dict_inputs(func, inputs): | ||||
| @@ -26,3 +27,12 @@ def if_func_receive_dict_inputs(func, inputs): | |||||
| return True | return True | ||||
| else: | else: | ||||
| return False | return False | ||||
| def get_default_cache_dir(): | |||||
| """ | |||||
| default base dir: '~/.cache/modelscope' | |||||
| """ | |||||
| default_cache_dir = os.path.expanduser( | |||||
| os.path.join('~/.cache', 'modelscope')) | |||||
| return default_cache_dir | |||||
| @@ -9,6 +9,7 @@ librosa | |||||
| lxml | lxml | ||||
| matplotlib | matplotlib | ||||
| nara_wpe | nara_wpe | ||||
| nltk | |||||
| numpy<=1.18 | numpy<=1.18 | ||||
| # protobuf version beyond 3.20.0 is not compatible with TensorFlow 1.x, therefore is discouraged. | # protobuf version beyond 3.20.0 is not compatible with TensorFlow 1.x, therefore is discouraged. | ||||
| protobuf>3,<3.21.0 | protobuf>3,<3.21.0 | ||||
| @@ -3,6 +3,7 @@ datasets | |||||
| easydict | easydict | ||||
| einops | einops | ||||
| filelock>=3.3.0 | filelock>=3.3.0 | ||||
| gast>=0.5.3 | |||||
| numpy | numpy | ||||
| opencv-python | opencv-python | ||||
| Pillow>=6.2.0 | Pillow>=6.2.0 | ||||
| @@ -21,5 +21,5 @@ ignore-words-list = patten,nd,ty,mot,hist,formating,winn,gool,datas,wan,confids | |||||
| [flake8] | [flake8] | ||||
| select = B,C,E,F,P,T4,W,B9 | select = B,C,E,F,P,T4,W,B9 | ||||
| max-line-length = 120 | max-line-length = 120 | ||||
| ignore = F401,F821,W503 | |||||
| ignore = F401,F405,F821,W503 | |||||
| exclude = docs/src,*.pyi,.git | exclude = docs/src,*.pyi,.git | ||||
| @@ -4,7 +4,7 @@ import unittest | |||||
| from typing import Any, Dict, List, Tuple, Union | from typing import Any, Dict, List, Tuple, Union | ||||
| import numpy as np | import numpy as np | ||||
| import PIL | |||||
| from PIL import Image | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines import Pipeline, pipeline | from modelscope.pipelines import Pipeline, pipeline | ||||
| @@ -54,7 +54,7 @@ class CustomPipelineTest(unittest.TestCase): | |||||
| """ Provide default implementation based on preprocess_cfg and user can reimplement it | """ Provide default implementation based on preprocess_cfg and user can reimplement it | ||||
| """ | """ | ||||
| if not isinstance(input, PIL.Image.Image): | |||||
| if not isinstance(input, Image.Image): | |||||
| from modelscope.preprocessors import load_image | from modelscope.preprocessors import load_image | ||||
| data_dict = {'img': load_image(input), 'url': input} | data_dict = {'img': load_image(input), 'url': input} | ||||
| else: | else: | ||||
| @@ -3,7 +3,7 @@ import shutil | |||||
| import unittest | import unittest | ||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.pipelines import TranslationPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -4,7 +4,8 @@ import unittest | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import SpaceForDialogIntent | from modelscope.models.nlp import SpaceForDialogIntent | ||||
| from modelscope.pipelines import DialogIntentPredictionPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import DialogIntentPredictionPipeline | |||||
| from modelscope.preprocessors import DialogIntentPredictionPreprocessor | from modelscope.preprocessors import DialogIntentPredictionPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -5,7 +5,8 @@ from typing import List | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import SpaceForDialogModeling | from modelscope.models.nlp import SpaceForDialogModeling | ||||
| from modelscope.pipelines import DialogModelingPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import DialogModelingPipeline | |||||
| from modelscope.preprocessors import DialogModelingPreprocessor | from modelscope.preprocessors import DialogModelingPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -3,8 +3,10 @@ import unittest | |||||
| from typing import List | from typing import List | ||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model, SpaceForDialogStateTracking | |||||
| from modelscope.pipelines import DialogStateTrackingPipeline, pipeline | |||||
| from modelscope.models import Model | |||||
| from modelscope.models.nlp import SpaceForDialogStateTracking | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import DialogStateTrackingPipeline | |||||
| from modelscope.preprocessors import DialogStateTrackingPreprocessor | from modelscope.preprocessors import DialogStateTrackingPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -5,7 +5,8 @@ from modelscope.hub.snapshot_download import snapshot_download | |||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import (BertForMaskedLM, StructBertForMaskedLM, | from modelscope.models.nlp import (BertForMaskedLM, StructBertForMaskedLM, | ||||
| VecoForMaskedLM) | VecoForMaskedLM) | ||||
| from modelscope.pipelines import FillMaskPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import FillMaskPipeline | |||||
| from modelscope.preprocessors import FillMaskPreprocessor | from modelscope.preprocessors import FillMaskPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -7,7 +7,8 @@ from PIL import Image | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines import ImageDenoisePipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.cv import ImageDenoisePipeline | |||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -4,10 +4,11 @@ import unittest | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.cv.image_instance_segmentation.model import \ | |||||
| CascadeMaskRCNNSwinModel | |||||
| from modelscope.models.cv.image_instance_segmentation import ( | |||||
| CascadeMaskRCNNSwinModel, get_img_ins_seg_result) | |||||
| from modelscope.outputs import OutputKeys | from modelscope.outputs import OutputKeys | ||||
| from modelscope.pipelines import ImageInstanceSegmentationPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.cv import ImageInstanceSegmentationPipeline | |||||
| from modelscope.preprocessors import build_preprocessor | from modelscope.preprocessors import build_preprocessor | ||||
| from modelscope.utils.config import Config | from modelscope.utils.config import Config | ||||
| from modelscope.utils.constant import Fields, ModelFile, Tasks | from modelscope.utils.constant import Fields, ModelFile, Tasks | ||||
| @@ -4,7 +4,8 @@ import unittest | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import TransformerCRFForNamedEntityRecognition | from modelscope.models.nlp import TransformerCRFForNamedEntityRecognition | ||||
| from modelscope.pipelines import NamedEntityRecognitionPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import NamedEntityRecognitionPipeline | |||||
| from modelscope.preprocessors import NERPreprocessor | from modelscope.preprocessors import NERPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -4,7 +4,8 @@ import unittest | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import SbertForNLI | from modelscope.models.nlp import SbertForNLI | ||||
| from modelscope.pipelines import NLIPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import NLIPipeline | |||||
| from modelscope.preprocessors import NLIPreprocessor | from modelscope.preprocessors import NLIPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -5,7 +5,8 @@ import unittest | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import SbertForSentenceSimilarity | from modelscope.models.nlp import SbertForSentenceSimilarity | ||||
| from modelscope.pipelines import SentenceSimilarityPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import SentenceSimilarityPipeline | |||||
| from modelscope.preprocessors import SentenceSimilarityPreprocessor | from modelscope.preprocessors import SentenceSimilarityPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -5,7 +5,8 @@ from modelscope.hub.snapshot_download import snapshot_download | |||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import (SbertForSentimentClassification, | from modelscope.models.nlp import (SbertForSentimentClassification, | ||||
| SequenceClassificationModel) | SequenceClassificationModel) | ||||
| from modelscope.pipelines import SentimentClassificationPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import SentimentClassificationPipeline | |||||
| from modelscope.preprocessors import SentimentClassificationPreprocessor | from modelscope.preprocessors import SentimentClassificationPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -4,7 +4,8 @@ import unittest | |||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.msdatasets import MsDataset | from modelscope.msdatasets import MsDataset | ||||
| from modelscope.pipelines import SequenceClassificationPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import SequenceClassificationPipeline | |||||
| from modelscope.preprocessors import SequenceClassificationPreprocessor | from modelscope.preprocessors import SequenceClassificationPreprocessor | ||||
| from modelscope.utils.constant import Hubs, Tasks | from modelscope.utils.constant import Hubs, Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -4,7 +4,8 @@ import unittest | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import PalmForTextGeneration | from modelscope.models.nlp import PalmForTextGeneration | ||||
| from modelscope.pipelines import TextGenerationPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import TextGenerationPipeline | |||||
| from modelscope.preprocessors import TextGenerationPreprocessor | from modelscope.preprocessors import TextGenerationPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -5,7 +5,8 @@ import unittest | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.multi_modal import MPlugForVisualQuestionAnswering | from modelscope.models.multi_modal import MPlugForVisualQuestionAnswering | ||||
| from modelscope.pipelines import VisualQuestionAnsweringPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.multi_modal import VisualQuestionAnsweringPipeline | |||||
| from modelscope.preprocessors import MPlugVisualQuestionAnsweringPreprocessor | from modelscope.preprocessors import MPlugVisualQuestionAnsweringPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -5,7 +5,8 @@ import unittest | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import SbertForTokenClassification | from modelscope.models.nlp import SbertForTokenClassification | ||||
| from modelscope.pipelines import WordSegmentationPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import WordSegmentationPipeline | |||||
| from modelscope.preprocessors import TokenClassificationPreprocessor | from modelscope.preprocessors import TokenClassificationPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -4,7 +4,8 @@ import unittest | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import Model | from modelscope.models import Model | ||||
| from modelscope.models.nlp import SbertForZeroShotClassification | from modelscope.models.nlp import SbertForZeroShotClassification | ||||
| from modelscope.pipelines import ZeroShotClassificationPipeline, pipeline | |||||
| from modelscope.pipelines import pipeline | |||||
| from modelscope.pipelines.nlp import ZeroShotClassificationPipeline | |||||
| from modelscope.preprocessors import ZeroShotClassificationPreprocessor | from modelscope.preprocessors import ZeroShotClassificationPreprocessor | ||||
| from modelscope.utils.constant import Tasks | from modelscope.utils.constant import Tasks | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -2,7 +2,7 @@ | |||||
| import unittest | import unittest | ||||
| import PIL | |||||
| from PIL import Image | |||||
| from modelscope.preprocessors import load_image | from modelscope.preprocessors import load_image | ||||
| @@ -11,7 +11,7 @@ class ImagePreprocessorTest(unittest.TestCase): | |||||
| def test_load(self): | def test_load(self): | ||||
| img = load_image('data/test/images/image_matting.png') | img = load_image('data/test/images/image_matting.png') | ||||
| self.assertTrue(isinstance(img, PIL.Image.Image)) | |||||
| self.assertTrue(isinstance(img, Image.Image)) | |||||
| self.assertEqual(img.size, (948, 533)) | self.assertEqual(img.size, (948, 533)) | ||||
| @@ -11,8 +11,7 @@ import torch | |||||
| from torch.utils import data as data | from torch.utils import data as data | ||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models.cv.image_color_enhance.image_color_enhance import \ | |||||
| ImageColorEnhance | |||||
| from modelscope.models.cv.image_color_enhance import ImageColorEnhance | |||||
| from modelscope.trainers import build_trainer | from modelscope.trainers import build_trainer | ||||
| from modelscope.utils.constant import ModelFile | from modelscope.utils.constant import ModelFile | ||||
| from modelscope.utils.test_utils import test_level | from modelscope.utils.test_utils import test_level | ||||
| @@ -5,9 +5,8 @@ import tempfile | |||||
| import unittest | import unittest | ||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models import NAFNetForImageDenoise | |||||
| from modelscope.msdatasets.image_denoise_data.image_denoise_dataset import \ | |||||
| PairedImageDataset | |||||
| from modelscope.models.cv.image_denoise import NAFNetForImageDenoise | |||||
| from modelscope.msdatasets.image_denoise_data import PairedImageDataset | |||||
| from modelscope.trainers import build_trainer | from modelscope.trainers import build_trainer | ||||
| from modelscope.utils.config import Config | from modelscope.utils.config import Config | ||||
| from modelscope.utils.constant import ModelFile | from modelscope.utils.constant import ModelFile | ||||
| @@ -7,10 +7,8 @@ import zipfile | |||||
| from functools import partial | from functools import partial | ||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.models.cv.image_instance_segmentation import \ | |||||
| CascadeMaskRCNNSwinModel | |||||
| from modelscope.models.cv.image_instance_segmentation.datasets import \ | |||||
| ImageInstanceSegmentationCocoDataset | |||||
| from modelscope.models.cv.image_instance_segmentation import ( | |||||
| CascadeMaskRCNNSwinModel, ImageInstanceSegmentationCocoDataset) | |||||
| from modelscope.trainers import build_trainer | from modelscope.trainers import build_trainer | ||||
| from modelscope.utils.config import Config | from modelscope.utils.config import Config | ||||
| from modelscope.utils.constant import ModelFile | from modelscope.utils.constant import ModelFile | ||||
| @@ -0,0 +1,97 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| import os | |||||
| import shutil | |||||
| import tempfile | |||||
| import time | |||||
| import unittest | |||||
| import gast | |||||
| from modelscope.utils.ast_utils import AstScaning, FilesAstScaning, load_index | |||||
| MODELSCOPE_PATH = '/'.join( | |||||
| os.path.dirname(__file__).split('/')[:-2]) + '/modelscope' | |||||
| class AstScaningTest(unittest.TestCase): | |||||
| def setUp(self): | |||||
| print(('Testing %s.%s' % (type(self).__name__, self._testMethodName))) | |||||
| self.tmp_dir = tempfile.TemporaryDirectory().name | |||||
| self.test_file = os.path.join(self.tmp_dir, 'test.py') | |||||
| if not os.path.exists(self.tmp_dir): | |||||
| os.makedirs(self.tmp_dir) | |||||
| def tearDown(self): | |||||
| super().tearDown() | |||||
| shutil.rmtree(self.tmp_dir) | |||||
| def test_ast_scaning_class(self): | |||||
| astScaner = AstScaning() | |||||
| pipeline_file = os.path.join(MODELSCOPE_PATH, 'pipelines', 'nlp', | |||||
| 'sequence_classification_pipeline.py') | |||||
| output = astScaner.generate_ast(pipeline_file) | |||||
| self.assertTrue(output['imports'] is not None) | |||||
| self.assertTrue(output['from_imports'] is not None) | |||||
| self.assertTrue(output['decorators'] is not None) | |||||
| imports, from_imports, decorators = output['imports'], output[ | |||||
| 'from_imports'], output['decorators'] | |||||
| self.assertIsInstance(imports, dict) | |||||
| self.assertIsInstance(from_imports, dict) | |||||
| self.assertIsInstance(decorators, list) | |||||
| self.assertListEqual( | |||||
| list(set(imports.keys()) - set(['typing', 'numpy'])), []) | |||||
| self.assertEqual(len(from_imports.keys()), 9) | |||||
| self.assertTrue(from_imports['modelscope.metainfo'] is not None) | |||||
| self.assertEqual(from_imports['modelscope.metainfo'], ['Pipelines']) | |||||
| self.assertEqual( | |||||
| decorators, | |||||
| [('PIPELINES', 'text-classification', 'sentiment-analysis')]) | |||||
| def test_files_scaning_method(self): | |||||
| fileScaner = FilesAstScaning() | |||||
| output = fileScaner.get_files_scan_results() | |||||
| self.assertTrue(output['index'] is not None) | |||||
| self.assertTrue(output['requirements'] is not None) | |||||
| index, requirements = output['index'], output['requirements'] | |||||
| self.assertIsInstance(index, dict) | |||||
| self.assertIsInstance(requirements, dict) | |||||
| self.assertIsInstance(list(index.keys())[0], tuple) | |||||
| index_0 = list(index.keys())[0] | |||||
| self.assertIsInstance(index[index_0], dict) | |||||
| self.assertTrue(index[index_0]['imports'] is not None) | |||||
| self.assertIsInstance(index[index_0]['imports'], list) | |||||
| self.assertTrue(index[index_0]['module'] is not None) | |||||
| self.assertIsInstance(index[index_0]['module'], str) | |||||
| index_0 = list(requirements.keys())[0] | |||||
| self.assertIsInstance(requirements[index_0], list) | |||||
| def test_file_mtime_md5_method(self): | |||||
| fileScaner = FilesAstScaning() | |||||
| # create first file | |||||
| with open(self.test_file, 'w', encoding='utf-8') as f: | |||||
| f.write('This is the new test!') | |||||
| md5_1 = fileScaner.files_mtime_md5(self.tmp_dir, []) | |||||
| md5_2 = fileScaner.files_mtime_md5(self.tmp_dir, []) | |||||
| self.assertEqual(md5_1, md5_2) | |||||
| time.sleep(2) | |||||
| # case of revise | |||||
| with open(self.test_file, 'w', encoding='utf-8') as f: | |||||
| f.write('test again') | |||||
| md5_3 = fileScaner.files_mtime_md5(self.tmp_dir, []) | |||||
| self.assertNotEqual(md5_1, md5_3) | |||||
| # case of create | |||||
| self.test_file_new = os.path.join(self.tmp_dir, 'test_1.py') | |||||
| time.sleep(2) | |||||
| with open(self.test_file_new, 'w', encoding='utf-8') as f: | |||||
| f.write('test again') | |||||
| md5_4 = fileScaner.files_mtime_md5(self.tmp_dir, []) | |||||
| self.assertNotEqual(md5_1, md5_4) | |||||
| self.assertNotEqual(md5_3, md5_4) | |||||
| if __name__ == '__main__': | |||||
| unittest.main() | |||||
| @@ -1,22 +0,0 @@ | |||||
| # Copyright (c) Alibaba, Inc. and its affiliates. | |||||
| import unittest | |||||
| from typing import List, Union | |||||
| from modelscope.utils.check_requirements import NLPModuleNotFoundError, get_msg | |||||
| from modelscope.utils.constant import Fields | |||||
| class ImportUtilsTest(unittest.TestCase): | |||||
| def test_type_module_not_found(self): | |||||
| with self.assertRaises(NLPModuleNotFoundError) as ctx: | |||||
| try: | |||||
| import not_found | |||||
| except ModuleNotFoundError as e: | |||||
| raise NLPModuleNotFoundError(e) | |||||
| self.assertTrue(get_msg(Fields.nlp) in ctx.exception.msg.msg) | |||||
| if __name__ == '__main__': | |||||
| unittest.main() | |||||