重磅首发 | 昇思MindSpore视觉基础套件MindSpore CV,性能更强悍、操作更简洁
重磅首发 | 昇思MindSpore视觉基础套件MindSpore CV,性能更强悍、操作更简洁
在Openl启智社区线上AI协作开发环境与充沛算力支持下,昇思MindSpore团队联合西安交通大学、西安电子科技大学联合开发完成MindSpore CV套件0.1版本。**MindSpore CV套件是基于MindSpore框架的视觉算法库,集成了业界经典视觉算法,优化器/调度器等易用工具组件。我们优先支持了ResNet,ViT,**MobileNet系列,SwinTransformer等经典网络,并提供了适配昇腾的A+M训练策略和预训练权重。
MindSpore CV套件将数据集创建、数据增强、模型构建、训练策略相关等各模块进行统一接口封装,方便用户快速训练模型和调参。此外,我们针对每个模型提供了详细的超参方案和训练策略,方便用户快速启动各模型的训练与验证。
Github开源链接:
https://github.com/mindspore-lab/mindcv
Openl启智社区链接:
https://openi.pcl.ac.cn/MindSpore/mindcv
以下将带大家进一步了解MindSpore CV的各个模块和特性。
01
模型支持
当前支持30+主流SoTA模型算法(CNN/Transformer),并预置对应的预训练权重及训练策略配置文件,可通过list_models()接口查看已经支持的模型列表。
1.1 模型定义代码风格统一
为了增强模型代码易用性/可读性,我们从算法逻辑维度重新梳理原有MindSpore Model Zoo代码,遵循统一的接口调用方式进行二次重构,其中nn API接口都使用最新昇思MindSpore编程范式。此外,增加forward_features()接口进行视觉特征抽取,方便支持下游任务。
1.2 公共网络层抽象
MindSpore CV对一些常用的神经网络层或模块进行了封装,方便用户进行自定义的模型构建和研究,例如,对于CNN类,提供了Squeeze_excite(SE),全局池化层等模块,而对于Transformer类,同样提供了Patch_Embedding等模块。
02
模块接口
2.1 数据模块
2.1.1 数据集创建
通过create_dataset快速创建数据集,目前支持的数据集主要有MNIST,Cifar等CV领域常用数据集,通过设置download参数能够将数据集下载到本地并解压,同时MindSpore CV也支持用户自定义数据集。
2.1.2 数据增强
通过create_transforms不仅能够实现基础的数据增强,如水平翻转,缩放,平移等,同时我们也支持大部分流行的高阶数据增强方法和自动增强算法,例如:
**Mixup:**将随机的两张样本按比例混合,同时类别标签也按比例混合。
**Cutmix:**将一部分区域裁剪掉但不填充0像素而是随机填充训练集中的其他数据的区域像素值,类别标签也按比例混合。
**AutoAugment:**通过强化学习搜索得到的ImageNet上最优的数据增强策略。
RandAugment: 随机选取和组合不同的数据增强策略。
2.1.3 数据加载
完成数据集创建和数据增强之后,通过create_loader接口切分batch,预加载输入数据,就可以使用处理好的数据集开始训练了。
2.2 优化器模块
MindSpore CV实现了多个目前主流的优化器以满足用户的研究、开发需求,并可通过create_optimizer接口调用,例如:
**Adam:**Adam本质上是带有动量项的RMSProp,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点在于经过偏置校正后,每一次迭代学习率都有确定范围,使参数比较稳定。
**Adamw:**AdamW是在Adam+L2正则化的基础上进行改进的算法。单独的Adam优化带L2正则项在计算梯度的时候会加上对正则项求梯度的结果,优化效果并不理想,因此AdamW使用权重缩减对所有的权重都采用相同的系数进行更新,从而增加了模型的泛化能力。
**Adan:**通过结合改写的Nesterov冲量与自适应优化算法,并引入解耦的权重衰减,可以得到Adan优化器。利用外推点,Adan可以提前感知周围的梯度信息,从而高效地逃离尖锐的局部极小区域,以增加模型的泛化性。
2.3 损失函数模块
通过create_loss接口可调用损失函数模块,该模块包含常见的图像分类损失函数: CrossEntropy和Binary Cross Entropy及其变种,并支持软标签或稀疏标签输入(soft/sparse labels)、类别权重配置(class weights)以及标签平滑约束(label smoothing),例如:
**Cross entropy:**分类问题中最常用的损失函数,基于信息论中交叉熵的概念,反映预测概率分布和真实概率分布的差别。交叉熵和MSE主要的区别是它对错误输出的惩罚更强烈。当用户使用Mixup或Label Smoothing时, create_loss接口将会自动使用Soft Cross Entropy。
2.4 学习率调度器模块
通过create_scheduler可快速调用目前主流的学习率更新算法。例如:
**Cosine Decay:**根据余弦函数曲线进行学习率的衰减,衰减图和余弦函数相似。
**Exponential Decay:**根据指数曲线进行衰减,一般来说开始衰减的快后来慢,根据设置的参数决定底数。
**Multi-step Decay:**根据里程碑进行衰减,每当训练step到达一个里程碑,学习率衰减一次。
此外:我们对所有支持的学习率调度器添加warm up策略,来保证网络在初期阶段的训练能够平稳进行,提升易用性。
03
模型训练
将以上模块进行组装后便可得到模型训练脚本,用户可以方便地一键开启单卡或多卡训练。为了提升易用性,MindSpore CV重新实现了mode.train()的callback功能,增加边训边验的能力,方便用户观察模型loss、精度等变化状态。
04
快速开始
4.1 安装
使用pip安装MindSpore CV


MindSpore CV视觉基础套件提供了从快速开发,模型微调训练到推理部署的完整教程,不仅能够满足开发者从零开始快速上手,同时也能够帮助开发者全面掌握深度学习的技术。
同时,昇思MindSpore与Openl启智社区深度合作,为昇思MindSpore开发者提供365天*24小时上百万卡时的昇思MindSpore+NPU普惠算力,欢迎昇思MindSpore产学研开发者使用,基于昇思MindSpore开发你自己的模型算法套件和应用。(链接:https://openi.pcl.ac.cn/)