CVPR 2020:华为GhostNet_Ascend910

本文章同步发布在昇腾论坛 https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=144676

GhostNet的原理

GhostNet的总体网络架构:https://arxiv.org/pdf/1911.11907.pdf
为了减少最新的深度神经网络的计算成本,GhostNet提出了一种用于构建高效的神经网络结构的新型Ghost模块。Ghost模块将原始卷积层分为两部分,首先使用较少的卷积核来生成原始特征图,然后,进一步使用廉价变换操作以高效生产更多幻影特征图。在基准模型和数据集上进行的实验表明,该方法是一个即插即用的模块,能够将原始模型转换为更紧凑的模型,同时保持可比的性能。此外,在效率和准确性方面,使用提出的新模块构建的GhostNet均优于最新的轻量神经网络,如MobileNetV3。

在一个训练好的深度神经网络中,通常会包含丰富甚至冗余的特征图,以保证对输入数据有全面的理解。如下图所示,在ResNet-50中,将经过第一个残差块处理后的特征图拿出来,三个相似的特征图对示例用相同颜色的框注释。 该对中的一个特征图可以通过廉价操作(用扳手表示)将另一特征图变换而获得,可以认为其中一个特征图是另一个的“幻影”。因为,本文提出并非所有特征图都要用卷积操作来得到,“幻影”特征图可以用更廉价的操作来生成。
CVPR 2020:华为GhostNet_Ascend910_第1张图片

Ghost模块

CVPR 2020:华为GhostNet_Ascend910_第2张图片
图 (a) 普通卷积层 (b) Ghost模块

构建GhostNet

**Ghost Bottleneck:**利用Ghost模块的优势,作者介绍了专门为小型CNN设计的Ghost bottleneck(G-bneck)。如图3所示,Ghost bottleneck似乎类似于ResNet中的基本残差块(Basic Residual Block),其中集成了多个卷积层和shortcut。Ghost bottleneck主要由两个堆叠的Ghost模块组成。第一个Ghost模块用作扩展层,增加了通道数。这里将输出通道数与输入通道数之比称为expansion ratio。第二个Ghost模块减少通道数,以与shortcut路径匹配。然后,使用shortcut连接这两个Ghost模块的输入和输出。这里借鉴了MobileNetV2,第二个Ghost模块之后不使用ReLU,其他层在每层之后都应用了批量归一化(BN)和ReLU非线性激活。上述Ghost bottleneck适用于stride= 1,对于stride = 2的情况,shortcut路径由下采样层和stride = 2的深度卷积(Depthwise Convolution)来实现。出于效率考虑,Ghost模块中的初始卷积是点卷积(Pointwise Convolution)。
CVPR 2020:华为GhostNet_Ascend910_第3张图片

GhostNet: 基于Ghost bottleneck,作者提出GhostNet,如表1所属。作者遵循MobileNetV3的基本体系结构的优势,然后使用Ghost bottleneck替换MobileNetV3中的bottleneck。GhostNet主要由一堆Ghost bottleneck组成,其中Ghost bottleneck以Ghost模块为构建基础。第一层是具有16个卷积核的标准卷积层,然后是一系列Ghost bottleneck,通道逐渐增加。这些Ghost bottleneck根据其输入特征图的大小分为不同的阶段。除了每个阶段的最后一个Ghost bottleneck是stride = 2,其他所有Ghost bottleneck都以stride = 1进行应用。最后,利用全局平均池和卷积层将特征图转换为1280维特征向量以进行最终分类。SE模块也用在了某些Ghost bottleneck中的残留层,如表1中所示。与MobileNetV3相比,这里用ReLU换掉了Hard-swish激活函数。尽管进一步的超参数调整或基于自动架构搜索的Ghost模块将进一步提高性能,但表1所提供的架构提供了一个基本设计参考。
CVPR 2020:华为GhostNet_Ascend910_第4张图片

参考资料:https://zhuanlan.zhihu.com/p/109325275

GhostNet训练ImageNet1000(mini)

GhostNet的源码链接:https://gitee.com/mindspore/mindspore/tree/master/model_zoo/research/cv/ghostnet
ImageNet1000(mini)链接:https://www.kaggle.com/ifigotin/imagenetmini-1000
CVPR 2020:华为GhostNet_Ascend910_第5张图片
修改源码:
1.dataset.py中数据集确保和imagenet1000一致
CVPR 2020:华为GhostNet_Ascend910_第6张图片
image.png
2.确认target=“Ascend”
3.修改config.py中参数
CVPR 2020:华为GhostNet_Ascend910_第7张图片
单卡训练

cd ./ghostnet/scripts
dos2unix run_standalone_train.sh 
修改run_standalone_train.sh中 python 为python3
bash run_standalone_train.sh /home/Datasets/imagenet-mini 

在生成的train文件中可查看训练结果
CVPR 2020:华为GhostNet_Ascend910_第8张图片

tail train.log

CVPR 2020:华为GhostNet_Ascend910_第9张图片

评估训练结果

执行 dos2unix run_eval.sh
CVPR 2020:华为GhostNet_Ascend910_第10张图片

修改run_eval.sh中 python 为python3
CVPR 2020:华为GhostNet_Ascend910_第11张图片

bash run_eval.sh /home/Datasets/imagenet-mini  /home/bear/ghostnet/scripts/train/ghostnet-500_271.ckpt

tail eval/eval.log

CVPR 2020:华为GhostNet_Ascend910_第12张图片
Screenshot from 2021-08-01 11-32-11.png

导出MindIR

修改export.py中默认参数,如图
CVPR 2020:华为GhostNet_Ascend910_第13张图片

python3 export.py --checkpoint_path /home/bear/ghostnet/scripts/train/ghostnet-500_271.ckpt

CVPR 2020:华为GhostNet_Ascend910_第14张图片

就此成功到处ghost.mindir,后续可用该文件在ascend平台直接部署推理。

你可能感兴趣的:(Mindspore,昇腾)