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

图像分类工具包MMClassification

环境安装

依赖环境安装

MMClassification 需要Python3.6+、CUDA9.2+和Pytorch1.5+

MMCls安装——最佳实践
Step1: 使用MIM安装MMCV

pip install -U openmin
mim install mmcv-full

Step2: 安装MMClassification

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

模型训练

所有的输出(日志文件和模型权重文件)将会被保存到工作目录下。工作目录通过配置文件中的参数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

你可能感兴趣的:(AI学习,计算机视觉,分类,python)