GhostNet实战:使用GhostNet实现图像分类任务(一)

发布网友 发布时间:2024-10-23 22:38

我来回答

1个回答

热心网友 时间:2024-11-08 07:50

GhostNet网络是2019年发布的轻量级网络,其速度与MobileNetV3相似,但识别准确率更高,在ImageNet ILSVRC-2012分类数据集上达到了75.7%的top-1精度。

论文链接:arxiv.org/abs/1911.1190...

作者解读:zhuanlan.zhihu.com/p/10...

开源代码:github.com/huawei-noah/...

论文翻译:wanghao.blog.csdn.net/a...

该论文提出了Ghost模块,通过廉价操作生成更多的特征图。基于一组原始的特征图,作者应用一系列线性变换,以很小的代价生成许多能从原始特征发掘所需信息的“Ghost”特征图(Ghost feature maps)。Ghost模块是一种即插即用的模块,通过堆叠Ghost模块得出Ghost bottleneck,进而搭建轻量级神经网络——GhostNet。

本文主要讲解如何使用GhostNet完成图像分类任务,接下来我们将一起进行项目的实战。经过测试,GhostNet在植物幼苗数据集上实现了95%以上的准确率。

通过本文,你可以学到以下内容:

安装包:安装timm

使用pip进行安装,命令:

数据增强: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): 目标的类数。

EMA(Exponential Moving Average)是指数移动平均值。在深度学习中的做法是保存历史的一份参数,在一定训练阶段后,拿历史的参数给目前学习的参数做一次平滑。具体实现如下:

加入到模型中。

项目结构

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

makedata.py:生成数据集。

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

计算mean和std

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

数据集结构:

运行结果:

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

生成数据集

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

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

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

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com