mmlab custom_imports

文章介绍了在基于openmmlab的如mmclassification-1.x项目中,如何通过创建新文件夹并利用config文件中的custom_imports字段导入自定义数据集或模块,以此保持原有工程结构的整洁,避免与官方文件混杂。这种方法允许用户方便地导入自己编写的mydataset.py等文件,同时提供了import_modules_from_strings函数的示例来说明导入过程。
摘要由CSDN通过智能技术生成

基于open mmlab系列框架开发时,如果不想打乱原有的工程文件,可以将自己的相关文件另起文件夹,然后cofig文件中加入custom_imports字段即可。

custom_imports = dict(
    imports=[
        'alpha_custom.mmpretrain.datasets', # 自己需要import的路径,可以添加多个路径
    ], allow_failed_imports=False)

以下以mmpretrain(即mmclassification-1.x版本)工程为例。
如果定义了一个自己的数据集mydataset.py文件,放入工程目录下新建的文件夹alpha_custom,并在config文件中用custom_imports字段import即可,可以代替放入原本的${project_dir}/mmpretrain/datasets路径中。这样可以将子开发的文件与官方文件区别开。方便浏览和对比。
![在这里插入图片描述](https://img-blog.csdnimg.cn/0225bfb9d1f4465cb23cc046bf6120aa.png

新的config文件:
在这里插入图片描述
相关源码:
在这里插入图片描述

def import_modules_from_strings(imports, allow_failed_imports=False):
    """Import modules from the given list of strings.

    Args:
        imports (list | str | None): The given module names to be imported.
        allow_failed_imports (bool): If True, the failed imports will return
            None. Otherwise, an ImportError is raise. Defaults to False.

    Returns:
        list[module] | module | None: The imported modules.

    Examples:
        >>> osp, sys = import_modules_from_strings(
        ...     ['os.path', 'sys'])
        >>> import os.path as osp_
        >>> import sys as sys_
        >>> assert osp == osp_
        >>> assert sys == sys_
    """
    if not imports:
        return
    single_import = False
    if isinstance(imports, str): # 所以cfg中imports字段是str或者list都可以
        single_import = True
        imports = [imports]
    if not isinstance(imports, list):
        raise TypeError(
            f'custom_imports must be a list but got type {type(imports)}')
    imported = []
    for imp in imports:
        if not isinstance(imp, str):
            raise TypeError(
                f'{imp} is of type {type(imp)} and cannot be imported.')
        try:
            imported_tmp = import_module(imp)
        except ImportError:
            if allow_failed_imports:
                warnings.warn(f'{imp} failed to import and is ignored.',
                              UserWarning)
                imported_tmp = None
            else:
                raise ImportError(f'Failed to import {imp}')
        imported.append(imported_tmp)
    if single_import:
        imported = imported[0]
    return imported
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值