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,插入代码:
完成上面的内容就可以开启训练和测试了。