第9章:基于Vision Transformer(ViT)网络实现的迁移学习图像分类任务:早期秧苗图像识别

目录

1. ViT 模型

2. 早期秧苗分类

2.1 数据集

2.2 训练

2.3 训练结果

2.4 可视化网页推理

3. 下载


1. ViT 模型

视觉变换器(ViT)是一种神经网络架构,它将变换器架构的原理应用于视觉数据。最初,Transformers主要用于自然语言处理任务,但ViT将其应用扩展到计算机视觉任务。

ViT的关键见解是将图像表示为补丁序列,补丁是固定大小的小图像区域。这些补丁被展平为1D向量,并作为输入传递给Transformer编码器。Transformer编码器通过关注所有补丁并学习它们之间的关系来处理补丁序列。

ViT还引入了类似于其他基于Transformer的架构的可学习位置嵌入。位置嵌入捕获了斑块的空间信息,并帮助模型理解斑块在图像中的相对位置。

为了处理高分辨率图像中的大量补丁,ViT应用了一种补丁合并技术,将补丁分组在一起并降低其维度。

为了训练ViT,通常会在Transformer编码器中添加一个辅助分类头。该头预测图像的类标签,整个模型使用标准的监督学习技术进行训练。

ViT在各种图像分类基准测试中表现出了令人印象深刻的性能,与参数较少的卷积神经网络(CNN)相比,通常可以获得相当甚至更好的结果。然而,它可能需要更多的计算资源和大量的训练数据,才能在更大、更复杂的数据集上达到与CNN类似的性能水平。

总体而言,视觉变换器为将变换器架构应用于计算机视觉任务开辟了新的可能性,展示了自我关注机制在建模视觉数据方面的潜力。

ViT 模型有:

2. 早期秧苗分类

ViT 实现的model部分代码如下面所示,这里如果采用官方预训练权重的话,会自动导入官方提供的最新版本的权重

这里提供了5种网络结构,分别对应base、large不同的patch

2.1 数据集

数据集文件如下:

标签如下:

{"0": "corn","1": "rice","2": "wheat"
}

其中,训练集的总数为633,验证集的总数为269

2.2 训练

训练的参数如下:

    parser.add_argument("--model", default='vit_b_16', type=str,help='vit_b_16,vit_b_32,vit_h_14,vit_l_16,vit_l_32')parser.add_argument("--pretrained", default=True, type=bool)       # 采用官方权重parser.add_argument("--freeze_layers", default=True, type=bool)    # 冻结权重parser.add_argument("--batch-size", default=8, type=int)parser.add_argument("--epochs", default=10, type=int)parser.add_argument("--optim", default='SGD', type=str,help='SGD,Adam,AdamW')         # 优化器选择parser.add_argument('--lr', default=0.01, type=float)parser.add_argument('--lrf',default=0.001,type=float)                  # 最终学习率 = lr * lrfparser.add_argument('--save_ret', default='runs', type=str)             # 保存结果parser.add_argument('--data_train',default='./data/train',type=str)           # 训练集路径parser.add_argument('--data_val',default='./data/val',type=str)               # 测试集路径

网络分类的个数不需要指定,摆放好数据集后,代码会根据数据集自动生成!

网络模型信息如下:

    "train parameters": {"model": "vit_b_16","pretrained": true,"freeze_layers": true,"batch_size": 8,"epochs": 10,"optim": "SGD","lr": 0.01,"lrf": 0.001,"save_folder": "runs"},"dataset": {"trainset number": 633,"valset number": 269,"number classes": 3},"model": {"total parameters": 57300483.0,"train parameters": 2307,"flops": 11285488896.0},

2.3 训练结果

所有的结果都保存在 save_ret 目录下,这里是 runs 

weights 下有最好和最后的权重,在训练完成后控制台会打印最好的epoch

这里只展示部分结果:

训练日志:

    "epoch:9": {"train info": {"accuracy": 0.9999999999842022,"corn": {"Precision": 1.0,"Recall": 1.0,"Specificity": 1.0,"F1 score": 1.0},"rice": {"Precision": 1.0,"Recall": 1.0,"Specificity": 1.0,"F1 score": 1.0},"wheat": {"Precision": 1.0,"Recall": 1.0,"Specificity": 1.0,"F1 score": 1.0},"mean precision": 1.0,"mean recall": 1.0,"mean specificity": 1.0,"mean f1 score": 1.0},"valid info": {"accuracy": 0.9962825278440043,"corn": {"Precision": 1.0,"Recall": 1.0,"Specificity": 1.0,"F1 score": 1.0},"rice": {"Precision": 0.9908,"Recall": 1.0,"Specificity": 0.9938,"F1 score": 0.9954},"wheat": {"Precision": 1.0,"Recall": 0.96,"Specificity": 1.0,"F1 score": 0.9796},"mean precision": 0.9969333333333333,"mean recall": 0.9866666666666667,"mean specificity": 0.9979333333333334,"mean f1 score": 0.9916666666666667}

训练集和测试集的混淆矩阵:

2.4 可视化网页推理

推理是指没有标签,只有图片数据的情况下对数据的预测,这里使用了网页推理

值得注意的是,如果训练了自己的数据集,需要对infer脚本进行更改,如下:

1.  都需要绝对路径,这个是代码自动生成的类别文件,在runs下

2. 这里是训练好的模型,也在runs下,可以选择best或者last都可以

3.  这个是默认展示的demo图片位置

接下来在控制台运行下面命令即可:这里貌似也需要绝对路径

streamlit run D:\project\VisionTransformer\infer.py

有的会自动弹出网页,有的会生成本地的网址,点进去就行了,展示如下:

上传本地的图片,也可以进行推理:

3. 下载

 关于本项目代码和数据集、训练结果的下载:

计算机视觉项目:vision-Transformer模型实现的图像识别项目:小麦、水稻、玉米早期秧苗图像分类资源-CSDN文库

关于图像分类网络的改进可以参考:

改进系列_Ai 医学图像分割的博客-CSDN博客

图像分类网络改进_Ai 医学图像分割的博客-CSDN博客

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

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

相关文章

ros2-7.5 做一个自动巡检机器人

7.5.1 需求及设计 又到了小鱼老师带着做最佳实践项目了。需求:做一个在各个房间不断巡逻并记录图像的机器人。 到达目标点后首先通过语音播放到达目标点信息, 再通过摄像头拍摄一张图片保存到本地。 7.5.2 编写巡检控制节点 在chapt7_ws/src下新建功…

OpenHarmony API 设计规范

OpenHarmony API 设计规范 修订记录 版本作者时间更新内容v0.1,试运行版OpenHarmony API SIG2022年11月初版发布 目的 API是软件实现者提供给使用者在编程界面上的定义,API在很大程度上体现了软件实体的能力范围。 同时,API定义的好坏极…

【React】新建React项目

目录 create-react-app基础运用React核心依赖React 核心思想:数据驱动React 采用 MVC体系package.jsonindex.html好书推荐 官方提供了快速构建React 项目的脚手架: create-react-app ,目前使用它安装默认是19版本,我们这里降为18…

Linux手写FrameBuffer任意引脚驱动spi屏幕

一、硬件设备 开发板:香橙派 5Plus,cpu:RK3588,带有 40pin 外接引脚。 屏幕:SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器,并且主页面可调。 平时跑个模型或者服务,…

网络安全构成要素

一、防火墙 组织机构内部的网络与互联网相连时,为了避免域内受到非法访问的威胁,往往会设置防火墙。 使用NAT(NAPT)的情况下,由于限定了可以从外部访问的地址,因此也能起到防火墙的作用。 二、IDS入侵检…

React Native的现状与未来:从发展到展望

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

数据结构——链表(概念,类型,java实现、增删、优缺点)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…

app版本控制java后端接口版本管理

java api version 版本控制 java接口版本管理 1 自定义 AppVersionHandleMapping 自定义AppVersionHandleMapping实现RequestMappingHandlerMapping里面的方法 public class AppVersionHandleMapping extends RequestMappingHandlerMapping {Overrideprotected RequestCondit…

LRU 算法详解与 Java 的两种实现方式

LRU 算法详解与 Java 的两种实现方式 LRU 算法详解与 Java 的两种实现方式一、LRU 算法简介二、LRU 算法原理三、LRU 算法应用场景四、Java 实现 LRU 算法(一)基于 LinkedHashMap 实现(二)基于双向链表和 HashMap 实现五、总结LRU 算法详解与 Java 的两种实现方式 一、LRU…

基于 Python 的财经数据接口库:AKShare

AKShare 是基于 Python 的财经数据接口库,目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具,主要用于学术研究目的。 安装 安装手册见…

在 macOS 上,用命令行连接 MySQL(/usr/local/mysql/bin/mysql -u root -p)

根据你提供的文件内容,MySQL 的安装路径是 /usr/local/mysql。要直接使用 mysql 命令,你需要找到 mysql 可执行文件的路径。 在 macOS 上,mysql 客户端通常位于 MySQL 安装目录的 bin 子目录中。因此,完整的路径应该是&#xff1…

【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

🔥 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用(Enabled) 2.3 坐标系(Geometry) **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题(windowTiltle&a…

通过外部链接启动 Flutter App(详细介绍及示例)

通过外部链接启动 Flutter App(firebase_dynamic_links 和 app_links) 详细介绍 通过外部链接启动flutter App 的使用及示例 在我们的APP中,经常有点击链接启动并进入APP的需求(如果未安装跳转到应用商店)。Android通…

git操作(Windows中GitHub)

使用git控制GitHub中的仓库版本,并在Windows桌面中创建与修改代码,与GitHub仓库进行同步。 创建自己的GitHub仓库 创建一个gen_code实验性仓库用来学习和验证git在Windows下的使用方法: gen_code仓库 注意,创建仓库时不要设置…

MySQL DCL 数据控制

文章目录 1.新建用户2.删除用户3.用户授权4.撤销用户权限5.查看用户权限6.修改用户密码7.权限类型参考文献 1.新建用户 连接到 MySQL 服务器后,管理员或特权用户可以使用 CREATE USER 语句创建新用户。 CREATE USER usernamehost IDENTIFIED BY password;-- 示例 …

python爬虫爬取淘宝商品比价||淘宝商品详情API接口

最近在学习北京理工大学的爬虫课程,其中一个实例是讲如何爬取淘宝商品信息,现整理如下: 功能描述:获取淘宝搜索页面的信息,提取其中的商品名称和价格 探讨:淘宝的搜索接口 翻页的处理 技术路线:requests…

【Vim Masterclass 笔记13】第 7 章:Vim 核心操作之——文本对象与宏操作 + S07L28:Vim 文本对象

文章目录 Section 7:Text Objects and MacrosS07L28 Text Objects1 文本对象的含义2 操作文本对象的基本语法3 操作光标所在的整个单词4 删除光标所在的整个句子5 操作光标所在的整个段落6 删除光标所在的中括号内的文本7 删除光标所在的小括号内的文本8 操作尖括号…

深度学习 Pytorch 张量的索引、分片、合并以及维度调整

张量作为有序的序列,也是具备数值索引的功能,并且基本索引方法和python原生的列表、numpy中的数组基本一致。 不同的是,pytorch中还定义了一种采用函数来进行索引的方式。 作为pytorch中的基本数据类型,张量既具备了列表、数组的基…

强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Transformer-LSTMNSGAII多目标优化算法,工艺参数优化、工程设计优化!(Matlab完整源码和数据) Transformer-LSTM模型的架构:输入层:多个变量作…

SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门

本篇博客将通过实例演示如何在 Spring Cloud 中使用 Nacos 实现服务注册与发现,并使用 OpenFeign 进行服务间调用。你将学到如何搭建一个完整的微服务通信框架,帮助你快速开发可扩展、高效的分布式系统。 目录 前言 服务注册和发现 服务注册 ​编辑 …