基于pytorch实现的 MobileViT 的图像识别(迁移学习)

1、介绍

MobileViT 轻量级的分类识别网络,结合了CNN卷积和Transformer 混合的网络架构

关于更多介绍可以自行百度,本文通过pytorch+python进行实现 

更多基础的图像分类网络,参考:图像分类_听风吹等浪起的博客-CSDN博客

2、相关代码及展示

目录如下:代码下载:基于MobileViT的xxs、xs、s版本实现的30种球类运动迁移学习分类实战【包含数据集+完整代码+训练结果】资源-CSDN文库

mobileViT 官方好像有三种大小:xxs、xs、s,对应不同大小,这里一并实现

2.1 数据集

数据集的放置仍然采用目录的形式,需要自行划分训练集+验证集+测试集

训练集用于网络训练、验证集用于微调训练参数、测试集用于评估网络性能

数据集如下:

这里把路径名称写好了,可以改代码,或者觉得麻烦,直接按照参考命名数据集即可

这里的图像增强就是简单的翻转,如下:

def data_trans(train_mean=[0.485, 0.456, 0.406], train_std=[0.229, 0.224, 0.225]):# 预处理train_transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.RandomHorizontalFlip(p=0.5),       # 水平翻转transforms.RandomVerticalFlip(p=0.5),         # 垂直翻转transforms.ToTensor(),transforms.Normalize(train_mean, train_std)])val_transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(train_mean, train_std)])return train_transform,val_transform

2.2 训练脚本

训练的超参数如下:脚本为train.py 

冻结权重,是指只训练分类器的部分,否则全部重头训练。

这里选择xxs、xs、s版本后,会自动导入官方的预训练权重,因此冻结参数也可以

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

    parser = argparse.ArgumentParser(description="image classification")parser.add_argument("--model", default='s', type=str,help='xxs,xs,s')    # 选择版本parser.add_argument("--batch-size", default=8, type=int)parser.add_argument("--epochs", default=5, type=int)parser.add_argument('--lr', default=0.0002, type=float)parser.add_argument('--freeze-layers', type=bool, default=True)          # 是否冻结权重

优化器采用AdamW,损失为多元交叉熵损失

训练过程如下:

这里可视化进度条的描述,是每个batch的正确率和损失,下面打印的是整个数据集的准确率和损失

结果曲线为:

生成结果:

2.3 验证脚本

验证脚本为:val.py 函数

    parser.add_argument("--model", default='s', type=str,help='xxs,xs,s')    # 选择版本parser.add_argument("--pth", default='runs/train/weights/best.pth', type=str,help='best,last')parser.add_argument("--data", default='data/val', type=str,help='data path')

这里自动载入最好的结果进行评估网络,结果如下

2.4 推理脚本

脚本为 infer.py

    parser.add_argument("--model", default='s', type=str,help='xxs,xs,s')    # 选择版本parser.add_argument("--pth", default='runs/train/weights/best.pth', type=str,help='best,last')parser.add_argument("--data", default='test.jpg', type=str,help='image path')

传入单张图片即可进行推理:

 

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

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

相关文章

SimpleService 一个简单的Windows Service定时服务

SimpleService 介绍 一个简单的Windows Service定时服务 SimpleService: 一个简单的Windows Service定时服务 使用说明

kimi AI,文生流程图,一句话kimi当场出图

kimi AI善于读长文、搜网页,主打功能包括整理资料、解读文件、辅助编程、文案写作等。 今天我们就让kimi帮我们一键生成流程图,再也不用自己画了: 不看广告看疗效: 告诉kimi使用Mermaid直接生成流程图,kimi直接生成…

AI是如何与快充技术结合的?

针对AI技术在快充领域的运用,我们可以进一步深入探讨AI如何与快充技术结合,提升充电效率和用户体验。以下是一些具体的AI技术在快充领域的应用场景: 一、智能充电算法 学习充电模式:AI算法可以学习用户的充电习惯,比…

容器技术-docker4

一、docker资源限制 在使用 docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说…

gin 服务端无法使用sse流式nginx配置

我在本地使用 gin 可以流式的将大模型数据传递给前端。但是当我部署到服务器中时,会阻塞一段时间,然后显示一大段文本。 起初我怀疑是gin 没有及时将数据刷到管道中,但是经过测试,还是会阻塞。 c.Writer.(http.Flusher).Flush()最…

(超详细)数据结构——“栈”的深度解析

前言: 在前几章我们介绍了线性表的基本概念,也讲解了包括顺序表,单链表,双向链表等线性表,相信大家已经对线性表比较熟悉了,今天我们要实现线性表的另一种结构——栈。 1.栈的概念 栈:一种特殊…

【Docker】存储数据卷

目录 1、挂载数据卷到容器里 2、查询挂载文件 3、容器与主机之间映射共享卷 4、三个容器之间使用共享卷 5、卷数据的备份与恢复 5.1 备份 5.2 恢复 1、挂载数据卷到容器里 docker run -itd --name test02 -v /data nginx docker exec -it test02 bashls / docker inspe…

解决IDEA的Web项目右键无法创建Servlet问题

右键新建没有servlet? 在pom.xml文件中需要导入servlet依赖,很简单的,别担心,就20秒解决 看我操作!!! 1. 找到自动生成的pom.xml文件 只要你创建了maven项目,就会自动生成pom.xml文件&#xf…

qiankun微前端:qiankun+vite+vue3+ts(未完待续..)

目录 什么是微前端 目前现有的微前端 好处 使用 子应用的页面在主应用里显示 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。 我的理解就是将一个大型的前端应用拆分成多个模块,每个微前端模块可以由…

Linux基础篇——目录结构

基本介绍 Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在根目录下再创建其他的目录 在Linux中,有一句经典的话:在Linux世界里,一切皆文件 Linux中根目录下的目录 具体的…

木各力“GERRI”被“GREE”格力无效宣告成功

近日“GERRI”被“GREE”格力无效宣告成功,“GERRI”和“GREE”近似不,如果很近似当初就不会通过初审和下商标注册证,但是如果涉及知名商标和驰名商标,人家就可以异议和无效。 “GERRI”在被无效宣告时,引用了6个相关的…

深入剖析C++多态的实现与原理-详解 (三万字)

100编程书屋_孔夫子旧书网 目录 一、多态基础 虚函数 虚函数的继承虚类/虚基类重写/覆盖 条件:概念:多态的条件 其他的多态行为 多态中子类可以不写virtual协变 代码举例继承遗留问题解决 析构函数 具体解决方式:题目1 答案:解析:题目2 答案:C11 override和final final 功能1…

web渗透-反序列化漏洞

一、简介 就是把一个对象变成可以传输的字符串,目的就是为了方便传输。假设,我们写了一个class,这个class里面存有一些变量。当这个class被实例化了之后,在使用过程中里面的一些变量值发生了改变。以后在某些时候还会用到这个变量&#xff0…

ctfshow sqli-libs web541--web551

web541 and和or 被替换为空格 # 还有 1 也是不能生效的?id-1 union select 1,2,3-- 双写绕过 ?id-1 union select 1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schemactfshow),3 -- flags?id-1 union select 1,(select group_con…

【Linux】Linux系统配置,linux的交互方式

1.Linux系统环境安装 有三种方式 裸机安装或者双系统 -- 不推荐虚拟机安装 --- 不推荐云服务器/安装简单, 维护成本低——推荐, 未来学习效果好 我们借助云服务器 云服务器(Elastic Compute Service,ECS)的标准定义…

以太网交换机原理

没有配置,比较枯燥,二可以认识线缆, 三比较重要,慢慢理解,事半功倍。 各位老少爷们,在下给大家说段以太网交换机原理,说得不好大家多多包涵,说得好呢,大家叫个好&#x…

【面试系列】数据分析师高频面试题及详细解答

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…

使用slenium对不同元素进行定位实战篇~

单选框Radio定位: 单选框只能点击一个,并且点击之后并不会被取消,而多选框,能够点击多个,并且点击之后可以取消 import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; imp…

FastAPI教程III

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 这部分暂无需求的没有记录,仅放置标题。 依赖项 安全性 中间件 你可以向FastAPI应用添加中间件。 ”中间件“是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个…

PyCharm 2024.1 版本更新亮点:智能编程,高效协作

目录 1. 前言2. 更新内容2.1 智能编码体验2.1.1 Hugging Face 文档预览2.1.2 全行代码补全 2.2 提升编辑器体验2.2.1 粘性行功能2.2.2 编辑器内代码审查 2.3 全新终端体验(测试版)2.3.1 新终端 Beta 2.4 智能助手(特定版本和专业用户&#xf…