基于Pytorch框架的深度学习Vision Transformer神经网络蝴蝶分类识别系统源码

第一步:准备数据

6种蝴蝶数据:self.class_indict = ["曙凤蝶", "麝凤蝶", "多姿麝凤蝶", "旖凤蝶", "红珠凤蝶", "热斑凤蝶"],总共有900张图片,每个文件夹单独放一种数据

第二步:搭建模型

本文选择一个Vision Transformer网络,其原理介绍如下:

Vision Transformer(ViT)是一种基于Transformer架构的深度学习模型,用于图像识别和计算机视觉任务。与传统的卷积神经网络(CNN)不同,ViT直接将图像视为一个序列化的输入,并利用自注意力机制来处理图像中的像素关系。

ViT通过将图像分成一系列的图块(patches),并将每个图块转换为向量表示作为输入序列。然后,这些向量将通过多层的Transformer编码器进行处理,其中包含了自注意力机制和前馈神经网络层。这样可以捕捉到图像中不同位置的上下文依赖关系。最后,通过对Transformer编码器输出进行分类或回归,可以完成特定的视觉任务。

Vit model结构图
Vit的模型结构如下图所示。vit是将图像块应用于transformer。CNN是以滑窗的思想用卷积核在图像上进行卷积得到特征图。为了可以使图像仿照NLP的输入序列,我们可以先将图像分成块(patch),再将这些图像块进行平铺后输入到网络中(这样就变成了图像序列),然后通过transformer进行特征提取,最后再通过MLP对这些特征进行分类【其实就可以理解为在以往的CNN分类任务中,将backbone替换为transformer】。

第三步:训练代码

1)损失函数为:交叉熵损失函数

2)训练代码:

import os import math import argparse import torch import torch.optim as optim import torch.optim.lr_scheduler as lr_scheduler from torch.utils.tensorboard import SummaryWriter from torchvision import transforms from my_dataset import MyDataSet from vit_model import vit_base_patch16_224_in21k as create_model from utils import read_split_data, train_one_epoch, evaluate def main(args): device = torch.device(args.device if torch.cuda.is_available() else "cpu") if os.path.exists("./weights") is False: os.makedirs("./weights") tb_writer = SummaryWriter() train_images_path, train_images_label, val_images_path, val_images_label = read_split_data(args.data_path) data_transform = { "train": transforms.Compose([transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])]), "val": transforms.Compose([transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])} # 实例化训练数据集 train_dataset = MyDataSet(images_path=train_images_path, images_class=train_images_label, transform=data_transform["train"]) # 实例化验证数据集 val_dataset = MyDataSet(images_path=val_images_path, images_class=val_images_label, transform=data_transform["val"]) batch_size = args.batch_size nw = min([os.cpu_count(), batch_size if batch_size > 1 else 0, 8]) # number of workers print('Using {} dataloader workers every process'.format(nw)) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True, pin_memory=True, num_workers=nw, collate_fn=train_dataset.collate_fn) val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=batch_size, shuffle=False, pin_memory=True, num_workers=nw, collate_fn=val_dataset.collate_fn) model = create_model(num_classes=args.num_classes, has_logits=False).to(device) if args.weights != "": assert os.path.exists(args.weights), "weights file: '{}' not exist.".format(args.weights) weights_dict = torch.load(args.weights, map_location=device) # 删除不需要的权重 del_keys = ['head.weight', 'head.bias'] if model.has_logits \ else ['pre_logits.fc.weight', 'pre_logits.fc.bias', 'head.weight', 'head.bias'] for k in del_keys: del weights_dict[k] print(model.load_state_dict(weights_dict, strict=False)) if args.freeze_layers: for name, para in model.named_parameters(): # 除head, pre_logits外,其他权重全部冻结 if "head" not in name and "pre_logits" not in name: para.requires_grad_(False) else: print("training {}".format(name)) pg = [p for p in model.parameters() if p.requires_grad] optimizer = optim.SGD(pg, lr=args.lr, momentum=0.9, weight_decay=5E-5) # Scheduler https://arxiv.org/pdf/1812.01187.pdf lf = lambda x: ((1 + math.cos(x * math.pi / args.epochs)) / 2) * (1 - args.lrf) + args.lrf # cosine scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) for epoch in range(args.epochs): # train train_loss, train_acc = train_one_epoch(model=model, optimizer=optimizer, data_loader=train_loader, device=device, epoch=epoch) scheduler.step() # validate val_loss, val_acc = evaluate(model=model, data_loader=val_loader, device=device, epoch=epoch) tags = ["train_loss", "train_acc", "val_loss", "val_acc", "learning_rate"] tb_writer.add_scalar(tags[0], train_loss, epoch) tb_writer.add_scalar(tags[1], train_acc, epoch) tb_writer.add_scalar(tags[2], val_loss, epoch) tb_writer.add_scalar(tags[3], val_acc, epoch) tb_writer.add_scalar(tags[4], optimizer.param_groups[0]["lr"], epoch) torch.save(model.state_dict(), "./weights/model-{}.pth".format(epoch)) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--num_classes', type=int, default=6) parser.add_argument('--epochs', type=int, default=100) parser.add_argument('--batch-size', type=int, default=4) parser.add_argument('--lr', type=float, default=0.001) parser.add_argument('--lrf', type=float, default=0.01) # 数据集所在根目录 # https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz parser.add_argument('--data-path', type=str, default=r"G:\demo\data\Butterfly20") parser.add_argument('--model-name', default='', help='create model name') # 预训练权重路径,如果不想载入就设置为空字符 parser.add_argument('--weights', type=str, default='./vit_base_patch16_224_in21k.pth', help='initial weights path') # 是否冻结权重 parser.add_argument('--freeze-layers', type=bool, default=True) parser.add_argument('--device', default='cuda:0', help='device id (i.e. 0 or 0,1 or cpu)') opt = parser.parse_args() main(opt)

第四步:统计正确率

第五步:搭建GUI界面

演示视频:基于Pytorch框架的深度学习Vision Transformer神经网络蝴蝶分类识别系统源码_哔哩哔哩_bilibili

第六步:整个工程的内容

有训练代码和训练好的模型以及训练过程,提供数据,提供GUI界面代码

项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷

https://www.bilibili.com/video/BV1WezAYRE1f/

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

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

相关文章

手把手教你学 GPU KMD--1.1:UMD、KMD 与 DDK 的协作关系——从应用到硬件的完整数据流解析

目录 UMD、KMD 与 DDK 的协作关系 ——从应用到硬件的完整数据流解析 一、核心角色定义 二、典型数据流:从应用调用到 GPU 执行 三、各层交互的关键机制 1. UMD ↔ KMD:通过私有 IOCTL 或 WDDM Escape 接口 2. 内存共享:如何让 UMD 描述的数据被 GPU 访问? 3. 同步…

吃尾巴

在编程和计算机科学中,我们提到的“吃尾巴”通常是指 “尾递归” (Tail Recursion) 或者更形象的 “衔尾蛇”式的数据结构。 根据语境的不同,它主要有以下几种含义:1. 最常见的意指:尾递归 (Tail Recursion) 在递归…

centos stream9:设置系统时区

一,设置时区: 列出时区: # timedatectl list-timezones 设置时区: # timedatectl set-timezone Asia/Shanghai 设置完成后: # timedatectl statusLocal time: Sat 2026-01-17 14:07:33 CSTUniversal time: Sat 2026…

手把手教你学Simulink--基础MPPT控制场景实例:基于Simulink的双模式MPPT(快速追踪+稳态优化)仿真

目录 手把手教你学Simulink--基础MPPT控制场景实例:基于Simulink的双模式MPPT(快速追踪+稳态优化)仿真 一、引言:为什么需要双模式MPPT?——光伏系统“效率与响应”的平衡术 二、核心原理:双模式MPPT的“切换逻辑+控制算法” 1. MPPT基本原理回顾 2. 双模式MPPT设计思…

基于keras框架的LeNet/AlexNet/Vgg16深度学习神经网络花卉/花朵分类识别系统源码

第一步:准备数据 五种花卉数据:“雏菊”、“蒲公英”、“玫瑰”、“向日葵”、“郁金香”,总共有2671张图片 将数据以A_B.jpg的格式进行标定,A为花朵名字,B为相应花类别的第几张 第二步:搭建模型 本文选择…

100kW微型燃气轮机Simulink建模探索

100kW微型燃气轮机Simulink建模,微燃机包括压缩机模块、容积模块、回热器模块、燃烧室模块、膨胀机模块、转子模块以及控制单元模块。 考虑微燃机变工况特性下的流量、压缩绝热效率、膨胀绝热效率、压缩比、膨胀比等参数的变化,可以观察变负载情况下微燃…

除螨除螨虫哪个品牌效果好?2026十大排行榜揭晓,照着买省心又安心! - 资讯焦点

大家好,深耕居家健康测评领域多年,我发现螨虫引发的健康困扰正逐渐成为家庭清洁的核心痛点。床垫缝隙的积尘、孩子抱着玩偶揉眼睛、长辈整理被褥时不停咳嗽——这些看似普通的日常场景,背后都可能藏着螨虫的身影。这…

基于深度学习神经网络YOLOv4目标检测的汽车车牌识别系统

第一步:YOLOv4介绍 YOLOv4是一种目标检测算法,它在精度和速度之间取得了最佳的平衡。它是YOLO(You Only Look Once)系列算法的最新版本,通过将目标检测任务转化为一个回归问题,实现了实时目标检测。YOLOv4…

2026精选:五大分龄适配儿童洗发水品牌推荐,专研温和表活,洗出顺滑秀发 - 资讯焦点

娇嫩孩子的头皮适合的儿童柔顺洗发水,有泡沫型、全身可用型、无添加型等多种类型在售。但是,贝思诺、爱塔拉、启初、红色小象等知名品牌的商品众多,难免会不知道该选哪一款。 本次我们收集了亚马逊、天猫、京东等平…

ACPI!ACPIBuildProcessGenericComplete函数的作用是摘下当前处理的节点PCI0后ACPI!AcpiBuildRunMethodList剩9个节点

ACPI!ACPIBuildProcessGenericComplete函数的作用是摘下当前处理的节点PCI0后ACPI!AcpiBuildRunMethodList剩9个节点NTSTATUS ACPIBuildProcessGenericComplete(IN PACPI_BUILD_REQUEST BuildRequest) {//// Remove the entry from the current list. We might not need to be…

2026横梁货架优选集:实力厂商排行榜,仓库货架/横梁货架/仓储货架/中型货架/重型货架/层板货架,横梁货架供应商怎么选 - 品牌推荐师

行业背景:横梁货架市场升级,技术驱动成关键 随着制造业智能化转型加速,仓储物流设备需求从“基础存储”向“高效管理”跃迁。横梁货架作为高密度存储的核心载体,其承重性能、空间利用率及定制化能力直接影响仓库运…

踩下油门时混合动力车的能量分配就像打扑克——既要看当前手牌,也得算后面几步。模型预测控制(MPC)在这局游戏里当起了军师,今天咱们就拆解这背后的骚操作

模型预测控制(MPC)在混合动力汽车能量管理策略开发上的运用。 [1]利用车速预测模型(BP或者RBF神经网络,预测模型资料也有发在其他链接)根据预测的信息对车辆进行优化控制,可以对混动汽车的能量管理具有一定…

基于Simulink的双模式MPPT(快速追踪+稳态优化)仿真

目录 手把手教你学Simulink--基础MPPT控制场景实例:基于Simulink的双模式MPPT(快速追踪稳态优化)仿真 一、引言:为什么需要双模式MPPT?——光伏系统“效率与响应”的平衡术 二、核心原理:双模式MPPT的“切…

深圳AI智能办公鼠标服务选择哪家好,这几家值得关注 - 工业品牌热点

2026年AI工具普及浪潮下,AI智能办公鼠标已成为企业降本增效、个人提升生产力的核心入口级设备。无论是企业职员的会议记录、PPT制作需求,还是营销人员的公私域内容产出、多平台发布痛点,一款专业的AI办公鼠标能从根…

学Simulink--基础储能管理场景实例:基于Simulink的储能参与黑启动过程控制仿真

目录 手把手教你学Simulink 一、引言:什么是“黑启动”?为什么需要储能? 二、黑启动典型流程 三、系统整体架构(Simulink 模型) 控制模式切换: 四、Simulink 建模全流程 步骤1:储能与变流器建模 步骤2:V/f 控制器设计(核心) A. 电压外环(PI 控制) B. 电流…

消失的“AI”:当大模型不再是新闻,我们该如何保卫“人”的价值?

如果说 2023 年是 AI 的“奇迹年”,那么 2024 年正在变成 AI 的“消失年”。这里的“消失”并非指技术退场,而是指它正像电力、Wi-Fi 或自来水一样,悄无声息地融入背景,成为一种基础设施。当“AI 驱动”不再是一个值得炫耀的卖点&…

告别盲目选购!2026年儿童洗发水九大品牌排行榜:分龄设计小金盾认证,公认好用 - 资讯焦点

亲子洗护时光本应温馨,却常因孩子头皮问题变得棘手:婴幼儿头皮娇嫩易受刺激,洗头时哭闹不止;学龄儿童运动后头皮多汗黏腻,发丝打结难梳理;青春期孩子则面临油头、头屑等困扰。一款能适配全年龄段、兼具安全性与实…

单北斗GNSS位移监测技术在变形监测中的应用与发展

本文将探讨单北斗GNSS位移监测技术在变形监测中的广泛应用和发展潜力。单北斗变形监测系统的安装与维护流程将被详细解析,以期帮助用户更好地理解这一技术的实践操作。同时,将分析单北斗GNSS设备的价格构成和市场动态,为用户在采购决策时提供…

身体乳什么牌子好?2026超级补水止痒润肤效果特别好的身体乳推荐,高效多效保湿 - 资讯焦点

对于追求高效护肤的人来说,选身体乳就一个要求:简单高效!不用反复补涂、不用搭配其他产品,一瓶就能搞定保湿需求才是王道~ 本次测评从2026年热门保湿身体乳中,筛选出10款“高效实用+多效合一”的宝藏款,要么长效…

去螨虫产品哪个品牌最有效?2026厉害推荐榜单,效果超强,家庭必备! - 资讯焦点

还在为床垫、沙发的螨虫清理犯愁?除螨不彻底反复滋生、喷雾有异味呛鼻、高档面料一喷就受损……2026年别再盲目跟风踩坑!结合中国疾控中心环境所与中国家居协会联合发布的《家庭螨虫防控白皮书》,再加上联合800个不…