MindCV
Build Type |
Linux |
MacOS |
Windows |
Build Status |
|
|
Not tested |
English | 中文
简介 |
安装 |
快速入门 |
教程 |
模型列表 |
支持算法 |
日志
简介
MindCV是一个基于 MindSpore
开发的,致力于计算机视觉相关技术研发的开源工具箱。它提供大量的计算机视觉领域的经典模型和SoTA模型以及它们的预训练权重。同时,还提供了AutoAugment等SoTA算法来提高性能。通过解耦的模块设计,您可以轻松地将MindCV应用到您自己的CV任务中。
主要特性
- 高易用性 MindCV将视觉框架分解为各种可配置组件,方便您使用MindCV定制您的数据管道、模型和学习管道。
>>> import mindcv
# 创建一个数据集
>>> dataset = mindcv.create_dataset('cifar10', download=True)
# 创建一个模型
>>> network = mindcv.create_model('resnet50', pretrained=True)
用户可以在一个命令行中自定义和启动他们的迁移学习或训练任务。
# 仅使用一个命令行即可启动迁移学习任务
python train.py --model swin_tiny --pretrained --opt adamw --lr 0.001 --data_dir = {data_dir}
性能结果
基于MindCV进行模型实现和重训练的汇总结果详见benchmark_results.md, 所用到的训练策略和训练后的模型权重均可通过表中获取。
各模型讲解和训练说明详见configs目录。
安装
依赖
- mindspore >= 1.8.1
- numpy >= 1.17.0
- pyyaml >= 5.3
- tqdm
- openmpi 4.0.3 (for distributed mode)
运行以下脚本,安装相关依赖。
pip install -r requirements.txt
用户可遵从官方指导 并根据自身使用的硬件平台选择最适合您的MindSpore版本来进行安装。如果需要在在分布式条件下使用,还需安装openmpi 。
之后的说明将默认用户已正确安装好相关依赖。
PyPI安装
MindCV的已发布版本可以通过PyPI安装。
pip install https://github.com/mindspore-lab/mindcv/releases/download/v0.0.1-beta/mindcv-0.0.1b0-py3-none-any.whl
源码安装
Git上最新的MindCV可以通过以下指令安装。
pip install git+https://github.com/mindspore-lab/mindcv.git
注:MindCV可以在Linux和Mac系统安装,但是目前还不能在Windows系统上安装。
快速入门
动手教程
在开始上手MindCV前,可以阅读MindCV的迁移学习教程,该教程可以帮助用户快速了解MindCV的各个重要组件以及训练、验证、测试流程。
以下是一些供您练习的代码片段。
>>> import mindcv
# List and find a pretrained vision model 列出满足条件的预训练模型名称
>>> mindcv.list_models("swin*", pretrained=True)
['swin_tiny']
# 创建模型
>>> network = mindcv.create_model('swin_tiny', pretrained=True)
# 验证模型的准确率
>>> !python validate.py - -model = swin_tiny - -pretrained - -dataset = imagenet - -val_split = validation
{'Top_1_Accuracy': 0.808343989769821, 'Top_5_Accuracy': 0.9527253836317136, 'loss': 0.8474242982580839}
图片分类示例
使用加载了预训练参数的SoTA模型对一张图片进行推理。
>>> !python
infer.py - -model = swin_tiny - -image_path = './tutorials/data/test/dog/dog.jpg'
{'Labrador retriever': 0.5700152, 'golden retriever': 0.034551315, 'kelpie': 0.010108651,
'Chesapeake Bay retriever': 0.008229004, 'Walker hound, Walker foxhound': 0.007791956}
预测结果排名前1的是拉布拉多犬,正是这张图片里的狗狗的品种。
训练和验证
使用MindCV,用户可以很容易地在标准数据集或自定义数据集上训练模型。仅几行代码就可以完成模型训练、迁移学习、模型验证等任务。
用户可以使用train.py
便捷地进行模型训练。下面是一个示例是在CIFAR10数据集上单卡训练DenseNet(单卡GPU)。
python train.py --model resnet50 --dataset cifar10 --dataset_download
更多参数说明,请运行`python train.py --help'。用户可以便捷地修改模型名称,优化器等其他超参。
训练过程中进行验证 要跟踪训练期间验证精度的变化,请启用参数--val_while_train
。
python train.py -model resnet50 -dataset cifar10 -val_while_train -val_split test -val_interval 1
每个轮次的训练损失和验证精度将保存在{ckpt_save_dir}/results.log
中。
恢复训练 要恢复训练,需要为恢复的指定检查点--ckpt_path
和--ckpt_save_dir
。包括上一轮次的学习率在内的优化器状态也将被恢复。
python train.py --model resnet50 --dataset cifar10 --ckpt_save_dir checkpoints --ckpt_path checkpoints/resnet50_30-100.ckpt
对于像ImageNet这样的大型数据集,有必要在多个设备上以分布式模式进行训练,MindCV对分布式相关功能支持良好。以下脚本是在ImageNet上使用4个GPU训练DenseNet121的示例。
export CUDA_VISIBLE_DEVICES=0,1,2,3 # suppose there are 4 GPUs
mpirun --allow-run-as-root -n 4 python train.py --distribute \
--model densenet121 --dataset imagenet --data_dir ./datasets/imagenet
用户可以使用yaml文件或设置外部参数来指定要使用的模型等其他组件。以下是使用预设的yaml文件进行训练的示例。
mpirun --allow-run-as-root -n 4 python train.py -c configs/squeezenet/squeezenet_1.0_gpu.yaml
模型训练用到的参数配置和详细精度性能汇请见configs
文件夹。
使用validate.py
可以便捷地验证训练好的模型。
# 验证模型的预训练参数
python validate.py --model resnet50 --dataset imagenet --val_split validation --ckpt_path './ckpt/densenet121-best.ckpt'
在默认情况下,训练管道(train.py
)在图模式 下运行,虽然在该模型下运行的性能极佳,但是该模式不方便进行调试。为了方便调试,用户可以使用参数--mode
将运行模式设置为调试模式。
使用ms_function的调试模式 是兼顾了MindSpore的效率和灵活的混合模式。用户可通过使用train_with_func.py
文件来使用该混合模式进行训练。
python train_with_func.py --model resnet50 --dataset cifar10 --dataset_download --epoch_size 10
train_with_func.py
为试验性的训练脚本,待MindSpore 2.0发布后改进。
更多样例请参见examples/scripts。
教程
我们提供了系列教程,帮助用户学习如何使用MindCV.
模型列表
目前,MindCV支持以下列出的模型族。更多包含预训练权重的模型正在开发中,将于近期发布。
支持模型
更多关于模型性能和预训练权重的信息请查看 configs 文件夹。
支持算法
支持算法
- 数据增强
- 优化率
- Adam
- Adamw
- Adan (experimental)
- AdaGrad
- LAMB
- Momentum
- RMSProp
- SGD
- NAdam
- 学习率策略
- Warmup Cosine Decay
- Step LR
- Polynomial Decay
- Exponential Decay
- 正则化
- Weight Decay
- Label Smoothing
- Stochastic Depth (depends on networks)
- Dropout (depends on networks)
- 损失函数
- Cross Entropy (w/ class weight and auxilary logit support)
- Binary Cross Entropy (w/ class weight and auxilary logit support)
- Soft Cross Entropy Loss (automatically enabled if mixup or label smoothing is used)
- Soft Binary Cross Entropy Loss (automatically enabled if mixup or label smoothing is used)
- 融合
- Warmup EMA (Exponential Moving Average)
日志
更新
- 支持在所有学习率策略中添加学习率预热操作,除cosine decay策略外。
- 支持
Repeated Augmenation
操作,可以通过--aug_repeats
对其进行设置,设置值应大于1(通常为3或4)。
- 支持EMA。
- 通过支持mixup和cutmix操作进一步优化BCE损失函数。
- 支持模型损失和正确率的可视化。
- 支持伦次维度的cosine decay策略的学习率预热操作(之前仅支持步维度)。
- 支持2个ViT预训练模型。
- 支持RandAugment augmentation操作。
- 提高了CutMix操作的可用性,CutMix和Mixup目前可以一起使用。
- 解决了学习率画图的bug。
- BCE和CE损失函数目前都支持class-weight config操作、label smoothing操作、auxilary logit input操作(适用于类似Inception模型)。
- 支持Adan优化器(试用版)。
贡献方式
欢迎开发者用户提issue或提交代码PR,或贡献更多的算法和模型,一起让MindCV变得更好。
有关贡献指南,请参阅CONTRIBUTING.md。请遵循模型编写指南所规定的规则来贡献模型接口:)
许可证
本项目遵循Apache License 2.0开源协议。
致谢
MindCV是由MindSpore团队、西安电子科技大学、西安交通大学联合开发的开源项目。
衷心感谢所有参与的研究人员和开发人员为这个项目所付出的努力。
十分感谢 OpenI 平台所提供的算力资源。
引用
如果你觉得MindCV对你的项目有帮助,请考虑引用:
@misc{MindSpore Computer Vision 2022,
title={{MindSpore Computer Vision}:MindSpore Computer Vision Toolbox and Benchmark},
author={MindSpore Vision Contributors},
howpublished = {\url{https://github.com/mindspore-lab/mindcv/}},
year={2022}
}