python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统

2023-12-13 04:31:21

轻量级识别模型在我们前面的博文中已经有过很多实践了,感兴趣的话可以自行移步阅读:

《移动端轻量级模型开发谁更胜一筹,efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》

《基于Pytorch框架的轻量级卷积神经网络垃圾分类识别系统》

《基于轻量级卷积神经网络模型实践Fruits360果蔬识别——自主构建CNN模型、轻量化改造设计lenet、alexnet、vgg16、vgg19和mobilenet共六种CNN模型实验对比分析》

《探索轻量级模型性能上限,基于GhostNet模型开发构建多商品细粒度图像识别系统》

《基于轻量级神经网络GhostNet开发构建的200种鸟类细粒度识别分析系统》

《基于MobileNet的轻量级卷积神经网络实现玉米螟虫不同阶段识别分析》

《python开发构建轻量级卷积神经网络模型实现手写甲骨文识别系统》

《基于轻量级模型GHoshNet开发构建眼球眼疾识别分析系统,构建全方位多层次参数对比分析实验》

《python基于轻量级卷积神经网络模型ShuffleNetv2开发构建辣椒病虫害图像识别系统》

本文的核心思想是像基于GhoshNet来开发构建辣椒病虫害识别系统,首先看下实例效果:

本文使用的是前面应用到的GhostNet模型,GhostNet 是一种轻量级卷积神经网络,是专门为移动设备上的应用而设计的。其主要构件是 Ghost 模块,一种新颖的即插即用模块。Ghost 模块设计的初衷是使用更少的参数来生成更多特征图 (generate more features by using fewer parameters)。

官方论文地址在这里,如下所示:

官方也开源了项目,地址在这里,如下所示:

可以详细阅读官方的代码实例即可,之后可以基于自己的数据集来开发构建模型即可。

这里给出GhostNet的核心实现部分,如下所示:

class GhostNet(nn.Module):
    def __init__(self, cfgs, num_classes=1000, width_mult=1.0):
        super(GhostNet, self).__init__()
        self.cfgs = cfgs
        output_channel = _make_divisible(16 * width_mult, 4)
        layers = [
            nn.Sequential(
                nn.Conv2d(3, output_channel, 3, 2, 1, bias=False),
                nn.BatchNorm2d(output_channel),
                nn.ReLU(inplace=True),
            )
        ]
        input_channel = output_channel
        block = GhostBottleneck
        for k, exp_size, c, use_se, s in self.cfgs:
            output_channel = _make_divisible(c * width_mult, 4)
            hidden_channel = _make_divisible(exp_size * width_mult, 4)
            layers.append(
                block(input_channel, hidden_channel, output_channel, k, s, use_se)
            )
            input_channel = output_channel
        self.features = nn.Sequential(*layers)
        output_channel = _make_divisible(exp_size * width_mult, 4)
        self.squeeze = nn.Sequential(
            nn.Conv2d(input_channel, output_channel, 1, 1, 0, bias=False),
            nn.BatchNorm2d(output_channel),
            nn.ReLU(inplace=True),
            nn.AdaptiveAvgPool2d((1, 1)),
        )
        input_channel = output_channel
        output_channel = 1280
        self.classifier = nn.Sequential(
            nn.Linear(input_channel, output_channel, bias=False),
            nn.BatchNorm1d(output_channel),
            nn.ReLU(inplace=True),
            nn.Dropout(0.2),
            nn.Linear(output_channel, num_classes),
        )
        self._initialize_weights()
 
    def forward(self, x, need_fea=False):
        if need_fea:
            features, features_fc = self.forward_features(x, need_fea)
            x = self.classifier(features_fc)
            return features, features_fc, x
        else:
            x = self.forward_features(x)
            x = self.classifier(x)
            return x
 
    def forward_features(self, x, need_fea=False):
        if need_fea:
            input_size = x.size(2)
            scale = [4, 8, 16, 32]
            features = [None, None, None, None]
            for idx, layer in enumerate(self.features):
                x = layer(x)
                if input_size // x.size(2) in scale:
                    features[scale.index(input_size // x.size(2))] = x
            x = self.squeeze(x)
            return features, x.view(x.size(0), -1)
        else:
            x = self.features(x)
            x = self.squeeze(x)
            return x.view(x.size(0), -1)
 
    def _initialize_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu")
            elif isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()
 
    def cam_layer(self):
        return self.features[-1]

GhostNet是一种轻量级卷积神经网络模型,旨在在计算资源有限的设备上实现高效的图像分类任务。下面是GhostNet模型的原理和其优点与缺点的分析:

原理:
GhostNet的核心思想是使用低成本的"Ghost"模块来减少模型的计算量和参数数量。Ghost模块通过将输入特征图分成两个部分,其中一个部分称为"Ghost"特征图,另一个部分称为"Shadow"特征图。Ghost特征图通过一个较小的卷积核进行处理,而Shadow特征图则通过一个较大的卷积核进行处理。然后,将Ghost特征图与Shadow特征图进行连接,以增加模型的表达能力。通过这种方式,GhostNet能够在减少计算量和参数数量的同时,提高模型的性能。

优点:

  1. 轻量级:GhostNet是一种轻量级模型,具有较少的参数数量和计算量。这使得它非常适合在计算资源有限的设备上进行部署,例如移动设备和嵌入式系统。
  2. 高效性能:尽管GhostNet是轻量级模型,但它在图像分类任务上表现出色。它能够在保持较小模型规模的同时,具备较高的准确性和泛化能力。
  3. 可扩展性:GhostNet的设计思想可以应用于其他的神经网络模型,使其能够在不同的任务和领域中发挥作用。

缺点:

  1. 适用性受限:GhostNet主要针对图像分类任务进行了优化,对于其他计算机视觉任务(如目标检测和语义分割)可能需要进行适当的修改和扩展。
  2. 模型复杂性:尽管GhostNet相对较小和轻量级,但其设计和实现仍然需要一定的专业知识和技能。对于初学者来说,可能需要一些时间和资源来理解和应用该模型。

GhostNet是一种轻量级的卷积神经网络模型,通过使用Ghost模块来减少计算量和参数数量,同时提高模型性能。它具有轻量级、高效性能和可扩展性等优点,但在适用性和模型复杂性方面存在一些限制。

接下来看下数据集:

共包含23种常见药材,如下:

aiye
baibiandou
baibu
baidoukou
baihe
cangzhu
cansha
dangshen
ezhu
foshou
gancao
gouqi
honghua
hongteng
huaihua
jiangcan
jingjie
jinyinhua
mudanpi
niubangzi
zhuling
zhuru
zhuye
zicao

数据分布可视化如下所示:

默认100次的迭代训练,执行结束后来看下结果详情:
【loss曲线】

【acc曲线】

【混淆矩阵】

开发专用的系统界面实现可视化推理实例如下所示:

集成开发实现了GRADCAM来实现热力图的计算可视化:

感兴趣的话都可以自行动手实践一下。

文章来源:https://blog.csdn.net/Together_CZ/article/details/134850053
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。