轻松搭建主干网络,多种视觉任务一网打尽

简介: 这里,以我们最为常见的跨任务研究——搭建主干网络为例,介绍一下如何快速开发一个新的主干网络,并分别使用 MMClassification、MMDetection 和 MMSegmentation 轻松实现分类、检测和分割任务上的评测。

OpenMMLab 框架几乎全面覆盖了深度学习视觉任务的方方面面。针对每一个具体的任务,我们都提供了一个相应的算法库,如用于分类任务的 MMClassification,用于检测任务的 MMDetection 和用于分割任务的 MMSegmentation 等等。


随之而来的一个问题是,如果我希望将研究的方法应用于多个任务,在多个任务上进行评测,是不是要把各个算法库都 fork 一份?更进一步地,如果我希望将我依赖 OpenMMLab 框架的代码开源出去,应该怎么做呢?


这里,以我们最为常见的跨任务研究——搭建主干网络为例,介绍一下如何快速开发一个新的主干网络,并分别使用 MMClassification、MMDetection 和 MMSegmentation 轻松实现分类、检测和分割任务上的评测。


在示例仓库中,我们以 ConvNeXt 为例,展示了搭建主干网络并进行基准测试所需要的文件。那么下面,让我们以这个示例仓库为例,一步一步了解如何搭建自己的主干网络吧。


配置环境



首先,我们需要配置 Python 和 PyTorch 环境,相信对 PyTorch 驾轻就熟的大家一定已经准备好了这些环境。需要注意的是,我们要求 Python >= 3.6,PyTorch >= 1.5.0,更新的版本当然也没有问题。

假设你已经准备好了 Python 和 PyTorch 环境,那么只需要下面两行命令,就可以配置好软件环境。


数据准备



假设我们希望在 ImageNet 上进行分类任务基准测试,在 ADE20K 上进行语义分割任务基准测试,在 COCO 上进行检测任务基准测试,那么就需要按照以下格式组织好数据文件。

data/
├── imagenet
│   ├── train
│   ├── val
│   └── meta
│       ├── train.txt
│       └── val.txt
├── ade
│   └── ADEChallengeData2016
│       ├── annotations
│       └── images
└── coco
    ├── annotations
    │   ├── instance_train2017.json
    │   └── instance_val2017.json
    ├── train2017
    └── val2017

这里,我们只列举了用于训练和验证的必要文件。如果你希望在更多数据集或任务上进行基准测试,比如使用 MMDetection 进行全景分割,只需要按照 MMDetection 的需要组织对应的数据集即可。另外,MMSegmentation 还提供了一篇教程讲解如何组织语义分割相关数据集。

实现你的主干网络



准备工作一切就绪,接下来让我们开始一步步实现和训练我们的主干网络吧~


首先是实现:


1)在 models 文件夹下创建你的主干网络文件。例如示例仓库中的 models/convnext.py。在这个文件中,只需要使用 PyTorch 实现你的主干网络即可,额外需要注意的只有以下两点:


a. 主干网络和主要模块需要继承 mmcv.runner.BaseModule。这个 BaseModule 是 torch.nn.Module 的子类, 其行为几乎完全一致,除了它额外支持使用 init_cfg 参数指定包括预训练模型在内的初始化方法。


b. 使用如下的装饰器结构,将你的主干网络类注册至 mmcls.models.BACKBONES 注册器。

from mmcv.runner import BaseModule
from mmcls.models import BACKBONES
@BACKBONES.register_module(force=True)
class MyBackbone(BaseModule):
    ...

2)【可选】如果你希望为某些特定的任务增加一些额外的模块、组件,可以参照 models/det/layer_decay_optimizer_constructor.py 添加至对应的文件夹中。


3)将你添加的主干网络、自定义组件添加至 models/__init__.py 文件中。


添加配置文件



如果你还不太清楚配置文件是怎么回事,这篇教程应该可以帮到你。

通常来说,我们使用若干基础配置文件,通过继承的方式来组织一个实验的配置文件。这些基础配置文件一般包括模型、数据集、优化策略和运行配置。你也可以在配置文件中对基础配置文件进行覆盖,或者不使用基础配置文件,全部写到一个配置文件里。


在本示例库中,我们提供了一套比较常用的基础配置文件,可以访问对应的算法库找到更多有用的基础配置文件。


对每个不同的任务,对应的配置文件可以放在放在 configs 目录中不同的子文件夹。需要注意的是,在配置文件的 model 部分,为了能够使 MMDetection 和 MMSegmentation 能够调用注册在 mmcls.models.BACKBONES 的主干网络,我们需要在 MMDetection 和 MMSegmentation 的配置文件中额外指定主干网络注册器的位置,这只需要在 type 中添加 mmcls. 前缀即可,如:

model = dict(
    backbone=dict(type='mmcls.MyBackbone', ...),
    ...
)

训练和测试



依托于 OpenMMLab 提供的统一实验管理工具—— MIM,我们在实现了模型、编写了配置文件之后,不需要写任何 Python 脚本就可以进行不同任务的训练和测试。


首先,我们需要将当前仓库的目录添加到 PYTHONPATH 环境变量中,这样 Python 才可以找到我们的模型文件,在仓库根目录运行如下指令:


export PYTHONPATH=`pwd`:$PYTHONPATH


单机单 GPU



# 训练分类模型
mim train mmcls $CONFIG --work-dir $WORK_DIR
# 测试分类模型
mim test mmcls $CONFIG -C $CHECKPOINT --metrics accuracy --metric-options "topk=(1, 5)"
# 训练目标检测/实例分割模型
mim train mmdet $CONFIG --work-dir $WORK_DIR
# 测试目标检测/实例分割模型
mim test mmdet $CONFIG -C $CHECKPOINT --eval bbox segm
# 训练语义分割模型
mim train mmseg $CONFIG --work-dir $WORK_DIR
# 测试语义分割模型
mim test mmseg $CONFIG -C $CHECKPOINT --eval mIoU

一些参数的说明:


- $CONFIG:configs/ 文件夹中的配置文件

- $WORK_DIR:用于保存日志和权重文件的文件夹

- $CHECKPOINT:权重文件路径

单机多 GPU (以 4 GPU 为例)



# 训练分类模型
mim train mmcls $CONFIG --work-dir $WORK_DIR --launcher pytorch --gpus 4
# 测试分类模型
mim test mmcls $CONFIG -C $CHECKPOINT --metrics accuracy --metric-options "topk=(1, 5)" --launcher pytorch --gpus 4
# 训练目标检测/实例分割模型
mim train mmdet $CONFIG --work-dir $WORK_DIR --launcher pytorch --gpus 4
# 测试目标检测/实例分割模型
mim test mmdet $CONFIG -C $CHECKPOINT --eval bbox segm --launcher pytorch --gpus 4
# 训练语义分割模型
mim train mmseg $CONFIG --work-dir $WORK_DIR --launcher pytorch --gpus 4 
# 测试语义分割模型
mim test mmseg $CONFIG -C $CHECKPOINT --eval mIoU --launcher pytorch --gpus 4


文章来源:【OpenMMLab

2022-04-12 18:19


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
3月前
|
机器学习/深度学习 算法 网络架构
【YOLOv8改进 - Backbone主干】EfficientRep:一种旨在提高硬件效率的RepVGG风格卷积神经网络架构
【YOLOv8改进 - Backbone主干】EfficientRep:一种旨在提高硬件效率的RepVGG风格卷积神经网络架构
|
3月前
|
机器学习/深度学习 计算机视觉 异构计算
【YOLOv8改进 - Backbone主干】FasterNet:基于PConv(部分卷积)的神经网络,提升精度与速度,降低参数量。
【YOLOv8改进 - Backbone主干】FasterNet:基于PConv(部分卷积)的神经网络,提升精度与速度,降低参数量。
|
3月前
|
机器学习/深度学习 自然语言处理 计算机视觉
【YOLOv8改进 - Backbone主干】VanillaNet:极简的神经网络,利用VanillaNet替换YOLOV8主干
【YOLOv8改进 - Backbone主干】VanillaNet:极简的神经网络,利用VanillaNet替换YOLOV8主干
|
3月前
|
机器学习/深度学习 计算机视觉 异构计算
【YOLOv8改进 - Backbone主干】ShuffleNet V2:卷积神经网络(CNN)架构
【YOLOv8改进 - Backbone主干】ShuffleNet V2:卷积神经网络(CNN)架构
|
3月前
|
机器学习/深度学习 自然语言处理 计算机视觉
【YOLOv8改进 - Backbone主干】VanillaNet:极简的神经网络,利用VanillaBlock降低YOLOV8参数
【YOLOv8改进 - Backbone主干】VanillaNet:极简的神经网络,利用VanillaBlock降低YOLOV8参数
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
卷积神经网络(CNN):视觉识别的革命先锋
卷积神经网络(CNN)作为人工智能领域的一颗璀璨明珠,在计算机视觉中发挥着核心作用。CNN的发展历程展现了从生物学灵感到技术创新的转变,历经LeNet-5至AlexNet、VGGNet、ResNet等里程碑式的进步。其独特结构包括卷积层、池化层及全连接层,能够层层递进地提取特征并作出决策。CNN不仅在图像分类、目标检测等领域表现卓越,还在人脸识别、医学影像分析等方面展现出巨大潜力。尽管存在局限性,如对序列数据处理能力有限及解释性问题,但通过引入注意力机制、自监督学习等方法,CNN将持续演进,引领人工智能技术走向更加精彩的未来。
115 2
|
3月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv8改进- Backbone主干】BoTNet:基于Transformer,结合自注意力机制和卷积神经网络的骨干网络
【YOLOv8改进- Backbone主干】BoTNet:基于Transformer,结合自注意力机制和卷积神经网络的骨干网络
|
3月前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进- Backbone主干】YOLOv8更换主干网络之ConvNexts,纯卷积神经网络,更快更准,,降低参数量!
YOLOv8专栏探讨了针对目标检测的ConvNet创新,提出ConvNeXt模型,它挑战Transformer在视觉任务中的主导地位。ConvNeXt通过增大卷积核、使用GeLU激活、切换到LayerNorm和改进下采样层,提升了纯ConvNet性能,达到与Transformer相当的准确率和效率。论文和代码已公开。
|
3月前
|
机器学习/深度学习 文件存储 算法框架/工具
【YOLOv8改进- Backbone主干】2024最新轻量化网络MobileNetV4替换YoloV8的BackBone
YOLO目标检测专栏聚焦于模型的改进和实战应用,介绍了MobileNetV4,它在移动设备上优化了架构。文章提到了UIB(通用反向瓶颈)模块,结合了多种结构,增强了特征提取;Mobile MQA是专为移动平台设计的注意力层,提升了速度;优化的NAS提升了搜索效率。通过这些创新,MNv4在不同硬件上实现了性能和效率的平衡,且通过蒸馏技术提高了准确性。模型在Pixel 8 EdgeTPU上达到87%的ImageNet-1K准确率,延迟仅为3.8ms。论文、PyTorch和TensorFlow实现代码链接也已提供。
|
3月前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLOv8改进- Backbone主干】YOLOv8 更换主干网络之 PP-LCNet,轻量级CPU卷积神经网络,降低参数量
YOLO目标检测专栏介绍了PP-LCNet,一种基于MKLDNN加速的轻量级CPU网络,提升了模型在多任务中的性能。PP-LCNet利用H-Swish、大核卷积、SE模块和全局平均池化后的全连接层,实现低延迟下的高准确性。代码和预训练模型可在PaddlePaddle的PaddleClas找到。文章提供了网络结构、核心代码及性能提升的详细信息。更多实战案例和YOLO改进见相关链接。
下一篇
无影云桌面