基于 GhostNet 不同版本的图像识别

2024-06-05 04:12

本文主要是介绍基于 GhostNet 不同版本的图像识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、介绍

GhostNet 文章地址:[1911.11907] GhostNet: More Features from Cheap Operations (arxiv.org)

主要思想:

特征提取的时候,很多特征图是具有高度相似性的,也就是说存在许多的冗余特征图。

从另一个角度想,利用一系列的线性变化,以很小的代价生成许多能从原始特征发掘所需信息的“幻影”特征图呢

冗余的特征图是非常有必要的,可以保证网络对输入数据的理解更为全面。

ghostnet 的版本,本人在github上搜到了三个版本,这里干脆一起实现了

文末有项目下载

2、代码解释

代码目录如下:

  • 红色框为ghostnet 的主干网络
  • 蓝色框为数据集,数据保存在不同目录中,如果有测试集的话,也放在这里即可
  • 绿色框为训练生成的结果

2.1 训练脚本 train

传入参数如下:

网络的输出个数,代码会计算数据集,然后自动设定!

都是很常规的参数,优化器可供选择的有SGD、Adam,学习率采用自适应衰减

2.2 评估脚本 val

这里评估的代码从训练中独立出来,参数如下:

  • pth 传入测试集。没有的话,传入验证集也可以
  • 数据集的mean和std在训练日志log文件中可以找到

2.3 训练过程和结果

运行train脚本如下:

评估脚本如下:这里采用的评估指标是混淆矩阵、F1分数等等

训练结果:

weights 下有最好的权重和最后的权重文件

训练和验证集的loss、acc曲线

注意:这里val 比 train 的acc高,因为数据划分不平衡所致,val集数量加多一点即可

学习率衰减:

训练日志:这里有mean和std

 

数据预处理的可视化:

 

3、使用

项目地址: 基于ghostNet网络对将香蕉5种不同阶段成熟度的分类【包含数据集+代码+训练结果】资源-CSDN文库

配置GPU的torch训练,参考:Pytorch 配置 GPU 环境_pytorch gpu-CSDN博客

新建虚拟环境:conda create -n ghost python=3.8

激活虚拟环境:conda activate ghost

安装库文件即可:pip install -r requirements.txt

训练自己数据集,将数据集摆放好即可

这篇关于基于 GhostNet 不同版本的图像识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032042

相关文章

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

InnoDB的多版本一致性读的实现

InnoDB是支持MVCC多版本一致性读的,因此和其他实现了MVCC的系统如Oracle,PostgreSQL一样,读不会阻塞写,写也不会阻塞读。虽然同样是MVCC,各家的实现是不太一样的。Oracle通过在block头部的事务列表,和记录中的锁标志位,加上回滚段,个人认为实现上是最优雅的方式。 而PostgreSQL则更是将多个版本的数据都放在表中,而没有单独的回滚段,导致的一个结果是回滚非

JeecgBoot 升级springboot版本到2.6.0

1. 环境描述 Jeecgboot 3.0,他所依赖的springboot版本为2.3.5Release,将springboot版本升级为2.6.0。过程全纪录,从2开始描述。 2. 修改springboot版本号 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-pare