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

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

《移动端轻量级模型开发谁更胜一筹,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 = cfgsoutput_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_channelblock = GhostBottleneckfor 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_channelself.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_channeloutput_channel = 1280self.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, xelse:x = self.forward_features(x)x = self.classifier(x)return xdef 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))] = xx = 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来实现热力图的计算可视化:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 核心 数据监听 computed | watch

Vue 核心 数据监听 computed | watch 一、今日学习目标 1.指令补充 指令修饰符v-bind对样式增强的操作v-model应用于其他表单元素 2.computed计算属性 基础语法计算属性vs方法计算属性的完整写法成绩案例 3.watch侦听器 基础写法完整写法 4.综合案例 (演示&…

缺陷责任期与质量保修期如何快速区分?

缺陷责任期 《建设工程质量保证金管理办法》第二条对缺陷给出了定义,是指建设工程质量不符合工程建设强制性标准、设计文件,以及承包合同的约定。缺陷责任期是指承包人对工程质量瑕疵担保的期限,由发承包双方在合同中进行约定,期…

制造业数字化转型该怎么做?这篇1.6万字的文章终于讲透了!

制造业数字化转型该怎么做?下面通过 1.6W 字干货内容,全面讲透制造业数字化转型。 (为防后续找不到,建议大家先点赞收藏~) 引言: 1、发达国家制造业回流力度加大,中国制造业战略地位提升。 …

selenium 解决 id定位、class定位中,属性值带空格的解决办法

一、前置说明 selenium遇到下面这种元素&#xff1a; <th id"demo id" class"value1 value2 value3 ">1、虽然id一般不会有空格&#xff0c;但是前端错误的这种写法(如下图)&#xff0c;会造成使用id定位不到元素&#xff0c;如&#xff1a; find…

面试遇到的一些问题(二)

1、v-if v-show 区别,他们的生命周期区别 v-show: (类似于display:none/black 的切换)不管初始值是true 或false 都会进行渲染,状态改变也不会销毁和重新生成。不会影响生命周期 v-if : 是根据条件,dom进行删除插入操作。 依附于普通元素时:会触发父组件的beforeUpdate和u…

IOday6作业

1>使用有名管道&#xff0c;完成两个进程的相互通信 //create.c #include<myhead.h>int main(int argc, const char *argv[]) {if((mkfifo("myfifo1",0664)) -1){perror("mkfifo");return -1;}if((mkfifo("myfifo2",0664)) -1){perror…

MYSQL练题笔记-高级查询和连接-这系列最后一题以及下个系列(子查询)的第一题

今天做了下面两题&#xff0c;到第三题的时候想了下但是没有太多的思路&#xff0c;然后看题解的时候实在是觉得自己不会&#xff0c;打算明天看吧。 1.按分类统计薪水相关的表和题目如下 我是想着简化问题&#xff0c;先找出薪水低于30000的员工&#xff0c;然后找这些员工的上…

JAVA 锁

乐观锁 乐观锁是一种乐观思想&#xff0c;即认为读多写少&#xff0c;遇到并发写的可能性低&#xff0c;每次去拿数据的时候都认为别人不会修改&#xff0c;所以不会上锁&#xff0c;但是在更新的时候会判断一下在此期间别人有没有去更新这个数据&#xff0c;采取在写时先读出…

Sam Altman当选“TIME时代周刊”2023年度最佳CEO!还有梅西、Taylor Swift当选...

TIME时代周刊昨日在官网公布了2023年最佳CEO—— Sam Altman当选! 此外&#xff0c;Taylor Swift当选年度最佳人物&#xff0c;梅西当选年度最佳运动员。 Sam Altman的当选可谓是实至名归&#xff01;没有谁能比火爆全球的ChatGPT背后&#xff0c;OpenAI的CEO更“成功”了。 …

ssh安装及问题解决

ssh安装及遇到的问题 ssh分为客户端 openssh-client 和服务器 openssh-server&#xff0c;可以利用以下命令确认是否安装&#xff1a; dpkg -l | grep ssh我用ubantu安装的&#xff0c;所以默认安装了客户端 安装客户端和服务器端的命令分别为&#xff1a; sudo apt-get ins…

金融量化交易:使用Python实现遗传算法

大家好&#xff0c;遗传算法是一种受自然选择过程启发的进化算法&#xff0c;用于寻找优化和搜索问题的近似解决方案。本文将使用Python来实现一个用于优化简单交易策略的遗传算法。 1.遗传算法简介 遗传算法是一类基于自然选择和遗传学原理的优化算法&#xff0c;其特别适用…

MySQL 教程 2.1

MySQL 插入数据 MySQL 表中使用 INSERT INTO 语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据&#xff0c;或者通过PHP脚本来插入数据。 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法&#xff1a; INSERT INTO table_name (colu…

使用Pytorch实现Grad-CAM并绘制热力图

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 看一下这个main cnn.py的文件 那这里我为了方便 就直接从官方的torch vision这个库当中导入一些我们常用的model 比如说我这里的例子是采用的mobile net v3 large这个模型 然后这里我将pretrain设…

微信小程序 纯css画仪表盘

刚看到设计稿的时候第一时间想到的就是用canvas来做这个仪表盘&#xff0c;虽然本人的画布用的不是很好但还可以写一写&#x1f600;。话不多说直接上代码。最后有纯css方法 <!--wxml--> <canvas canvas-id"circle" class"circle" >// js dat…

MySQL 忘记root密码后重置密码操作

在忘记 MySQL 密码的情况下&#xff0c;可以通过 --skip-grant-tables 关闭服务器的认证&#xff0c;然后重置 root 的密码&#xff0c;具体操作步骤如下。 步骤 1)&#xff1a;关闭正在运行的 MySQL 服务。打开 cmd 进入 MySQL 的 bin 目录。 步骤 2)&#xff1a;输入mysqld -…

【Docker】容器数据持久化及容器互联

容器数据持久化及容器互联 一、Docker容器的数据管理1.1、什么是数据卷1.2、数据卷特点1.3、数据卷使用 二、Docker的数据卷容器2.1、什么是数据卷容器2.2、挂载数据卷容器方法 三、Docker数据卷的备份和还原3.1、数据备份方法3.2、数据还原方法 四、Docker容器互联4.1、docker…

数据宝库:深入探讨数据隐私与安全的要义

写在开头 随着数字时代的蓬勃发展&#xff0c;数据已成为当今社会的新型燃料。然而&#xff0c;正如能源需要保护和管理一样&#xff0c;我们的数据同样需要被妥善对待。本文将深入讨论数据隐私和安全的不可忽视的重要性&#xff0c;并为您提供一些实用的基本措施和方法&#…

xcode ——Instrumets(网络连接调试)使用

环境&#xff1a; instruments 使用只能在真机调试时使用&#xff0c;且真机系统必须ios15 点击debug 按钮——Network——Profile in Instruments 然后就可以看到如下面板 展开运行的项目&#xff0c;点击session下的域名&#xff0c;下方回出现该域名下的网络请求。点击Deve…

管理类联考——数学——真题篇——按题型分类——充分性判断题——秒杀

题型结构 问题求解&#xff1a;通过计算求解&#xff0c;从五个选项中选出一个正确答案。条件充分性判断&#xff1a;问所给的条件&#xff08;1&#xff09;&#xff08;2&#xff09;能否推出题设的结论&#xff0c;共有五个选项&#xff0c;从中选出正确的一个。&#xff0…

车联网安全学习路标

1. 汽车和物联网基础知识 首先&#xff0c;你需要全面了解汽车和物联网的基础知识&#xff0c;包括汽车电子体系结构、车载通信技术&#xff08;如CAN、LIN、FlexRay、Ethernet&#xff09;以及物联网的架构和通信协议&#xff08;如MQTT、CoAP&#xff09;。 2. 汽车网络安全…