计算机视觉之图像分类代码教学——OpenMMLab实战营第三讲

图像分类工具包MMClassification

环境安装——北京超算中心

点击链接https://cloud.blsc.cn/,下载客户端。使用北京超级云计算中心账号登录。
点击SSH,进入到命令行界面。
用户登陆上即在家目录(home),不要在此目录下安装软件及存放文件。默认配额为1GB。
命令行输入cd run/ 进入作业运行数据存放目录run (300G的默认配额)
依赖环境——MMClassification

  • Python3.6+
  • CUDA 9.2+(RTX3090显卡需要CUDA11.1+)
  • PyTorch 1.5+
module avail  # 查看可用的模块
module load anaconda/2021.05 # 加载需要使用的模块

创建conda环境mmclassification,并激活。conda activate与旧版source activate区别不大,只是速度更快。从conda4.4开始,conda activate是激活环境的首选方法。

conda create --name mmclassification python=3.8
source activate mmclassification

pip 安装PyTorch
超算中心的RTX3090显卡,需要CUDA的最低版本是11.1。尽量用pip安装,因为conda 安装会再次安装cudatoolkit模块,会花费大量时间。PyTorch安装命令在PyTorch官网

pip install torch==1.10.0+cu111 torchvision==0.11.0+cu111 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html

加载CUDA模块

module load cuda/11.1

安装MMCV包
使用pip安装mmcv
根据系统的类型、CUDA 版本、PyTorch 版本以及 MMCV 版本选择相应的安装命令。

pip install mmcv-full==1.7.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.10/index.html

安装MMClassification

  • 从源码编译安装(推荐):希望基于MMClassification 框架开发自己的图像分类任务,需要添加新的功能,比如新的模型或是数据集,或者使用我们提供的各种工具。
  • 作为Python包安装:只是希望调用MMClassification 的API接口,或者在自己的项目中导入MMClassification中的模块。
    这里推荐从源码编译安装
git clone https://github.com/open-mmlab/mmclassification.git
cd mmclassification
tar -zxvf mmclassification.tar.gz
module load gcc/7.3 #编译安装需要gcc模块
pip install -e .

最后的 “.” 表示安装在本地目录
与mim安装相比,pip安装会安装一些依赖包,mim自身带了足够的包,但在超算环境可能有兼容问题。
激活mmclassification环境

source activate mmclassification

新建data文件夹,用超算平台的快传工具上传下载的dataset到data目录中。

(mmclassification) [username@ln01 mmclassification] $ mkdir data
(mmclassification) [username@ln01 mmclassification] $ unzip flower_dataset.zip

用快传将本地PC编辑好的split_data.py文件上传到超算的data 目录中。

模型训练

所有的输出(日志文件和模型权重文件)将会被保存到工作目录下。工作目录通过配置文件中的参数work_dir 指定。
默认情况下,MMClassification 在每个周期后会在验证集上评估模型,可以通过在训练配置中修改interval参数来更改评估间隔

evaluation = dict(interval=12)  # 每进行12轮训练后评估一次模型

使用单个GPU进行训练

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

如果用户想在命令中指定工作目录,则需要增加参数--work-dir ${YOUR_WORK_DIR}

OpenMMLab项目中的重要概念——配置文件

深度学习模型的训练涉及几个方面:

  • 模型结构 模型有几层、每层多少通道数等
  • 数据集 用什么数据训练模型:数据集划分、数据文件路径、数据增强策略等
  • 训练策略 梯度下降算法、学习率参数、batch_size、训练总轮次、学习率变化策略等
  • 运行时 GPU、分布式环境配置等
  • 一些辅助功能 如打印日志、定时保存checkpoint等

以上所有的项目都涵盖在一个配置文件中,一个配置文件定义了一个完整的训练过程

  • model 字段定义模型
  • data 字段定义数据
  • optimizer、lr_config 等字段定义训练策略
  • load_from字段定义与训练模型的参数文件

MMCls配置文件
构建配置文件可以使用继承机制,从configs/__base__中继承ImageNet预训练的任何模型,ImageNet的数据data配置,学习率策略等。
以ResNet为例,在mmclassification/configs下创建resnet18目录(mkdir),将resnet18_b32_flower.py 文件放到里面。

_base_ = ['../_base_/models/resnet18.py', '../_base_/datasets/imagenet_bs32.py', '../_base_/default_runtime.py']
model = dict(
    head = dict(
            num_classes=5,
             topk =(1,)
             ))
data = dict(
     samples_per_gpu = 32,
     workers_per_gpu = 2,
     train = dict( 
        	data_prefix ='data/flower/train',
        	ann_file ='data/flower/train.txt',  
        	classes ='data/flower/classes.txt'
        	),
     val = dict(
             data_prefix ='data/flower/val',
             ann_file ='data/flower/val.txt',
             classes ='data/flower/classes.txt'
             )
         )
optimizer = dict(type='SGD', lr=0.001, momentum=0.9, weight_decay=0.0001)
optimizer_config = dict(grad_clip=None)
lr_config = dict(
           policy='step',
           step=[1])
runner = dict(type='EpochBasedRunner', max_epochs=100)
# 预训练模型
load_from = '/HOME/shenpg/run/openmmlab/mmclassification/checkpoints/resnet18_batch256_imagenet_20200708-34ab8f90.pt

数据集划分代码

split_data.py

提交计算

在环境、数据集、MMCls配置文件准备完成之后就可以提交计算,在N30提交计算可以通过作业脚本的方式,操作步骤如下:

  1. 新建一个作业脚本run.sh,脚本的解释器可以说/bin/sh、/bin/bash、/bin/csh,脚本内容如下:
1 #!/bin/bash
2 # 加载模块
3 module load anaconda/2021.05
4 module load cuda/11.1
5 module load gcc/7.3
6
7 # 激活环境
8 source activate openmmlab_mmclassification
9
10 # 刷新环境
11 export PYTHONUNBUFFERED=1
12 
13 # 训练模型
14 python tools/train.py \
15                            configs/resnet18/restnet18_b32_flower.py \
16                           --work-dir work/resnet18_b32_flower

  1. 使用sbatch命令提交作业脚本
sbatch --gpus-1 run.sh
  1. 使用squeue或parajobs查看提交的作业
  2. 查看作业输出日志
  3. 默认标准输出核标准出错都定向到一个 slum-%j.log(%j为作业ID)文件中
    通过tail命令查看日志输出
    tail -f slurm-27965.out
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值