mmclassification-安装使用(一)

目录

1、环境安装

2、训练测试

2.1、测试

2.2、训练

3、使用工具

3.1、计算floats

3.2、发布模型


更新记录:

2020.12.15:更新最新版pytorch安装,更新因项目文件命名修改引起的代码示例无法运行问题,补充更加详细的说明。

项目地址:https://github.com/open-mmlab/mmclassification

1、环境安装

python 3.7+
mmcv 1.2.1
opencv-contrib-python 4.3.0.36
opencv-python 4.3.0.36
Pillow 7.2.0
pycocotools 2.0.1
torch 1.7.0
torchvision  0.8.1
cuda 11.0
conda install pytorch torchvision cudatoolkit=11.0 -c pytorch # 依据官方最新版本安装
git clone https://github.com/open-mmlab/mmclassification.git
cd mmclassification
pip install -e .  # or "python setup.py develop"

照上述说明,mmclassification是在dev模式下安装的,对代码进行的任何本地修改都将生效,而无需重新安装它(除非您提交了一些提交并希望更新版本号)。

2、训练测试

2.1、测试

测试一个数据集:

1)single GPU;

2)single node multiple GPU;

3)multiple node;

测试实例:

# single-gpu testing
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}]

# multi-gpu testing
./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE} ${GPU_NUM} [--out ${RESULT_FILE}]

测试:

测试时,需要提供config文件及权重文件。首先,在工程目录下configs,任选一个,以cifar10下resnet50_b16x8.py为例。

在项目端,model_zoo页面,下载与之对应的模型文件,这里对应文件为CIFAR10下的ResNet-50-b16x8模型,点击model进行下载。下载后,在工程目录新建checkpoints文件夹,将模型放入。https://github.com/open-mmlab/mmclassification/blob/master/docs/model_zoo.md

python tools/test.py configs/cifar10/resnet50.py checkpoints/resnet50_batch256_20200708.pth

运行该脚本会自动下载模型及数据。自带的下载方式较慢,可手动下载后放对应目录。

测试结果如下:

2.2、训练

支持分布式、非分布式训练,分别使用MMDistributedDataParallel和MMDataParallel实现。所有输出都会在配置的work_dir里。

默认在每个epoch迭代进行进行验证集测试,改变验证频率可设置interval:

evaluation = dict(interval=12) # This evaluate the model per 12 epoch.

单GPU训练:

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

实例:

python tools/train.py configs/cifar10/resnet50_b16x8.py

多GPU训练:

./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]

可选参数为:

--no-validate:不验证。

--work-dir:覆盖配置文件中指定的工作目录。

--resume-from:从先前的检查点文件恢复。

resume-from与load-from之间的差异:

resume-from同时加载模型权重和优化器状态,​​并且epoch 也从指定的检查点继承,它通常用于恢复意外中断的训练过程。

 load-from仅加载模型权重,并且训练时期从0开始。通常用于微调。

实例:

python tools/train.py configs/cifar10/resnet50_b16x8.py --resume-from=work_dirs/resnet50/epoch_14.pth

多机器训练:

[GPUS=${GPUS}] ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR}

在一个机子上运行多任务训练:

CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 ./tools/dist_train.sh ${CONFIG_FILE} 4
CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 ./tools/dist_train.sh ${CONFIG_FILE} 4

3、使用工具

3.1、计算floats

python tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}]

结果如下:

==============================
Input shape: (3, 224, 224)
Flops: 4.12 GFLOPs
Params: 25.56 M
==============================

1)FLOP与输入形状有关,而参数与输入形状无关。默认输入形状为(1、3、224、224);

2)像GN和自定义运算符一样,某些运算符不计入FLOP中。mmcv.cnn.get_model_complexity_info()有关详情,请参阅。

3.2、发布模型

在将模型上载到AWS之前,您可能需要:

1)将模型权重转换为CPU张量;

2)删除优化器状态;

3)计算检查点文件的哈希并将哈希ID附加到文件名中。

python tools/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME}

实例:

python tools/publish_model.py work_dirs/resnet50/latest.pth imagenet_resnet50_20200708.pth

最后输出文件将会是:imagenet_resnet50_20200708-{hash id}.pth。

传送门:mmclassification项目阅读系列文章目录

教程文档翻译:

mmclassification-安装使用(一)

mmclassification-模型微调(二)

mmclassification-添加新数据集(三)

mmclassification-自定义数据管道(四)

mmclassification-添加新模块(五)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值