mmcls理论、答疑、布置作业、超算平台使用
定义数据、数据预处理、
基于dataset,做dataload做采样;
写模型(nn.module),前传计算图
device cuda 传入gpu计算;
optimizer优化模型参数;
写函数train内层循环,遍历数据集,前传预测概率,做损失,再反向传播算梯度,写logs
还有一个外层的t为参计数的循环
并且要把模型训练好的参数存储文件.pth ;
应用于新数据集的部署:
实例化,加载训练好的参数,找一个数据集,
把模型调成eval(module.eval() ),
在no_grad下,同样的数据预处理,丢到模型里产生预测值
配置文件: openmmlab module zoo里可以下载;同样功能命令行下载方式是:mim download mmcls --config mobilenet-v2_8xb32_inlk --dest .
下载下来配置文件与对应的参数文件
pipeline,定义了从加载数据集到输入网络的东西:读入,数据增强,
训练子集,验证子集,测试子集;
优化器们
简单的高级api读入模型并且进行推理:
使用init_modle,inference_modle
init_model(config,对应pth,device)
推理inference_model(model, '图片')
可视化shou_result_pyplot(初始化后模型,'图片',推理结果)
训练:
基于预训练模型进行微调训练:
修改配置文件,model字段修改num_classed,设置load_from为预训练好的pth;
data字段修改type为customdataset,配置路径;ann_file的标注;数据增强部分按需改动。
优化器部分,可选的修改,但是记得gpu个数不同,等比要修改lr。
runner字段定义训练epoch轮数,log_config中interval修改多少iteration后输出一次log
启动训练:
mim train mmcls 配置文件
交叉熵损失的函数应该要弄得比较懂一些。
答疑部分:
拥有全连接层的网络要求输入图像的尺寸的恒定的;用global ag来代替全连接层就可以使用不同的输入大小;
实践部分:
conda安装pytorch缓慢的原因,slove envirnment很久,并且condatool很久;
按照视频走的话到了分割数据集的一步没有完全同步,分割完数据集之后进行配置文件的下载与准备,每个人可以使用不同的。
提交训练任务到gpu服务器: 书写一个run.sh 文件
(#!/bin/bash 设置编译器
module load 三个你使用环境需要的
source activate 环境
export PYTHONUNBUFFERED=1 用以刷新log
python tools/train.py --configs ... 正常些python运行train.py所需要的
)
将上述.sh命令行文件提交:sbatch --gpus=1 run.sh
parajobs 查看提交的作业,用输出的id来查看log输出,可以用节点id,用ssh 来查看,例如ssh g0099 进入到gpu环境,使用nvidia-smi 来查看
使用grep python 来查看进程;exit来退出
log会存储在提交.sh文件目录下的的slurm,使用tail -f 文件查看