一步一步教你如何使用MMSelfSup框架【1】

news2024/7/6 20:14:15

介绍

任务介绍

自监督学习(Self-supervised learning, SSL)是一种极具潜力的学习范式,它旨在使用海量的无标注数据来进行表征学习。在SSL中,我们通过构造合理的预训练任务(可自动生成标注,即自监督)来进行模型的训练,学习到一个具有强大建模能力的预训练模型。基于自监督学习获得的训练模型,我们可以提升各类下游视觉任务(图像分类,物体检测,语义分割等)的性能。

MMSelfSup

MMSelfSup 是一个基于 PyTorch 实现的开源自监督表征学习工具箱。
框架如下:
在这里插入图片描述

它的特点有:

  • 多方法集成
    MMSelfSup 提供了多种前沿的自监督学习算法,大部分的自监督预训练学习都设置相同,以在基准中获得更加公平的比较。
  • 模块化设计
    MMSelfSup 遵照 OpenMMLab 项目一贯的设计理念,进行模块化设计,便于用户自定义实现自己的算法。
  • 标准化的性能评测
    MMSelfSup 拥有丰富的基准进行评估和测试,包括线性评估, 线性特征的 SVM / Low-shot SVM, 半监督分类, 目标检测和语义分割。
  • 兼容性
    兼容 OpenMMLab 各大算法库,拥有丰富的下游评测任务和预训练模型的应用。

步骤

首先确保安装了pytorch。

1.安装mmcv库

pip install openmim
mim install mmcv

### 2.下载mmselfsup项目

git clone https://github.com/open-mmlab/mmselfsup.git

可以使用git,也可以在github上下载压缩包然后解压

3.进入项目主文件夹,安装所需的第三方包

cd mmselfsup-main
pip install -e .

4.找到所选定模型的配置文件,文件路径在:configs/selfsup里面

configs/selfsup下的文件如下图所示:
在这里插入图片描述
其中文件夹名字就是模型的名称,beit就代表BEIT模型。
这里我选择的是simsiam。

5.进入该文件夹,该文件夹下面存在一些配置文件,用于之后的训练过程

该文件夹下的情况如下:
在这里插入图片描述
其中配置文件的命名规则为:

{模型信息}_{模块信息}_{训练信息}_{数据集信息}

simsiam_resnet50_8xb32-coslr-100e_in1k.py表示模型名称为simsiam,里面使用的模块包括resnet50,训练为8卡,batch size为32,采用cos类型的学习率变化函数,数据集为imagenet1k。
配置文件内部为:
在这里插入图片描述
其中继承的配置文件地址在:configs/selfsup/base,如下图:
在这里插入图片描述

6.查看数据集的继承的配置文件

文件内部介绍

因为我们所使用的数据集的路径跟继承的配置文件中设置的路径不同,所以需要进行修改。
为此,需要先看看继承的配置文件里面是什么样的。
首先需要修改数据集的根目录:
在这里插入图片描述
然后更改标签文件和数据文件的相对路径,改成自己的即可。
在这里插入图片描述

标签文件的构建

需要注意的是,除开VOC类型的,一般的数据集文件夹结构为:

data
│   ├── datasetname
│   │   ├── meta
│   │   ├── train
│   │   ├── val

其中meta文件夹里面存在标签文件,train和val文件夹里面存放数据文件,如图片。(train和val也可以放在一个文件夹里面)
对于有监督的训练,标签文件的基本组成为:
在这里插入图片描述
其中左边是数据文件的相对路径,右边是对应的标签。
标签文件的构建mmselfsup给我们提供了一个样例,文件路径在:tools/dataset_converters/convert_imagenet_subsets.py,按照它的思路进行修改即可。

7.构建自己的配置文件

在配置文件所在文件夹新建一个文件,命名方式跟之前说过的一致,这样便于理解。
然后根据自己的实际情况进行相应的修改,注意修改的时候定义的变量名称不是随便定义的,要和继承的文件中的名字一致。下面介绍大致流程。
首先选择继承哪个文件,这里我选择的是:simsiam_resnet50_8xb32-coslr-200e_in1k.py

_base_ = 'simsiam_resnet50_8xb32-coslr-200e_in1k.py'

注意要使用_base_,然后右边的相当于配置文件所在的路径。

然后更改学习率,因为没有采用和继承的配置文件一样的设置,所以需要修改。继承的配置文件使用的是8 * 32,而我使用的是1 * 32,因此学习率要除以8。

lr = 0.05 / 8
optimizer = dict(lr=lr)

接着修改数据集的相关设置,如:data_root

data_root = '/root/dataset/food-101/'
train_dataloader = dict(
    dataset=dict(
        ann_file='meta/food101_train.txt',
        data_prefix=dict(img_path='images/')
    )
)

最后修改训练的次数,每隔多少次保存一次模型和打印日志的间隔。

default_hooks = dict(
    logger=dict(interval=10),
    checkpoint=dict(interval=20, max_keep_ckpts=5)
)
train_cfg = dict(max_epochs=200)

8.进行训练

训练的代码在tools/train.py,也可以使用dist_train.sh文件。其中train.py适用于单卡,dist_train.sh可以进行分布式训练。

使用dist_train.sh进行训练的代码如下:

bash dist_train.sh ${CONFIG} ${GPUS} --cfg-options model.pretrained=${PRETRAIN}

使用train.py进行训练的代码如下:

python train.py ${CONFIG_FILE} [optional arguments]

如:python train.py /root/Project/mmselfsup-main/configs/selfsup/simsiam/simsiam_resnet50_1xb32-coslr-200e_food101.py

如果想要后台运行,改成:nohup python train.py /root/Project/mmselfsup-main/configs/selfsup/simsiam/simsiam_resnet50_1xb32-coslr-200e_food101.py &

结语

openmm系列是一个十分优秀的深度学习开源框架,里面集成了很多优秀的算法,十分值得借鉴学习,可以省去很多自己写代码的时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#探索之路(8):初探.Net中官方文档OpCode的格式

C#探索之路(8):初探.Net中官方文档OpCode的格式 文章目录 C#探索之路(8):初探.Net中官方文档OpCode的格式1 前提2 疑惑1:Opcode格式是什么?3 答疑1:4 验证方式:5 总结 1 前提 最近在尝试了解学习这个OpCod…

使用ChatGPT最新版实现批量写作,打造丰富多彩的聚合文章

随着人工智能的迅猛发展,ChatGPT最新版作为一种自然语言处理模型,可以为我们提供强大的文本生成能力。在这篇文章中,我们将探讨如何利用ChatGPT最新版来实现批量写作,从而打造丰富多彩的聚合文章。 一、ChatGPT最新版简介 Chat…

使用mpi并行技术实现快排Qsort()

快排基本原理: 快速排序可以说是最为常见的排序算法,冒泡排序时间复杂度达到了O(N2),而桶排序容易造成浪费空间。快排(Quicksort)就成为了不错的选择。 1、原理:快排需要找一个数作…

基于 JavaScript 中的 Date 类型实现指定日期和天数的加减运算

文章目录 Intro基本方法构造方法--如何初始化一个Date对象?Date 对象的天数加减法 【工具方法封装】最后 Intro 刚才突然想到,我还有多久就要过27岁的生日了呢。 年近三十,一事无成。 以下基于 JavaScript 中的 Date 对象封装一些方法。 基…

CAS、AtomicInteger和LongAdder原理

目录 一、CAS 1、介绍 2、CAS与volatile 3、为什么无锁效率高 4、总结 二、原子整数 三、原子引用 1、介绍 2、ABA问题 3、AtomicStampedReference 4、AtomicStampedReference 四、原子累加器 1、介绍 2、LongAdder重要关键域 CAS锁 原理之伪共享 3、LongAdde…

Java性能权威指南-总结15

Java性能权威指南-总结15 堆内存最佳实践对象生命周期管理弱引用、软引用与其他引用 小结 堆内存最佳实践 对象生命周期管理 弱引用、软引用与其他引用 在Java中,弱引用和软引用也支持对象重用,不过作为开发者,并不会经常从重用的角度看待…

【C语言进阶】文件操作

目录 🥅什么是文件: 🏑程序文件:🏑数据文件: 🏑文件名: 🥅文件的打开和关闭:🏑文件指针: 🏑fopen和fclose: &a…

基于matlab使用先导校准来补偿阵列不确定性(附源码)

一、前言 此示例说明如何使用先导校准来提高天线阵列在存在未知扰动时的性能。 原则上,可以轻松设计理想的均匀线性阵列(ULA)来执行阵列处理任务,例如波束成形或到达方向估计。在实践中,没有理想的阵列。例如&#xff…

io.netty学习(二)Netty 架构设计

目录 前言 Selector 模型 SelectableChannel Channel 注册到 Selector SelectionKey 遍历 SelectionKey 事件驱动 Channel 回调 Future 事件及处理器 责任链模式 责任链模式的优缺点 ChannelPipeline 将事件传递给下一个处理器 总结 前言 上一篇文章&#xff…

1.react路由的基本使用

第一步 首先打开index.js,在里面引入BrowserRouter或者HashRouter,启用全局路由模式。 BrowserRouter与HashRouter的区别 // index.js import React from react; import ReactDOM from react-dom/client; import ./index.css; import App from ./App;…

P31[10-1]软件模拟IIC通信协议(使用stm32库函数)(内含:实物连接+IIC时序解释+硬件电路+IIC基本时序单元(起始 终止 发送接收 ))

IIC通讯分为硬件读写IIC和软件IIC,以下为软件读写IIC 实物连接如下: 解释: 软件IIC通讯,对MPU6050芯片内部的寄存器进行读写操作,。写入配置寄存器,即可对外挂模块进行配置。。读出数据寄存器,即可获取外挂模块的数据。。。 OLED第一行为设备ID号(固定,有些可能不同)…

基于Springboot+mybatis+mysql+html图书管理系统2

基于Springbootmybatismysqlhtml图书管理系统2 一、系统介绍二、功能展示1.用户登陆2.用户主页3.图书查询4.还书5.个人信息修改6.图书管理(管理员)7.学生管理(管理员)8.废除记录(管理员) 三、数据库四、其它…

8.compute部署neutron服务

compute节点 安装软件包 yum -y install openstack-neutron-linuxbridge ebtables ipset 修改配置文件:/etc/neutron/neutron.conf #查看文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron ... /etc/neutron/neutron.conf #备份配置文件 cp /e…

C语言:将一句话的单词进行倒置,标点不倒置。

题目: 将一句话的单词进行倒置,标点不倒置。(字符数组长度不超过100) 比如:I like beijing. 经过函数后变为:beijing. like I 思路: 总体思路: (可以把两步顺序调换&am…

chatgpt赋能python:Python中寻找不重复字符的方法

Python中寻找不重复字符的方法 Python是一种著名界面友好、易学易用且功能强大的编程语言,广泛应用于各种需求中。在本篇文章中,我们将会讨论如何使用Python编程语言来寻找一个字符串中的不重复字符。我们将简单介绍如何实现这个过程以及为什么这个过程…

Python小白如何利用GPT4快速开发一个网站!

这个是一个全栈的项目,麻雀虽小,五脏俱全!全程都是利用gpt4进行辅助编程搞定的。第一版其实非常快,大概30分钟就搞定了,后续就是不断的添砖加瓦,增加功能和优化UI。 其实很多小白都在说要学Python&#xff…

chatgpt赋能python:Python扩展库需要导入吗?重要性与结论解析

Python扩展库需要导入吗?重要性与结论解析 作为业内最受欢迎的编程语言之一,Python在数据科学、人工智能、Web开发等领域拥有大量的应用。在Python开发过程中,扩展库的使用是不可避免的。本文将介绍Python扩展库的重要性以及是否需要导入的问…

【Arduino】Portenta H7 板子介绍

文章目录 1. Features2. Pins Name3. Functions3.1 analogReadResolution()3.2 millis() Ref. 1. Features 2. Pins Name 3. Functions 3.1 analogReadResolution() analogReadResolution() is an extension of the Analog API for the Zero, Due, MKR family, Nano 33 (BLE …

vue3-实战-10-管理后台-权限管理之用户管理模块开发

目录 1-用户首页列表开发 1.1-需求原型分析 1.2-封装请求和数据类型 1.3-数据页面渲染和展示 1.4-点击搜索按钮搜索用户 1.5-点击重置按钮 2-新增编辑用户 2.1-原型需求分析 2.2-表单页面数据收集 2.3-页面校验规则的定义 2.4-添加用户按钮编辑按钮逻辑 2.5-保存和取…

C++个人通信录系统

背景: 使用C编写一个通信录程序,来完成作业上的一些需求。 1-提供录入个人信息、修改个人信息(姓名和出生日期除外)、删除个人信息等编辑功能 2-提供按姓名查询个人信息的功能 3-提供查找在5天之内过生日的人员的信息&#xf…