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

工作中经常会使用到轻量级的网络模型来进行开发,所以平时也会常常留意使用和记录,在前面的博文中有过很多相关的实践工作,感兴趣的话可以自行移步阅读即可。

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

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

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

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

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

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

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

本文使用的是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]

简单看下数据集情况:

【白内障】

【糖尿病视网膜病变】

【青光眼】

【正常眼球】

共包含上述四种不同类型的眼球数据集。

这里主要的目的是想要对主要核心的参数进行全方位多层次的对比实验分析,整个实验阶段一共进行了72组的对比实验,主要从以下几个角度进行切入:

损失函数:CrossEntropyLossFocalLossPolyLoss优化器: AdamWRMSPropSGD学习率:0.0010.0005是否使用预训练技术:TrueFalse是否进行数据增强:TrueFalse

不难计算出一共组合形成了72组实验,当然了如果想要进一步细化可以根据自己的实际情况进行改造即可。

关于这点就不再赘述了,实验组数越多自然消耗的时间就越多,这是一个正比例的关系,所以不是一味地增加实验组数就是绝对的好事。

等待漫长的训练过程结束后我们对其进行评估测试来整体对比分析。

首先是使用CrossEntropyLoss损失函数的详细对比情况:

下面是详细的precision、recall、f1、accuracy等的指标对比:

接下来是使用了FocalLoss函数的详细实验评测对比分析结果:

最后是使用了PolyLoss函数的详细实验评测对比分析结果:

完成单个阶段的独立对比分析后,接下来我们来看看优化器对于不同模型带来的影响。首先是使用AdamW的结果:

之后是RMSProp:
 

最后是SGD:

接下来我们来分析不同学习率对于模型的影响:
首先是学习率0.0005的情况下,模型的评测对比:

其次是学习率为0.001的情况下,模型的详细对比:

可以看到:学习率所带来的影响变化就是比较有规律性的。

上面依次对比分析了单个角度下的评测结果,这里我们来整体对比下72组实验不同的评测结果:
 

感兴趣的话也都可以自行动手尝试下!

 

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

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

相关文章

06、pytest将多个测试放在一个类中

官方用例 # content of test_class.py # 实例1 class TestClass:def test_one(self):x "this"assert "h" in xdef test_two(self):x "hello"assert hasattr(x,"check")# content of test_class_demo.py # 每个测试都有唯一的类实例…

CopyOnWriteArrayList怎么用

什么是CopyOnWriteArrayListCopyOnWriteArrayList常用方法CopyOnWriteArrayList源码详解CopyOnWriteArrayList使用注意点CopyOnWriteArrayList存在的性能问题CopyOnWriteArrayList 使用实例基本应用实例并发应用实例 拓展写时复制 什么是CopyOnWriteArrayList CopyOnWriteArra…

企业网络安全守护者:EventLog Analyzer日志审计系统

在当今数字时代,企业网络不仅仅是业务运营的核心,也成为各种潜在威胁的目标。为了保障企业的网络安全,日志审计系统成为了不可或缺的一环。其中,ManageEngine的EventLog Analyzer作为一款强大而全面的日志管理与审计解决方案&…

【第三方】微信登录

目录 前言小程序登录步骤说明前端效果涉及到的接口登录凭证:wx.login获取用户信息:wx.getUserInfo 后端涉及到接口小程序登录 代码展示 微信扫码登录 前言 微信官方文档,需要对接哪个模块就从哪里进入。 由于本次我们需要的是小程序的登录。…

有趣的代码——有故事背景的程序设计3

这篇文章再和大家分享一些有“背景”的程序设计,希望能够让大家学到知识的同时,对编程学习更感兴趣,更能在这条路上坚定地走下去。 目录 1.幻方问题 2.用函数打印九九乘法表 3.鸡兔同笼问题 4.字数统计 5.简单选择排序 1.幻方问题 幻方又…

【无标题】什么是UL9540测试,UL9540:2023版本增加哪些测试项目

什么是UL9540测试,UL9540:2023版本增加哪些测试项目 UL 9540是美国安全实验室(Underwriters Laboratories)发布的标准,名称为"UL 9540: Energy Storage Systems and Equipment",翻译为中文为"能量存储…

【JavaWeb】前端工程化(VUE3)

前端工程化(VUE3) 文章目录 前端工程化(VUE3)一、概述二、ECMA6Script2.1 es6的变量和模板字符串2.2 es6的解构表达式2.3 es6的箭头函数2.4 rest和spread2.5 es6的对象创建和拷贝2.6 es6的模块化处理 三、前端工程化环境搭建3.1 N…

数据分析师的学习之路-pandas篇(7)

继续接上篇,这次学习下透视表、线性回归还有根据条件上颜色。 3.9 透视表 在excel里也经常用到透视表来构建想要的列的组合来形成一个新的表,在pandas里也能做。 举例数据是这样的: 是各种类产品的订单数据,现在想做一个透视表&…

electron 应用图标修改

修改窗口图标 更换Electron应用程序的桌面图标 准备好你想要作为图标的图片文件,可以是PNG格式安装一个可以转换图片格式为ICO的工具,例如在线转换工具“在线转换icon图标工具”。将你的PNG图片文件上传并转换为ICO格式将转换得到的ICO文件放到你的El…

synxflow 安装环境

介绍: 该软件可以动态模拟洪水淹没,滑坡跳动和泥石流使用多个cuda支持的gpu。它还提供了一个用户友好但多功能的Python界面,可以完全集成到数据科学工作流程中,旨在简化和加速危害风险评估任务。 这个包我从网上找到的资源特别特…

GAN:WGAN-DIV

论文:https://arxiv.org/pdf/1712.01026.pdf 代码: 发表:2018 摘要 在计算机视觉的许多领域中,生成对抗性网络已经取得了巨大的成功,其中WGANs系列被认为是最先进的,主要是由于其理论贡献和竞争的定性表…

11、信息打点——红队工具篇FofaQuakeSuize水泽Arl灯塔

网络空间测绘引擎 Fofa Quake shodan Zoomeye 主要搜关联资产、特征资产、资产信息(在测绘引擎上直接搜IP,它会显示所有与该域名有关的信息。) fofa和Quake测绘引擎集成化工具:Finger 自动化信息收集项目 ARL灯塔 Suize水泽 …

洗地机好用吗?口碑好的洗地机有哪些?

自从洗地机开始引入市场以来,它一直受到人们的关注。它在解放家庭清洁劳动力和提供快速方便的清洁方面表现出色,超越了多年来传统的拖把清洁方式。越来越多的人选择使用洗地机来完成家庭清洁任务。如果你也对洗地机产生了浓厚的兴趣,并想购买…

在 AlmaLinux 9.2 上安装Oracle Database 23c

在 AlmaLinux 9.2 上安装Oracle Database 23c 1. 安装 Oracle Database 23c2. 连接 Oracle Database 23c3. 重启启动后,手动启动数据库4. 重启启动后,手动启动 Listener5. 手动启动 Pluggable Database6. 自动启动 Pluggable Database7. 设置开机启动数据…

【面试】Java最新面试题资深开发-JVM第一弹

问题一:Java中的垃圾回收机制 在Java中,垃圾回收是如何工作的,可以简要描述一下垃圾回收的算法有哪些吗? 在Java中,垃圾回收是一种自动管理内存的机制,它负责识别不再被程序引用的对象并释放其占用的内存…

Linux(11):Linux 账号管理与 ACL 权限设定

Linux 的账号与群组 每个登入的使用者至少都会取得两个 ID,一个是使用者 ID(User ID ,简称UID)、一个是群组ID (Group ID ,简称GID)。 Linux系统上面的用户如果需要登入主机以取得 shell 的环境来工作时,他需要如何进行呢? 首先…

测绘资质测绘设备检定、校准管理制度

测绘设备检定、校准管理制度 建立健全测绘仪器设备检定、校准管理制度,明确测绘仪器设备的检定、校准、日常管理等要求

Unity环境配置并解决visual studio 不能智能代码提示Unity代码问题(一)

1、请先安装好unity和Visual Studio 2019 2、Visual Studio需要安装如图(2019才会有那个移动的可以勾选) 3、Unity配置 file->build setting windows->package manager 安装如下图 edit->preferences 3、创建c#脚本 如果还是没能智能提…

Centos7上安装Redis

第一步:安装Redis依赖 yum install -y gcc tcl //需要使用管理员权限第二步:下载上传安装包并解压 下载地址redis中文官网 上传成功后解压 输入tar -zxvf (redis版本),即可解压成功 进入redis目录,运行编译命令&am…

安全AI系统开发指南

执行摘要 本文件建议为使用人工智能(AI)的任何系统的提供商提供指导方针,无论这些系统是从头开始创建的,还是建立在他人提供的工具和服务之上的。实施这些指导方针将有助于提供商构建按预期运行、在需要时可用的人工智能系统&…