将MAE方法用于reflacx数据集--MMpretrain/slurm

news2024/11/24 9:17:48

MAE—reflacx

  • 问题
    • 问题一 === 对数据集reflacx的了解
    • 问题二 === MAE实现的是有监督,还是无监督任务
    • 问题三 === 实验流程
    • 问题四 === 实验目的
  • 一、从github上fork我师兄的项目30min(github账号的注册什么的,可以去参考b站)
    • 1.1 点开下面这个链接
    • 1.2 看到页面的上方,跟随我们的小兔子fork一下
    • 1.3 根据这个指引,填好之后,点击绿色的Create fork
    • 1.4 然后点击右上角自己的头像,点开 Your repositories(你的仓库)
    • 1.5 点击蓝色的mmpretrain项目,然后点击这个绿色的code,点击如下复制键
  • 二、创建一个虚拟环境 (1h)
    • 2.1 根据下面的链接学习如何创建环境
    • 2.2 实际创建一个虚拟环境,这里我们创建环境名mmlab
  • 三、根据模板来编写我们的MAE—reflacx (3h)
    • 3.1 读取reflacx数据集
    • 3.2 编写base文件
    • 3.3 mea模型文件
  • 四、在集群上运行 (24h)
    • 4.1 新建.sh文件,slurm集群管理版本
    • 4.2 bash运行
    • 4.3 运行中途打印的信息与最后得到的.pth文件

问题

问题一 === 对数据集reflacx的了解

ReFLACX (Revised Fully Labeled Chest X-ray) 数据集是一个专门用于医学影像分析的公开数据集,特别是胸部X光片的自动化分析。该数据集提供高质量的X光片影像,并附有详细的医学注释,旨在推动深度学习在医学影像中的应用和发展。

reflacx文件
来看一下reflacx.json文件

...
{
        "study_id": "34cedb74-d0996b40-6d218312-a9174bea-d48dc033",
        "image_path": "files/p18/p18111516/s55032240/34cedb74-d0996b40-6d218312-a9174bea-d48dc033.jpg",
        "report": "support apparatus. no pneumothorax. enlarged cardiac silhouette. no pulmonary consolidation or acute airspace disease.",
        "reflacx_id": "P102R108387"
    },
...

可以看到这个注释文件的标签有study_id、image_path、report、reflacx_id四类。注意我们现在这个任务只需要使用这些图片,image_path就是我们要使用的东西

问题二 === MAE实现的是有监督,还是无监督任务

MAE是一种自监督学习方法
自监督学习是一种无监督学习的变种,它利用数据自身生成的标签来进行训练,而不需要人工标注的数据。这种方法在图像、文本等领域应用广泛,常用于预训练模型,使其在后续的有监督任务(如分类、检测等)中表现更好。MAE通过遮盖输入数据的一部分,然后训练模型重建被遮盖部分,从而学习数据的内部表示。以下是MAE的具体工作流程:

  1. 数据遮盖:随机遮盖输入数据的一部分。例如,在图像任务中,可以随机遮盖图像的一些区域。
  2. 编码器:将遮盖后的数据输入编码器,编码器提取剩余部分的特征。
  3. 解码器:将编码器的输出输入解码器,解码器尝试重建被遮盖的数据部分。
  4. 损失函数:计算重建部分与原始数据之间的差异(如均方误差,MSE),并反向传播更新模型参数。
    通过上述步骤,MAE在训练过程中学习如何从部分数据中恢复整体数据,从而捕获数据的全局特征和结构。

MAE方法最初是在图像领域提出的,例如用于图像分类任务的预训练。在这类任务中,MAE通过遮盖部分图像像素,并训练模型重建被遮盖部分,从而学习图像的有效表示。预训练后的模型可以迁移到下游的有监督任务中,通常能显著提高这些任务的性能。
总的来说,
MAE是一种自监督学习方法,属于无监督学习范畴。通过数据遮盖和重建任务,MAE能够在没有人工标注的情况下学习数据的有效表示。这种方法在需要大量数据预训练的任务中表现尤为突出,可以为后续的有监督任务提供强大的特征表示。

问题三 === 实验流程

  1. 从github上fork我师兄的项目 (30min)
  2. 创建一个虚拟环境 (1h)
  3. 根据模板来编写我们的MAE—reflacx (4h)
  4. 在集群上运行 (24h)

问题四 === 实验目的

得到自监督的预训练模型参数文件 (XXX.pth)

一、从github上fork我师兄的项目30min(github账号的注册什么的,可以去参考b站)

1.1 点开下面这个链接

师兄的mmpretrain网址

1.2 看到页面的上方,跟随我们的小兔子fork一下

在这里插入图片描述

1.3 根据这个指引,填好之后,点击绿色的Create fork

在这里插入图片描述

1.4 然后点击右上角自己的头像,点开 Your repositories(你的仓库)

在这里插入图片描述

1.5 点击蓝色的mmpretrain项目,然后点击这个绿色的code,点击如下复制键

把这个链接记下来,待会儿要用。
我的是:

https://github.com/jelly2933/mmpretrain.git

在这里插入图片描述

二、创建一个虚拟环境 (1h)

2.1 根据下面的链接学习如何创建环境

先看一下所有的操作,2.2会详细地展示

mmpretrain环境安装文档

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/97ae4ae44ee54edc8f563bf9d0381b1f.png

2.2 实际创建一个虚拟环境,这里我们创建环境名mmlab

先用vscode连接好集群在bash(就是这种命令行输入的地方)下,先运行一下 cd ~ 回到家目录,然后依次执行下面的命令
在这里插入图片描述

  1. 去B站学习一下安装miniconda,最好是在家目录下创建一个software文件夹,再安装miniconda。
  2. cd ~
  3. conda create --name mmlab python=3.10 -y
  4. conda activate mmlab
  5. 这里要安装pytorch,有一些讲究,要去官网选择版本

pytorch官网

这是我的选择,感觉这个版本还是比较稳定的

在这里插入图片描述

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

要是下载比较慢,可以多试几次,或者加上ali云的镜像

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -i https://mirrors.aliyun.com/pypi/simple/

6.注意,这里要使用到1.5记下来的链接,把下面的链接替换为你复制的链接

git clone https://github.com/jelly2933/mmpretrain.git
  1. cd mmpretrain
  2. pip install -U openmim && mim install -e . -i https://mirrors.aliyun.com/pypi/simple/
  3. 太棒了,你成功创建了mmlab环境,喝口水吧。

三、根据模板来编写我们的MAE—reflacx (3h)

在mmpretrain文件夹下,可以看到超多文件,不要随便改动尤其是别删除,我们根据他给的文件,添加文件,来实现我们的功能。

3.1 读取reflacx数据集

定位到mmpretrain文件夹下
cd ~/mmpretrain/

  1. 根据下图依此点开mmpretrain -> mmpretrain -> dataset。注意根目录是的mmpretrain
  2. 先看__init__.py文件

看到白色框框里面的,是我们将“Reflacx”类型的数据做好了注册,等下可以使用dataset_type = “Reflacx”这个语句。在这里插入图片描述
3. 接下来找到reflacx.py
重点关注load_data_list()这个函数,蓝色框里面就是用来读取我们数据的json文件的语句,白色框里是比较关键的读取图片的路径,上面我已经提到MAE是自监督方法,不需要标注信息,这里的info可以只使用绿色的第一句,我们只要获得这个图片就可以。
在这里插入图片描述

3.2 编写base文件

根目录是mmpretrain,依此点开configs -> _ base _ 。

  1. datasets文件
  • 先点开datasets,创建reflacx_bs64_mae.py文件
    在这里插入图片描述
  • 找到我们准备模仿的imagenet_bs512_mae.py文件,将imagenet_bs512_mae.py文件copy到reflacx_bs64_mae.py中
    第一个白色框是我们根据reflacx改动的,第二个白色框是将batch_size改小一点为64,加载数据的子进程数量num_workers改为4。
    黄色框是我们要删除的部分,因为所使用的reflacx数据集并没有划分训练集。
    绿色框部分是imagenet数据集的像素均值和标准差,这里我们没有计算reflacx数据集的,是可以计算之后替换掉的部分,或许2.0版本。
    在这里插入图片描述
  1. models文件
  • 先点开models,打开mae_vit-base-p16.py文件
    黄色框为我们添加的部分,这里要加载一个模型的参数。
    在这里插入图片描述
  • 在bash依次运行
cd ~
mkdir preTrain
cd preTrain
wget https://download.pytorch.org/models/vit_b_16-c867db91.pth
ls

在这里插入图片描述
看到这个.pth文件,说明下载好了参数
回到mmpretrain下

cd ~/mmpretrain/

3.接下来就还剩一个文件的编写了,真棒,喝口水吧~

3.3 mea模型文件

根目录是mmpretrain,依此点开configs -> mae 。

  1. 创建一个mae_vit-base-p16_1xb64-amp-coslr-400e_reflacx.py文件,打开mae_vit-base-p16_8xb512-amp-coslr-400e_in1k.py文件,将里面的内容复制到mae_vit-base-p16_1xb64-amp-coslr-400e_reflacx.py。
    在这里插入图片描述
    2.同时打开 mae_vit-base-p16_1xb64-amp-coslr-400e_reflacx.py和mae_vit-base-p16_8xb512-amp-coslr-400e_in1k.py

    第一个白色框,是我们在3.2做的改动,通过datasets/reflacx_bs64_mae.py,我们可以batchsize=64使用reflacx数据集;通过models/mae_vit-base-p16.py我们添加了vit_b_16-c867db91.pth模型参数。
    第二个白色框,将学习率改为比较常用的1e-3
    在这里插入图片描述
    白色框是修改为每隔一百轮保存一次模型,最多保存400个模型参数文件,即.pth文件;
    每隔10轮打印一次输出信息;
    黄色框为删除的部分。
    在这里插入图片描述 3.到此,要添加的内容就完成了!!

四、在集群上运行 (24h)

根目录是mmpretrain,点开tools 。

4.1 新建.sh文件,slurm集群管理版本

这里命名为bme_train.sh

#!/usr/bin/env bash
#SBATCH -p bme_gpu
#SBATCH --job-name=selfsup_reflacx
#SBATCH --nodes=1
#SBATCH --gres=gpu:1
#SBATCH --mem=64G
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=4
#SBATCH -t 5-00:00:00

set -x

CONFIG=$1
PY_ARGS=${@:2}
source activate mmlab
nvidia-smi

PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
python -u tools/train.py ${CONFIG} --launcher="slurm" ${PY_ARGS}

# PYTHONPATH="$(dirname $0)/..":$PYTHONPATH OMP_NUM_THREADS=4 python -u tools/train.py ${CONFIG} --launcher="slurm" ${PY_ARGS}
# PYTHONPATH="$(dirname $0)/..":$PYTHONPATH python -u tools/train.py ${CONFIG} --launcher="slurm" ${PY_ARGS}
# gpu:1
# gpu:NVIDIAA10080GBPCIe:1#

4.2 bash运行

cd ~/mmpretrain
sbatch tools/bme_train.sh  configs/mae/mae_vit-base-p16_1xb64-amp-coslr-400e_reflacx.py 

4.3 运行中途打印的信息与最后得到的.pth文件

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
得到的epoch_400.pth可以用作预训练模型参数啦,下一步就是评估这个模型参数。

多多点赞,会变好看!!

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

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

相关文章

PyTorch -- 最常见激活函数的选择

首先,简单复习下什么是梯度:梯度是偏微分的集合 举例说明:对于 z y 2 − x 2 : ∇ z ( ∂ z ∂ x , ∂ z ∂ y ) ( 2 x , 2 y ) z y^2-x^2: \nabla z (\frac{\partial z}{\partial x}, \frac{\partial z}{\partia…

vue3+vite+ts 使用webrtc-streamer播放海康rtsp监控视频

了解webrtc-streamer webrtc-streamer 是一个使用简单机制通过 WebRTC 流式传输视频捕获设备和 RTSP 源的项目,它内置了一个小型的 HTTP server 来对 WebRTC需要的相关接口提供支持。相对于ffmpegflv.js的方案,延迟降低到了0.4秒左右,画面的…

PyTorch学习9:卷积神经网络

文章目录 前言一、说明二、具体实例1.程序说明2.代码示例 总结 前言 介绍卷积神经网络的基本概念及具体实例 一、说明 1.如果一个网络由线性形式串联起来,那么就是一个全连接的网络。 2.全连接会丧失图像的一些空间信息,因为是按照一维结构保存。CNN是…

Shell环境下的脚本编程与应用

Shell是什么? Shell 是一个命令行解释器,它接收用户输入的命令(如 ls、cd、mkdir 等),然后执行这些命令。Shell 同时还是一种功能强大的编程语言,允许用户编写由 shell 命令组成的脚本(script&…

Windows搭建nacos集群

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。 下载地址:Tags alibaba/nacos GitHub 链接:百度网盘 请输入提取码 提取码:8888 解压文件夹 目录说明&am…

基于条件谱矩的时间序列分析(以轴承故障诊断为例,MATLAB)

谱矩方法可以对数据的表面形貌做较为细致的描述.它以随机过程为理论基础,用各阶谱矩及统计不变量等具体的参数表征表面的几何形态,算术平均顶点曲率是一种基于四阶谱矩的统计不变量。 鉴于此,采用条件谱矩方法对滚动轴承进行故障诊…

[大模型]MiniCPM-2B-chat Lora Full 微调

MiniCPM-2B-chat 介绍 MiniCPM 是面壁智能与清华大学自然语言处理实验室共同开源的系列端侧大模型,主体语言模型 MiniCPM-2B 仅有 24亿(2.4B)的非词嵌入参数量。 经过 SFT 后,MiniCPM 在公开综合性评测集上,MiniCPM …

【C++题解】1469. 数的统计

问题:1469. 数的统计 类型:嵌套循环 题目描述: 试计算在区间 1 到 n 的所有整数中,数字 x ( 0≤x≤9 )共出现了多少次? 例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字…

HCIA 10 网络安全之结合ACL访问控制列表登录Telnet及FTP

ACL 本质上是一种报文过滤器,规则是过滤器的滤芯。设备基于这些规则进行报文匹配,可以过滤出特定的报文,并根据应用 ACL 的业务模块的处理策略来允许或阻止该报文通过。 1.实验介绍及拓扑 R3 为telnet服务器,R1 为客户端&#…

简单的基于Transformer的滚动轴承故障诊断(Pytorch)

递归神经网络在很长一段时间内是序列转换任务的主导模型,其固有的序列本质阻碍了并行计算。因此,在2017年,谷歌的研究人员提出了一种新的用于序列转换任务的模型架构Transformer,它完全基于注意力机制建立输入与输出之间的全局依赖…

计算机图形学入门09:深度缓存

在前面知道了怎么将一个三角形显示到屏幕上,那么如果有很多三角形,各自距离相机的远近也不一样,并且三角形会相互遮挡。也就是三维空间中有很多物体,通常近处的物体会遮挡住远处的物体,那么在计算机渲染中该如何处理呢…

出现 Error creating bean with name xxx defined in class 的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法4. Demo1. 问题所示 此类问题来自私信,本着探究问题的缘由,理性分析了下,让大家也学会分析Bug解决Bug 问题如下所示: Error creating bean with name xxx defined in class截图如下所示: 2. 原理分析 通用的原理进行分析 出现…

【C语言初阶】数组

🌟博主主页:我是一只海绵派大星 📚专栏分类:C语言 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、一维数组的创建和初始化 1、数组的创建 1.1数组的创建方式 1.2数组创建的实例 2、数组的初始化 二、一维数组的使用…

vue.js+node.js+mysql在线聊天室源码

vue.jsnode.jsmysql在线聊天室源码 技术栈:vue.jsElement UInode.jssocket.iomysql vue.jsnode.jsmysql在线聊天室源码

word怎么单页横向设置(页码不连续版)

打开word,将光标放在第一页的最后位置。 然后点击布局下的分隔符,选择下一页。 将光标放在第二页的开头,点击布局下的纸张方向,选择横向即可。 效果展示。 PS:如果那一页夹在两页中间,那么在…

基于C#开发web网页管理系统模板流程-主界面密码维护功能完善

点击返回目录-> 基于C#开发web网页管理系统模板流程-总集篇-CSDN博客 前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面统计功能完善-CSDN博客 一个合格的管理系统,至少一定存在一个功能——用户能够自己修改密码,理论上来说密码只能有用…

上位机图像处理和嵌入式模块部署(h750 mcu串口命令处理)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面学习103和407的时候,当时学过串口的收发。不过当时使用的主要是阻塞的方式。这一次,我们看下应该怎么利用中断的形式进…

互联网时代:挑战与机遇并存

随着科技的飞速发展和互联网的广泛普及,我们已然踏入了一个以信息为主导的互联网时代。这个时代以其鲜明的特点,正在深刻地改变着我们的生活方式、工作节奏以及社会交往模式。而如此深刻的社会变革,也引发了人们对于互联网时代所带来的挑战与…

计算机毕业三年的我,辞职两次后找不到工作回家,此时是真的羡慕有手艺在手的人

栀子花香,弥漫在空气中,却掩盖不了内心的苦涩。 半年,两份工作,两次裸辞,我,又成了一个身无分文的“废人”。 曾经,我也是人人羡慕的互联网人,月薪6K,过着“955”的“神…

【DevOps】Nginx配置文件详解与实战部署PHP站点

目录 引言 Nginx配置文件概述 基本结构 关键指令 Nginx配置文件实战 全局指令配置 HTTP指令配置 服务器指令配置 位置指令配置 实战部署PHP站点 步骤1:安装Nginx和PHP 步骤2:创建网站目录和文件 步骤3:配置Nginx服务器块 步骤4…