mmsegmentation学习笔记

深入剖析mmsegmentation项目结构,涵盖配置文件、数据集、模型构建、训练流程等关键环节,揭示其高效图像分割背后的实现机制。

前言

文件总体结构

mmsegmentation
├── LICENSE
├── README.md
├── configs   //配置文件,针对每个网络的一写用户参数设置,比如数据集选用,transform操作配置清单,网络结构的配置清单等等。(只是配置清单,没有实现代码)
├── data        //数据集
├── demo    
├── docker
├── docs
├── mmseg  //分割的核心文件,包括数据集class模板,网络的结构的class模板(包括backbone,编码器,解码器),损失函数,训练,测试的api实现等等
├── mmsegmentation.egg-info
├── pytest.ini
├── requirements
├── requirements.txt
├── resources
├── setup.cfg
├── setup.py
├── tests  //测试工具,用于单独测试各个模块是否正常工作
├── tools  //用户工具箱

configs文件夹

configs
├── _base_  //这里存的是更细节的配置信息:包括数据集配置,模型的参数配置,学习率等等
├── ann        //这里存的都是些完整的高定制化配置,用什么数据集,用什么网络,用什么学习率策略,是_base_的组装
├── ccnet
├── danet
├── deeplabv3
├── deeplabv3plus
├── encnet
├── fcn
├── fp16
├── gcnet
├── hrnet
├── nonlocal_net
├── ocrnet
├── psanet
├── pspnet
└── upernet

示例:/media/Program/CV/Project/SKMT/mmsegmentation/configs/pspnet/pspnet_r50-d8_512x512_20k_voc12aug.py

 _base_ = [
     '../_base_/models/pspnet_r50-d8.py',
     '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py',
     '../_base_/schedules/schedule_20k.py'
 ]
 model = dict(
     decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21))

其中,重点在于__base__文件夹:

_base_
├── datasets      //数据集的配置,包括路径啊,类别啊,预处理的pipeline等等
│   ├── US.py
│   ├── ade20k.py
│   ├── cityscapes.py
│   ├── cityscapes_769x769.py
│   ├── custom_skmt.py
│   ├── pascal_voc12.py
│   └── pascal_voc12_aug.py
├── default_runtime.py
├── file_tree.md
├── models      //配置选用编码器,解码器,loss_decode等等
│   ├── ann_r50-d8.py
│   ├──。。。。。  //省略一下
└── schedules
    ├── schedule_160k.py
    ├── schedule_20k.py
    ├── schedule_40k.py
    └── schedule_80k.py

mmcv文件夹

mmcv
├── CONTRIBUTING.md
├── Dockerfile
├── Jenkinsfile
├── LICENSE
├── MANIFEST.in
├── README.md
├── build
│   ├── lib.linux-x86_64-3.7
│   └── temp.linux-x86_64-3.7
├── docs
│   ├── Makefile
│   ├── ...
├── examples
│   ├── config_cifar10.py
│   ├── dist_train_cifar10.sh
│   ├── resnet_cifar.py
│   └── train_cifar10.py
├── mmcv
│   ├── __init__.py
│   ├── __pycache__
│   ├── _ext.cpython-37m-x86_64-linux-gnu.so
│   ├── _flow_warp_ext.cpython-37m-x86_64-linux-gnu.so
│   ├── arraymisc
│   ├── cnn
│   ├── fileio
│   ├── image
│   ├── model_zoo
│   ├── onnx
│   ├── ops
│   ├── parallel
│   ├── runner
│   ├── utils
│   ├── version.py
│   ├── video
│   └── visualization
├── mmcv_full.egg-info
├── requirements.txt
├── setup.cfg
├── setup.py
└── tests
    ├── data
    ├── test_arraymisc.py
    ├── test_cnn
    ├── test_config.py
    ├── test_fileclient.py
    ├── test_fileio.py
    ├── test_fp16.py
    ├── test_image
    ├── test_load_model_zoo.py
    ├── test_logging.py
    ├── test_misc.py
    ├── test_ops
    ├── test_optimizer.py
    ├── test_parallel.py
    ├── test_path.py
    ├── test_progressbar.py
    ├── test_registry.py
    ├── test_runner
    ├── test_timer.py
    ├── test_video
    └── test_visualization.py

这是open-mmlab做的一个python库,可以直接进行安装,是用于计算机视觉研究的基础python库,实际上这里的文件都是针对open-mmlab的众多框架的底层框架库,除了一些底层io,cnn,迭代器等等以外,open-mmlab都遵从了相同的程序的pipeline

==============================================================================

这不得不提到对于一个python的执行顺序:

python在开始执行的时候扫描整个工程,针对每一个类型的模块(这里指的是数据集,backbone,Loss等)都利用Registry对象储存起来,形成一个列表,下面举个例子:

在registry.py里我构建了一个简化版的Registry类,这个类的核心就是register_module方法,这是一个装饰器,用于获取class对象(注意,这里的对象指的是class本身,而不是class的实例,python的所有元素都是对象)。

class Registry:
    """A registry to map strings to classes.

    Args:
        name (str): Registry name.
    """
    def __init__(self, name):
        self._name = name
        self
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值