MMClassification(一)

2023-10-26

1、介绍

一句话总结:基于pytorch的强大模块化组件式的分类框架。

相关资料:中文文档 GitHub 课程学习

深入学习直接使用官方文档学习效果最好,本文记录学习过程知识以便快速回顾和查找。其中包含个人的学习总结,仅做参考。

2、项目结构

该项目结构图适用于openMMLab的其他框架。

主要工作是在配置文件模块:书写该配置文件中各个部分如图所示。

3、分类模型构成

上图展示图像分类的处理流程,下面逐一解释配置文件中参数含义:

3.1、模型结构配置

模型构建包括三部分:主干网络、颈部、分类头

model = dict(                               #定义模型
    type = 'ImageClassifier',               #定义模型类型
    backbone = dict(                        #定义主干网络
        type = 'ResNet',                    #主干网络采用ResNet模型
        depth = 50,                         #深度为50,也就是ResNet50的模型
        num_stages = 4,                     #使用全部4组卷积层
        out_indices = (3, ),                #输入最好一个卷积层的特征,3为下标
        style = 'pytorch'                   #使用V1b结构变体
    ),
    neck = dict(type='GlobalAveragePooling'), #颈部,使用全局平均池化
    head = dict(                            #分类头
        type='LinearClsHead',               #使用单层线性分类头
        num_classes=1000,                   #分类目标数1000
        in_channels=2048,                   #线性层输入维度2048
        loss=dict(type='CrossEntropyLoss',  #是用交叉熵损失函数
                  loss_weight=1.0)          
            ),
)

3.2、数据集

该模块主要包含两个类:Dataset和DataLoader

data=dict(                                      #描述数据集的字典
    samples_per_gpu=32,                         #设置batchsize
    workers_per_gpu=2,                          #设置数据加载进程数
    train=dict(                                 #定义训练数据子集
        type='ImageNet',                        #设置数据集的类型为 ImageNet类型
        data_prefix='data/imagenet/train',      #指定数据文件的路径
        pipeline=train_pipeline),               #指定数据的处理流水线
    val=dict(
    ),                                          #验证集和测试集定义类似
    test = dict(
    ),
    )

3.3、数据处理策略

该模块主要定义每一张图片读入内存后应该以什么样的步骤进行处理,可以想象成流水线。数据增强操作就是在此配置。

img_norm_cfg = dict(  #此处是定义归一化的参数值,主要参考的是imagenet数据集的均值和标准差    
    mean=[123.675,116.28,103.53],std=[58.395,57.12,57.375],to_rgb=True        
)
​
train_pipeline= [                                               #定义训练数据加载流水线
    dict(type='LoadImageFromFile'),                             #从文件中读取图像
    dict(type='RandomResizedCrop',size=224),                    #随机剪裁与缩放
    dict(type='RandomFlip',flip_prob=0.5,direction='horizontal'),#概率为0.5的随机水平翻转
    dict(type='Normalize',**img_norm_cfg),                      #像素值归一化
    dict(type='ImageToTensor',keys=['img']),                    #将图像数据转为Tensor
    dict(type='ToTensor',keys=['gt_label']),                    #将标签字段转为Tensor
    dict(type='Collect',keys=['img','gt_label'])                #整理数据字段输出给主干
]

3.4、学习率、优化策略和运行环境配置

optimizer=dict(                 #定义优化器
    type='SGD',                 #使用SGD优化器
    lr=0.1,                     #初始学习率为0.1
    momentum=0.9,               #动量为0.9
    weight_decay=0.0001         #权重衰减系数0.0001
)
​
lr_config=dict(                 #定义学习率策略
    policy ='step',             #使用步长下降策略
    step=[30,60,90],            #在指定周期阶段学习率下降十分之一
    by_epoch=True,              #阶段参考epoch数
    warmup='Linear',            #使用线性warmup策略
    warmup_iters=5              #前5周期使用warmup策略
)
runner = dict(                  #运行环境配置(不全)
    type='EpochBasedRunner',    #基于epoch数的运行器
    max_epochs=100              #最多训练100轮
)

3.5、配置预训练模型

在官网文档中的模型库下载预训练模型,然后再配置文件中的load_from字段配置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MMClassification(一) 的相关文章

  • 01背包和完全背包

    1 01背包 有 N 件物品和一个容量为 V 的背包 第 i 件物品的费用是 c i 价值是 w i 求解将哪些物品装入背包可使价值总和最大 这是最基础的背包问题 特点是 每种物品仅有一件 可以选择放或不放 用子问题定义状态 即 f i v
  • MD5签名 Java转换C#

    Java 代码 import java security MessageDigest import org apache commons codec binary Base64 public static String doSign Str
  • STM32系统嘀嗒定时器实现1ms中断事件

    int main 系统定时器实现周期性1000hz中断事件 即1ms SysTick Config SystemCoreClock 1000 void SysTick Handler void static uint32 t cnt

随机推荐

  • 算法之递归算法(五)

    上一篇将讲解的内容是从整体流程思考递归函数的内容 这一篇我们衔接上一篇继续讲解从整体流程思考递归函数的内容 我们同样使用一个实例来分析 题目描述 任何一个正整数都可以用2的幂次方表示 例如 137 27 23 20 同时约定方次用括号来表示
  • 简述JVM垃圾回收机制

    1 Java中的四种引用类型 在Java中 对于引用最基本的解释就是 如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址 就称这块内存代表着一个引用 有点指针的意味 后来Java还将引用划分为了4种 根据被GC回收的
  • qt平台插件无法初始化

    报错问题 解决 Qt5 报错 This application failed to start because it could not find or load the Qt platform plugin 解决方法 利用qt自带的打包工
  • 最隐晦的程序设计指引

    一 百家争鸣 俗话说 程序员半年不学新东西 就变奥特曼 out man 过时之人 了 IT行业可以说是变化最快的行业 每年都有大量的新概念 新术语 新技术被创造出来 在多数人还在一头雾水时 更好的 替代品又被创造出来 别的不说了 单说设计方
  • git add时出现fatal: pathspec 'XXX.java' did not match any files

    后来发现是文件名出现错误 在建文件时多打了一个空格 导致不匹配 所以大家出现这个问题时很有可能时文件名写错 或者文件后缀写错或者没写
  • js实现文本分段

    本菜鸟的第一篇博文 最近在学习js 可能有很多不严谨或者不正确的地方 欢迎指正 在 net开发中 有时候会从后台数据库拉来一大串文本 放到页面上显示 那么问题来了 大段的文本中需要分段 一般分段在后台都用转义字符 n来表示 但是我们现在要把
  • 基于Unity ARFoundation的传送门项目 - Augmented Reality Portal based on ARFoundation in Unity

    窗 Window 1 Unity组件 Components 2 着色器 Shaders 1 DepthMask shader 门 Door 1 组件 Components 1 AR Camera 2 InnerWorld 3 Door 4
  • 华为OD机试 - 最大化控制资源成本(Java)

    题目描述 公司创新实验室正在研究如何最小化资源成本 最大化资源利用率 请你设计算法帮他们解决一个任务混部问题 有taskNum项任务 每个任务有开始时间 startTime 结束时间 endTime 并行度 parallelism 三个属性
  • 线程池

    1 线程池的概念 线程池 其实就是一个容纳多个线程的容器 其中的线程可以反复使用 省去了频繁创建线程对象的操作 无需反复创建线程而消耗过多资源 最初是程序员自己开发线程池 用ArrayList
  • fatal: unable to access ‘https://github.com/.../‘: Failed to connect to github.com port 443: 连接超时

    虚拟机终端fatal unable to access https github com Failed to connect to github com port 443 连接超时 浏览器输入ipaddress com 查询如下两个域名 并
  • 用k8s部署nginx

    1 4 用kubernetes部署 容器化应用 1 4 1 kubectl的常见命令 查看所有命令 kubectl help 查看控制器 kubectl get deployment 查看pod kubectl get pod 查看服务 k
  • 2023年第14届蓝桥杯题解

    这里写目录标题 日期统计 01 串的熵 冶炼金属 飞机降落 接龙数列 子串简写 日期统计 小蓝现在有一个长度为 100 的数组 数组中的每个元素的值都在 0 到 9 的范围之内 数组中的元素从左至右如下所示 5 6 8 6 9 1 6 1
  • es报错:Exception in thread “main“ SettingsException[Failed to load settings from [elasticsearch.yml]]

    配置参数空格问题 Failed to load settings from 小小的 我 2017 10 12 17 41 00 3068 收藏 版权 Exception in thread main SettingsException Fa
  • centos7.4 docker容器连不上宿主机mysql

    docker容器连不上宿主机mysql 文章目录 docker容器连不上宿主机mysql 一 docker和宿主机网络 1 在docker容器里localhost并不是指宿主机的localhost 2 在docker运行时就和宿主机建立了虚
  • 信息存储服务器机房有辐射吗,服务器机房有辐射大吗

    弹性云服务器 ECS 弹性云服务器 Elastic Cloud Server 是一种可随时自助获取 可弹性伸缩的云服务器 帮助用户打造可靠 安全 灵活 高效的应用环境 确保服务持久稳定运行 提升运维效率 三年低至5折 多种配置可选了解详情
  • arm嵌入式led灯闪烁实验报告_led闪烁实验报告.doc

    led闪烁实验报告 篇一 单片机实验 LED灯闪烁实验 实 验 报 告 课程名称 实验项目 2016年 3 月 13 日 实验目的 1 掌握51单片机开发板的使用步骤 2 掌握51单片机开发板所需软件的安装过程 3 以LED灯闪烁为例子 掌
  • express:webpack dev-server中如何将对后端的http请求转到https的后端服务器中?

    在上一篇文章 Webpack系列 在Webpack Vue开发中如何调用tomcat的后端服务器的接口 我们介绍了如何将对于webpack dev server的数据请求转发到后端服务器上 这在大部分情况下就够用了 然后现在问题又来了 在生
  • qt中ui的 使用介绍

    1 什么是ui ui通常是用Qt 设计师设计出来的界面文件的后缀 通常情况下ui是一个指向这个界面类的指针 ui gt 一般就是用来访问这个界面类里面的控件 例如你的ui文件里有一个叫okButton的QPushButton 你就可以这样来
  • Apache Hook机制解析(下)——实战:在自己的代码中使用Apache的钩子

    在前文 Apache Hook机制解析 上 钩子机制的实现 和 Apache Hook机制解析 中 细节讨论 的基础上 我们对Apache的钩子机制已经有了较多的了解 下面的代码实战演示了一个日志钩子的声明 定义和使用 在VC6 0上编译测
  • MMClassification(一)

    1 介绍 一句话总结 基于pytorch的强大模块化组件式的分类框架 相关资料 中文文档 GitHub 课程学习 深入学习直接使用官方文档学习效果最好 本文记录学习过程知识以便快速回顾和查找 其中包含个人的学习总结 仅做参考 2 项目结构