天天动画片 > 八卦谈 > MicroNet实战分享!使用MicroNet实现图像分类(一)

MicroNet实战分享!使用MicroNet实现图像分类(一)

八卦谈 佚名 2023-08-13 12:11:35

来源:投稿 作者:AI浩
编辑:学姐

MicroNet实战 

摘要

本文通过对植物幼苗分类的实际例子来感受一下MicroNet模型的效果。模型来自官方,我自己写了train和test部分。从得分情况来看,这个模型非常的优秀,我选择用的MicroNet-M3模型,大小仅有6M,但是ACC在95%左右,成绩非常惊艳!!!

这篇文章从实战的角度手把手带领大家完成训练和测试。通过这篇文章能让你学到:

  1. 如何使用数据增强,包括transforms的增强、CutOut、MixUp、CutMix等增强手段? 

  2. 如何配置MicroNet模型实现训练? 

  3. 如何使用pytorch自带混合精度? 

  4. 如何使用梯度裁剪防止梯度爆炸? 

  5. 如何使用DP多显卡训练? 

  6. 如何绘制loss和acc曲线? 

  7. 如何生成val的测评报告? 

  8. 如何编写测试脚本测试测试集? 

  9. 如何使用余弦退火策略调整学习率? 

  10. 如何使用AverageMeter类统计ACC和loss等自定义变量? 

  11. 如何理解和统计ACC1和ACC5?

安装包

1、安装timm

使用pip就行,命令:

2、安装yacs

yacs的作者大名鼎鼎的Ross Girshick,faster-rcnn的作者。github地址:https://github.com/rbgirshick/yacs

yacs是一个轻量级用于定义和管理系统配置的开源库,是科学实验软件中常用的参数配置。在机器学习、深度学习模型训练过程中的超参数配置(卷积神经网络的深度,初始学习率等)。科学实验的重现性至关重要,因此,需要记录实验过程中的参数设置,以达到后期进行实验的重现。yacs使用一种简单的,可读的yaml格式。

数据增强Cutout和Mixup

为了提高成绩我在代码中加入Cutout和Mixup这两种增强方式。实现这两种增强需要安装torchtoolbox。安装命令:

Cutout实现,在transforms中。

需要导入包:from timm.data.mixup import Mixup,

定义Mixup,和SoftTargetCrossEntropy

参数详解: 

  • mixup_alpha (float): mixup alpha 值,如果 > 0,则 mixup 处于活动状态。

  • cutmix_alpha (float):cutmix alpha 值,如果 > 0,cutmix 处于活动状态。

  • cutmix_minmax (List[float]):cutmix 最小/最大图像比率,cutmix 处于活动状态,如果不是 None,则使用这个 vs alpha。

  • 如果设置了 cutmix_minmax 则cutmix_alpha 默认为1.0

  • prob (float): 每批次或元素应用 mixup 或 cutmix 的概率。

  • switch_prob (float): 当两者都处于活动状态时切换cutmix 和mixup 的概率 。

  • mode (str): 如何应用 mixup/cutmix 参数(每个’batch’,‘pair’(元素对),‘elem’(元素)。

  • correct_lam (bool): 当 cutmix bbox 被图像边框剪裁时应用。lambda 校正

  • label_smoothing (float):将标签平滑应用于混合目标张量。

  • num_classes (int): 目标的类数。

项目结构

mean_std.py:计算mean和std的值。

makedata.py:生成数据集。

models文件夹下的micronet.py、activation.py和microconfig.py:来自官方的pytorch版本的代码。

  • micronet.py:网络文件。 

  • activation.py:激活函数文件,定义了DYShiftMax激活函数。 

  • microconfig.py:网络配置参数。定义了m0到m3网络的参数。 

utils文件夹下的defaults.py定义了cfg的参数,这些参数是m0到m3网络的设置参数。

详细的参数设置如下: 

M0:

M1:

M2:

M3:

为了能在DP方式中使用混合精度,还需要在模型的forward函数前增加@autocast().

计算mean和std

为了使模型更加快速的收敛,我们需要计算出mean和std的值,新建mean_std.py,插入代码:

数据集结构:

运行结果:

把这个结果记录下来,后面要用!

生成数据集

我们整理还的图像分类的数据集结构是这样的

pytorch和keras默认加载方式是ImageNet数据集格式,格式是

新增格式转化脚本makedata.py,插入代码:

完成上面的内容就可以开启训练和测试了。

今天分享图像分类的论文资料!都是CVPR高分论文!

关注【学姐带你玩AI】公众号

回复“CVPR”免费获取!

本文标题:MicroNet实战分享!使用MicroNet实现图像分类(一) - 八卦谈
本文地址:www.ttdhp.com/article/37402.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们