Shortcuts

卷积神经网络

我们为卷积神经网络提供了一些构建模块,包括层构建、模块组件和权重初始化。

网络层的构建

在运行实验时,我们可能需要尝试同属一种类型但不同配置的层,但又不希望每次都修改代码。于是我们提供一些层构建方法,可以从字典构建层,字典可以在配置文件中配置,也可以通过命令行参数指定。

用法

一个简单的例子:

from mmcv.cnn import build_conv_layer

cfg = dict(type='Conv3d')
layer = build_conv_layer(cfg, in_channels=3, out_channels=8, kernel_size=3)
  • build_conv_layer: 支持的类型包括 Conv1d、Conv2d、Conv3d、Conv (Conv是Conv2d的别名)

  • build_norm_layer: 支持的类型包括 BN1d、BN2d、BN3d、BN (alias for BN2d)、SyncBN、GN、LN、IN1d、IN2d、IN3d、IN(IN是IN2d的别名)

  • build_activation_layer:支持的类型包括 ReLU、LeakyReLU、PReLU、RReLU、ReLU6、ELU、Sigmoid、Tanh、GELU

  • build_upsample_layer: 支持的类型包括 nearest、bilinear、deconv、pixel_shuffle

  • build_padding_layer: 支持的类型包括 zero、reflect、replicate

拓展

我们还允许自定义层和算子来扩展构建方法。

  1. 编写和注册自己的模块:

    from mmengine.registry import MODELS
    
    @MODELS.register_module()
    class MyUpsample:
    
        def __init__(self, scale_factor):
            pass
    
        def forward(self, x):
            pass
    
  2. 在某处导入 MyUpsample (例如 __init__.py )然后使用它:

    from mmcv.cnn import build_upsample_layer
    
    cfg = dict(type='MyUpsample', scale_factor=2)
    layer = build_upsample_layer(cfg)
    

模块组件

我们还提供了常用的模块组件,以方便网络构建。 卷积组件 ConvModule 由 convolution、normalization以及activation layers 组成,更多细节请参考 ConvModule api

from mmcv.cnn import ConvModule

# conv + bn + relu
conv = ConvModule(3, 8, 2, norm_cfg=dict(type='BN'))
# conv + gn + relu
conv = ConvModule(3, 8, 2, norm_cfg=dict(type='GN', num_groups=2))
# conv + relu
conv = ConvModule(3, 8, 2)
# conv
conv = ConvModule(3, 8, 2, act_cfg=None)
# conv + leaky relu
conv = ConvModule(3, 8, 3, padding=1, act_cfg=dict(type='LeakyReLU'))
# bn + conv + relu
conv = ConvModule(
    3, 8, 2, norm_cfg=dict(type='BN'), order=('norm', 'conv', 'act'))

Model Zoo

除了torchvision的预训练模型,我们还提供以下 CNN 的预训练模型:

  • VGG Caffe

  • ResNet Caffe

  • ResNeXt

  • ResNet with Group Normalization

  • ResNet with Group Normalization and Weight Standardization

  • HRNetV2

  • Res2Net

  • RegNet

Model URLs in JSON

MMCV中的Model Zoo Link 由 JSON 文件管理。 json 文件由模型名称及其url或path的键值对组成,一个json文件可能类似于:

{
    "model_a": "https://example.com/models/model_a_9e5bac.pth",
    "model_b": "pretrain/model_b_ab3ef2c.pth"
}

可以在此处找到托管在 OpenMMLab AWS 上的预训练模型的默认链接。

你可以通过将 open-mmlab.json 放在 MMCV_HOME下来覆盖默认链接,如果在环境中找不到MMCV_HOME,则默认使用 ~/.cache/mmcv。当然你也可以使用命令 export MMCV_HOME=/your/path来设置自己的路径。

外部的json文件将被合并为默认文件,如果相同的键出现在外部json和默认json中,则将使用外部json

Load Checkpoint

mmcv.load_checkpoint()的参数filename支持以下类型:

  • filepath: checkpoint路径

  • http://xxx and https://xxx: 下载checkpoint的链接,文件名中必需包含SHA256后缀

  • torchvision://xxx: torchvision.models中的模型链接,更多细节参考 torchvision

  • open-mmlab://xxx: 默认和其他 json 文件中提供的模型链接或文件路径